living-ai-documentation 1.9.0 → 1.10.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.
@@ -281,6 +281,16 @@
281
281
  "snippet.inline_edit_btn_heading_2": "Edit heading level 2",
282
282
  "snippet.inline_edit_btn_heading_3": "Edit heading level 3",
283
283
  "snippet.inline_edit_btn_heading_4": "Edit heading level 4",
284
+ "snippet.picker_search_placeholder": "Search a snippet…",
285
+ "snippet.picker_back": "Back",
286
+ "snippet.picker_no_results": "No matching snippet.",
287
+ "snippet.picker_cat_structure": "Structure",
288
+ "snippet.picker_cat_lists": "Lists",
289
+ "snippet.picker_cat_lists_code_data": "Lists, code & data",
290
+ "snippet.picker_cat_rich_text": "Rich text",
291
+ "snippet.picker_cat_code_data": "Code & data",
292
+ "snippet.picker_cat_links_media": "Links & media",
293
+ "snippet.picker_cat_advanced": "Advanced",
284
294
  "snippet.link_text_label": "Link text",
285
295
  "snippet.link_text_placeholder": "My link",
286
296
  "snippet.link_url_label": "URL",
@@ -281,6 +281,16 @@
281
281
  "snippet.inline_edit_btn_heading_2": "Éditer le titre niveau 2",
282
282
  "snippet.inline_edit_btn_heading_3": "Éditer le titre niveau 3",
283
283
  "snippet.inline_edit_btn_heading_4": "Éditer le titre niveau 4",
284
+ "snippet.picker_search_placeholder": "Rechercher un snippet…",
285
+ "snippet.picker_back": "Retour",
286
+ "snippet.picker_no_results": "Aucun snippet ne correspond.",
287
+ "snippet.picker_cat_structure": "Structure",
288
+ "snippet.picker_cat_lists": "Listes",
289
+ "snippet.picker_cat_lists_code_data": "Listes, code & données",
290
+ "snippet.picker_cat_rich_text": "Texte enrichi",
291
+ "snippet.picker_cat_code_data": "Code & données",
292
+ "snippet.picker_cat_links_media": "Liens & médias",
293
+ "snippet.picker_cat_advanced": "Avancés",
284
294
  "snippet.link_text_label": "Texte du lien",
285
295
  "snippet.link_text_placeholder": "Mon lien",
286
296
  "snippet.link_url_label": "URL",
@@ -1429,7 +1429,7 @@
1429
1429
  >
1430
1430
  <div
1431
1431
  id="snippet-modal-card"
1432
- class="bg-white dark:bg-gray-900 rounded-xl shadow-xl w-full max-w-lg mx-4 p-6 space-y-5 max-h-[90vh] overflow-y-auto"
1432
+ class="bg-white dark:bg-gray-900 rounded-xl shadow-xl w-full max-w-6xl mx-4 p-6 space-y-5 max-h-[90vh] overflow-y-auto"
1433
1433
  >
1434
1434
  <h3 class="text-base font-semibold text-gray-900 dark:text-gray-50">
1435
1435
  <span id="snippet-modal-title" data-i18n="snippet.modal_title">🧩 Insert a snippet</span>
@@ -1440,8 +1440,38 @@
1440
1440
  class="hidden rounded-lg px-3 py-2 text-xs"
1441
1441
  ></div>
1442
1442
 
