autumnnote 1.0.8 → 1.1.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.
Files changed (41) hide show
  1. package/README.md +401 -628
  2. package/dist/autumnnote.css +169 -0
  3. package/dist/autumnnote.es.js +3669 -179
  4. package/dist/autumnnote.es.js.map +1 -1
  5. package/dist/autumnnote.umd.js +3668 -178
  6. package/dist/autumnnote.umd.js.map +1 -1
  7. package/package.json +3 -2
  8. package/src/js/Context.js +18 -2
  9. package/src/js/core/func.js +5 -5
  10. package/src/js/i18n/de.js +320 -0
  11. package/src/js/i18n/en.js +328 -0
  12. package/src/js/i18n/es.js +320 -0
  13. package/src/js/i18n/fr.js +321 -0
  14. package/src/js/i18n/index.js +59 -0
  15. package/src/js/i18n/ja.js +321 -0
  16. package/src/js/i18n/ko.js +320 -0
  17. package/src/js/i18n/vi.js +321 -0
  18. package/src/js/i18n/zh.js +321 -0
  19. package/src/js/index.js +2 -1
  20. package/src/js/module/AutoSaveRestore.js +126 -0
  21. package/src/js/module/BubbleToolbar.js +243 -0
  22. package/src/js/module/CodeTooltip.js +12 -9
  23. package/src/js/module/ContextMenu.js +41 -37
  24. package/src/js/module/EmojiDialog.js +8 -7
  25. package/src/js/module/FindReplace.js +14 -13
  26. package/src/js/module/IconDialog.js +14 -13
  27. package/src/js/module/ImageDialog.js +17 -16
  28. package/src/js/module/ImageTooltip.js +13 -12
  29. package/src/js/module/LinkDialog.js +10 -9
  30. package/src/js/module/LinkTooltip.js +6 -5
  31. package/src/js/module/MarkdownShortcuts.js +253 -0
  32. package/src/js/module/Mention.js +337 -0
  33. package/src/js/module/ShortcutsDialog.js +5 -4
  34. package/src/js/module/Statusbar.js +6 -5
  35. package/src/js/module/TableTooltip.js +22 -19
  36. package/src/js/module/Toolbar.js +21 -15
  37. package/src/js/module/VideoDialog.js +10 -9
  38. package/src/js/module/VideoTooltip.js +12 -11
  39. package/src/js/settings.js +23 -0
  40. package/src/styles/autumnnote.scss +191 -0
  41. package/types/index.d.ts +114 -1
