@teriusu/rich-editor 0.10.8 → 0.11.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 (147) hide show
  1. package/dist/components/BubbleToolbar.svelte +40 -36
  2. package/dist/components/BubbleToolbar.svelte.d.ts +3 -0
  3. package/dist/components/BubbleToolbar.svelte.d.ts.map +1 -1
  4. package/dist/components/EmojiSuggestionMenu.svelte +291 -0
  5. package/dist/components/EmojiSuggestionMenu.svelte.d.ts +9 -0
  6. package/dist/components/EmojiSuggestionMenu.svelte.d.ts.map +1 -0
  7. package/dist/components/FixedToolbar.svelte +53 -47
  8. package/dist/components/FixedToolbar.svelte.d.ts +3 -0
  9. package/dist/components/FixedToolbar.svelte.d.ts.map +1 -1
  10. package/dist/components/FloatingHelper.svelte +219 -0
  11. package/dist/components/FloatingHelper.svelte.d.ts +14 -0
  12. package/dist/components/FloatingHelper.svelte.d.ts.map +1 -0
  13. package/dist/components/InputModal.svelte +7 -3
  14. package/dist/components/InputModal.svelte.d.ts +3 -0
  15. package/dist/components/InputModal.svelte.d.ts.map +1 -1
  16. package/dist/components/MathModal.svelte +33 -29
  17. package/dist/components/MathModal.svelte.d.ts +3 -0
  18. package/dist/components/MathModal.svelte.d.ts.map +1 -1
  19. package/dist/components/MediaPickerModal.svelte +7 -3
  20. package/dist/components/MediaPickerModal.svelte.d.ts +3 -0
  21. package/dist/components/MediaPickerModal.svelte.d.ts.map +1 -1
  22. package/dist/components/SlashCommandMenu.svelte +88 -72
  23. package/dist/components/SlashCommandMenu.svelte.d.ts +3 -0
  24. package/dist/components/SlashCommandMenu.svelte.d.ts.map +1 -1
  25. package/dist/components/TableBubbleMenu.svelte +41 -33
  26. package/dist/components/TableBubbleMenu.svelte.d.ts +3 -0
  27. package/dist/components/TableBubbleMenu.svelte.d.ts.map +1 -1
  28. package/dist/components/TipTapEditor.svelte +239 -127
  29. package/dist/components/TipTapEditor.svelte.d.ts +7 -0
  30. package/dist/components/TipTapEditor.svelte.d.ts.map +1 -1
  31. package/dist/extensions/CardBlock.d.ts.map +1 -1
  32. package/dist/extensions/CardBlock.js +6 -4
  33. package/dist/extensions/FileAttachment.d.ts.map +1 -1
  34. package/dist/extensions/FileAttachment.js +2 -1
  35. package/dist/extensions/FixedDetails.d.ts.map +1 -1
  36. package/dist/extensions/FixedDetails.js +5 -3
  37. package/dist/extensions/LegacyBlock.d.ts.map +1 -1
  38. package/dist/extensions/LegacyBlock.js +8 -6
  39. package/dist/extensions/Math.d.ts.map +1 -1
  40. package/dist/extensions/Math.js +5 -2
  41. package/dist/extensions/MbusVideo.d.ts.map +1 -1
  42. package/dist/extensions/MbusVideo.js +73 -9
  43. package/dist/extensions/MediaToolbar.d.ts +41 -0
  44. package/dist/extensions/MediaToolbar.d.ts.map +1 -0
  45. package/dist/extensions/MediaToolbar.js +196 -0
  46. package/dist/extensions/MediaToolbar.test.d.ts +2 -0
  47. package/dist/extensions/MediaToolbar.test.d.ts.map +1 -0
  48. package/dist/extensions/MediaToolbar.test.js +231 -0
  49. package/dist/extensions/OrderedListMarker.d.ts +2 -0
  50. package/dist/extensions/OrderedListMarker.d.ts.map +1 -0
  51. package/dist/extensions/OrderedListMarker.js +114 -0
  52. package/dist/extensions/OrderedListMarker.test.d.ts +2 -0
  53. package/dist/extensions/OrderedListMarker.test.d.ts.map +1 -0
  54. package/dist/extensions/OrderedListMarker.test.js +176 -0
  55. package/dist/extensions/PdfBlock.d.ts.map +1 -1
  56. package/dist/extensions/PdfBlock.js +25 -23
  57. package/dist/extensions/ResizableImage.d.ts.map +1 -1
  58. package/dist/extensions/ResizableImage.js +20 -1
  59. package/dist/extensions/TableKeymap.d.ts +16 -0
  60. package/dist/extensions/TableKeymap.d.ts.map +1 -0
  61. package/dist/extensions/TableKeymap.js +97 -0
  62. package/dist/extensions/TableKeymap.test.d.ts +2 -0
  63. package/dist/extensions/TableKeymap.test.d.ts.map +1 -0
  64. package/dist/extensions/TableKeymap.test.js +147 -0
  65. package/dist/extensions/TabsBlock.d.ts.map +1 -1
  66. package/dist/extensions/TabsBlock.js +12 -9
  67. package/dist/extensions/TiptapMidibus.d.ts.map +1 -1
  68. package/dist/extensions/TiptapMidibus.js +60 -6
  69. package/dist/extensions/UploadSkeleton.d.ts +61 -0
  70. package/dist/extensions/UploadSkeleton.d.ts.map +1 -0
  71. package/dist/extensions/UploadSkeleton.js +233 -0
  72. package/dist/extensions/UploadSkeleton.test.d.ts +2 -0
  73. package/dist/extensions/UploadSkeleton.test.d.ts.map +1 -0
  74. package/dist/extensions/UploadSkeleton.test.js +128 -0
  75. package/dist/extensions/VideoEmbed.d.ts +8 -0
  76. package/dist/extensions/VideoEmbed.d.ts.map +1 -1
  77. package/dist/extensions/VideoEmbed.js +226 -45
  78. package/dist/extensions/VideoEmbed.test.js +131 -2
  79. package/dist/i18n/en.d.ts +3 -0
  80. package/dist/i18n/en.d.ts.map +1 -0
  81. package/dist/i18n/en.js +191 -0
  82. package/dist/i18n/es.d.ts +3 -0
  83. package/dist/i18n/es.d.ts.map +1 -0
  84. package/dist/i18n/es.js +191 -0
  85. package/dist/i18n/index.d.ts +43 -0
  86. package/dist/i18n/index.d.ts.map +1 -0
  87. package/dist/i18n/index.js +109 -0
  88. package/dist/i18n/index.test.d.ts +2 -0
  89. package/dist/i18n/index.test.d.ts.map +1 -0
  90. package/dist/i18n/index.test.js +173 -0
  91. package/dist/i18n/ja.d.ts +3 -0
  92. package/dist/i18n/ja.d.ts.map +1 -0
  93. package/dist/i18n/ja.js +191 -0
  94. package/dist/i18n/ko.d.ts +198 -0
  95. package/dist/i18n/ko.d.ts.map +1 -0
  96. package/dist/i18n/ko.js +215 -0
  97. package/dist/i18n/zh-hans.d.ts +3 -0
  98. package/dist/i18n/zh-hans.d.ts.map +1 -0
  99. package/dist/i18n/zh-hans.js +191 -0
  100. package/dist/i18n/zh-hant.d.ts +3 -0
  101. package/dist/i18n/zh-hant.d.ts.map +1 -0
  102. package/dist/i18n/zh-hant.js +192 -0
  103. package/dist/index.d.ts +7 -1
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +13 -1
  106. package/dist/static/highlight.d.ts +13 -0
  107. package/dist/static/highlight.d.ts.map +1 -0
  108. package/dist/static/highlight.js +99 -0
  109. package/dist/static/index.d.ts +33 -0
  110. package/dist/static/index.d.ts.map +1 -0
  111. package/dist/static/index.js +367 -0
  112. package/dist/static/index.test.d.ts +2 -0
  113. package/dist/static/index.test.d.ts.map +1 -0
  114. package/dist/static/index.test.js +194 -0
  115. package/dist/static/tokenizer.d.ts +52 -0
  116. package/dist/static/tokenizer.d.ts.map +1 -0
  117. package/dist/static/tokenizer.js +289 -0
  118. package/dist/styles/editor.css +1 -1
  119. package/dist/utils/emoji-data.d.ts +15 -0
  120. package/dist/utils/emoji-suggestion.d.ts +48 -0
  121. package/dist/utils/emoji-suggestion.d.ts.map +1 -0
  122. package/dist/utils/emoji-suggestion.js +51 -0
  123. package/dist/utils/emoji-suggestion.test.d.ts +2 -0
  124. package/dist/utils/emoji-suggestion.test.d.ts.map +1 -0
  125. package/dist/utils/emoji-suggestion.test.js +117 -0
  126. package/dist/utils/floating-helper.d.ts +60 -0
  127. package/dist/utils/floating-helper.d.ts.map +1 -0
  128. package/dist/utils/floating-helper.js +63 -0
  129. package/dist/utils/floating-helper.test.d.ts +2 -0
  130. package/dist/utils/floating-helper.test.d.ts.map +1 -0
  131. package/dist/utils/floating-helper.test.js +141 -0
  132. package/dist/utils/guard-vscode-paste.d.ts +19 -0
  133. package/dist/utils/guard-vscode-paste.d.ts.map +1 -0
  134. package/dist/utils/guard-vscode-paste.js +46 -0
  135. package/dist/utils/guard-vscode-paste.test.d.ts +2 -0
  136. package/dist/utils/guard-vscode-paste.test.d.ts.map +1 -0
  137. package/dist/utils/guard-vscode-paste.test.js +86 -0
  138. package/dist/utils/media-size.d.ts +29 -0
  139. package/dist/utils/media-size.d.ts.map +1 -0
  140. package/dist/utils/media-size.js +90 -0
  141. package/dist/utils/resize.d.ts +12 -0
  142. package/dist/utils/resize.d.ts.map +1 -1
  143. package/dist/utils/resize.js +5 -5
  144. package/dist/utils/sanitize.d.ts +2 -0
  145. package/dist/utils/sanitize.d.ts.map +1 -1
  146. package/dist/utils/sanitize.js +28 -3
  147. package/package.json +8 -1
