living-documentation 7.8.0 → 7.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.
- package/dist/src/frontend/diagram/main.js +2 -2
- package/dist/src/frontend/diagram.html +2 -0
- package/dist/src/frontend/i18n/en.json +27 -16
- package/dist/src/frontend/i18n/fr.json +27 -16
- package/dist/src/frontend/index.html +42 -2
- package/dist/src/frontend/snippets.js +481 -0
- package/dist/starting-doc/1_tutorial/2026_04_11_13_25_[General]_crer_vos_dossiers.md +1 -1
- package/package.json +1 -1
|
@@ -295,5 +295,5 @@ document.getElementById('darkIcon').textContent =
|
|
|
295
295
|
})();
|
|
296
296
|
|
|
297
297
|
// ── Bootstrap ─────────────────────────────────────────────────────────────────
|
|
298
|
-
|
|
299
|
-
|
|
298
|
+
// loadDiagramList() is invoked from the inline IIFE in diagram.html after
|
|
299
|
+
// window.initI18n() resolves, so t() returns localised strings (not raw keys).
|
|
@@ -1225,6 +1225,7 @@
|
|
|
1225
1225
|
<script type="module">
|
|
1226
1226
|
import { NODE_COLORS, NODE_L_RATIOS, DEFAULT_NODE_PALETTE, DEFAULT_EDGE_PALETTE, deriveNodeColors } from '/diagram/constants.js';
|
|
1227
1227
|
import { st } from '/diagram/state.js';
|
|
1228
|
+
import { loadDiagramList } from '/diagram/persistence.js';
|
|
1228
1229
|
(async () => {
|
|
1229
1230
|
// diagramNodePalette: array of 15 bg hex strings (positional, matching DEFAULT_NODE_PALETTE)
|
|
1230
1231
|
// diagramEdgePalette: array of hex strings
|
|
@@ -1273,6 +1274,7 @@
|
|
|
1273
1274
|
ec.appendChild(btn);
|
|
1274
1275
|
});
|
|
1275
1276
|
window.applyI18n();
|
|
1277
|
+
loadDiagramList();
|
|
1276
1278
|
})();
|
|
1277
1279
|
</script>
|
|
1278
1280
|
</body>
|
|
@@ -126,21 +126,21 @@
|
|
|
126
126
|
|
|
127
127
|
"snippet.modal_title": "🧩 Insert a snippet",
|
|
128
128
|
"snippet.type_label": "Snippet type",
|
|
129
|
-
"snippet.diagram": "Diagram",
|
|
130
|
-
"snippet.collapsible": "Collapsible block (details)",
|
|
131
|
-
"snippet.link": "Link",
|
|
132
|
-
"snippet.link_doc": "Link to document",
|
|
133
|
-
"snippet.link_anchor": "Link to anchor",
|
|
134
|
-
"snippet.link_doc_anchor": "Link to document with anchor",
|
|
135
|
-
"snippet.numbered_list": "Numbered list",
|
|
136
|
-
"snippet.bullet_list": "Bullet list",
|
|
137
|
-
"snippet.code_block": "Code block",
|
|
138
|
-
"snippet.blockquote": "Blockquote",
|
|
139
|
-
"snippet.separator": "Horizontal rule",
|
|
140
|
-
"snippet.image": "Image",
|
|
141
|
-
"snippet.table": "Table",
|
|
142
|
-
"snippet.tree": "Tree",
|
|
143
|
-
"snippet.colored_section": "Colored section",
|
|
129
|
+
"snippet.diagram": "◇ Diagram",
|
|
130
|
+
"snippet.collapsible": "▸ Collapsible block (details)",
|
|
131
|
+
"snippet.link": "🔗 Link",
|
|
132
|
+
"snippet.link_doc": "📄 Link to document",
|
|
133
|
+
"snippet.link_anchor": "⚓ Link to anchor",
|
|
134
|
+
"snippet.link_doc_anchor": "📄⚓ Link to document with anchor",
|
|
135
|
+
"snippet.numbered_list": "🔢 Numbered list",
|
|
136
|
+
"snippet.bullet_list": "• Bullet list",
|
|
137
|
+
"snippet.code_block": "💻 Code block",
|
|
138
|
+
"snippet.blockquote": "❝ Blockquote",
|
|
139
|
+
"snippet.separator": "― Horizontal rule",
|
|
140
|
+
"snippet.image": "🖼 Image",
|
|
141
|
+
"snippet.table": "▦ Table",
|
|
142
|
+
"snippet.tree": "🌳 Tree",
|
|
143
|
+
"snippet.colored_section": "🎨 Colored section",
|
|
144
144
|
"snippet.colored_section_color_label": "Color",
|
|
145
145
|
"snippet.colored_section_swatch_info": "Info (blue)",
|
|
146
146
|
"snippet.colored_section_swatch_success": "Success (green)",
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"snippet.colored_section_swatch_neutral": "Neutral (gray)",
|
|
151
151
|
"snippet.colored_section_content_label": "Content",
|
|
152
152
|
"snippet.colored_section_content_placeholder": "Your text here…",
|
|
153
|
-
"snippet.colored_text": "Colored text",
|
|
153
|
+
"snippet.colored_text": "🖍 Colored text",
|
|
154
154
|
"snippet.colored_text_color_label": "Color",
|
|
155
155
|
"snippet.colored_text_content_label": "Text",
|
|
156
156
|
"snippet.colored_text_content_placeholder": "Your text…",
|
|
@@ -197,6 +197,17 @@
|
|
|
197
197
|
"snippet.saving_btn": "Saving…",
|
|
198
198
|
"snippet.detected_msg": "✓ Detected type: {type}. Fields pre-filled — edit then click Insert to replace selection.",
|
|
199
199
|
"snippet.unknown_type_msg": "⚠ Selected text doesn't match any known snippet type. Choose a type below — the snippet will still replace the selection.",
|
|
200
|
+
"snippet.emojis": "😀 Emojis",
|
|
201
|
+
"snippet.emoji_selected_label": "Selected emojis",
|
|
202
|
+
"snippet.emoji_clear_btn": "Clear",
|
|
203
|
+
"snippet.emoji_cat_smileys": "Smileys & people",
|
|
204
|
+
"snippet.emoji_cat_gestures": "Gestures & body",
|
|
205
|
+
"snippet.emoji_cat_hearts": "Hearts & sparks",
|
|
206
|
+
"snippet.emoji_cat_objects": "Tech & tools",
|
|
207
|
+
"snippet.emoji_cat_office": "Office & docs",
|
|
208
|
+
"snippet.emoji_cat_symbols": "Symbols & arrows",
|
|
209
|
+
"snippet.emoji_search_placeholder": "Search emojis… (e.g. heart, star, rocket)",
|
|
210
|
+
"snippet.emoji_no_results": "No emoji matches this search.",
|
|
200
211
|
"snippet.attachment": "📎 File attachment",
|
|
201
212
|
"snippet.attachment_help": "Click <strong>Insert</strong> to choose a file. It will be uploaded under the <code>files/</code> folder and inserted as a <i class=\"fa-solid fa-paperclip\"></i> link in your document.",
|
|
202
213
|
"snippet.attachment_alt": "Tip: you can also drag & drop a file onto the editor, or paste it from the clipboard.",
|
|
@@ -126,21 +126,21 @@
|
|
|
126
126
|
|
|
127
127
|
"snippet.modal_title": "🧩 Insérer un snippet",
|
|
128
128
|
"snippet.type_label": "Type de snippet",
|
|
129
|
-
"snippet.diagram": "Diagramme",
|
|
130
|
-
"snippet.collapsible": "Bloc repliable (détails)",
|
|
131
|
-
"snippet.link": "Lien",
|
|
132
|
-
"snippet.link_doc": "Lien vers un document",
|
|
133
|
-
"snippet.link_anchor": "Lien vers une ancre",
|
|
134
|
-
"snippet.link_doc_anchor": "Lien vers un document avec ancre",
|
|
135
|
-
"snippet.numbered_list": "Liste numérotée",
|
|
136
|
-
"snippet.bullet_list": "Liste à puces",
|
|
137
|
-
"snippet.code_block": "Bloc de code",
|
|
138
|
-
"snippet.blockquote": "Citation (blockquote)",
|
|
139
|
-
"snippet.separator": "Séparateur horizontal",
|
|
140
|
-
"snippet.image": "Image",
|
|
141
|
-
"snippet.table": "Tableau",
|
|
142
|
-
"snippet.tree": "Arborescence",
|
|
143
|
-
"snippet.colored_section": "Section colorée",
|
|
129
|
+
"snippet.diagram": "◇ Diagramme",
|
|
130
|
+
"snippet.collapsible": "▸ Bloc repliable (détails)",
|
|
131
|
+
"snippet.link": "🔗 Lien",
|
|
132
|
+
"snippet.link_doc": "📄 Lien vers un document",
|
|
133
|
+
"snippet.link_anchor": "⚓ Lien vers une ancre",
|
|
134
|
+
"snippet.link_doc_anchor": "📄⚓ Lien vers un document avec ancre",
|
|
135
|
+
"snippet.numbered_list": "🔢 Liste numérotée",
|
|
136
|
+
"snippet.bullet_list": "• Liste à puces",
|
|
137
|
+
"snippet.code_block": "💻 Bloc de code",
|
|
138
|
+
"snippet.blockquote": "❝ Citation (blockquote)",
|
|
139
|
+
"snippet.separator": "― Séparateur horizontal",
|
|
140
|
+
"snippet.image": "🖼 Image",
|
|
141
|
+
"snippet.table": "▦ Tableau",
|
|
142
|
+
"snippet.tree": "🌳 Arborescence",
|
|
143
|
+
"snippet.colored_section": "🎨 Section colorée",
|
|
144
144
|
"snippet.colored_section_color_label": "Couleur",
|
|
145
145
|
"snippet.colored_section_swatch_info": "Info (bleu)",
|
|
146
146
|
"snippet.colored_section_swatch_success": "Succès (vert)",
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"snippet.colored_section_swatch_neutral": "Neutre (gris)",
|
|
151
151
|
"snippet.colored_section_content_label": "Contenu",
|
|
152
152
|
"snippet.colored_section_content_placeholder": "Votre texte ici…",
|
|
153
|
-
"snippet.colored_text": "Texte coloré",
|
|
153
|
+
"snippet.colored_text": "🖍 Texte coloré",
|
|
154
154
|
"snippet.colored_text_color_label": "Couleur",
|
|
155
155
|
"snippet.colored_text_content_label": "Texte",
|
|
156
156
|
"snippet.colored_text_content_placeholder": "Votre texte…",
|
|
@@ -197,6 +197,17 @@
|
|
|
197
197
|
"snippet.saving_btn": "Enregistrement…",
|
|
198
198
|
"snippet.detected_msg": "✓ Type détecté : {type}. Les champs ont été pré-remplis — modifiez puis cliquez sur Insérer pour remplacer la sélection.",
|
|
199
199
|
"snippet.unknown_type_msg": "⚠ Le texte sélectionné ne correspond à aucun type de snippet reconnu. Choisissez un type ci-dessous — le snippet remplacera quand même la sélection.",
|
|
200
|
+
"snippet.emojis": "😀 Émojis",
|
|
201
|
+
"snippet.emoji_selected_label": "Émojis sélectionnés",
|
|
202
|
+
"snippet.emoji_clear_btn": "Vider",
|
|
203
|
+
"snippet.emoji_cat_smileys": "Smileys & personnes",
|
|
204
|
+
"snippet.emoji_cat_gestures": "Gestes & corps",
|
|
205
|
+
"snippet.emoji_cat_hearts": "Cœurs & étincelles",
|
|
206
|
+
"snippet.emoji_cat_objects": "Tech & outils",
|
|
207
|
+
"snippet.emoji_cat_office": "Bureau & documents",
|
|
208
|
+
"snippet.emoji_cat_symbols": "Symboles & flèches",
|
|
209
|
+
"snippet.emoji_search_placeholder": "Rechercher un émoji… (ex : coeur, etoile, fusee)",
|
|
210
|
+
"snippet.emoji_no_results": "Aucun émoji ne correspond à cette recherche.",
|
|
200
211
|
"snippet.attachment": "📎 Pièce jointe",
|
|
201
212
|
"snippet.attachment_help": "Cliquez sur <strong>Insérer</strong> pour choisir un fichier. Il sera téléversé dans le dossier <code>files/</code> et inséré sous forme de lien <i class=\"fa-solid fa-paperclip\"></i> dans votre document.",
|
|
202
213
|
"snippet.attachment_alt": "Astuce : vous pouvez aussi glisser-déposer un fichier sur l'éditeur ou le coller depuis le presse-papiers.",
|
|
@@ -1283,6 +1283,7 @@
|
|
|
1283
1283
|
<option data-i18n="snippet.tree" value="tree">Tree</option>
|
|
1284
1284
|
<option data-i18n="snippet.colored_section" value="colored-section">Colored section</option>
|
|
1285
1285
|
<option data-i18n="snippet.colored_text" value="colored-text">Colored text</option>
|
|
1286
|
+
<option data-i18n="snippet.emojis" value="emojis">😀 Emojis</option>
|
|
1286
1287
|
<option data-i18n="snippet.attachment" value="attachment">📎 File attachment</option>
|
|
1287
1288
|
</select>
|
|
1288
1289
|
</div>
|
|
@@ -1806,13 +1807,52 @@
|
|
|
1806
1807
|
</div>
|
|
1807
1808
|
</div>
|
|
1808
1809
|
|
|
1810
|
+
<!-- Panel: emojis -->
|
|
1811
|
+
<div id="snip-panel-emojis" class="hidden space-y-3">
|
|
1812
|
+
<div class="space-y-1.5">
|
|
1813
|
+
<label
|
|
1814
|
+
data-i18n="snippet.emoji_selected_label"
|
|
1815
|
+
class="block text-xs font-medium text-gray-500 dark:text-gray-400"
|
|
1816
|
+
>Selected emojis</label
|
|
1817
|
+
>
|
|
1818
|
+
<div class="flex gap-1">
|
|
1819
|
+
<input
|
|
1820
|
+
id="snip-emoji-string"
|
|
1821
|
+
type="text"
|
|
1822
|
+
oninput="snippetUpdatePreview()"
|
|
1823
|
+
class="flex-1 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"
|
|
1824
|
+
/>
|
|
1825
|
+
<button
|
|
1826
|
+
type="button"
|
|
1827
|
+
id="snip-emoji-clear"
|
|
1828
|
+
onclick="emojiClear()"
|
|
1829
|
+
data-i18n="snippet.emoji_clear_btn"
|
|
1830
|
+
class="px-3 py-2 text-xs rounded-lg border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700"
|
|
1831
|
+
>Clear</button>
|
|
1832
|
+
</div>
|
|
1833
|
+
</div>
|
|
1834
|
+
<div class="space-y-1.5">
|
|
1835
|
+
<input
|
|
1836
|
+
id="snip-emoji-search"
|
|
1837
|
+
type="text"
|
|
1838
|
+
data-i18n-placeholder="snippet.emoji_search_placeholder"
|
|
1839
|
+
placeholder="Search emojis… (e.g. heart, star, rocket)"
|
|
1840
|
+
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"
|
|
1841
|
+
/>
|
|
1842
|
+
</div>
|
|
1843
|
+
<div
|
|
1844
|
+
id="snip-emoji-grid"
|
|
1845
|
+
class="space-y-2 max-h-64 overflow-y-auto border border-gray-200 dark:border-gray-700 rounded-lg p-2 bg-white dark:bg-gray-900"
|
|
1846
|
+
></div>
|
|
1847
|
+
</div>
|
|
1848
|
+
|
|
1809
1849
|
<!-- Panel: file attachment -->
|
|
1810
1850
|
<div id="snip-panel-attachment" class="hidden space-y-3">
|
|
1811
1851
|
<div class="rounded-lg bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 px-3 py-3 text-sm text-blue-900 dark:text-blue-100 space-y-2">
|
|
1812
|
-
<p data-i18n="snippet.attachment_help">
|
|
1852
|
+
<p data-i18n-html="snippet.attachment_help">
|
|
1813
1853
|
Click <strong>Insert</strong> to choose a file. It will be uploaded under the <code>files/</code> folder and inserted as a <i class="fa-solid fa-paperclip"></i> link in your document.
|
|
1814
1854
|
</p>
|
|
1815
|
-
<p data-i18n="snippet.attachment_alt" class="text-xs text-blue-700 dark:text-blue-300">
|
|
1855
|
+
<p data-i18n-html="snippet.attachment_alt" class="text-xs text-blue-700 dark:text-blue-300">
|
|
1816
1856
|
Tip: you can also drag & drop a file onto the editor, or paste it from the clipboard.
|
|
1817
1857
|
</p>
|
|
1818
1858
|
</div>
|
|
@@ -19,9 +19,487 @@ const _SNIPPET_PANELS = [
|
|
|
19
19
|
"diagram",
|
|
20
20
|
"colored-section",
|
|
21
21
|
"colored-text",
|
|
22
|
+
"emojis",
|
|
22
23
|
"attachment",
|
|
23
24
|
];
|
|
24
25
|
|
|
26
|
+
// Each emoji has search tags (bilingual FR/EN, space-separated, lowercase).
|
|
27
|
+
// Filter matches a 2+ char query against any tag prefix or substring.
|
|
28
|
+
const _EMOJI_CATEGORIES = [
|
|
29
|
+
{ label: 'snippet.emoji_cat_smileys', emojis: [
|
|
30
|
+
{ e: '😀', t: 'grin grinning smile sourire happy heureux' },
|
|
31
|
+
{ e: '😃', t: 'smiley joy joie sourire happy' },
|
|
32
|
+
{ e: '😄', t: 'smile sourire happy heureux joie' },
|
|
33
|
+
{ e: '😁', t: 'beaming grin sourire dents' },
|
|
34
|
+
{ e: '😆', t: 'laugh rire lol' },
|
|
35
|
+
{ e: '😅', t: 'sweat transpire rire nerveux' },
|
|
36
|
+
{ e: '🤣', t: 'rofl lol mdr rire' },
|
|
37
|
+
{ e: '😂', t: 'joy larmes tears rire lol' },
|
|
38
|
+
{ e: '🙂', t: 'slight smile sourire' },
|
|
39
|
+
{ e: '🙃', t: 'upside renverse inverse' },
|
|
40
|
+
{ e: '😉', t: 'wink clin oeil' },
|
|
41
|
+
{ e: '😊', t: 'blush rougir sourire' },
|
|
42
|
+
{ e: '😇', t: 'angel ange halo innocent' },
|
|
43
|
+
{ e: '🥰', t: 'love amour coeur heart smile' },
|
|
44
|
+
{ e: '😍', t: 'heart eyes amoureux love amour' },
|
|
45
|
+
{ e: '🤩', t: 'star stars etoile wow' },
|
|
46
|
+
{ e: '😘', t: 'kiss bisou' },
|
|
47
|
+
{ e: '😋', t: 'yum miam savoureux langue' },
|
|
48
|
+
{ e: '😛', t: 'tongue langue' },
|
|
49
|
+
{ e: '😜', t: 'wink tongue langue clin' },
|
|
50
|
+
{ e: '🤪', t: 'crazy fou zany' },
|
|
51
|
+
{ e: '😝', t: 'tongue langue squinting' },
|
|
52
|
+
{ e: '🤗', t: 'hug calin embrasser' },
|
|
53
|
+
{ e: '🤔', t: 'think reflexion reflechir pense' },
|
|
54
|
+
{ e: '🤨', t: 'raised brow sourcil suspicious' },
|
|
55
|
+
{ e: '😐', t: 'neutral neutre' },
|
|
56
|
+
{ e: '😑', t: 'expressionless impassible' },
|
|
57
|
+
{ e: '😒', t: 'unamused decu blase' },
|
|
58
|
+
{ e: '🙄', t: 'roll eyes yeux ciel' },
|
|
59
|
+
{ e: '😬', t: 'grimace' },
|
|
60
|
+
{ e: '😌', t: 'relieved soulage' },
|
|
61
|
+
{ e: '😔', t: 'pensive pensif triste sad' },
|
|
62
|
+
{ e: '😪', t: 'sleepy sommeil fatigue' },
|
|
63
|
+
{ e: '😴', t: 'sleep dormir zzz' },
|
|
64
|
+
{ e: '🤤', t: 'drool bave' },
|
|
65
|
+
{ e: '😷', t: 'mask masque malade' },
|
|
66
|
+
{ e: '🤒', t: 'sick malade fever fievre' },
|
|
67
|
+
{ e: '🤕', t: 'hurt blesse bandage' },
|
|
68
|
+
{ e: '🤢', t: 'nausea nausee' },
|
|
69
|
+
{ e: '🤮', t: 'vomit vomir malade' },
|
|
70
|
+
{ e: '🤧', t: 'sneeze eternue rhume' },
|
|
71
|
+
{ e: '🥵', t: 'hot chaud transpire' },
|
|
72
|
+
{ e: '🥶', t: 'cold froid gele' },
|
|
73
|
+
{ e: '🥴', t: 'woozy ivre' },
|
|
74
|
+
{ e: '😵', t: 'dizzy dead mort vertige' },
|
|
75
|
+
{ e: '🤯', t: 'explode tete mind blown' },
|
|
76
|
+
{ e: '🤠', t: 'cowboy chapeau' },
|
|
77
|
+
{ e: '🥳', t: 'party fete anniversaire birthday' },
|
|
78
|
+
{ e: '😎', t: 'cool sunglasses lunettes' },
|
|
79
|
+
{ e: '🤓', t: 'nerd geek' },
|
|
80
|
+
{ e: '🧐', t: 'monocle curious' },
|
|
81
|
+
{ e: '😕', t: 'confused confus' },
|
|
82
|
+
{ e: '😟', t: 'worried inquiet' },
|
|
83
|
+
{ e: '🙁', t: 'frown triste' },
|
|
84
|
+
{ e: '☹️', t: 'sad triste frown' },
|
|
85
|
+
{ e: '😮', t: 'surprised surpris open mouth' },
|
|
86
|
+
{ e: '😯', t: 'hushed' },
|
|
87
|
+
{ e: '😲', t: 'astonished etonne' },
|
|
88
|
+
{ e: '😳', t: 'flushed gene rougeur' },
|
|
89
|
+
{ e: '🥺', t: 'pleading supplier chien' },
|
|
90
|
+
{ e: '😦', t: 'frown open mouth' },
|
|
91
|
+
{ e: '😧', t: 'anguish angoisse' },
|
|
92
|
+
{ e: '😨', t: 'fear peur' },
|
|
93
|
+
{ e: '😰', t: 'anxious anxieux stress' },
|
|
94
|
+
{ e: '😥', t: 'sad disappointed decu' },
|
|
95
|
+
{ e: '😢', t: 'cry pleurer larme' },
|
|
96
|
+
{ e: '😭', t: 'cry pleurer loud bawling' },
|
|
97
|
+
{ e: '😱', t: 'scream cri peur horror' },
|
|
98
|
+
{ e: '😖', t: 'confounded' },
|
|
99
|
+
{ e: '😣', t: 'persevere effort' },
|
|
100
|
+
{ e: '😞', t: 'disappointed decu' },
|
|
101
|
+
{ e: '😓', t: 'sweat transpire fatigue' },
|
|
102
|
+
{ e: '😩', t: 'weary fatigue las' },
|
|
103
|
+
{ e: '😫', t: 'tired fatigue' },
|
|
104
|
+
{ e: '🥱', t: 'yawn baille' },
|
|
105
|
+
{ e: '😤', t: 'triumph huff vapeur nez' },
|
|
106
|
+
{ e: '😠', t: 'angry colere fache' },
|
|
107
|
+
{ e: '😡', t: 'rage colere rouge' },
|
|
108
|
+
{ e: '🤬', t: 'curse insulte jure' },
|
|
109
|
+
{ e: '😈', t: 'devil diable smiling' },
|
|
110
|
+
{ e: '👿', t: 'imp diable' },
|
|
111
|
+
{ e: '💀', t: 'skull mort death crane' },
|
|
112
|
+
{ e: '☠️', t: 'crossbones pirate mort death' },
|
|
113
|
+
{ e: '💩', t: 'poop caca merde' },
|
|
114
|
+
{ e: '🤡', t: 'clown' },
|
|
115
|
+
{ e: '👻', t: 'ghost fantome' },
|
|
116
|
+
{ e: '👽', t: 'alien extraterrestre' },
|
|
117
|
+
{ e: '🤖', t: 'robot ia ai' },
|
|
118
|
+
{ e: '🎃', t: 'pumpkin halloween citrouille' },
|
|
119
|
+
{ e: '😺', t: 'cat chat' },
|
|
120
|
+
{ e: '😸', t: 'cat chat grin' },
|
|
121
|
+
{ e: '😹', t: 'cat chat joy' },
|
|
122
|
+
{ e: '😻', t: 'cat chat love amour heart' },
|
|
123
|
+
{ e: '😼', t: 'cat chat wry' },
|
|
124
|
+
{ e: '😽', t: 'cat chat kiss' },
|
|
125
|
+
{ e: '🙀', t: 'cat chat fear peur' },
|
|
126
|
+
{ e: '😿', t: 'cat chat cry pleurer' },
|
|
127
|
+
{ e: '😾', t: 'cat chat angry colere' },
|
|
128
|
+
]},
|
|
129
|
+
{ label: 'snippet.emoji_cat_gestures', emojis: [
|
|
130
|
+
{ e: '👍', t: 'thumbs up pouce ok bien like' },
|
|
131
|
+
{ e: '👎', t: 'thumbs down pouce bas dislike' },
|
|
132
|
+
{ e: '👌', t: 'ok parfait' },
|
|
133
|
+
{ e: '✌️', t: 'victory victoire peace paix' },
|
|
134
|
+
{ e: '🤞', t: 'fingers crossed doigts croises' },
|
|
135
|
+
{ e: '🤟', t: 'love you' },
|
|
136
|
+
{ e: '🤘', t: 'rock horns metal cornes' },
|
|
137
|
+
{ e: '🤙', t: 'call appelle hang loose' },
|
|
138
|
+
{ e: '👈', t: 'left gauche pointing' },
|
|
139
|
+
{ e: '👉', t: 'right droite pointing' },
|
|
140
|
+
{ e: '👆', t: 'up haut pointing' },
|
|
141
|
+
{ e: '👇', t: 'down bas pointing' },
|
|
142
|
+
{ e: '☝️', t: 'one index up haut' },
|
|
143
|
+
{ e: '✋', t: 'stop hand main raised' },
|
|
144
|
+
{ e: '🤚', t: 'back hand main' },
|
|
145
|
+
{ e: '🖐️', t: 'hand main splayed' },
|
|
146
|
+
{ e: '🖖', t: 'vulcan spock star trek' },
|
|
147
|
+
{ e: '👋', t: 'wave bonjour hello salut goodbye' },
|
|
148
|
+
{ e: '🤝', t: 'handshake accord deal poignee' },
|
|
149
|
+
{ e: '🙏', t: 'pray priere merci thanks please' },
|
|
150
|
+
{ e: '💪', t: 'muscle fort biceps strong' },
|
|
151
|
+
{ e: '🦾', t: 'mechanical arm bras prothese' },
|
|
152
|
+
{ e: '👏', t: 'clap applaud bravo applaudir' },
|
|
153
|
+
{ e: '🙌', t: 'raise hands hourra celebrate' },
|
|
154
|
+
{ e: '👐', t: 'open hands' },
|
|
155
|
+
{ e: '🤲', t: 'palms up paumes' },
|
|
156
|
+
{ e: '🤜', t: 'fist poing right' },
|
|
157
|
+
{ e: '🤛', t: 'fist poing left' },
|
|
158
|
+
{ e: '✊', t: 'fist poing leve' },
|
|
159
|
+
{ e: '👊', t: 'fist punch poing frapper' },
|
|
160
|
+
{ e: '🤏', t: 'pinch petit small' },
|
|
161
|
+
{ e: '🤌', t: 'italian pinched' },
|
|
162
|
+
{ e: '🖕', t: 'middle finger doigt honneur' },
|
|
163
|
+
{ e: '✍️', t: 'write ecrire hand main' },
|
|
164
|
+
{ e: '🦶', t: 'foot pied' },
|
|
165
|
+
{ e: '🦵', t: 'leg jambe' },
|
|
166
|
+
{ e: '👂', t: 'ear oreille' },
|
|
167
|
+
{ e: '🦻', t: 'ear hearing appareil auditif' },
|
|
168
|
+
{ e: '👃', t: 'nose nez' },
|
|
169
|
+
{ e: '🧠', t: 'brain cerveau mind' },
|
|
170
|
+
{ e: '👀', t: 'eyes yeux regarder' },
|
|
171
|
+
{ e: '👁️', t: 'eye oeil' },
|
|
172
|
+
{ e: '👄', t: 'mouth bouche' },
|
|
173
|
+
{ e: '👅', t: 'tongue langue' },
|
|
174
|
+
{ e: '🦷', t: 'tooth dent' },
|
|
175
|
+
{ e: '🫀', t: 'heart anatomic coeur organe' },
|
|
176
|
+
{ e: '🫁', t: 'lungs poumons' },
|
|
177
|
+
]},
|
|
178
|
+
{ label: 'snippet.emoji_cat_hearts', emojis: [
|
|
179
|
+
{ e: '❤️', t: 'heart coeur red rouge love amour' },
|
|
180
|
+
{ e: '🧡', t: 'orange heart coeur' },
|
|
181
|
+
{ e: '💛', t: 'yellow heart coeur jaune' },
|
|
182
|
+
{ e: '💚', t: 'green heart coeur vert' },
|
|
183
|
+
{ e: '💙', t: 'blue heart coeur bleu' },
|
|
184
|
+
{ e: '💜', t: 'purple heart coeur violet' },
|
|
185
|
+
{ e: '🖤', t: 'black heart coeur noir' },
|
|
186
|
+
{ e: '🤍', t: 'white heart coeur blanc' },
|
|
187
|
+
{ e: '🤎', t: 'brown heart coeur marron' },
|
|
188
|
+
{ e: '💔', t: 'broken heart coeur brise rupture' },
|
|
189
|
+
{ e: '❤️🔥', t: 'heart fire feu passion' },
|
|
190
|
+
{ e: '❤️🩹', t: 'heart mending coeur reparation' },
|
|
191
|
+
{ e: '💖', t: 'sparkling heart coeur brillant' },
|
|
192
|
+
{ e: '💕', t: 'two hearts coeurs' },
|
|
193
|
+
{ e: '💘', t: 'arrow heart cupid cupidon' },
|
|
194
|
+
{ e: '💝', t: 'ribbon heart cadeau' },
|
|
195
|
+
{ e: '💞', t: 'revolving hearts coeurs' },
|
|
196
|
+
{ e: '💟', t: 'heart decoration' },
|
|
197
|
+
{ e: '💌', t: 'love letter lettre enveloppe' },
|
|
198
|
+
{ e: '💋', t: 'kiss mark bisou levres' },
|
|
199
|
+
{ e: '❣️', t: 'heart exclamation' },
|
|
200
|
+
{ e: '💯', t: 'hundred 100 cent perfect parfait' },
|
|
201
|
+
{ e: '✨', t: 'sparkles etincelles magic magique brillant' },
|
|
202
|
+
{ e: '⭐', t: 'star etoile' },
|
|
203
|
+
{ e: '🌟', t: 'glowing star etoile' },
|
|
204
|
+
{ e: '💫', t: 'dizzy star vertige etoile' },
|
|
205
|
+
{ e: '🔥', t: 'fire feu hot flamme' },
|
|
206
|
+
{ e: '💥', t: 'boom explosion collision' },
|
|
207
|
+
{ e: '⚡', t: 'lightning eclair thunder tonnerre fast' },
|
|
208
|
+
{ e: '💢', t: 'anger colere symbol' },
|
|
209
|
+
{ e: '💨', t: 'dash vent wind fast vitesse' },
|
|
210
|
+
{ e: '💦', t: 'drops gouttes sweat eau' },
|
|
211
|
+
{ e: '💤', t: 'zzz sleep dormir sommeil' },
|
|
212
|
+
{ e: '🕳️', t: 'hole trou' },
|
|
213
|
+
{ e: '💭', t: 'thought pensee bulle' },
|
|
214
|
+
{ e: '🗯️', t: 'right anger bubble' },
|
|
215
|
+
{ e: '💬', t: 'speech bulle dialogue chat' },
|
|
216
|
+
]},
|
|
217
|
+
{ label: 'snippet.emoji_cat_objects', emojis: [
|
|
218
|
+
{ e: '💻', t: 'laptop ordinateur computer portable' },
|
|
219
|
+
{ e: '🖥️', t: 'desktop computer ordinateur bureau' },
|
|
220
|
+
{ e: '⌨️', t: 'keyboard clavier' },
|
|
221
|
+
{ e: '🖱️', t: 'mouse souris' },
|
|
222
|
+
{ e: '💾', t: 'floppy disquette save sauvegarder' },
|
|
223
|
+
{ e: '💿', t: 'disk cd optical' },
|
|
224
|
+
{ e: '📀', t: 'dvd' },
|
|
225
|
+
{ e: '📱', t: 'phone mobile telephone smartphone' },
|
|
226
|
+
{ e: '📲', t: 'phone call mobile incoming' },
|
|
227
|
+
{ e: '☎️', t: 'telephone vintage' },
|
|
228
|
+
{ e: '📞', t: 'receiver combine phone' },
|
|
229
|
+
{ e: '📟', t: 'pager' },
|
|
230
|
+
{ e: '📠', t: 'fax' },
|
|
231
|
+
{ e: '🔋', t: 'battery batterie pile' },
|
|
232
|
+
{ e: '🔌', t: 'plug prise electrique' },
|
|
233
|
+
{ e: '💡', t: 'bulb idee idea light lumiere ampoule' },
|
|
234
|
+
{ e: '🔦', t: 'flashlight torche lampe' },
|
|
235
|
+
{ e: '🕯️', t: 'candle bougie' },
|
|
236
|
+
{ e: '📷', t: 'camera appareil photo' },
|
|
237
|
+
{ e: '📸', t: 'camera flash photo' },
|
|
238
|
+
{ e: '📹', t: 'video camera' },
|
|
239
|
+
{ e: '🎥', t: 'movie film cinema camera' },
|
|
240
|
+
{ e: '🎞️', t: 'film reel pellicule' },
|
|
241
|
+
{ e: '📽️', t: 'projector projecteur' },
|
|
242
|
+
{ e: '⏰', t: 'alarm reveil clock horloge' },
|
|
243
|
+
{ e: '⏱️', t: 'stopwatch chrono chronometre' },
|
|
244
|
+
{ e: '⏲️', t: 'timer minuteur' },
|
|
245
|
+
{ e: '🕰️', t: 'mantel clock horloge' },
|
|
246
|
+
{ e: '⌛', t: 'hourglass sablier done' },
|
|
247
|
+
{ e: '⏳', t: 'hourglass sablier flow running' },
|
|
248
|
+
{ e: '📡', t: 'satellite antenne' },
|
|
249
|
+
{ e: '🔭', t: 'telescope astronomie' },
|
|
250
|
+
{ e: '🔬', t: 'microscope science' },
|
|
251
|
+
{ e: '💊', t: 'pill pilule medicine medicament' },
|
|
252
|
+
{ e: '💉', t: 'syringe seringue injection vaccin' },
|
|
253
|
+
{ e: '🩹', t: 'bandage pansement' },
|
|
254
|
+
{ e: '🩺', t: 'stethoscope medecin' },
|
|
255
|
+
{ e: '🧪', t: 'tube eprouvette chimie chemistry' },
|
|
256
|
+
{ e: '🧬', t: 'dna adn gene' },
|
|
257
|
+
{ e: '🔍', t: 'search magnify loupe rechercher find left' },
|
|
258
|
+
{ e: '🔎', t: 'search magnify loupe rechercher find right' },
|
|
259
|
+
{ e: '🗝️', t: 'key cle old' },
|
|
260
|
+
{ e: '🔑', t: 'key cle' },
|
|
261
|
+
{ e: '🔐', t: 'lock key cle cadenas' },
|
|
262
|
+
{ e: '🔒', t: 'lock cadenas verrouille secure' },
|
|
263
|
+
{ e: '🔓', t: 'unlock cadenas ouvert' },
|
|
264
|
+
{ e: '🛡️', t: 'shield bouclier protection' },
|
|
265
|
+
{ e: '🔨', t: 'hammer marteau' },
|
|
266
|
+
{ e: '⚒️', t: 'tools outils hammer pick' },
|
|
267
|
+
{ e: '🛠️', t: 'tools outils hammer wrench' },
|
|
268
|
+
{ e: '🔧', t: 'wrench cle anglaise' },
|
|
269
|
+
{ e: '🔩', t: 'nut bolt ecrou' },
|
|
270
|
+
{ e: '⚙️', t: 'gear settings parametres engrenage config' },
|
|
271
|
+
{ e: '🪛', t: 'screwdriver tournevis' },
|
|
272
|
+
{ e: '🪝', t: 'hook crochet' },
|
|
273
|
+
{ e: '🧰', t: 'toolbox caisse outils' },
|
|
274
|
+
{ e: '🧲', t: 'magnet aimant' },
|
|
275
|
+
{ e: '🧱', t: 'brick brique' },
|
|
276
|
+
{ e: '⛏️', t: 'pick pioche' },
|
|
277
|
+
{ e: '🪓', t: 'axe hache' },
|
|
278
|
+
]},
|
|
279
|
+
{ label: 'snippet.emoji_cat_office', emojis: [
|
|
280
|
+
{ e: '📝', t: 'memo note ecrire write' },
|
|
281
|
+
{ e: '✏️', t: 'pencil crayon' },
|
|
282
|
+
{ e: '🖊️', t: 'pen stylo bille' },
|
|
283
|
+
{ e: '🖋️', t: 'fountain pen stylo plume' },
|
|
284
|
+
{ e: '🖌️', t: 'paintbrush pinceau' },
|
|
285
|
+
{ e: '🖍️', t: 'crayon feutre' },
|
|
286
|
+
{ e: '📐', t: 'triangle ruler equerre' },
|
|
287
|
+
{ e: '📏', t: 'ruler regle' },
|
|
288
|
+
{ e: '📎', t: 'paperclip trombone attach' },
|
|
289
|
+
{ e: '🖇️', t: 'linked paperclips trombones' },
|
|
290
|
+
{ e: '📌', t: 'pushpin punaise' },
|
|
291
|
+
{ e: '📍', t: 'pin location lieu' },
|
|
292
|
+
{ e: '✂️', t: 'scissors ciseaux cut couper' },
|
|
293
|
+
{ e: '🗂️', t: 'card index dividers onglets' },
|
|
294
|
+
{ e: '📁', t: 'folder dossier' },
|
|
295
|
+
{ e: '📂', t: 'open folder dossier ouvert' },
|
|
296
|
+
{ e: '🗃️', t: 'card box boite fiches' },
|
|
297
|
+
{ e: '🗄️', t: 'file cabinet archive armoire' },
|
|
298
|
+
{ e: '📋', t: 'clipboard presse papier' },
|
|
299
|
+
{ e: '📃', t: 'page curl document' },
|
|
300
|
+
{ e: '📄', t: 'document page' },
|
|
301
|
+
{ e: '📜', t: 'scroll parchemin' },
|
|
302
|
+
{ e: '📰', t: 'newspaper journal presse' },
|
|
303
|
+
{ e: '🗞️', t: 'rolled newspaper journal' },
|
|
304
|
+
{ e: '📓', t: 'notebook carnet cahier' },
|
|
305
|
+
{ e: '📔', t: 'notebook decorated carnet' },
|
|
306
|
+
{ e: '📒', t: 'ledger registre' },
|
|
307
|
+
{ e: '📕', t: 'book rouge red ferme' },
|
|
308
|
+
{ e: '📗', t: 'book vert green' },
|
|
309
|
+
{ e: '📘', t: 'book bleu blue' },
|
|
310
|
+
{ e: '📙', t: 'book orange' },
|
|
311
|
+
{ e: '📚', t: 'books livres bibliotheque' },
|
|
312
|
+
{ e: '📖', t: 'open book livre ouvert' },
|
|
313
|
+
{ e: '🔖', t: 'bookmark marque page signet' },
|
|
314
|
+
{ e: '🏷️', t: 'label tag etiquette' },
|
|
315
|
+
{ e: '💼', t: 'briefcase mallette attache case business' },
|
|
316
|
+
{ e: '🗒️', t: 'spiral note notepad' },
|
|
317
|
+
{ e: '🗓️', t: 'spiral calendar calendrier' },
|
|
318
|
+
{ e: '📅', t: 'calendar calendrier date' },
|
|
319
|
+
{ e: '📆', t: 'tear off calendar calendrier' },
|
|
320
|
+
{ e: '🗑️', t: 'trash poubelle delete supprimer can' },
|
|
321
|
+
{ e: '🪣', t: 'bucket seau' },
|
|
322
|
+
{ e: '📦', t: 'package colis box boite' },
|
|
323
|
+
{ e: '📫', t: 'mailbox boite lettres closed flag up' },
|
|
324
|
+
{ e: '📪', t: 'mailbox boite lettres closed flag down' },
|
|
325
|
+
{ e: '📬', t: 'mailbox open boite lettres flag up' },
|
|
326
|
+
{ e: '📭', t: 'mailbox open boite lettres flag down' },
|
|
327
|
+
{ e: '📮', t: 'postbox boite aux lettres' },
|
|
328
|
+
{ e: '✉️', t: 'envelope enveloppe' },
|
|
329
|
+
{ e: '📧', t: 'email courriel mail at' },
|
|
330
|
+
{ e: '📨', t: 'email incoming recu' },
|
|
331
|
+
{ e: '📩', t: 'email arrow envoi' },
|
|
332
|
+
{ e: '📤', t: 'outbox envoyer sent' },
|
|
333
|
+
{ e: '📥', t: 'inbox recevoir' },
|
|
334
|
+
{ e: '📊', t: 'bar chart graphique barres histogramme' },
|
|
335
|
+
{ e: '📈', t: 'chart up tendance hausse croissance' },
|
|
336
|
+
{ e: '📉', t: 'chart down baisse decroissance' },
|
|
337
|
+
]},
|
|
338
|
+
{ label: 'snippet.emoji_cat_symbols', emojis: [
|
|
339
|
+
{ e: '🆕', t: 'new nouveau nouvelle brand fresh neuf' },
|
|
340
|
+
{ e: '♻️', t: 'existing existant existante recycle recycler reuse reutiliser' },
|
|
341
|
+
{ e: '✅', t: 'check ok valide coche green' },
|
|
342
|
+
{ e: '☑️', t: 'check ballot case' },
|
|
343
|
+
{ e: '✔️', t: 'check coche mark' },
|
|
344
|
+
{ e: '❌', t: 'cross error erreur red rouge croix ko' },
|
|
345
|
+
{ e: '✖️', t: 'multiply multiplier cross' },
|
|
346
|
+
{ e: '❎', t: 'cross square button' },
|
|
347
|
+
{ e: '⚠️', t: 'warning attention danger' },
|
|
348
|
+
{ e: 'ℹ️', t: 'info information' },
|
|
349
|
+
{ e: '❓', t: 'question red interrogation' },
|
|
350
|
+
{ e: '❔', t: 'question white interrogation' },
|
|
351
|
+
{ e: '❗', t: 'exclamation important red' },
|
|
352
|
+
{ e: '❕', t: 'exclamation white' },
|
|
353
|
+
{ e: '‼️', t: 'double exclamation' },
|
|
354
|
+
{ e: '⁉️', t: 'exclamation question' },
|
|
355
|
+
{ e: '🚀', t: 'rocket fusee launch lancer' },
|
|
356
|
+
{ e: '🎉', t: 'party popper tada fete celebration' },
|
|
357
|
+
{ e: '🎊', t: 'confetti ball fete' },
|
|
358
|
+
{ e: '🏆', t: 'trophy trophee winner' },
|
|
359
|
+
{ e: '🥇', t: 'gold medal medaille or first' },
|
|
360
|
+
{ e: '🥈', t: 'silver medal medaille argent second' },
|
|
361
|
+
{ e: '🥉', t: 'bronze medal medaille third' },
|
|
362
|
+
{ e: '🏅', t: 'medal medaille sports' },
|
|
363
|
+
{ e: '🎖️', t: 'military medal medaille' },
|
|
364
|
+
{ e: '🎯', t: 'target cible dart' },
|
|
365
|
+
{ e: '🎁', t: 'gift cadeau present' },
|
|
366
|
+
{ e: '🔔', t: 'bell cloche notify notification' },
|
|
367
|
+
{ e: '🔕', t: 'bell off muted silence' },
|
|
368
|
+
{ e: '📢', t: 'loudspeaker annonce public' },
|
|
369
|
+
{ e: '📣', t: 'megaphone porte voix' },
|
|
370
|
+
{ e: '📯', t: 'postal horn cor' },
|
|
371
|
+
{ e: '➕', t: 'plus add heavy' },
|
|
372
|
+
{ e: '➖', t: 'minus moins heavy' },
|
|
373
|
+
{ e: '➗', t: 'divide division' },
|
|
374
|
+
{ e: '♾️', t: 'infinity infini' },
|
|
375
|
+
{ e: '💲', t: 'dollar sign dollars money argent' },
|
|
376
|
+
{ e: '💱', t: 'currency exchange change devise' },
|
|
377
|
+
{ e: '©️', t: 'copyright' },
|
|
378
|
+
{ e: '®️', t: 'registered' },
|
|
379
|
+
{ e: '™️', t: 'trademark marque' },
|
|
380
|
+
{ e: '↔️', t: 'left right arrow fleche horizontal' },
|
|
381
|
+
{ e: '↕️', t: 'up down arrow fleche vertical' },
|
|
382
|
+
{ e: '↖️', t: 'up left arrow fleche' },
|
|
383
|
+
{ e: '↗️', t: 'up right arrow fleche' },
|
|
384
|
+
{ e: '↘️', t: 'down right arrow fleche' },
|
|
385
|
+
{ e: '↙️', t: 'down left arrow fleche' },
|
|
386
|
+
{ e: '⬅️', t: 'left arrow fleche gauche' },
|
|
387
|
+
{ e: '➡️', t: 'right arrow fleche droite' },
|
|
388
|
+
{ e: '⬆️', t: 'up arrow fleche haut' },
|
|
389
|
+
{ e: '⬇️', t: 'down arrow fleche bas' },
|
|
390
|
+
{ e: '🔃', t: 'clockwise vertical arrows' },
|
|
391
|
+
{ e: '🔄', t: 'counterclockwise arrows reload refresh recharger' },
|
|
392
|
+
{ e: '🔁', t: 'repeat loop boucle' },
|
|
393
|
+
{ e: '🔂', t: 'repeat single once' },
|
|
394
|
+
{ e: '🔀', t: 'shuffle melange random' },
|
|
395
|
+
{ e: '🔼', t: 'up button triangle' },
|
|
396
|
+
{ e: '🔽', t: 'down button triangle' },
|
|
397
|
+
{ e: '⏫', t: 'fast up double triangle' },
|
|
398
|
+
{ e: '⏬', t: 'fast down double triangle' },
|
|
399
|
+
{ e: '⏪', t: 'rewind back' },
|
|
400
|
+
{ e: '⏩', t: 'fast forward avance' },
|
|
401
|
+
{ e: '⏭️', t: 'next track suivant' },
|
|
402
|
+
{ e: '⏮️', t: 'previous track precedent' },
|
|
403
|
+
{ e: '⏯️', t: 'play pause' },
|
|
404
|
+
{ e: '▶️', t: 'play lecture' },
|
|
405
|
+
{ e: '⏸️', t: 'pause' },
|
|
406
|
+
{ e: '⏹️', t: 'stop' },
|
|
407
|
+
{ e: '⏺️', t: 'record enregistrer' },
|
|
408
|
+
{ e: '⏏️', t: 'eject ejecter' },
|
|
409
|
+
{ e: '🎵', t: 'music note musique' },
|
|
410
|
+
{ e: '🎶', t: 'music notes musique' },
|
|
411
|
+
{ e: '🔈', t: 'speaker low bas' },
|
|
412
|
+
{ e: '🔉', t: 'speaker medium moyen' },
|
|
413
|
+
{ e: '🔊', t: 'speaker loud fort haut son sound' },
|
|
414
|
+
{ e: '🔇', t: 'muted mute silence' },
|
|
415
|
+
{ e: '📶', t: 'signal antenne bars' },
|
|
416
|
+
{ e: '🛜', t: 'wireless wifi' },
|
|
417
|
+
{ e: '🔗', t: 'link lien chain' },
|
|
418
|
+
{ e: '⛓️', t: 'chains chaine' },
|
|
419
|
+
{ e: '🏁', t: 'finish flag checkered fin arrivee' },
|
|
420
|
+
{ e: '🚩', t: 'flag drapeau triangular' },
|
|
421
|
+
{ e: '🏳️', t: 'white flag drapeau blanc' },
|
|
422
|
+
{ e: '🏴', t: 'black flag drapeau noir' },
|
|
423
|
+
{ e: '🏳️🌈', t: 'rainbow lgbt pride drapeau arc en ciel' },
|
|
424
|
+
{ e: '🏳️⚧️', t: 'trans drapeau transgender' },
|
|
425
|
+
{ e: '🏴☠️', t: 'pirate drapeau jolly roger' },
|
|
426
|
+
]},
|
|
427
|
+
];
|
|
428
|
+
|
|
429
|
+
let _emojiGridWired = false;
|
|
430
|
+
|
|
431
|
+
function _emojiBtnHtml(item) {
|
|
432
|
+
return `<button type="button" data-emoji="${item.e}" title="${item.t.split(' ').slice(0, 3).join(', ')}" class="emoji-btn w-7 h-7 text-lg rounded hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center justify-center">${item.e}</button>`;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
function _renderEmojiCategories() {
|
|
436
|
+
return _EMOJI_CATEGORIES.map((cat) => `
|
|
437
|
+
<div>
|
|
438
|
+
<div class="text-xs font-semibold text-gray-500 dark:text-gray-400 mb-1 px-1">${window.t(cat.label)}</div>
|
|
439
|
+
<div class="flex flex-wrap gap-1">
|
|
440
|
+
${cat.emojis.map(_emojiBtnHtml).join('')}
|
|
441
|
+
</div>
|
|
442
|
+
</div>
|
|
443
|
+
`).join('');
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
function _renderEmojiSearch(query) {
|
|
447
|
+
const q = query.toLowerCase().trim();
|
|
448
|
+
const matches = [];
|
|
449
|
+
for (const cat of _EMOJI_CATEGORIES) {
|
|
450
|
+
for (const item of cat.emojis) {
|
|
451
|
+
if (item.t.includes(q) || item.e === query) matches.push(item);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
if (matches.length === 0) {
|
|
455
|
+
return `<div class="text-xs text-gray-400 dark:text-gray-600 px-1 py-2">${window.t('snippet.emoji_no_results')}</div>`;
|
|
456
|
+
}
|
|
457
|
+
return `<div class="flex flex-wrap gap-1">${matches.map(_emojiBtnHtml).join('')}</div>`;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
function emojiInit() {
|
|
461
|
+
const grid = document.getElementById('snip-emoji-grid');
|
|
462
|
+
if (!grid) return;
|
|
463
|
+
grid.innerHTML = _renderEmojiCategories();
|
|
464
|
+
|
|
465
|
+
if (!_emojiGridWired) {
|
|
466
|
+
grid.addEventListener('click', (e) => {
|
|
467
|
+
const btn = e.target.closest('.emoji-btn');
|
|
468
|
+
if (btn && btn.dataset.emoji) emojiAppend(btn.dataset.emoji);
|
|
469
|
+
});
|
|
470
|
+
const searchInput = document.getElementById('snip-emoji-search');
|
|
471
|
+
if (searchInput) {
|
|
472
|
+
searchInput.addEventListener('input', (e) => emojiFilter(e.target.value));
|
|
473
|
+
}
|
|
474
|
+
_emojiGridWired = true;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
const searchInput = document.getElementById('snip-emoji-search');
|
|
478
|
+
if (searchInput) searchInput.value = '';
|
|
479
|
+
snippetUpdatePreview();
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function emojiFilter(query) {
|
|
483
|
+
const grid = document.getElementById('snip-emoji-grid');
|
|
484
|
+
if (!grid) return;
|
|
485
|
+
const q = (query || '').trim();
|
|
486
|
+
grid.innerHTML = q.length < 2 ? _renderEmojiCategories() : _renderEmojiSearch(q);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
function emojiAppend(emoji) {
|
|
490
|
+
const input = document.getElementById('snip-emoji-string');
|
|
491
|
+
if (!input) return;
|
|
492
|
+
input.value += emoji;
|
|
493
|
+
snippetUpdatePreview();
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
function emojiClear() {
|
|
497
|
+
const input = document.getElementById('snip-emoji-string');
|
|
498
|
+
if (!input) return;
|
|
499
|
+
input.value = '';
|
|
500
|
+
snippetUpdatePreview();
|
|
501
|
+
}
|
|
502
|
+
|
|
25
503
|
const _COLOR_SWATCHES = {
|
|
26
504
|
info: { bg: "#eff6ff", border: "#3b82f6", text: "#1e3a5f" },
|
|
27
505
|
success: { bg: "#f0fdf4", border: "#22c55e", text: "#14532d" },
|
|
@@ -226,6 +704,7 @@ function snippetTypeChanged() {
|
|
|
226
704
|
if (type === "table") tableInit();
|
|
227
705
|
else if (type === "tree") treeInit();
|
|
228
706
|
else if (type === "diagram") snippetDiagInit();
|
|
707
|
+
else if (type === "emojis") emojiInit();
|
|
229
708
|
else if (type === "attachment") {
|
|
230
709
|
/* no preview — file picker opens on Insert */
|
|
231
710
|
} else snippetUpdatePreview();
|
|
@@ -410,6 +889,8 @@ function buildSnippetMarkdown() {
|
|
|
410
889
|
const content = document.getElementById("snip-colored-content").value || window.t('snippet.colored_section_content_placeholder');
|
|
411
890
|
return `<div style="background:${c.bg};border-left:4px solid ${c.border};color:${c.text};padding:1rem 1.25rem;border-radius:0.375rem;margin:1rem 0;">\n\n${content}\n\n</div>`;
|
|
412
891
|
}
|
|
892
|
+
case "emojis":
|
|
893
|
+
return document.getElementById("snip-emoji-string").value;
|
|
413
894
|
default:
|
|
414
895
|
return "";
|
|
415
896
|
}
|
|
@@ -13,4 +13,4 @@ Pour en savoir plus sur les façons d'architecturer votre documentation, [suivez
|
|
|
13
13
|
|
|
14
14
|
2. Créer un second dossier **2_GUIDE** puis **3_CONCEPT** et enfin **4_REFERENCE**<br/>
|
|
15
15
|
💡 Vos dossier apparaissent ordonnée car ils utilisent un **préfix** "1_", "2_", "3_", ..., mais ce dernier est invisible en affichage
|
|
16
|
-

|
|
16
|
+
💚
|