@@ -0,0 +1,328 @@
1
+ /**
2
+ * en.js - English locale (canonical reference)
3
+ * All other locales deep-merge against this to fill missing keys.
4
+ */
5
+
6
+ /** @type {import('../../../types/index.js').AsnLocale} */
7
+ export const en = {
8
+ toolbar: {
9
+ bold: 'Bold (Ctrl+B)',
10
+ italic: 'Italic (Ctrl+I)',
11
+ underline: 'Underline (Ctrl+U)',
12
+ strikethrough: 'Strikethrough',
13
+ superscript: 'Superscript',
14
+ subscript: 'Subscript',
15
+ alignLeft: 'Align Left',
16
+ alignCenter: 'Align Center',
17
+ alignRight: 'Align Right',
18
+ alignJustify: 'Justify',
19
+ ul: 'Unordered List',
20
+ ol: 'Ordered List',
21
+ checklist: 'Checklist',
22
+ indent: 'Indent',
23
+ outdent: 'Outdent',
24
+ undo: 'Undo (Ctrl+Z)',
25
+ redo: 'Redo (Ctrl+Y)',
26
+ hr: 'Horizontal Rule',
27
+ link: 'Insert Link',
28
+ image: 'Insert Image',
29
+ video: 'Insert Video',
30
+ emoji: 'Insert Emoji',
31
+ icon: 'Insert FA Icon',
32
+ table: 'Insert Table',
33
+ fontSize: 'Font Size',
34
+ fontSizePlaceholder: 'Size',
35
+ removeFormat: 'Remove Format',
36
+ direction: 'Toggle Text Direction (LTR / RTL)',
37
+ fontFamily: 'Font Family',
38
+ paragraphStyle: 'Paragraph Style',
39
+ paragraphStylePlaceholder: 'Style',
40
+ lineHeight: 'Line Height',
41
+ lineHeightPlaceholder: '\u2195 Line',
42
+ codeview: 'HTML Code View',
43
+ fullscreen: 'Fullscreen',
44
+ shortcuts: 'Keyboard Shortcuts (Ctrl+Shift+/)',
45
+ find: 'Find (Ctrl+F)',
46
+ findReplace: 'Find & Replace (Ctrl+H)',
47
+ inlineCode: 'Inline Code (Ctrl+`)',
48
+ print: 'Print',
49
+ foreColor: 'Text Color',
50
+ backColor: 'Highlight Color',
51
+ chooseTextColor: 'Choose text color',
52
+ chooseHighlightColor: 'Choose highlight color',
53
+ customColor: 'Custom color',
54
+ insertTableLabel: 'Insert Table',
55
+ /** Map of paragraph-style value → label (only values needing translation) */
56
+ paragraphItems: {
57
+ p: 'Normal',
58
+ blockquote: 'Quote',
59
+ pre: 'Code',
60
+ },
61
+ },
62
+
63
+ linkDialog: {
64
+ ariaLabel: 'Insert link',
65
+ title: 'Insert Link',
66
+ url: 'URL',
67
+ urlPlaceholder: 'https://',
68
+ displayText: 'Display Text',
69
+ textPlaceholder: 'Link text',
70
+ openInNewTab: 'Open in new tab',
71
+ insertBtn: 'Insert',
72
+ cancelBtn: 'Cancel',
73
+ },
74
+
75
+ imageDialog: {
76
+ ariaLabel: 'Insert image',
77
+ title: 'Insert Image',
78
+ imageUrl: 'Image URL',
79
+ urlPlaceholder: 'https://example.com/image.png',
80
+ altText: 'Alt Text',
81
+ altPlaceholder: 'Describe the image',
82
+ alignment: 'Alignment',
83
+ alignNone: 'None',
84
+ alignLeft: 'Left',
85
+ alignCenter: 'Center',
86
+ alignRight: 'Right',
87
+ uploadLabel: 'Or upload a file',
88
+ insertBtn: 'Insert',
89
+ cancelBtn: 'Cancel',
90
+ },
91
+
92
+ videoDialog: {
93
+ ariaLabel: 'Insert video',
94
+ title: 'Insert Video',
95
+ videoUrl: 'Video URL',
96
+ urlPlaceholder: 'YouTube, Vimeo, or direct .mp4 URL',
97
+ widthLabel: 'Width (px)',
98
+ widthPlaceholder: '560',
99
+ insertBtn: 'Insert',
100
+ cancelBtn: 'Cancel',
101
+ /** @param {string} type */
102
+ detected: (type) => `Detected: ${type}`,
103
+ unknownFormat: 'Unknown format \u2014 will try direct video embed',
104
+ invalidUrl: 'Invalid URL \u2014 please enter a valid video link.',
105
+ },
106
+
107
+ emojiDialog: {
108
+ ariaLabel: 'Insert emoji',
109
+ title: 'Insert Emoji',
110
+ searchPlaceholder: 'Search emojis\u2026',
111
+ all: 'All',
112
+ cancelBtn: 'Cancel',
113
+ close: 'Close',
114
+ categories: {
115
+ smileys: 'Smileys',
116
+ people: 'People',
117
+ animals: 'Animals',
118
+ food: 'Food',
119
+ travel: 'Travel',
120
+ objects: 'Objects',
121
+ symbols: 'Symbols',
122
+ },
123
+ },
124
+
125
+ iconDialog: {
126
+ ariaLabel: 'Insert FA icon',
127
+ title: 'Insert FA Icon',
128
+ searchPlaceholder: 'Search icons\u2026',
129
+ all: 'All',
130
+ style: 'Style',
131
+ size: 'Size',
132
+ color: 'Color',
133
+ useColor: ' Use color',
134
+ selectHint: 'Select an icon',
135
+ insertBtn: 'Insert FA Icon',
136
+ cancelBtn: 'Cancel',
137
+ close: 'Close',
138
+ categories: {
139
+ popular: 'Popular',
140
+ interface: 'Interface',
141
+ navigation: 'Navigation',
142
+ media: 'Media',
143
+ communication: 'Communication',
144
+ files: 'Files',
145
+ people: 'People',
146
+ objects: 'Objects',
147
+ },
148
+ },
149
+
150
+ findReplace: {
151
+ findTitle: 'Find',
152
+ findReplaceTitle: 'Find & Replace',
153
+ findPlaceholder: 'Find\u2026',
154
+ searchAriaLabel: 'Search text',
155
+ caseSensitive: '\u00a0Case sensitive',
156
+ prevBtn: '\u2190 Prev',
157
+ nextBtn: 'Next \u2192',
158
+ replacePlaceholder: 'Replace with\u2026',
159
+ replaceAriaLabel: 'Replace with',
160
+ replaceBtn: 'Replace',
161
+ replaceAllBtn: 'Replace All',
162
+ close: '\u00d7',
163
+ },
164
+
165
+ shortcutsDialog: {
166
+ title: 'Keyboard Shortcuts',
167
+ ariaLabel: 'Keyboard Shortcuts',
168
+ close: 'Close',
169
+ shortcuts: [
170
+ {
171
+ category: 'Text Formatting',
172
+ items: [
173
+ { keys: 'Ctrl + B', action: 'Bold' },
174
+ { keys: 'Ctrl + I', action: 'Italic' },
175
+ { keys: 'Ctrl + U', action: 'Underline' },
176
+ { keys: 'Ctrl + K', action: 'Insert / edit link' },
177
+ ],
178
+ },
179
+ {
180
+ category: 'History',
181
+ items: [
182
+ { keys: 'Ctrl + Z', action: 'Undo' },
183
+ { keys: 'Ctrl + Y / Ctrl + Shift + Z', action: 'Redo' },
184
+ ],
185
+ },
186
+ {
187
+ category: 'Selection & Navigation',
188
+ items: [
189
+ { keys: 'Ctrl + A', action: 'Select all content' },
190
+ { keys: 'Tab', action: 'Indent list item / insert spaces' },
191
+ { keys: 'Shift + Tab', action: 'Outdent list item' },
192
+ ],
193
+ },
194
+ {
195
+ category: 'Clipboard',
196
+ items: [
197
+ { keys: 'Ctrl + Shift + V', action: 'Paste as plain text' },
198
+ ],
199
+ },
200
+ {
201
+ category: 'Find & Replace',
202
+ items: [
203
+ { keys: 'Ctrl + F', action: 'Find in document' },
204
+ { keys: 'Ctrl + H', action: 'Find & Replace' },
205
+ ],
206
+ },
207
+ {
208
+ category: 'Editor',
209
+ items: [
210
+ { keys: 'Ctrl + Shift + /', action: 'Show this keyboard shortcuts dialog' },
211
+ ],
212
+ },
213
+ ],
214
+ },
215
+
216
+ contextMenu: {
217
+ cut: 'Cut',
218
+ copy: 'Copy',
219
+ paste: 'Paste',
220
+ bold: 'Bold',
221
+ italic: 'Italic',
222
+ underline: 'Underline',
223
+ textColor: 'Text Color',
224
+ highlightColor: 'Highlight Color',
225
+ copyFormat: 'Copy Format',
226
+ pasteFormat: 'Paste Format',
227
+ removeFormat: 'Remove Format',
228
+ link: 'Insert Link',
229
+ image: 'Insert Image',
230
+ video: 'Insert Video',
231
+ table: 'Insert Table',
232
+ back: 'Back',
233
+ noHighlight: 'No highlight',
234
+ customColor: 'Custom color',
235
+ customColorLabel: 'Custom\u2026',
236
+ },
237
+
238
+ statusbar: {
239
+ resizeHandle: 'Resize editor',
240
+ /** @param {number} n */
241
+ words: (n) => `Words: ${n}`,
242
+ /** @param {number} n @param {number} max */
243
+ wordsLimit: (n, max) => `Words: ${n}/${max}`,
244
+ /** @param {number} n */
245
+ chars: (n) => `Chars: ${n}`,
246
+ /** @param {number} n @param {number} max */
247
+ charsLimit: (n, max) => `Chars: ${n}/${max}`,
248
+ },
249
+
250
+ tooltips: {
251
+ link: {
252
+ ariaLabel: 'Link actions',
253
+ openLink: 'Open link',
254
+ copyUrl: 'Copy URL',
255
+ editLink: 'Edit link',
256
+ removeLink: 'Remove link',
257
+ },
258
+ image: {
259
+ ariaLabel: 'Image actions',
260
+ label: 'Image',
261
+ floatLeft: 'Float Left',
262
+ noFloat: 'No Float',
263
+ alignCenter: 'Align Center',
264
+ floatRight: 'Float Right',
265
+ originalSize: 'Original Size',
266
+ rotateLeft: 'Rotate Left',
267
+ rotateRight: 'Rotate Right',
268
+ cropImage: 'Crop Image',
269
+ addCaption: 'Add / Edit Caption',
270
+ deleteImage: 'Delete Image',
271
+ },
272
+ code: {
273
+ ariaLabel: 'Code block actions',
274
+ label: 'Code',
275
+ syntaxLanguage: 'Syntax Language',
276
+ syntaxAriaLabel: 'Syntax language',
277
+ copyCode: 'Copy Code',
278
+ toggleWordWrap: 'Toggle Word Wrap',
279
+ enableWordWrap: 'Enable Word Wrap',
280
+ disableWordWrap: 'Disable Word Wrap',
281
+ convertToParagraph: 'Convert to Paragraph',
282
+ deleteCodeBlock: 'Delete Code Block',
283
+ },
284
+ table: {
285
+ ariaLabel: 'Table actions',
286
+ label: 'Table',
287
+ selectCells: 'Select Cells',
288
+ addRowAbove: 'Add Row Above',
289
+ addRowBelow: 'Add Row Below',
290
+ deleteRow: 'Delete Row',
291
+ addColumnLeft: 'Add Column Left',
292
+ addColumnRight: 'Add Column Right',
293
+ deleteColumn: 'Delete Column',
294
+ mergeCells: 'Merge Cells',
295
+ unmergeCells: 'Unmerge Cells',
296
+ columnWidth: 'Column Width',
297
+ rowHeight: 'Row Height',
298
+ tableBorderWidth: 'Table Border Width',
299
+ deleteTable: 'Delete Table',
300
+ columnWidthPx: 'Column Width (px)',
301
+ rowHeightPx: 'Row Height (px)',
302
+ tableBorderWidthPx: 'Table Border Width (px)',
303
+ cancelBtn: 'Cancel',
304
+ applyBtn: 'Apply',
305
+ },
306
+ video: {
307
+ ariaLabel: 'Video actions',
308
+ label: 'Video',
309
+ floatLeft: 'Float Left',
310
+ noFloat: 'No Float',
311
+ alignCenter: 'Align Center',
312
+ floatRight: 'Float Right',
313
+ originalSize: 'Original Size',
314
+ previewVideo: 'Preview Video',
315
+ exitPreview: 'Exit Preview',
316
+ deleteVideo: 'Delete Video',
317
+ },
318
+ },
319
+
320
+ errors: {
321
+ /** @param {string} type */
322
+ imageFormat: (type) =>
323
+ `Format "${type}" is not supported for display in web browsers. Please convert to JPEG, PNG, or WebP first.`,
324
+ /** @param {number} maxSize */
325
+ imageSize: (maxSize) =>
326
+ `Image file is too large. Maximum allowed size is ${maxSize} MB.`,
327
+ },
328
+ };
@@ -0,0 +1,320 @@
1
+ /**
2
+ * es.js - Spanish locale
3
+ * Deep-merged over en.js; only keys that differ from English are listed.
4
+ */
5
+
6
+ /** @type {Partial<import('../../../types/index.js').AsnLocale>} */
7
+ export const es = {
8
+ toolbar: {
9
+ bold: 'Negrita (Ctrl+B)',
10
+ italic: 'Cursiva (Ctrl+I)',
11
+ underline: 'Subrayado (Ctrl+U)',
12
+ strikethrough: 'Tachado',
13
+ superscript: 'Superíndice',
14
+ subscript: 'Subíndice',
15
+ alignLeft: 'Alinear a la izquierda',
16
+ alignCenter: 'Centrar',
17
+ alignRight: 'Alinear a la derecha',
18
+ alignJustify: 'Justificar',
19
+ ul: 'Lista sin orden',
20
+ ol: 'Lista ordenada',
21
+ checklist: 'Lista de verificación',
22
+ indent: 'Aumentar sangría',
23
+ outdent: 'Reducir sangría',
24
+ undo: 'Deshacer (Ctrl+Z)',
25
+ redo: 'Rehacer (Ctrl+Y)',
26
+ hr: 'Línea horizontal',
27
+ link: 'Insertar enlace',
28
+ image: 'Insertar imagen',
29
+ video: 'Insertar vídeo',
30
+ emoji: 'Insertar emoji',
31
+ icon: 'Insertar icono FA',
32
+ table: 'Insertar tabla',
33
+ fontSize: 'Tamaño de fuente',
34
+ fontSizePlaceholder: 'Tamaño',
35
+ removeFormat: 'Eliminar formato',
36
+ direction: 'Cambiar dirección del texto (LTR / RTL)',
37
+ fontFamily: 'Fuente',
38
+ paragraphStyle: 'Estilo de párrafo',
39
+ paragraphStylePlaceholder: 'Estilo',
40
+ lineHeight: 'Interlineado',
41
+ lineHeightPlaceholder: '↕ Línea',
42
+ codeview: 'Vista de código HTML',
43
+ fullscreen: 'Pantalla completa',
44
+ shortcuts: 'Atajos de teclado (Ctrl+Shift+/)',
45
+ find: 'Buscar (Ctrl+F)',
46
+ findReplace: 'Buscar y reemplazar (Ctrl+H)',
47
+ inlineCode: 'Código en línea (Ctrl+`)',
48
+ print: 'Imprimir',
49
+ foreColor: 'Color del texto',
50
+ backColor: 'Color de resaltado',
51
+ chooseTextColor: 'Elegir color del texto',
52
+ chooseHighlightColor: 'Elegir color de resaltado',
53
+ customColor: 'Color personalizado',
54
+ insertTableLabel: 'Insertar tabla',
55
+ paragraphItems: {
56
+ p: 'Normal',
57
+ blockquote: 'Cita',
58
+ pre: 'Código',
59
+ },
60
+ },
61
+
62
+ linkDialog: {
63
+ ariaLabel: 'Insertar enlace',
64
+ title: 'Insertar enlace',
65
+ url: 'URL',
66
+ urlPlaceholder: 'https://',
67
+ displayText: 'Texto a mostrar',
68
+ textPlaceholder: 'Texto del enlace',
69
+ openInNewTab: 'Abrir en nueva pestaña',
70
+ insertBtn: 'Insertar',
71
+ cancelBtn: 'Cancelar',
72
+ },
73
+
74
+ imageDialog: {
75
+ ariaLabel: 'Insertar imagen',
76
+ title: 'Insertar imagen',
77
+ imageUrl: 'URL de imagen',
78
+ urlPlaceholder: 'https://example.com/image.png',
79
+ altText: 'Texto alternativo',
80
+ altPlaceholder: 'Describir la imagen',
81
+ alignment: 'Alineación',
82
+ alignNone: 'Ninguna',
83
+ alignLeft: 'Izquierda',
84
+ alignCenter: 'Centro',
85
+ alignRight: 'Derecha',
86
+ uploadLabel: 'O subir un archivo',
87
+ insertBtn: 'Insertar',
88
+ cancelBtn: 'Cancelar',
89
+ },
90
+
91
+ videoDialog: {
92
+ ariaLabel: 'Insertar vídeo',
93
+ title: 'Insertar vídeo',
94
+ videoUrl: 'URL del vídeo',
95
+ urlPlaceholder: 'YouTube, Vimeo o URL directa .mp4',
96
+ widthLabel: 'Ancho (px)',
97
+ widthPlaceholder: '560',
98
+ insertBtn: 'Insertar',
99
+ cancelBtn: 'Cancelar',
100
+ detected: (type) => `Detectado: ${type}`,
101
+ unknownFormat: 'Formato desconocido — se intentará incrustar el vídeo directamente',
102
+ invalidUrl: 'URL no válida — introduzca un enlace de vídeo válido.',
103
+ },
104
+
105
+ emojiDialog: {
106
+ ariaLabel: 'Insertar emoji',
107
+ title: 'Insertar emoji',
108
+ searchPlaceholder: 'Buscar emojis…',
109
+ all: 'Todos',
110
+ cancelBtn: 'Cancelar',
111
+ close: 'Cerrar',
112
+ categories: {
113
+ smileys: 'Caritas',
114
+ people: 'Personas',
115
+ animals: 'Animales',
116
+ food: 'Comida',
117
+ travel: 'Viajes',
118
+ objects: 'Objetos',
119
+ symbols: 'Símbolos',
120
+ },
121
+ },
122
+
123
+ iconDialog: {
124
+ ariaLabel: 'Insertar icono FA',
125
+ title: 'Insertar icono FA',
126
+ searchPlaceholder: 'Buscar iconos…',
127
+ all: 'Todos',
128
+ style: 'Estilo',
129
+ size: 'Tamaño',
130
+ color: 'Color',
131
+ useColor: ' Usar color',
132
+ selectHint: 'Seleccionar un icono',
133
+ insertBtn: 'Insertar icono FA',
134
+ cancelBtn: 'Cancelar',
135
+ close: 'Cerrar',
136
+ categories: {
137
+ popular: 'Popular',
138
+ interface: 'Interfaz',
139
+ navigation: 'Navegación',
140
+ media: 'Medios',
141
+ communication: 'Comunicación',
142
+ files: 'Archivos',
143
+ people: 'Personas',
144
+ objects: 'Objetos',
145
+ },
146
+ },
147
+
148
+ findReplace: {
149
+ findTitle: 'Buscar',
150
+ findReplaceTitle: 'Buscar y reemplazar',
151
+ findPlaceholder: 'Buscar…',
152
+ searchAriaLabel: 'Texto de búsqueda',
153
+ caseSensitive: '\u00a0Distinguir mayúsculas',
154
+ prevBtn: '← Anterior',
155
+ nextBtn: 'Siguiente →',
156
+ replacePlaceholder: 'Reemplazar con…',
157
+ replaceAriaLabel: 'Reemplazar con',
158
+ replaceBtn: 'Reemplazar',
159
+ replaceAllBtn: 'Reemplazar todo',
160
+ close: '×',
161
+ },
162
+
163
+ shortcutsDialog: {
164
+ title: 'Atajos de teclado',
165
+ ariaLabel: 'Atajos de teclado',
166
+ close: 'Cerrar',
167
+ shortcuts: [
168
+ {
169
+ category: 'Formato de texto',
170
+ items: [
171
+ { keys: 'Ctrl + B', action: 'Negrita' },
172
+ { keys: 'Ctrl + I', action: 'Cursiva' },
173
+ { keys: 'Ctrl + U', action: 'Subrayado' },
174
+ { keys: 'Ctrl + K', action: 'Insertar / editar enlace' },
175
+ ],
176
+ },
177
+ {
178
+ category: 'Historial',
179
+ items: [
180
+ { keys: 'Ctrl + Z', action: 'Deshacer' },
181
+ { keys: 'Ctrl + Y / Ctrl + Shift + Z', action: 'Rehacer' },
182
+ ],
183
+ },
184
+ {
185
+ category: 'Selección y navegación',
186
+ items: [
187
+ { keys: 'Ctrl + A', action: 'Seleccionar todo' },
188
+ { keys: 'Tab', action: 'Aumentar sangría / insertar espacios' },
189
+ { keys: 'Shift + Tab', action: 'Reducir sangría' },
190
+ ],
191
+ },
192
+ {
193
+ category: 'Portapapeles',
194
+ items: [
195
+ { keys: 'Ctrl + Shift + V', action: 'Pegar como texto plano' },
196
+ ],
197
+ },
198
+ {
199
+ category: 'Buscar y reemplazar',
200
+ items: [
201
+ { keys: 'Ctrl + F', action: 'Buscar en el documento' },
202
+ { keys: 'Ctrl + H', action: 'Buscar y reemplazar' },
203
+ ],
204
+ },
205
+ {
206
+ category: 'Editor',
207
+ items: [
208
+ { keys: 'Ctrl + Shift + /', action: 'Mostrar este diálogo de atajos' },
209
+ ],
210
+ },
211
+ ],
212
+ },
213
+
214
+ contextMenu: {
215
+ cut: 'Cortar',
216
+ copy: 'Copiar',
217
+ paste: 'Pegar',
218
+ bold: 'Negrita',
219
+ italic: 'Cursiva',
220
+ underline: 'Subrayado',
221
+ textColor: 'Color del texto',
222
+ highlightColor: 'Color de resaltado',
223
+ copyFormat: 'Copiar formato',
224
+ pasteFormat: 'Pegar formato',
225
+ removeFormat: 'Eliminar formato',
226
+ link: 'Insertar enlace',
227
+ image: 'Insertar imagen',
228
+ video: 'Insertar vídeo',
229
+ table: 'Insertar tabla',
230
+ back: 'Atrás',
231
+ noHighlight: 'Sin resaltado',
232
+ customColor: 'Color personalizado',
233
+ customColorLabel: 'Personalizado…',
234
+ },
235
+
236
+ statusbar: {
237
+ resizeHandle: 'Redimensionar editor',
238
+ words: (n) => `Palabras: ${n}`,
239
+ wordsLimit: (n, max) => `Palabras: ${n}/${max}`,
240
+ chars: (n) => `Caracteres: ${n}`,
241
+ charsLimit: (n, max) => `Caracteres: ${n}/${max}`,
242
+ },
243
+
244
+ tooltips: {
245
+ link: {
246
+ ariaLabel: 'Acciones de enlace',
247
+ openLink: 'Abrir enlace',
248
+ copyUrl: 'Copiar URL',
249
+ editLink: 'Editar enlace',
250
+ removeLink: 'Eliminar enlace',
251
+ },
252
+ image: {
253
+ ariaLabel: 'Acciones de imagen',
254
+ label: 'Imagen',
255
+ floatLeft: 'Flotar a la izquierda',
256
+ noFloat: 'Sin flotado',
257
+ alignCenter: 'Centrar',
258
+ floatRight: 'Flotar a la derecha',
259
+ originalSize: 'Tamaño original',
260
+ rotateLeft: 'Rotar a la izquierda',
261
+ rotateRight: 'Rotar a la derecha',
262
+ cropImage: 'Recortar imagen',
263
+ addCaption: 'Añadir / editar pie de foto',
264
+ deleteImage: 'Eliminar imagen',
265
+ },
266
+ code: {
267
+ ariaLabel: 'Acciones de bloque de código',
268
+ label: 'Código',
269
+ syntaxLanguage: 'Lenguaje de sintaxis',
270
+ syntaxAriaLabel: 'Lenguaje de sintaxis',
271
+ copyCode: 'Copiar código',
272
+ toggleWordWrap: 'Alternar ajuste de línea',
273
+ enableWordWrap: 'Activar ajuste de línea',
274
+ disableWordWrap: 'Desactivar ajuste de línea',
275
+ convertToParagraph: 'Convertir en párrafo',
276
+ deleteCodeBlock: 'Eliminar bloque de código',
277
+ },
278
+ table: {
279
+ ariaLabel: 'Acciones de tabla',
280
+ label: 'Tabla',
281
+ selectCells: 'Seleccionar celdas',
282
+ addRowAbove: 'Añadir fila encima',
283
+ addRowBelow: 'Añadir fila debajo',
284
+ deleteRow: 'Eliminar fila',
285
+ addColumnLeft: 'Añadir columna a la izquierda',
286
+ addColumnRight: 'Añadir columna a la derecha',
287
+ deleteColumn: 'Eliminar columna',
288
+ mergeCells: 'Combinar celdas',
289
+ unmergeCells: 'Separar celdas',
290
+ columnWidth: 'Ancho de columna',
291
+ rowHeight: 'Alto de fila',
292
+ tableBorderWidth: 'Grosor del borde de la tabla',
293
+ deleteTable: 'Eliminar tabla',
294
+ columnWidthPx: 'Ancho de columna (px)',
295
+ rowHeightPx: 'Alto de fila (px)',
296
+ tableBorderWidthPx: 'Grosor del borde (px)',
297
+ cancelBtn: 'Cancelar',
298
+ applyBtn: 'Aplicar',
299
+ },
300
+ video: {
301
+ ariaLabel: 'Acciones de vídeo',
302
+ label: 'Vídeo',
303
+ floatLeft: 'Flotar a la izquierda',
304
+ noFloat: 'Sin flotado',
305
+ alignCenter: 'Centrar',
306
+ floatRight: 'Flotar a la derecha',
307
+ originalSize: 'Tamaño original',
308
+ previewVideo: 'Vista previa de vídeo',
309
+ exitPreview: 'Salir de la vista previa',
310
+ deleteVideo: 'Eliminar vídeo',
311
+ },
312
+ },
313
+
314
+ errors: {
315
+ imageFormat: (type) =>
316
+ `El formato "${type}" no es compatible con los navegadores web. Por favor, conviértalo primero a JPEG, PNG o WebP.`,
317
+ imageSize: (maxSize) =>
318
+ `El archivo de imagen es demasiado grande. El tamaño máximo permitido es ${maxSize} MB.`,
319
+ },
320
+ };