1443
- <!-- Snippet type selector -->
1444
- <div class="space-y-1.5">
1443
+ <!-- Snippet picker (insertion mode) -->
1444
+ <div id="snippet-picker" class="hidden space-y-4">
1445
+ <input
1446
+ id="snippet-picker-search"
1447
+ type="text"
1448
+ data-i18n-placeholder="snippet.picker_search_placeholder"
1449
+ placeholder="Search a snippet…"
1450
+ oninput="snippetPickerSearchChanged()"
1451
+ onkeydown="snippetPickerSearchKeydown(event)"
1452
+ class="w-full px-3 py-2 text-sm rounded-lg border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500"
1453
+ />
1454
+ <div id="snippet-picker-categories" class="space-y-4 max-h-[60vh] overflow-y-auto pr-1"></div>
1455
+ <div
1456
+ id="snippet-picker-no-results"
1457
+ data-i18n="snippet.picker_no_results"
1458
+ class="hidden text-center text-sm text-gray-500 dark:text-gray-400 py-4"
1459
+ >No matching snippet.</div>
1460
+ </div>
1461
+
1462
+ <!-- Back to picker (panel mode after picker selection) -->
1463
+ <button
1464
+ type="button"
1465
+ id="snippet-picker-back"
1466
+ onclick="snippetPickerBack()"
1467
+ class="hidden inline-flex items-center gap-2 text-xs font-medium text-blue-700 dark:text-blue-300 hover:underline"
1468
+ >
1469
+ <i class="fa-solid fa-arrow-left" aria-hidden="true"></i>
1470
+ <span data-i18n="snippet.picker_back">Back</span>
1471
+ </button>
1472
+
1473
+ <!-- Snippet type selector (hidden in picker UX, kept for state binding) -->
1474
+ <div id="snippet-type-wrapper" class="hidden space-y-1.5">
1445
1475
  <label
1446
1476
  data-i18n="snippet.type_label"
1447
1477
  class="block text-xs font-medium text-gray-500 dark:text-gray-400"
@@ -41,6 +41,345 @@ function _snippetPanelForType(type) {
41
41
  return _SNIPPET_TYPE_TO_PANEL[type] || type;
42
42
  }
43
43
 