@@ -0,0 +1,191 @@
1
+ export const en = {
2
+ close: 'Close',
3
+ cancel: 'Cancel',
4
+ confirm: 'OK',
5
+ delete: 'Delete',
6
+ insert: 'Insert',
7
+ upload: 'Upload',
8
+ link: 'Link',
9
+ noResult: 'No result',
10
+ preview: 'Preview',
11
+ paragraph: 'Paragraph',
12
+ heading1: 'Heading 1',
13
+ heading2: 'Heading 2',
14
+ heading3: 'Heading 3',
15
+ toggleHeading: 'Toggle heading {level}',
16
+ bulletList: 'Bulleted list',
17
+ orderedList: 'Numbered list',
18
+ taskList: 'Checklist',
19
+ blockquote: 'Quote',
20
+ toggle: 'Toggle',
21
+ code: 'Code',
22
+ codeBlock: 'Code block',
23
+ math: 'Math',
24
+ mathBlock: 'Math block',
25
+ mathInline: 'Inline math',
26
+ table: 'Table',
27
+ table3x3: 'Table (3x3)',
28
+ divider: 'Divider',
29
+ columns2: '2 columns',
30
+ columns3: '3 columns',
31
+ tabs: 'Tabs',
32
+ card: 'Card',
33
+ image: 'Image',
34
+ video: 'Video',
35
+ mbusVideo: 'Midibus video',
36
+ file: 'File',
37
+ fileAttach: 'Attach file',
38
+ pdfFile: 'PDF file',
39
+ undo: 'Undo',
40
+ redo: 'Redo',
41
+ blockType: 'Block type',
42
+ bold: 'Bold',
43
+ italic: 'Italic',
44
+ underline: 'Underline',
45
+ strike: 'Strikethrough',
46
+ alignLeft: 'Align left',
47
+ alignCenter: 'Align center',
48
+ alignRight: 'Align right',
49
+ highlight: 'Highlight',
50
+ textColor: 'Text color',
51
+ customColor: 'Custom',
52
+ colorDefault: 'Default',
53
+ colorBlack: 'Black',
54
+ colorGray: 'Gray',
55
+ colorRed: 'Red',
56
+ colorOrange: 'Orange',
57
+ colorYellow: 'Yellow',
58
+ colorGreen: 'Green',
59
+ colorBlue: 'Blue',
60
+ colorPurple: 'Purple',
61
+ videoUrl: 'Video URL',
62
+ mbusVideoUrl: 'Midibus video URL',
63
+ promptLinkUrl: 'Enter a link URL',
64
+ promptImageUrl: 'Enter an image URL',
65
+ promptVideoUrl: 'Enter a video URL (YouTube, Vimeo, etc.)',
66
+ promptMbusUrl: 'Enter a Midibus video URL',
67
+ sectionFrequent: 'Frequently used',
68
+ sectionBasic: 'Basic',
69
+ sectionList: 'Lists',
70
+ sectionBlock: 'Blocks',
71
+ sectionLayout: 'Layout',
72
+ sectionMedia: 'Media',
73
+ emptyLineTools: 'Empty line tools',
74
+ floatingHint: 'Press / for commands',
75
+ floatingHintOr: '. Or',
76
+ insertMath: 'Insert math',
77
+ insertCodeBlock: 'Insert code block',
78
+ mathSuperscript: 'Superscript',
79
+ mathSubscript: 'Subscript',
80
+ mathFraction: 'Fraction',
81
+ mathSqrt: 'Square root',
82
+ mathSum: 'Sum',
83
+ mathProduct: 'Product',
84
+ mathLog: 'Logarithm',
85
+ mathBigO: 'Big O notation',
86
+ mathLe: 'Less than or equal',
87
+ mathGe: 'Greater than or equal',
88
+ mathNe: 'Not equal',
89
+ mathTimes: 'Multiply',
90
+ mathDivide: 'Divide',
91
+ mathIn: 'Element of',
92
+ mathInfinity: 'Infinity',
93
+ mathAlpha: 'Alpha',
94
+ mathTheta: 'Theta',
95
+ mathPi: 'Pi',
96
+ mathArrow: 'Arrow',
97
+ mathCdots: 'Centered ellipsis',
98
+ mathConfirmHint: 'Confirm with ⌘/Ctrl + Enter',
99
+ mathPromptDisplay: 'Math (LaTeX)',
100
+ mathPromptInline: 'Inline math (LaTeX)',
101
+ mathEmpty: 'Enter math',
102
+ placeholder: "Press '/' for commands...",
103
+ uploading: 'Uploading...',
104
+ imageUploadFailed: 'Image upload failed.',
105
+ pdfUploadFailed: 'PDF upload failed.',
106
+ fileUploadFailed: 'File upload failed.',
107
+ characterCount: '{chars} characters · {words} words',
108
+ addImage: 'Add image',
109
+ uploadFile: 'Upload file',
110
+ imageLinkPlaceholder: 'Paste an image link',
111
+ imageEmbed: 'Embed image',
112
+ imageLinkHint: 'Works with any image on the web',
113
+ addFile: 'Add file',
114
+ chooseFile: 'Choose a file',
115
+ fileLinkPlaceholder: 'Paste a file link',
116
+ fileEmbed: 'Embed file',
117
+ imageUrlTitle: 'Enter image URL',
118
+ tableEdit: 'Edit table',
119
+ rowAddAbove: 'Add row above',
120
+ rowAddBelow: 'Add row below',
121
+ colAddLeft: 'Add column left',
122
+ colAddRight: 'Add column right',
123
+ headerRowToggle: 'Toggle header row',
124
+ headerColToggle: 'Toggle header column',
125
+ cellMerge: 'Merge cells',
126
+ cellSplit: 'Split cell',
127
+ lineSpacing: 'Line spacing',
128
+ spacingNarrow: 'Narrow',
129
+ spacingNormal: 'Normal',
130
+ spacingWide: 'Wide',
131
+ widthEqual: 'Equal widths',
132
+ cellBackground: 'Cell background',
133
+ background: 'Background',
134
+ rowDelete: 'Delete row',
135
+ colDelete: 'Delete column',
136
+ tableDelete: 'Delete table',
137
+ bgNone: 'None',
138
+ bgGray: 'Light gray',
139
+ bgBlue: 'Light blue',
140
+ bgGreen: 'Light green',
141
+ bgYellow: 'Light yellow',
142
+ bgOrange: 'Light orange',
143
+ bgRed: 'Light red',
144
+ bgPurple: 'Light purple',
145
+ bgPink: 'Light pink',
146
+ alignLeftShort: 'Left',
147
+ alignCenterShort: 'Center',
148
+ alignRightShort: 'Right',
149
+ mediaToolbar: 'Media size and alignment',
150
+ imageResizeWidth: 'Resize image width',
151
+ videoResizeWidth: 'Resize video width',
152
+ videoResizeHeight: 'Resize video height',
153
+ lectureResizeHeight: 'Resize lecture video height',
154
+ cardResizeHeight: 'Resize card height',
155
+ pdfResizeWidth: 'Resize PDF width',
156
+ cardTitlePlaceholder: 'Card title',
157
+ cardChangeBackground: 'Change background',
158
+ cardBackgroundPrompt: 'Card background (CSS background value)',
159
+ tabDefaultTitle: 'Tab {n}',
160
+ tabRenameTip: 'Double-click to rename',
161
+ tabDelete: 'Delete {title}',
162
+ tabAdd: 'Add tab',
163
+ videoCannotEmbed: 'This browser cannot embed the video here',
164
+ openInNewTab: 'Open in new tab',
165
+ lectureVideo: 'Lecture video',
166
+ lectureEmptySrc: 'Video address is empty',
167
+ legacyYoutube: 'YouTube video',
168
+ legacyIframe: 'Embed',
169
+ legacyColumns: 'Columns',
170
+ legacyNotice: '{kind} (legacy format · not editable)',
171
+ pdfViewerAria: 'PDF document — use left/right arrow keys to turn pages',
172
+ pdfZoom50: '50% of original — thumbnail; text is hard to read',
173
+ pdfZoom75: '75% of original — for figures and charts',
174
+ pdfZoom100: 'Original size (100%)',
175
+ pdfZoom150: '150% of original — comfortable for reading',
176
+ pdfZoomOther: '{label} of original size',
177
+ pdfFitWidth: 'Fit to width — fills the content width',
178
+ pdfFitPage: 'Fit to screen — one page fits the view',
179
+ download: 'Download',
180
+ pdfOpenNewTab: 'Open in new tab',
181
+ pdfOpenNewTabTip: 'Open in new tab — view larger in the browser viewer',
182
+ pdfLoading: 'Loading PDF...',
183
+ pdfPrevPage: 'Previous page',
184
+ pdfNextPage: 'Next page',
185
+ pdfGoToPage: 'Go to page number',
186
+ pdfPageNumber: 'Page number',
187
+ pdfLoadFailed: 'Could not load the PDF.',
188
+ fileSizeLoading: 'loading...',
189
+ detailsExpand: 'Expand details content',
190
+ detailsCollapse: 'Collapse details content'
191
+ };
@@ -0,0 +1,3 @@
1
+ import type { EditorMessages } from './ko';
2
+ export declare const es: EditorMessages;
3
+ //# sourceMappingURL=es.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE3C,eAAO,MAAM,EAAE,EAAE,cA+MhB,CAAC"}
@@ -0,0 +1,191 @@
1
+ export const es = {
2
+ close: 'Cerrar',
3
+ cancel: 'Cancelar',
4
+ confirm: 'Aceptar',
5
+ delete: 'Eliminar',
6
+ insert: 'Insertar',
7
+ upload: 'Subir',
8
+ link: 'Enlace',
9
+ noResult: 'Sin resultados',
10
+ preview: 'Vista previa',
11
+ paragraph: 'Párrafo',
12
+ heading1: 'Título 1',
13
+ heading2: 'Título 2',
14
+ heading3: 'Título 3',
15
+ toggleHeading: 'Título desplegable {level}',
16
+ bulletList: 'Lista con viñetas',
17
+ orderedList: 'Lista numerada',
18
+ taskList: 'Lista de tareas',
19
+ blockquote: 'Cita',
20
+ toggle: 'Desplegable',
21
+ code: 'Código',
22
+ codeBlock: 'Bloque de código',
23
+ math: 'Fórmula',
24
+ mathBlock: 'Bloque matemático',
25
+ mathInline: 'Fórmula en línea',
26
+ table: 'Tabla',
27
+ table3x3: 'Tabla (3x3)',
28
+ divider: 'Divisor',
29
+ columns2: '2 columnas',
30
+ columns3: '3 columnas',
31
+ tabs: 'Pestañas',
32
+ card: 'Tarjeta',
33
+ image: 'Imagen',
34
+ video: 'Video',
35
+ mbusVideo: 'Video de Midibus',
36
+ file: 'Archivo',
37
+ fileAttach: 'Adjuntar archivo',
38
+ pdfFile: 'Archivo PDF',
39
+ undo: 'Deshacer',
40
+ redo: 'Rehacer',
41
+ blockType: 'Tipo de bloque',
42
+ bold: 'Negrita',
43
+ italic: 'Cursiva',
44
+ underline: 'Subrayado',
45
+ strike: 'Tachado',
46
+ alignLeft: 'Alinear a la izquierda',
47
+ alignCenter: 'Centrar',
48
+ alignRight: 'Alinear a la derecha',
49
+ highlight: 'Resaltar',
50
+ textColor: 'Color de texto',
51
+ customColor: 'Personalizado',
52
+ colorDefault: 'Predeterminado',
53
+ colorBlack: 'Negro',
54
+ colorGray: 'Gris',
55
+ colorRed: 'Rojo',
56
+ colorOrange: 'Naranja',
57
+ colorYellow: 'Amarillo',
58
+ colorGreen: 'Verde',
59
+ colorBlue: 'Azul',
60
+ colorPurple: 'Morado',
61
+ videoUrl: 'URL del video',
62
+ mbusVideoUrl: 'URL del video de Midibus',
63
+ promptLinkUrl: 'Introduce la URL del enlace',
64
+ promptImageUrl: 'Introduce la URL de la imagen',
65
+ promptVideoUrl: 'Introduce la URL del video (YouTube, Vimeo, etc.)',
66
+ promptMbusUrl: 'Introduce la URL del video de Midibus',
67
+ sectionFrequent: 'Frecuentes',
68
+ sectionBasic: 'Básicos',
69
+ sectionList: 'Listas',
70
+ sectionBlock: 'Bloques',
71
+ sectionLayout: 'Diseño',
72
+ sectionMedia: 'Multimedia',
73
+ emptyLineTools: 'Herramientas de línea vacía',
74
+ floatingHint: 'Pulsa / para ver comandos',
75
+ floatingHintOr: '. O',
76
+ insertMath: 'Insertar fórmula',
77
+ insertCodeBlock: 'Insertar bloque de código',
78
+ mathSuperscript: 'Superíndice',
79
+ mathSubscript: 'Subíndice',
80
+ mathFraction: 'Fracción',
81
+ mathSqrt: 'Raíz cuadrada',
82
+ mathSum: 'Suma',
83
+ mathProduct: 'Producto',
84
+ mathLog: 'Logaritmo',
85
+ mathBigO: 'Notación Big O',
86
+ mathLe: 'Menor o igual',
87
+ mathGe: 'Mayor o igual',
88
+ mathNe: 'Distinto',
89
+ mathTimes: 'Multiplicación',
90
+ mathDivide: 'División',
91
+ mathIn: 'Pertenece a',
92
+ mathInfinity: 'Infinito',
93
+ mathAlpha: 'Alfa',
94
+ mathTheta: 'Theta',
95
+ mathPi: 'Pi',
96
+ mathArrow: 'Flecha',
97
+ mathCdots: 'Puntos suspensivos centrados',
98
+ mathConfirmHint: 'Confirma con ⌘/Ctrl + Enter',
99
+ mathPromptDisplay: 'Fórmula (LaTeX)',
100
+ mathPromptInline: 'Fórmula en línea (LaTeX)',
101
+ mathEmpty: 'Escribe una fórmula',
102
+ placeholder: "Pulsa '/' para ver comandos...",
103
+ uploading: 'Subiendo...',
104
+ imageUploadFailed: 'Error al subir la imagen.',
105
+ pdfUploadFailed: 'Error al subir el PDF.',
106
+ fileUploadFailed: 'Error al subir el archivo.',
107
+ characterCount: '{chars} caracteres · {words} palabras',
108
+ addImage: 'Añadir imagen',
109
+ uploadFile: 'Subir archivo',
110
+ imageLinkPlaceholder: 'Pega un enlace de imagen',
111
+ imageEmbed: 'Insertar imagen',
112
+ imageLinkHint: 'Compatible con cualquier imagen de la web',
113
+ addFile: 'Añadir archivo',
114
+ chooseFile: 'Selecciona un archivo',
115
+ fileLinkPlaceholder: 'Pega un enlace de archivo',
116
+ fileEmbed: 'Insertar archivo',
117
+ imageUrlTitle: 'Introduce la URL de la imagen',
118
+ tableEdit: 'Editar tabla',
119
+ rowAddAbove: 'Añadir fila arriba',
120
+ rowAddBelow: 'Añadir fila abajo',
121
+ colAddLeft: 'Añadir columna a la izquierda',
122
+ colAddRight: 'Añadir columna a la derecha',
123
+ headerRowToggle: 'Alternar fila de encabezado',
124
+ headerColToggle: 'Alternar columna de encabezado',
125
+ cellMerge: 'Combinar celdas',
126
+ cellSplit: 'Dividir celda',
127
+ lineSpacing: 'Interlineado',
128
+ spacingNarrow: 'Estrecho',
129
+ spacingNormal: 'Normal',
130
+ spacingWide: 'Amplio',
131
+ widthEqual: 'Anchos iguales',
132
+ cellBackground: 'Fondo de celda',
133
+ background: 'Fondo',
134
+ rowDelete: 'Eliminar fila',
135
+ colDelete: 'Eliminar columna',
136
+ tableDelete: 'Eliminar tabla',
137
+ bgNone: 'Ninguno',
138
+ bgGray: 'Gris claro',
139
+ bgBlue: 'Azul claro',
140
+ bgGreen: 'Verde claro',
141
+ bgYellow: 'Amarillo claro',
142
+ bgOrange: 'Naranja claro',
143
+ bgRed: 'Rojo claro',
144
+ bgPurple: 'Morado claro',
145
+ bgPink: 'Rosa claro',
146
+ alignLeftShort: 'Izquierda',
147
+ alignCenterShort: 'Centro',
148
+ alignRightShort: 'Derecha',
149
+ mediaToolbar: 'Tamaño y alineación del medio',
150
+ imageResizeWidth: 'Ajustar ancho de la imagen',
151
+ videoResizeWidth: 'Ajustar ancho del video',
152
+ videoResizeHeight: 'Ajustar altura del video',
153
+ lectureResizeHeight: 'Ajustar altura del video de clase',
154
+ cardResizeHeight: 'Ajustar altura de la tarjeta',
155
+ pdfResizeWidth: 'Ajustar ancho del PDF',
156
+ cardTitlePlaceholder: 'Título de la tarjeta',
157
+ cardChangeBackground: 'Cambiar fondo',
158
+ cardBackgroundPrompt: 'Fondo de la tarjeta (valor CSS background)',
159
+ tabDefaultTitle: 'Pestaña {n}',
160
+ tabRenameTip: 'Doble clic para renombrar',
161
+ tabDelete: 'Eliminar {title}',
162
+ tabAdd: 'Añadir pestaña',
163
+ videoCannotEmbed: 'Este navegador no puede mostrar el video aquí',
164
+ openInNewTab: 'Abrir en una pestaña nueva',
165
+ lectureVideo: 'Video de clase',
166
+ lectureEmptySrc: 'La dirección del video está vacía',
167
+ legacyYoutube: 'Video de YouTube',
168
+ legacyIframe: 'Inserción',
169
+ legacyColumns: 'Columnas',
170
+ legacyNotice: '{kind} (formato antiguo · no editable)',
171
+ pdfViewerAria: 'Documento PDF — usa las flechas izquierda/derecha para pasar páginas',
172
+ pdfZoom50: '50% del original — miniatura; el texto es difícil de leer',
173
+ pdfZoom75: '75% del original — para figuras y tablas',
174
+ pdfZoom100: 'Tamaño original (100%)',
175
+ pdfZoom150: '150% del original — cómodo para leer',
176
+ pdfZoomOther: '{label} del tamaño original',
177
+ pdfFitWidth: 'Ajustar al ancho — llena el ancho del contenido',
178
+ pdfFitPage: 'Ajustar a la pantalla — una página entra en la vista',
179
+ download: 'Descargar',
180
+ pdfOpenNewTab: 'Abrir en una pestaña nueva',
181
+ pdfOpenNewTabTip: 'Abrir en una pestaña nueva — verlo más grande en el visor del navegador',
182
+ pdfLoading: 'Cargando PDF...',
183
+ pdfPrevPage: 'Página anterior',
184
+ pdfNextPage: 'Página siguiente',
185
+ pdfGoToPage: 'Ir a la página',
186
+ pdfPageNumber: 'Número de página',
187
+ pdfLoadFailed: 'No se pudo cargar el PDF.',
188
+ fileSizeLoading: 'cargando...',
189
+ detailsExpand: 'Expandir contenido',
190
+ detailsCollapse: 'Contraer contenido'
191
+ };
@@ -0,0 +1,43 @@
1
+ import { Extension } from '@tiptap/core';
2
+ import { ko, type EditorMessages, type EditorMessageKey } from './ko';
3
+ import { en } from './en';
4
+ import { ja } from './ja';
5
+ import { es } from './es';
6
+ import { zhHans } from './zh-hans';
7
+ import { zhHant } from './zh-hant';
8
+ export type { EditorMessages, EditorMessageKey };
9
+ export { ko, en, ja, es, zhHans, zhHant };
10
+ /** 호스트가 주입하는 값 — 로케일 코드('ko'·'en-US'·'zh-TW'…) 또는 부분 메시지 오버라이드. */
11
+ export type EditorLocaleInput = string | Partial<EditorMessages> | null | undefined;
12
+ /** 번역 함수. `{name}` 자리는 `params` 로 채운다. */
13
+ export type EditorTranslator = (key: EditorMessageKey, params?: Record<string, string | number>) => string;
14
+ /**
15
+ * 번역 함수를 만든다.
16
+ * - 문자열: 로케일 코드로 해석 (미해석 시 ko)
17
+ * - 객체: 부분 오버라이드 — 없는 키는 ko 로 폴백
18
+ * - null/undefined: ko (기존 동작 그대로)
19
+ */
20
+ export declare function createTranslator(locale?: EditorLocaleInput): EditorTranslator;
21
+ /** 미주입 기본 — ko. 확장이 에디터 밖(스토리지 없음)에서 쓰일 때의 폴백이기도 하다. */
22
+ export declare const defaultTranslator: EditorTranslator;
23
+ export interface EditorI18nOptions {
24
+ locale: EditorLocaleInput;
25
+ }
26
+ export interface EditorI18nStorage {
27
+ /** 현재 번역 함수. NodeView 는 `getEditorTranslator(editor)` 로 읽는다. */
28
+ t: EditorTranslator;
29
+ }
30
+ /**
31
+ * 번역 함수를 `editor.storage.editorI18n.t` 에 실어 주는 확장.
32
+ * `TipTapEditor` 가 `locale` prop 으로 등록하지만, 확장을 직접 조립하는 호스트도
33
+ * `EditorI18n.configure({ locale })` 로 같은 효과를 얻는다.
34
+ */
35
+ export declare const EditorI18n: Extension<EditorI18nOptions, EditorI18nStorage>;
36
+ /**
37
+ * vanilla NodeView 용 접근자. 에디터에 `EditorI18n` 이 없으면(단독 사용·구버전 호스트)
38
+ * ko 기본 번역기를 돌려줘 기존 렌더와 동일하게 동작한다.
39
+ */
40
+ export declare function getEditorTranslator(editor: {
41
+ storage?: unknown;
42
+ } | null | undefined): EditorTranslator;
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAE1C,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAEpF,0CAA0C;AAC1C,MAAM,MAAM,gBAAgB,GAAG,CAC9B,GAAG,EAAE,gBAAgB,EACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KACpC,MAAM,CAAC;AA8CZ;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAS7E;AAED,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,EAAE,gBAAqC,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IACjC,gEAAgE;IAChE,CAAC,EAAE,gBAAgB,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,iDAcrB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC9C,gBAAgB,CAKlB"}
@@ -0,0 +1,109 @@
1
+ /*
2
+ * 에디터 UI 문자열 i18n.
3
+ *
4
+ * 구조는 main(trinity `packages/tiptap`의 `editor/i18n`)의 메커니즘을 따르되 이 패키지의
5
+ * 계약에 맞게 두 가지를 바꿨다:
6
+ *
7
+ * 1. **폴백이 ko 다** (main 은 en). 이 패키지는 로케일 없이 쓰이던 기존 호스트
8
+ * (jungol 0.10.7 · codepass 0.10.2)와의 **픽셀 단위 하위호환**이 절대 조건이라,
9
+ * 미주입·미해석 로케일·미정의 키 전부 ko 로 떨어진다. `navigator.language` 도
10
+ * 읽지 않는다 — 같은 이유다(브라우저 언어에 따라 미주입 화면이 달라지면 안 된다).
11
+ * 2. **vanilla NodeView 접근 경로.** Svelte 컨텍스트는 확장(PdfBlock·TabsBlock 등
12
+ * vanilla DOM NodeView)까지 닿지 않으므로, `EditorI18n` 확장이 번역 함수를
13
+ * `editor.storage.editorI18n.t` 에 실어 두고 NodeView 는 `getEditorTranslator(editor)`
14
+ * 로 꺼낸다. 확장을 단독으로 쓰는 호스트(스토리지 없음)는 ko 폴백을 받는다.
15
+ *
16
+ * 사전은 6개 로케일 전부 정적 import 다 — 근거: (1) 문자열이 읽기 전용 경로(PDF 뷰어·
17
+ * 파일 첨부 등 정적 import 확장)에도 살아 있어 지연 로딩이면 ko 가 먼저 찍혔다가 바뀌는
18
+ * 깜빡임이 생기고, (2) 전체 원문 크기가 로케일당 ~4KB(6개 ~25KB raw, gzip 한 자릿수 KB)로
19
+ * 패키지가 이미 끄는 그래프(2.06MB raw)의 1% 남짓이라 분리 비용이 이득을 넘는다.
20
+ */
21
+ import { Extension } from '@tiptap/core';
22
+ import { ko } from './ko';
23
+ import { en } from './en';
24
+ import { ja } from './ja';
25
+ import { es } from './es';
26
+ import { zhHans } from './zh-hans';
27
+ import { zhHant } from './zh-hant';
28
+ export { ko, en, ja, es, zhHans, zhHant };
29
+ const LOCALES = {
30
+ ko,
31
+ en,
32
+ ja,
33
+ es,
34
+ 'zh-hans': zhHans,
35
+ 'zh-hant': zhHant
36
+ };
37
+ /*
38
+ * 로케일 코드 정규화 — main 과 같은 규칙. `_` → `-`, 소문자화, 중국어는 문자 체계로
39
+ * 이분한다(hant·TW·HK·MO → hant, 나머지 → hans).
40
+ */
41
+ function normalizeLocaleCode(value) {
42
+ const normalized = value.trim().replace(/_/g, '-').toLowerCase();
43
+ if (!normalized.startsWith('zh'))
44
+ return normalized;
45
+ if (normalized.includes('hant') ||
46
+ normalized.startsWith('zh-tw') ||
47
+ normalized.startsWith('zh-hk') ||
48
+ normalized.startsWith('zh-mo')) {
49
+ return 'zh-hant';
50
+ }
51
+ return 'zh-hans';
52
+ }
53
+ /** 코드 → 사전. 정확 일치 → 첫 서브태그 일치('en-GB'→en) → **ko**(하위호환 폴백). */
54
+ function messagesForCode(code) {
55
+ const normalized = normalizeLocaleCode(code);
56
+ if (!normalized)
57
+ return ko;
58
+ const exact = LOCALES[normalized];
59
+ if (exact)
60
+ return exact;
61
+ const primary = normalized.split('-')[0];
62
+ return LOCALES[primary] ?? ko;
63
+ }
64
+ function interpolate(template, params) {
65
+ if (!params)
66
+ return template;
67
+ return template.replace(/\{(\w+)\}/g, (match, name) => name in params ? String(params[name]) : match);
68
+ }
69
+ /**
70
+ * 번역 함수를 만든다.
71
+ * - 문자열: 로케일 코드로 해석 (미해석 시 ko)
72
+ * - 객체: 부분 오버라이드 — 없는 키는 ko 로 폴백
73
+ * - null/undefined: ko (기존 동작 그대로)
74
+ */
75
+ export function createTranslator(locale) {
76
+ const overrides = locale && typeof locale === 'object' ? locale : null;
77
+ const messages = typeof locale === 'string' ? messagesForCode(locale) : ko;
78
+ return (key, params) => {
79
+ const template = overrides?.[key] ?? messages[key] ?? ko[key] ?? key;
80
+ return interpolate(template, params);
81
+ };
82
+ }
83
+ /** 미주입 기본 — ko. 확장이 에디터 밖(스토리지 없음)에서 쓰일 때의 폴백이기도 하다. */
84
+ export const defaultTranslator = createTranslator();
85
+ /**
86
+ * 번역 함수를 `editor.storage.editorI18n.t` 에 실어 주는 확장.
87
+ * `TipTapEditor` 가 `locale` prop 으로 등록하지만, 확장을 직접 조립하는 호스트도
88
+ * `EditorI18n.configure({ locale })` 로 같은 효과를 얻는다.
89
+ */
90
+ export const EditorI18n = Extension.create({
91
+ name: 'editorI18n',
92
+ addOptions() {
93
+ return { locale: null };
94
+ },
95
+ addStorage() {
96
+ return { t: defaultTranslator };
97
+ },
98
+ onBeforeCreate() {
99
+ this.storage.t = createTranslator(this.options.locale);
100
+ }
101
+ });
102
+ /**
103
+ * vanilla NodeView 용 접근자. 에디터에 `EditorI18n` 이 없으면(단독 사용·구버전 호스트)
104
+ * ko 기본 번역기를 돌려줘 기존 렌더와 동일하게 동작한다.
105
+ */
106
+ export function getEditorTranslator(editor) {
107
+ const storage = editor?.storage;
108
+ return storage?.editorI18n?.t ?? defaultTranslator;
109
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/i18n/index.test.ts"],"names":[],"mappings":""}