44
+ const _SNIPPET_PICKER_ICONS = {
45
+ "heading-1": "fa-solid fa-heading",
46
+ "heading-2": "fa-solid fa-heading",
47
+ "heading-3": "fa-solid fa-heading",
48
+ "heading-4": "fa-solid fa-heading",
49
+ separator: "fa-solid fa-minus",
50
+ collapsible: "fa-solid fa-caret-right",
51
+ "unordered-list": "fa-solid fa-list-ul",
52
+ "ordered-list": "fa-solid fa-list-ol",
53
+ tree: "fa-solid fa-folder-tree",
54
+ "colored-text": "fa-solid fa-highlighter",
55
+ "colored-section": "fa-solid fa-fill-drip",
56
+ blockquote: "fa-solid fa-quote-right",
57
+ "code-block": "fa-solid fa-code",
58
+ table: "fa-solid fa-table-cells",
59
+ link: "fa-solid fa-link",
60
+ "doc-link": "fa-solid fa-file-lines",
61
+ "anchor-link": "fa-solid fa-anchor",
62
+ "anchor-doc-link": "fa-solid fa-anchor",
63
+ image: "fa-solid fa-image",
64
+ diagram: "fa-solid fa-diagram-project",
65
+ emojis: "fa-solid fa-face-smile",
66
+ attachment: "fa-solid fa-paperclip",
67
+ "local-search": "fa-solid fa-magnifying-glass",
68
+ };
69
+
70
+ const _SNIPPET_PICKER_CATEGORIES = [
71
+ {
72
+ key: "structure",
73
+ labelKey: "snippet.picker_cat_structure",
74
+ types: ["heading-1", "heading-2", "heading-3", "heading-4", "separator", "collapsible"],
75
+ },
76
+ {
77
+ key: "lists-code-data",
78
+ labelKey: "snippet.picker_cat_lists_code_data",
79
+ types: ["unordered-list", "ordered-list", "tree", "code-block", "table", "diagram"],
80
+ },
81
+ {
82
+ key: "rich-text",
83
+ labelKey: "snippet.picker_cat_rich_text",
84
+ types: ["colored-text", "colored-section", "blockquote", "emojis", "local-search"],
85
+ },
86
+ {
87
+ key: "links-media",
88
+ labelKey: "snippet.picker_cat_links_media",
89
+ types: ["link", "doc-link", "anchor-link", "anchor-doc-link", "image", "attachment"],
90
+ },
91
+ ];
92
+
93
+ const _SNIPPET_PICKER_PALETTE = {
94
+ blueLight: {
95
+ card:
96
+ "border-sky-200 dark:border-sky-800 bg-sky-50 dark:bg-sky-950/40 hover:bg-sky-100 dark:hover:bg-sky-900/50 hover:border-sky-300 dark:hover:border-sky-700",
97
+ icon: "text-sky-700 dark:text-sky-300",
98
+ },
99
+ blue: {
100
+ card:
101
+ "border-blue-200 dark:border-blue-800 bg-blue-50 dark:bg-blue-950/40 hover:bg-blue-100 dark:hover:bg-blue-900/50 hover:border-blue-300 dark:hover:border-blue-700",
102
+ icon: "text-blue-700 dark:text-blue-300",
103
+ },
104
+ blueDark: {
105
+ card:
106
+ "border-indigo-200 dark:border-indigo-800 bg-indigo-50 dark:bg-indigo-950/40 hover:bg-indigo-100 dark:hover:bg-indigo-900/50 hover:border-indigo-300 dark:hover:border-indigo-700",
107
+ icon: "text-indigo-700 dark:text-indigo-300",
108
+ },
109
+ blueDarker: {
110
+ card:
111
+ "border-blue-300 dark:border-blue-700 bg-blue-100 dark:bg-blue-900/50 hover:bg-blue-200 dark:hover:bg-blue-800/60 hover:border-blue-400 dark:hover:border-blue-600",
112
+ icon: "text-blue-900 dark:text-blue-100",
113
+ },
114
+ gray: {
115
+ card:
116
+ "border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700 hover:border-gray-300 dark:hover:border-gray-600",
117
+ icon: "text-gray-700 dark:text-gray-200",
118
+ },
119
+ violet: {
120
+ card:
121
+ "border-violet-200 dark:border-violet-800 bg-violet-50 dark:bg-violet-950/40 hover:bg-violet-100 dark:hover:bg-violet-900/50 hover:border-violet-300 dark:hover:border-violet-700",
122
+ icon: "text-violet-700 dark:text-violet-300",
123
+ },
124
+ green: {
125
+ card:
126
+ "border-emerald-200 dark:border-emerald-800 bg-emerald-50 dark:bg-emerald-950/40 hover:bg-emerald-100 dark:hover:bg-emerald-900/50 hover:border-emerald-300 dark:hover:border-emerald-700",
127
+ icon: "text-emerald-700 dark:text-emerald-300",
128
+ },
129
+ greenDark: {
130
+ card:
131
+ "border-green-300 dark:border-green-700 bg-green-100 dark:bg-green-900/50 hover:bg-green-200 dark:hover:bg-green-800/60 hover:border-green-400 dark:hover:border-green-600",
132
+ icon: "text-green-900 dark:text-green-100",
133
+ },
134
+ teal: {
135
+ card:
136
+ "border-teal-200 dark:border-teal-800 bg-teal-50 dark:bg-teal-950/40 hover:bg-teal-100 dark:hover:bg-teal-900/50 hover:border-teal-300 dark:hover:border-teal-700",
137
+ icon: "text-teal-700 dark:text-teal-300",
138
+ },
139
+ dark: {
140
+ card:
141
+ "border-slate-300 dark:border-slate-600 bg-slate-100 dark:bg-slate-800 hover:bg-slate-200 dark:hover:bg-slate-700 hover:border-slate-400 dark:hover:border-slate-500",
142
+ icon: "text-slate-900 dark:text-slate-100",
143
+ },
144
+ orange: {
145
+ card:
146
+ "border-orange-200 dark:border-orange-800 bg-orange-50 dark:bg-orange-950/40 hover:bg-orange-100 dark:hover:bg-orange-900/50 hover:border-orange-300 dark:hover:border-orange-700",
147
+ icon: "text-orange-700 dark:text-orange-300",
148
+ },
149
+ orangeLight: {
150
+ card:
151
+ "border-amber-200 dark:border-amber-800 bg-amber-50 dark:bg-amber-950/40 hover:bg-amber-100 dark:hover:bg-amber-900/50 hover:border-amber-300 dark:hover:border-amber-700",
152
+ icon: "text-amber-700 dark:text-amber-300",
153
+ },
154
+ orangeDark: {
155
+ card:
156
+ "border-orange-300 dark:border-orange-700 bg-orange-100 dark:bg-orange-900/50 hover:bg-orange-200 dark:hover:bg-orange-800/60 hover:border-orange-400 dark:hover:border-orange-600",
157
+ icon: "text-orange-900 dark:text-orange-100",
158
+ },
159
+ red: {
160
+ card:
161
+ "border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-950/40 hover:bg-red-100 dark:hover:bg-red-900/50 hover:border-red-300 dark:hover:border-red-700",
162
+ icon: "text-red-700 dark:text-red-300",
163
+ },
164
+ pink: {
165
+ card:
166
+ "border-pink-200 dark:border-pink-800 bg-pink-50 dark:bg-pink-950/40 hover:bg-pink-100 dark:hover:bg-pink-900/50 hover:border-pink-300 dark:hover:border-pink-700",
167
+ icon: "text-pink-700 dark:text-pink-300",
168
+ },
169
+ amber: {
170
+ card:
171
+ "border-amber-200 dark:border-amber-800 bg-amber-50 dark:bg-amber-950/40 hover:bg-amber-100 dark:hover:bg-amber-900/50 hover:border-amber-300 dark:hover:border-amber-700",
172
+ icon: "text-amber-700 dark:text-amber-300",
173
+ },
174
+ yellow: {
175
+ card:
176
+ "border-yellow-300 dark:border-yellow-700 bg-yellow-100 dark:bg-yellow-900/50 hover:bg-yellow-200 dark:hover:bg-yellow-800/60 hover:border-yellow-400 dark:hover:border-yellow-600",
177
+ icon: "text-yellow-700 dark:text-yellow-200",
178
+ },
179
+ indigo: {
180
+ card:
181
+ "border-indigo-200 dark:border-indigo-800 bg-indigo-50 dark:bg-indigo-950/40 hover:bg-indigo-100 dark:hover:bg-indigo-900/50 hover:border-indigo-300 dark:hover:border-indigo-700",
182
+ icon: "text-indigo-700 dark:text-indigo-300",
183
+ },
184
+ cyan: {
185
+ card:
186
+ "border-cyan-200 dark:border-cyan-800 bg-cyan-50 dark:bg-cyan-950/40 hover:bg-cyan-100 dark:hover:bg-cyan-900/50 hover:border-cyan-300 dark:hover:border-cyan-700",
187
+ icon: "text-cyan-700 dark:text-cyan-300",
188
+ },
189
+ };
190
+
191
+ const _SNIPPET_PICKER_TYPE_PALETTE = {
192
+ "heading-1": "blueLight",
193
+ "heading-2": "blue",
194
+ "heading-3": "blueDark",
195
+ "heading-4": "blueDarker",
196
+ separator: "gray",
197
+ collapsible: "dark",
198
+ "unordered-list": "green",
199
+ "ordered-list": "greenDark",
200
+ tree: "cyan",
201
+ "code-block": "dark",
202
+ table: "orange",
203
+ diagram: "red",
204
+ "colored-text": "pink",
205
+ "colored-section": "violet",
206
+ blockquote: "gray",
207
+ link: "orangeLight",
208
+ "doc-link": "orange",
209
+ "anchor-link": "orangeDark",
210
+ "anchor-doc-link": "orangeDark",
211
+ image: "amber",
212
+ attachment: "orange",
213
+ emojis: "yellow",
214
+ "local-search": "cyan",
215
+ };
216
+
217
+ const _SNIPPET_TYPE_I18N_KEY = {
218
+ "heading-1": "snippet.heading_1",
219
+ "heading-2": "snippet.heading_2",
220
+ "heading-3": "snippet.heading_3",
221
+ "heading-4": "snippet.heading_4",
222
+ separator: "snippet.separator",
223
+ collapsible: "snippet.collapsible",
224
+ "unordered-list": "snippet.bullet_list",
225
+ "ordered-list": "snippet.numbered_list",
226
+ tree: "snippet.tree",
227
+ "colored-text": "snippet.colored_text",
228
+ "colored-section": "snippet.colored_section",
229
+ blockquote: "snippet.blockquote",
230
+ "code-block": "snippet.code_block",
231
+ table: "snippet.table",
232
+ link: "snippet.link",
233
+ "doc-link": "snippet.link_doc",
234
+ "anchor-link": "snippet.link_anchor",
235
+ "anchor-doc-link": "snippet.link_doc_anchor",
236
+ image: "snippet.image",
237
+ diagram: "snippet.diagram",
238
+ emojis: "snippet.emojis",
239
+ attachment: "snippet.attachment",
240
+ "local-search": "snippet.local_search",
241
+ };
242
+
243
+ function _snippetPickerCleanLabel(raw) {
244
+ if (!raw) return "";
245
+ const parts = raw.split(/\s+/);
246
+ if (parts.length > 1 && !/^[\p{L}\p{N}]/u.test(parts[0])) {
247
+ return parts.slice(1).join(" ");
248
+ }
249
+ return raw;
250
+ }
251
+
252
+ function _snippetPickerLabel(type) {
253
+ const key = _SNIPPET_TYPE_I18N_KEY[type];
254
+ const raw = key ? window.t(key) : type;
255
+ return _snippetPickerCleanLabel(raw);
256
+ }
257
+
258
+ function _renderSnippetPicker() {
259
+ const container = document.getElementById("snippet-picker-categories");
260
+ if (!container) return;
261
+ container.innerHTML = "";
262
+ for (const cat of _SNIPPET_PICKER_CATEGORIES) {
263
+ const section = document.createElement("section");
264
+ section.dataset.snippetCategory = cat.key;
265
+ section.className = "space-y-2";
266
+
267
+ const h3 = document.createElement("h3");
268
+ h3.className =
269
+ "text-[11px] font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400";
270
+ h3.textContent = window.t(cat.labelKey);
271
+ section.appendChild(h3);
272
+
273
+ const grid = document.createElement("div");
274
+ grid.className =
275
+ "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-7 xl:grid-cols-8 gap-2";
276
+
277
+ for (const type of cat.types) {
278
+ const paletteName = _SNIPPET_PICKER_TYPE_PALETTE[type] || "indigo";
279
+ const colorClasses =
280
+ _SNIPPET_PICKER_PALETTE[paletteName] ||
281
+ _SNIPPET_PICKER_PALETTE.indigo;
282
+ const btn = document.createElement("button");
283
+ btn.type = "button";
284
+ btn.dataset.snippetType = type;
285
+ btn.className =
286
+ "snippet-card min-h-[76px] flex flex-col items-center justify-center gap-2 p-2 rounded-lg border text-gray-800 dark:text-gray-100 transition-colors " +
287
+ colorClasses.card;
288
+ btn.onclick = () => snippetPickerSelect(type);
289
+
290
+ const i = document.createElement("i");
291
+ i.className =
292
+ (_SNIPPET_PICKER_ICONS[type] || "fa-solid fa-puzzle-piece") +
293
+ " text-xl " +
294
+ colorClasses.icon;
295
+ i.setAttribute("aria-hidden", "true");
296
+ btn.appendChild(i);
297
+
298
+ const label = document.createElement("span");
299
+ label.className = "text-xs font-medium text-center leading-tight";
300
+ label.textContent = _snippetPickerLabel(type);
301
+ btn.appendChild(label);
302
+
303
+ grid.appendChild(btn);
304
+ }
305
+ section.appendChild(grid);
306
+ container.appendChild(section);
307
+ }
308
+ }
309
+
310
+ function _showSnippetPicker() {
311
+ _renderSnippetPicker();
312
+ document.getElementById("snippet-picker").classList.remove("hidden");
313
+ document.getElementById("snippet-picker-back").classList.add("hidden");
314
+ document.getElementById("snippet-submit-btn").classList.add("hidden");
315
+ _SNIPPET_PANELS.forEach((p) => {
316
+ const panel = document.getElementById("snip-panel-" + p);
317
+ if (panel) panel.classList.add("hidden");
318
+ });
319
+ const previewWrap = document.getElementById("snippet-preview-wrap");
320
+ if (previewWrap) previewWrap.classList.add("hidden");
321
+ const search = document.getElementById("snippet-picker-search");
322
+ if (search) {
323
+ search.value = "";
324
+ _snippetPickerFilter("");
325
+ setTimeout(() => search.focus(), 50);
326
+ }
327
+ }
328
+
329
+ function _showSnippetPanelOnly() {
330
+ document.getElementById("snippet-picker").classList.add("hidden");
331
+ document.getElementById("snippet-submit-btn").classList.remove("hidden");
332
+ const back = document.getElementById("snippet-picker-back");
333
+ if (back) back.classList.toggle("hidden", _snippetInlineEdit);
334
+ }
335
+
336
+ function _snippetPickerFilter(query) {
337
+ const container = document.getElementById("snippet-picker-categories");
338
+ if (!container) return;
339
+ const q = (query || "").toLowerCase().trim();
340
+ let totalVisible = 0;
341
+ container.querySelectorAll("[data-snippet-category]").forEach((section) => {
342
+ let visibleCount = 0;
343
+ section.querySelectorAll("[data-snippet-type]").forEach((card) => {
344
+ const label = (card.querySelector("span")?.textContent || "").toLowerCase();
345
+ const match = !q || label.includes(q);
346
+ card.classList.toggle("hidden", !match);
347
+ if (match) visibleCount += 1;
348
+ });
349
+ section.classList.toggle("hidden", visibleCount === 0);
350
+ totalVisible += visibleCount;
351
+ });
352
+ const noResults = document.getElementById("snippet-picker-no-results");
353
+ if (noResults) noResults.classList.toggle("hidden", totalVisible > 0);
354
+ }
355
+
356
+ function snippetPickerSearchChanged() {
357
+ const input = document.getElementById("snippet-picker-search");
358
+ _snippetPickerFilter(input ? input.value : "");
359
+ }
360
+
361
+ function snippetPickerSearchKeydown(event) {
362
+ if (event.key === "Enter") {
363
+ event.preventDefault();
364
+ const firstVisible = document.querySelector(
365
+ "#snippet-picker-categories [data-snippet-type]:not(.hidden)",
366
+ );
367
+ if (firstVisible) snippetPickerSelect(firstVisible.dataset.snippetType);
368
+ }
369
+ }
370
+
371
+ function snippetPickerSelect(type) {
372
+ document.getElementById("snippet-type").value = type;
373
+ snippetTypeChanged();
374
+ _showSnippetPanelOnly();
375
+ }
376
+
377
+ function snippetPickerBack() {
378
+ const msgEl = document.getElementById("snippet-detect-msg");
379
+ if (msgEl) msgEl.classList.add("hidden");
380
+ _showSnippetPicker();
381
+ }
382
+
44
383
  // Each emoji has search tags (bilingual FR/EN, space-separated, lowercase).
45
384
  // Filter matches a 2+ char query against any tag prefix or substring.
46
385
  const _EMOJI_CATEGORIES = [
@@ -676,8 +1015,8 @@ function _setSnippetModalMode(mode) {
676
1015
  }
677
1016
  const card = document.getElementById("snippet-modal-card");
678
1017
  if (card) {
679
- card.classList.toggle("max-w-lg", !isInline);
680
- card.classList.toggle("max-w-5xl", isInline);
1018
+ card.classList.toggle("max-w-6xl", !isInlineEdit);
1019
+ card.classList.toggle("max-w-5xl", isInlineEdit);
681
1020
  }
682
1021
  }
683
1022
 
@@ -691,49 +1030,22 @@ function _openSnippetsModalForText(selectedText, detectedOverride = null) {
691
1030
  snippetAnchorDocChanged();
692
1031
 
693
1032
  const msgEl = document.getElementById("snippet-detect-msg");
1033
+ if (msgEl) msgEl.classList.add("hidden");
1034
+ const detected = selectedText
1035
+ ? detectedOverride || detectSnippetType(selectedText)
1036
+ : null;
694
1037
 
695
- if (selectedText) {
696
- const detected = detectedOverride || detectSnippetType(selectedText);
697
- if (detected) {
698
- document.getElementById("snippet-type").value = detected;
699
- snippetTypeChanged();
700
- parseAndFillSnippet(selectedText, detected);
701
- const labels = {
702
- collapsible: window.t('snippet.collapsible'),
703
- link: window.t('snippet.link'),
704
- "doc-link": window.t('snippet.link_doc'),
705
- "anchor-link": window.t('snippet.link_anchor'),
706
- "anchor-doc-link": window.t('snippet.link_doc_anchor'),
707
- "ordered-list": window.t('snippet.numbered_list'),
708
- "unordered-list": window.t('snippet.bullet_list'),
709
- "code-block": window.t('snippet.code_block'),
710
- blockquote: window.t('snippet.blockquote'),
711
- separator: window.t('snippet.separator'),
712
- image: window.t('snippet.image'),
713
- table: window.t('snippet.table'),
714
- tree: window.t('snippet.tree'),
715
- "heading-1": window.t('snippet.heading_1'),
716
- "heading-2": window.t('snippet.heading_2'),
717
- "heading-3": window.t('snippet.heading_3'),
718
- "heading-4": window.t('snippet.heading_4'),
719
- "colored-section": window.t('snippet.colored_section'),
720
- "colored-text": window.t('snippet.colored_text'),
721
- };
722
- msgEl.textContent = window.t('snippet.detected_msg').replace('{type}', labels[detected] ?? detected);
723
- msgEl.className =
724
- "rounded-lg px-3 py-2 text-xs bg-green-50 dark:bg-green-900/20 text-green-700 dark:text-green-300 border border-green-200 dark:border-green-800";
725
- } else {
726
- document.getElementById("snippet-type").value = "diagram";
727
- snippetTypeChanged();
728
- msgEl.textContent = window.t('snippet.unknown_type_msg');
729
- msgEl.className =
730
- "rounded-lg px-3 py-2 text-xs bg-amber-50 dark:bg-amber-900/20 text-amber-700 dark:text-amber-300 border border-amber-200 dark:border-amber-800";
731
- }
732
- msgEl.classList.remove("hidden");
733
- } else {
734
- msgEl.classList.add("hidden");
735
- document.getElementById("snippet-type").value = "diagram";
1038
+ if (_snippetInlineInsert) {
1039
+ _showSnippetPicker();
1040
+ } else if (detected) {
1041
+ document.getElementById("snippet-type").value = detected;
736
1042
  snippetTypeChanged();
1043
+ parseAndFillSnippet(selectedText, detected);
1044
+ _showSnippetPanelOnly();
1045
+ } else if (selectedText) {
1046
+ _showSnippetPicker();
1047
+ } else {
1048
+ _showSnippetPicker();
737
1049
  }
738
1050
 
739
1051
  document.getElementById("snippets-modal").classList.remove("hidden");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "living-ai-documentation",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "Local Markdown documentation hub with a built-in MCP server — coding agents create ADRs, draw diagrams and detect drift while you code.",
5
5
  "main": "dist/src/server.js",
6
6
  "bin": {