tiptapify 0.3.5 → 0.4.1

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 (137) hide show
  1. package/dist/content.css +28 -0
  2. package/dist/tiptapify.css +1 -1
  3. package/dist/tiptapify.mjs +110770 -65623
  4. package/dist/tiptapify.umd.js +106 -89
  5. package/index.d.ts +37 -0
  6. package/package.json +3 -2
  7. package/src/components/ImageBubbleMenu.vue +5 -33
  8. package/src/components/MenuBubble.test.ts +120 -0
  9. package/src/components/MenuBubble.vue +124 -134
  10. package/src/components/MenuFloating.vue +48 -45
  11. package/src/components/Tiptapify.upload.test.ts +10 -0
  12. package/src/components/Tiptapify.vue +85 -45
  13. package/src/components/Toolbar/Index.vue +10 -0
  14. package/src/components/UI/BubbleRow.vue +41 -0
  15. package/src/components/UI/TiptapifyDialog.test.ts +37 -3
  16. package/src/components/UI/TiptapifyDialog.vue +15 -4
  17. package/src/components/editorExtensions.test.ts +9 -0
  18. package/src/components/editorExtensions.ts +21 -1
  19. package/src/composables/fakeUploadEndpoint.ts +65 -0
  20. package/src/composables/useTiptapifyConfig.ts +19 -0
  21. package/src/composables/useTiptapifyLinkPreview.test.ts +51 -0
  22. package/src/composables/useTiptapifyLinkPreview.ts +60 -0
  23. package/src/composables/useTiptapifyUpload.test.ts +96 -0
  24. package/src/composables/useTiptapifyUpload.ts +126 -0
  25. package/src/extensions/components/ai/Dialog.test.ts +335 -0
  26. package/src/extensions/components/ai/Dialog.vue +607 -310
  27. package/src/extensions/components/ai/backend.test.ts +1 -0
  28. package/src/extensions/components/ai/backend.ts +2 -1
  29. package/src/extensions/components/ai/context.test.ts +149 -0
  30. package/src/extensions/components/ai/context.ts +145 -0
  31. package/src/extensions/components/ai/diff.test.ts +65 -0
  32. package/src/extensions/components/ai/diff.ts +120 -0
  33. package/src/extensions/components/ai/errors.test.ts +45 -0
  34. package/src/extensions/components/ai/errors.ts +67 -0
  35. package/src/extensions/components/ai/result.test.ts +144 -0
  36. package/src/extensions/components/ai/result.ts +101 -0
  37. package/src/extensions/components/ai/thinking.test.ts +45 -0
  38. package/src/extensions/components/ai/thinking.ts +58 -0
  39. package/src/extensions/components/formatExtra/sub/Button.vue +1 -1
  40. package/src/extensions/components/formatExtra/sup/Button.vue +1 -1
  41. package/src/extensions/components/media/iframe/Button.vue +6 -7
  42. package/src/extensions/components/media/iframe/IframeDialog.test.ts +177 -0
  43. package/src/extensions/components/media/iframe/IframeDialog.vue +477 -105
  44. package/src/extensions/components/media/iframe/embed.test.ts +123 -0
  45. package/src/extensions/components/media/iframe/embed.ts +236 -0
  46. package/src/extensions/components/media/iframe/index.test.ts +123 -0
  47. package/src/extensions/components/media/iframe/index.ts +92 -10
  48. package/src/extensions/components/media/image/ImageDialog.vue +430 -132
  49. package/src/extensions/components/media/image/caption.test.ts +66 -1
  50. package/src/extensions/components/media/image/caption.ts +27 -1
  51. package/src/extensions/components/media/image/imageDialog.test.ts +210 -0
  52. package/src/extensions/components/media/image/imageDialog.ts +117 -0
  53. package/src/extensions/components/media/image/index.ts +2 -1
  54. package/src/extensions/components/media/link/Button.test.ts +96 -0
  55. package/src/extensions/components/media/link/Button.vue +6 -2
  56. package/src/extensions/components/media/link/LinkDialog.display.test.ts +363 -0
  57. package/src/extensions/components/media/link/LinkDialog.vue +687 -61
  58. package/src/extensions/components/media/link/index.ts +111 -6
  59. package/src/extensions/components/media/link/link.marks.test.ts +89 -0
  60. package/src/extensions/components/media/link/linkDialog.test.ts +296 -0
  61. package/src/extensions/components/media/link/linkDialog.ts +154 -0
  62. package/src/extensions/components/media/linkCard/PasteCardMenu.test.ts +133 -0
  63. package/src/extensions/components/media/linkCard/PasteCardMenu.vue +168 -0
  64. package/src/extensions/components/media/linkCard/index.test.ts +146 -0
  65. package/src/extensions/components/media/linkCard/index.ts +177 -0
  66. package/src/extensions/components/media/linkCard/linkCardDialog.test.ts +87 -0
  67. package/src/extensions/components/media/linkCard/linkCardDialog.ts +62 -0
  68. package/src/extensions/components/media/linkCard/linkPreview.test.ts +102 -0
  69. package/src/extensions/components/media/linkCard/linkPreview.ts +84 -0
  70. package/src/extensions/components/media/linkCard/makeLinkCard.test.ts +59 -0
  71. package/src/extensions/components/media/linkCard/makeLinkCard.ts +58 -0
  72. package/src/extensions/components/media/linkCard/pasteCard.test.ts +190 -0
  73. package/src/extensions/components/media/linkCard/pasteCard.ts +153 -0
  74. package/src/extensions/components/media/video/Button.vue +2 -1
  75. package/src/extensions/components/media/video/VideoDialog.test.ts +233 -0
  76. package/src/extensions/components/media/video/VideoDialog.vue +748 -59
  77. package/src/extensions/components/media/video/index.test.ts +154 -0
  78. package/src/extensions/components/media/video/index.ts +70 -5
  79. package/src/extensions/components/media/video/providers.test.ts +148 -0
  80. package/src/extensions/components/media/video/providers.ts +241 -0
  81. package/src/extensions/components/media/video/videoFile.test.ts +98 -0
  82. package/src/extensions/components/media/video/videoFile.ts +142 -0
  83. package/src/extensions/components/misc/fullscreen/Button.test.ts +55 -0
  84. package/src/extensions/components/misc/fullscreen/Button.vue +2 -2
  85. package/src/extensions/components/style/StyleColor.test.ts +255 -0
  86. package/src/extensions/components/style/StyleColor.vue +358 -208
  87. package/src/extensions/components/style/color/Button.vue +1 -3
  88. package/src/extensions/components/style/color/colors.test.ts +191 -0
  89. package/src/extensions/components/style/color/colors.ts +168 -0
  90. package/src/extensions/components/style/highlight/Button.vue +1 -3
  91. package/src/i18n/locales/ar.json +226 -23
  92. package/src/i18n/locales/bg.json +225 -22
  93. package/src/i18n/locales/ch.json +226 -23
  94. package/src/i18n/locales/cz.json +226 -23
  95. package/src/i18n/locales/de.json +226 -23
  96. package/src/i18n/locales/el.json +225 -22
  97. package/src/i18n/locales/en.json +225 -22
  98. package/src/i18n/locales/es.json +226 -23
  99. package/src/i18n/locales/et.json +225 -22
  100. package/src/i18n/locales/fi.json +226 -23
  101. package/src/i18n/locales/fr.json +226 -23
  102. package/src/i18n/locales/he.json +225 -22
  103. package/src/i18n/locales/hi.json +225 -22
  104. package/src/i18n/locales/hr.json +225 -22
  105. package/src/i18n/locales/hu.json +226 -23
  106. package/src/i18n/locales/id.json +225 -22
  107. package/src/i18n/locales/it.json +226 -23
  108. package/src/i18n/locales/ja.json +226 -23
  109. package/src/i18n/locales/ko.json +226 -23
  110. package/src/i18n/locales/la.json +226 -23
  111. package/src/i18n/locales/lt.json +226 -23
  112. package/src/i18n/locales/nl.json +226 -23
  113. package/src/i18n/locales/no.json +227 -24
  114. package/src/i18n/locales/pl.json +226 -23
  115. package/src/i18n/locales/pt-BR.json +225 -22
  116. package/src/i18n/locales/pt.json +226 -23
  117. package/src/i18n/locales/ro.json +225 -22
  118. package/src/i18n/locales/ru.json +227 -24
  119. package/src/i18n/locales/se.json +226 -23
  120. package/src/i18n/locales/sk.json +225 -22
  121. package/src/i18n/locales/sl.json +225 -22
  122. package/src/i18n/locales/sr.json +225 -22
  123. package/src/i18n/locales/th.json +226 -23
  124. package/src/i18n/locales/tr.json +226 -23
  125. package/src/i18n/locales/uk.json +227 -24
  126. package/src/i18n/locales/vi.json +226 -23
  127. package/src/index.ts +10 -0
  128. package/src/skins/registry.test.ts +1 -1
  129. package/src/skins/tokens.reachability.test.ts +1 -0
  130. package/src/skins/tokens.ts +3 -3
  131. package/src/types/editor.ts +40 -1
  132. package/src/utils/contentStyles.test.ts +116 -0
  133. package/src/utils/contentStyles.ts +175 -0
  134. package/src/utils/mediaSize.test.ts +22 -0
  135. package/src/utils/mediaSize.ts +27 -0
  136. package/src/utils/validateHref.test.ts +47 -2
  137. package/src/utils/validateHref.ts +47 -7
@@ -4,7 +4,20 @@
4
4
  "undo": "Visszavonás"
5
5
  },
6
6
  "ai": {
7
+ "another_version": "Másik változat",
7
8
  "append": "Hozzáadás a végéhez",
9
+ "change_vs_original": "{percent} az eredetihez képest",
10
+ "changes": "Változások",
11
+ "context": {
12
+ "characters": "{n} karakter",
13
+ "cursor": "A kurzornál",
14
+ "document": "Teljes szöveg",
15
+ "excerpt": "„{text}”",
16
+ "paragraphs": "{n} bekezdés",
17
+ "selection": "Kijelölve: {paragraphs}, {characters}"
18
+ },
19
+ "copied": "Másolva",
20
+ "copy": "Másolás",
8
21
  "defaultExamples": {
9
22
  "expand": {
10
23
  "prompt": "Bővítse ezt a szöveget egy részletesebb változattá.",
@@ -23,19 +36,58 @@
23
36
  "title": "Összefoglalás"
24
37
  }
25
38
  },
39
+ "effort_label": {
40
+ "default": "Szint: alapértelmezett",
41
+ "high": "Szint: magas",
42
+ "low": "Szint: alacsony",
43
+ "max": "Szint: maximális",
44
+ "medium": "Szint: közepes",
45
+ "xhigh": "Szint: nagyon magas"
46
+ },
47
+ "effort_levels": {
48
+ "default": "Alapértelmezett",
49
+ "high": "Magas",
50
+ "low": "Alacsony",
51
+ "max": "Maximális",
52
+ "medium": "Közepes",
53
+ "xhigh": "Nagyon magas"
54
+ },
26
55
  "error": "Az MI generálás sikertelen volt",
56
+ "errors": {
57
+ "auth": "Az MI-szolgáltatás elutasította a kérést: ellenőrizze az API-kulcsot vagy a hozzáférési jogokat.",
58
+ "network": "Nem sikerült elérni az MI-szolgáltatást. Ellenőrizze, hogy fut-e, és engedi-e a kéréseket erről az oldalról (CORS): az ok a böngésző konzoljában látható.",
59
+ "not_found": "Az MI-szolgáltatás címe nem található: ellenőrizze a végpont elérési útját.",
60
+ "rate_limit": "Túl sok kérés az MI-szolgáltatás felé. Várjon egy kicsit, majd próbálja újra.",
61
+ "request": "Az MI-szolgáltatás nem tudta feldolgozni a kérést.",
62
+ "service_says": "A szolgáltatás válasza:",
63
+ "timeout": "Az MI-szolgáltatás nem válaszolt időben. Próbálja újra.",
64
+ "unavailable": "Az MI-szolgáltatás nem érhető el: lehet, hogy modellt tölt be vagy foglalt. Próbálja később."
65
+ },
27
66
  "generate": "Generálás",
28
67
  "insert": "Beillesztés",
29
- "limit_exceeded": "Az eredmény meghaladja a szerkesztő karakterlimitjét. Rövidítsd a szöveget és alkalmazd újra.",
68
+ "insert_below": "Beszúrás alá",
69
+ "limit_exceeded": "Az eredmény meghaladja a szerkesztő karakterkorlátját. Kérj rövidebb változatot.",
30
70
  "loading": "Generálás folyamatban...",
31
71
  "prompt": "Kérés",
72
+ "prompt_placeholder": "Kérd meg, hogy írja meg vagy szerkessze a szöveget",
32
73
  "quick_prompts": "Gyors kérések",
33
74
  "reasoning_effort": "Gondolkodási mérték",
34
- "replace": "Csere",
75
+ "replace_selection": "Kijelölés cseréje",
35
76
  "result": "Eredmény",
77
+ "send_hint": "Enter — küldés",
36
78
  "stop": "Leállítás",
37
79
  "thinking": "Gondolkodás",
38
- "title": "AI írás",
80
+ "thinking_label": {
81
+ "off": "Gondolkodás: ki",
82
+ "on": "Gondolkodás: be"
83
+ },
84
+ "thinking_now": "Gondolkodik…",
85
+ "thinking_states": {
86
+ "off": "Ki",
87
+ "on": "Be"
88
+ },
89
+ "thought_for": "Gondolkodási idő: {seconds} mp",
90
+ "title": "Asszisztens",
39
91
  "unavailable": "Állítson be egy MI-szolgáltatót a művelet használatához"
40
92
  },
41
93
  "alignment": "Igazítás",
@@ -51,50 +103,163 @@
51
103
  "defaultValue": "Alapértelmezett érték",
52
104
  "dialog": {
53
105
  "apply": "Alkalmazás",
106
+ "cancel": "Mégse",
54
107
  "clear": "Törlés",
55
108
  "close": "Bezárás",
56
109
  "iframe": {
57
- "dialog_title": "Keretlap hozzáadása/szerkesztése",
58
- "frameborder": "Kerethatár",
110
+ "advanced": "Speciális",
111
+ "allow": "Engedélyek (allow)",
112
+ "allow_hint": "Például: autoplay; fullscreen; clipboard-write",
113
+ "apply_failed": "A beágyazás ide nem szúrható be.",
114
+ "border": "Szegély megjelenítése",
115
+ "code_invalid": "Egyetlen, címet tartalmazó iframe kódját illeszd be. A szkripteket vagy más címkéket tartalmazó kódok nem támogatottak.",
116
+ "code_parsed": "Kód felismerve: {fields}.",
59
117
  "height": "Magasság",
118
+ "input": "Hivatkozás vagy beágyazási kód",
119
+ "input_hint": "Illeszd be a címet vagy az iframe-kódot a webhely Megosztás vagy Beágyazás menüjéből.",
120
+ "keep_ratio": "Arány megtartása",
121
+ "lazy": "Betöltés, amikor görgetéssel láthatóvá válik",
60
122
  "name": "Név",
61
- "src": "Forrás",
62
- "src_invalid": "A megadott URL érvénytelen",
63
- "title": "Cím",
123
+ "parsed_allow": "engedélyek",
124
+ "parsed_fullscreen": "teljes képernyő",
125
+ "parsed_loading": "késleltetett betöltés",
126
+ "parsed_name": "név",
127
+ "parsed_sandbox": "sandbox",
128
+ "parsed_size": "méret {width} × {height}",
129
+ "parsed_src": "webcím",
130
+ "parsed_title": "cím",
131
+ "preview": "Beágyazás előnézete",
132
+ "preview_empty": "Az előnézet akkor jelenik meg, ha a cím érvényes.",
133
+ "sandbox": "Sandbox",
134
+ "sandbox_hint": "Üres: nincs korlátozás. Például: allow-scripts allow-same-origin",
135
+ "size": "Méret",
136
+ "size_custom": "Egyéni",
137
+ "size_invalid": "Add meg a méretet pixelben.",
138
+ "size_responsive": "Reszponzív",
139
+ "size_responsive_hint": "Kitölti a szöveg szélességét {ratio} arányban.",
140
+ "src_invalid": "A beágyazáshoz https:// vagy http:// kezdetű webcím szükséges.",
141
+ "src_protocol": "Add hozzá a protokollt a címhez: https:// vagy http://.",
142
+ "src_required": "Illessz be egy hivatkozást vagy beágyazási kódot.",
143
+ "title_edit": "Beágyazás szerkesztése",
144
+ "title_insert": "Tartalom beágyazása",
145
+ "title_missing": "A képernyőolvasók a beágyazást a címe alapján jelentik be. Írd le, mit mutat.",
146
+ "title_text": "Cím képernyőolvasóknak",
64
147
  "width": "Szélesség"
65
148
  },
66
149
  "image": {
67
- "alt": "Alternatív szöveg",
150
+ "alt_missing": "A képernyőolvasók és a keresők nem tudják értelmezni a helyettesítő szöveg nélküli képet.",
151
+ "alt_text": "Helyettesítő szöveg képernyőolvasóknak",
152
+ "apply_error": "A képet nem sikerült ide menteni.",
68
153
  "caption": "Képaláírás",
69
154
  "caption_placeholder": "Képaláírás hozzáadása…",
70
- "dialog_title": "Kép hozzáadása/szerkesztése",
71
155
  "height": "Magasság",
72
156
  "keep_ratio": "Arány megtartása",
157
+ "original_size": "Eredeti {width} × {height}",
158
+ "position": "Elhelyezés",
159
+ "position_center": "Középen",
160
+ "position_left": "Balra",
161
+ "position_right": "Jobbra",
162
+ "remove_error": "A képet nem sikerült eltávolítani.",
163
+ "size": "Méret",
164
+ "size_custom": "Egyéni",
165
+ "size_original": "Eredeti",
166
+ "size_text": "Szövegszélesség",
167
+ "source_upload": "Feltöltés",
168
+ "source_url": "URL alapján",
73
169
  "src": "Forrás",
74
- "title": "Cím",
170
+ "title_edit": "Kép szerkesztése",
171
+ "title_insert": "Kép beszúrása",
172
+ "upload_cancel": "Feltöltés megszakítása",
173
+ "upload_error": "A képet nem sikerült feltölteni.",
174
+ "upload_file": "Képfájl",
75
175
  "width": "Szélesség"
76
176
  },
177
+ "insert": "Beszúrás",
77
178
  "link": {
179
+ "advanced": "Speciális",
180
+ "apply_error": "A hivatkozást nem sikerült alkalmazni.",
78
181
  "class": "CSS osztály",
79
182
  "href": "Hivatkozás címe",
80
- "href_error": "Érvénytelen hivatkozáscím",
81
- "rel": "rel",
82
- "target": "Megnyitás...",
83
- "target_blank": "Új ablakban",
84
- "target_self": "Jelenlegi ablakban",
85
- "title": "Hivatkozás hozzáadása/szerkesztése"
183
+ "href_invalid": "Adjon meg egy hivatkozáscímet, például https://example.com, #horgony vagy /oldal.",
184
+ "new_tab": "Megnyitás új lapon",
185
+ "protocol_missing": "Nincs protokoll. Hozzáadás:",
186
+ "rel": "Rel attribútumok",
187
+ "rel_hint": "Bármilyen érték: az Enter, a szóköz vagy a vessző hozzáadja.",
188
+ "rel_new_tab_hint": "Az új lapon megnyíló hivatkozás a noopener és noreferrer értéket is megkapja.",
189
+ "remove": "Hivatkozás eltávolítása",
190
+ "text": "Szöveg",
191
+ "text_hint": "Hagyja üresen, ha a címet szeretné szövegként használni.",
192
+ "title_edit": "Hivatkozás szerkesztése",
193
+ "title_insert": "Hivatkozás beszúrása"
194
+ },
195
+ "linkCard": {
196
+ "apply_failed": "A kártya ide nem szúrható be.",
197
+ "description": "Leírás",
198
+ "display": "Megjelenítés mint",
199
+ "display_card": "Kártya",
200
+ "display_link": "Hivatkozás",
201
+ "fetch_failed": "Az oldal adatait nem sikerült betölteni: {error}. A mezőket kézzel is kitöltheti.",
202
+ "href_invalid": "Adja meg egy oldal teljes címét, például https://example.com/page.",
203
+ "image": "Kép",
204
+ "image_choose": "Kép kiválasztása",
205
+ "image_failed": "A képet nem sikerült feltölteni. Próbálja újra.",
206
+ "image_remove": "Kép eltávolítása",
207
+ "image_replace": "Csere",
208
+ "layout": "Megjelenítés",
209
+ "layout_compact": "Kompakt",
210
+ "layout_large": "Nagy",
211
+ "layout_text": "Kép nélkül",
212
+ "loading": "Az oldal adatainak betöltése…",
213
+ "page_title": "Cím",
214
+ "paste_dismiss": "Hivatkozás megtartása",
215
+ "paste_error": "Ehhez az oldalhoz nincs előnézet.",
216
+ "protocol_missing": "A címet https:// vagy http:// előtaggal kezdje.",
217
+ "refresh": "Adatok frissítése",
218
+ "site_name": "Webhely neve",
219
+ "title_edit": "Hivatkozáskártya szerkesztése",
220
+ "title_insert": "Hivatkozáskártya beszúrása"
86
221
  },
87
222
  "preview": {
88
223
  "title": "Előnézet"
89
224
  },
225
+ "remove": "Eltávolítás",
226
+ "save": "Mentés",
90
227
  "source": {
91
228
  "prettify": "Szépítés",
92
229
  "title": "Forráskód megjelenítése"
93
230
  },
94
231
  "video": {
232
+ "apply_failed": "A videó ide nem szúrható be.",
233
+ "autoplay": "Automatikus lejátszás némítva",
234
+ "controls": "Vezérlők megjelenítése",
95
235
  "height": "Magasság",
96
- "src": "Forrás",
97
- "title": "Videó hozzáadása/szerkesztése",
236
+ "keep_ratio": "Arány megtartása",
237
+ "loop": "Ismétlés",
238
+ "poster": "Borítókép",
239
+ "poster_choose": "Kép kiválasztása",
240
+ "poster_hint": "Nem kötelező. A videó indulásáig látható.",
241
+ "poster_url": "Borítókép URL-je",
242
+ "preview": "Videó előnézete",
243
+ "preview_empty": "Az előnézet akkor jelenik meg, amikor a hivatkozás felismerhető.",
244
+ "size": "Méret",
245
+ "size_custom": "Egyéni",
246
+ "size_invalid": "A méretet képpontban adja meg.",
247
+ "size_responsive": "Reszponzív",
248
+ "size_responsive_embed": "Reszponzív 16:9",
249
+ "source_upload": "Feltöltés",
250
+ "source_url": "URL alapján",
251
+ "start": "Kezdés",
252
+ "start_invalid": "Az időt m:ss vagy h:mm:ss formában adja meg.",
253
+ "title_edit": "Videó szerkesztése",
254
+ "title_insert": "Videó beszúrása",
255
+ "upload_choose": "Válasszon videofájlt",
256
+ "upload_failed": "A fájlt nem sikerült feltölteni. Próbálja újra.",
257
+ "upload_progress": "{loaded} / {total} MB",
258
+ "upload_replace": "Csere",
259
+ "url": "Videó hivatkozása",
260
+ "url_file_protocol": "Adja meg a protokollt a fájl hivatkozásában: https:// vagy http://.",
261
+ "url_required": "Illesszen be egy YouTube-, Vimeo- vagy videófájl-hivatkozást.",
262
+ "url_unsupported": "Használjon YouTube- vagy Vimeo-hivatkozást, vagy videófájlra mutató hivatkozást (.mp4, .webm, .ogg, .mov). Más oldalakhoz használja a beágyazási kódot.",
98
263
  "width": "Szélesség"
99
264
  }
100
265
  },
@@ -171,7 +336,7 @@
171
336
  "search": "Emoji keresése...",
172
337
  "title": "Emotikon"
173
338
  },
174
- "iframe": "keretlap",
339
+ "iframe": "Beágyazás",
175
340
  "image": "Kép",
176
341
  "image_toolbar": {
177
342
  "align_left": "Align left",
@@ -212,10 +377,48 @@
212
377
  },
213
378
  "style": {
214
379
  "color": {
215
- "custom": "Egyéni választás",
380
+ "custom": "Egyéni szín",
381
+ "default": "Alapértelmezett",
382
+ "eyedropper": "Szín felvétele a képernyőről",
383
+ "hex": "Hexadecimális szín",
384
+ "hex_invalid": "Adj meg egy színt #rgb vagy #rrggbb formátumban.",
216
385
  "highlight": "Kiemelés színe",
217
- "text": "Szöveg színe",
218
- "unset": "Szín eltávolítása"
386
+ "names": {
387
+ "amber": "Borostyán",
388
+ "black": "Fekete",
389
+ "blue": "Kék",
390
+ "dark_amber": "Sötétborostyán",
391
+ "dark_blue": "Sötétkék",
392
+ "dark_green": "Sötétzöld",
393
+ "dark_grey": "Sötétszürke",
394
+ "dark_orange": "Sötétnarancs",
395
+ "dark_pink": "Sötétrózsaszín",
396
+ "dark_purple": "Sötétlila",
397
+ "dark_red": "Sötétpiros",
398
+ "dark_teal": "Sötétkékeszöld",
399
+ "green": "Zöld",
400
+ "grey": "Szürke",
401
+ "light_amber": "Világosborostyán",
402
+ "light_blue": "Világoskék",
403
+ "light_green": "Világoszöld",
404
+ "light_grey": "Világosszürke",
405
+ "light_orange": "Világosnarancs",
406
+ "light_pink": "Világosrózsaszín",
407
+ "light_purple": "Világoslila",
408
+ "light_red": "Világospiros",
409
+ "light_teal": "Világoskékeszöld",
410
+ "medium_grey": "Középszürke",
411
+ "orange": "Narancs",
412
+ "pale_grey": "Halványszürke",
413
+ "pink": "Rózsaszín",
414
+ "purple": "Lila",
415
+ "red": "Piros",
416
+ "teal": "Kékeszöld",
417
+ "white": "Fehér"
418
+ },
419
+ "no_highlight": "Nincs kiemelés",
420
+ "recent": "Legutóbbiak",
421
+ "text": "Szöveg színe"
219
422
  },
220
423
  "fontFamily": "Betűtípus-család",
221
424
  "fontSize": "Betűméret",
@@ -4,7 +4,20 @@
4
4
  "undo": "Urungkan"
5
5
  },
6
6
  "ai": {
7
+ "another_version": "Versi lain",
7
8
  "append": "Tambahkan di akhir",
9
+ "change_vs_original": "{percent} dibanding aslinya",
10
+ "changes": "Perubahan",
11
+ "context": {
12
+ "characters": "{n} karakter",
13
+ "cursor": "Di posisi kursor",
14
+ "document": "Seluruh teks",
15
+ "excerpt": "“{text}”",
16
+ "paragraphs": "{n} paragraf",
17
+ "selection": "Dipilih: {paragraphs}, {characters}"
18
+ },
19
+ "copied": "Disalin",
20
+ "copy": "Salin",
8
21
  "defaultExamples": {
9
22
  "expand": {
10
23
  "prompt": "Perluas teks ini menjadi versi yang lebih detail.",
@@ -23,19 +36,58 @@
23
36
  "title": "Ringkas"
24
37
  }
25
38
  },
39
+ "effort_label": {
40
+ "default": "Tingkat: default",
41
+ "high": "Tingkat: tinggi",
42
+ "low": "Tingkat: rendah",
43
+ "max": "Tingkat: maksimum",
44
+ "medium": "Tingkat: sedang",
45
+ "xhigh": "Tingkat: sangat tinggi"
46
+ },
47
+ "effort_levels": {
48
+ "default": "Default",
49
+ "high": "Tinggi",
50
+ "low": "Rendah",
51
+ "max": "Maksimum",
52
+ "medium": "Sedang",
53
+ "xhigh": "Sangat tinggi"
54
+ },
26
55
  "error": "Pembuatan AI gagal",
56
+ "errors": {
57
+ "auth": "Layanan AI menolak permintaan: periksa kunci API atau hak akses.",
58
+ "network": "Tidak dapat menghubungi layanan AI. Periksa apakah layanan berjalan dan mengizinkan permintaan dari halaman ini (CORS): konsol browser menunjukkan penyebabnya.",
59
+ "not_found": "Alamat layanan AI tidak ditemukan: periksa jalur endpoint.",
60
+ "rate_limit": "Terlalu banyak permintaan ke layanan AI. Tunggu sebentar lalu coba lagi.",
61
+ "request": "Layanan AI tidak dapat memproses permintaan.",
62
+ "service_says": "Respons layanan:",
63
+ "timeout": "Layanan AI tidak menjawab tepat waktu. Coba lagi.",
64
+ "unavailable": "Layanan AI tidak tersedia: mungkin sedang memuat model atau sibuk. Coba lagi nanti."
65
+ },
27
66
  "generate": "Hasilkan",
28
67
  "insert": "Sisipkan",
29
- "limit_exceeded": "Hasil melebihi batas karakter editor. Singkatkan teks dan terapkan kembali.",
68
+ "insert_below": "Sisipkan di bawah",
69
+ "limit_exceeded": "Hasilnya melebihi batas karakter editor. Minta versi yang lebih pendek.",
30
70
  "loading": "Membuat...",
31
71
  "prompt": "Prompt",
72
+ "prompt_placeholder": "Minta untuk menulis atau mengedit teks",
32
73
  "quick_prompts": "Prompt cepat",
33
74
  "reasoning_effort": "Usaha penalaran",
34
- "replace": "Ganti",
75
+ "replace_selection": "Ganti pilihan",
35
76
  "result": "Hasil",
77
+ "send_hint": "Enter — kirim",
36
78
  "stop": "Hentikan",
37
79
  "thinking": "Berpikir",
38
- "title": "Penulisan AI",
80
+ "thinking_label": {
81
+ "off": "Penalaran: nonaktif",
82
+ "on": "Penalaran: aktif"
83
+ },
84
+ "thinking_now": "Berpikir…",
85
+ "thinking_states": {
86
+ "off": "Nonaktif",
87
+ "on": "Aktif"
88
+ },
89
+ "thought_for": "Berpikir selama {seconds} dtk",
90
+ "title": "Asisten",
39
91
  "unavailable": "Konfigurasikan penyedia AI untuk menggunakan tindakan ini"
40
92
  },
41
93
  "alignment": "Perataan",
@@ -51,50 +103,163 @@
51
103
  "defaultValue": "Nilai bawaan",
52
104
  "dialog": {
53
105
  "apply": "Terapkan",
106
+ "cancel": "Batal",
54
107
  "clear": "Bersihkan",
55
108
  "close": "Tutup",
56
109
  "iframe": {
57
- "dialog_title": "Tambah/sunting iframe",
58
- "frameborder": "Bingkai iframe",
110
+ "advanced": "Lanjutan",
111
+ "allow": "Izin (allow)",
112
+ "allow_hint": "Contoh: autoplay; fullscreen; clipboard-write",
113
+ "apply_failed": "Sematan tidak dapat disisipkan di sini.",
114
+ "border": "Tampilkan bingkai",
115
+ "code_invalid": "Tempel kode satu iframe yang berisi alamat. Kode dengan skrip atau tag lain tidak didukung.",
116
+ "code_parsed": "Kode dikenali: {fields}.",
59
117
  "height": "Tinggi",
118
+ "input": "Tautan atau kode sematan",
119
+ "input_hint": "Tempel alamat atau kode iframe dari menu Bagikan atau Sematkan di situs.",
120
+ "keep_ratio": "Pertahankan rasio",
121
+ "lazy": "Muat saat digulir ke tampilan",
60
122
  "name": "Nama",
61
- "src": "Sumber",
62
- "src_invalid": "Masukan bukan URL yang valid",
63
- "title": "Judul",
123
+ "parsed_allow": "izin",
124
+ "parsed_fullscreen": "layar penuh",
125
+ "parsed_loading": "pemuatan lambat",
126
+ "parsed_name": "nama",
127
+ "parsed_sandbox": "sandbox",
128
+ "parsed_size": "ukuran {width} × {height}",
129
+ "parsed_src": "alamat",
130
+ "parsed_title": "judul",
131
+ "preview": "Pratinjau sematan",
132
+ "preview_empty": "Pratinjau muncul setelah alamatnya valid.",
133
+ "sandbox": "Sandbox",
134
+ "sandbox_hint": "Kosong: tanpa batasan. Contoh: allow-scripts allow-same-origin",
135
+ "size": "Ukuran",
136
+ "size_custom": "Kustom",
137
+ "size_invalid": "Masukkan ukuran dalam piksel.",
138
+ "size_responsive": "Responsif",
139
+ "size_responsive_hint": "Mengisi lebar teks dengan proporsi {ratio}.",
140
+ "src_invalid": "Sematan memerlukan alamat web yang diawali https:// atau http://.",
141
+ "src_protocol": "Tambahkan protokol ke alamat: https:// atau http://.",
142
+ "src_required": "Tempel tautan atau kode sematan.",
143
+ "title_edit": "Edit sematan",
144
+ "title_insert": "Sematkan konten",
145
+ "title_missing": "Pembaca layar mengumumkan sematan berdasarkan judulnya. Jelaskan apa yang ditampilkan.",
146
+ "title_text": "Judul untuk pembaca layar",
64
147
  "width": "Lebar"
65
148
  },
66
149
  "image": {
67
- "alt": "Alt",
150
+ "alt_missing": "Pembaca layar dan mesin pencari tidak dapat membaca gambar tanpa teks alternatif.",
151
+ "alt_text": "Teks alternatif untuk pembaca layar",
152
+ "apply_error": "Gambar tidak dapat disimpan di sini.",
68
153
  "caption": "Keterangan",
69
154
  "caption_placeholder": "Tambahkan keterangan…",
70
- "dialog_title": "Tambah/sunting gambar",
71
155
  "height": "Tinggi",
72
156
  "keep_ratio": "Pertahankan rasio",
157
+ "original_size": "Asli {width} × {height}",
158
+ "position": "Posisi",
159
+ "position_center": "Tengah",
160
+ "position_left": "Kiri",
161
+ "position_right": "Kanan",
162
+ "remove_error": "Gambar tidak dapat dihapus.",
163
+ "size": "Ukuran",
164
+ "size_custom": "Kustom",
165
+ "size_original": "Asli",
166
+ "size_text": "Lebar teks",
167
+ "source_upload": "Unggah",
168
+ "source_url": "Lewat URL",
73
169
  "src": "Sumber",
74
- "title": "Tambah/sunting gambar",
170
+ "title_edit": "Sunting gambar",
171
+ "title_insert": "Sisipkan gambar",
172
+ "upload_cancel": "Batalkan unggahan",
173
+ "upload_error": "Gambar tidak dapat diunggah.",
174
+ "upload_file": "Berkas gambar",
75
175
  "width": "Lebar"
76
176
  },
177
+ "insert": "Sisipkan",
77
178
  "link": {
179
+ "advanced": "Lanjutan",
180
+ "apply_error": "Tautan tidak dapat diterapkan.",
78
181
  "class": "Kelas CSS",
79
182
  "href": "Alamat tautan",
80
- "href_error": "Alamat tautan tidak valid",
81
- "rel": "Rel",
82
- "target": "Buka di...",
83
- "target_blank": "Jendela baru",
84
- "target_self": "Jendela saat ini",
85
- "title": "Tambah/sunting tautan"
183
+ "href_invalid": "Masukkan alamat tautan, misalnya https://example.com, #jangkar atau /halaman.",
184
+ "new_tab": "Buka di tab baru",
185
+ "protocol_missing": "Tidak ada protokol. Tambahkan:",
186
+ "rel": "Atribut rel",
187
+ "rel_hint": "Nilai apa saja: Enter, spasi, atau koma akan menambahkannya.",
188
+ "rel_new_tab_hint": "Tautan yang dibuka di tab baru juga mendapat noopener dan noreferrer.",
189
+ "remove": "Hapus tautan",
190
+ "text": "Teks",
191
+ "text_hint": "Biarkan kosong untuk memakai alamat sebagai teks.",
192
+ "title_edit": "Sunting tautan",
193
+ "title_insert": "Sisipkan tautan"
194
+ },
195
+ "linkCard": {
196
+ "apply_failed": "Kartu tidak dapat disisipkan di sini.",
197
+ "description": "Deskripsi",
198
+ "display": "Tampilkan sebagai",
199
+ "display_card": "Kartu",
200
+ "display_link": "Tautan",
201
+ "fetch_failed": "Data halaman tidak dapat dimuat: {error}. Kolom dapat diisi secara manual.",
202
+ "href_invalid": "Masukkan alamat lengkap halaman, misalnya https://example.com/page.",
203
+ "image": "Gambar",
204
+ "image_choose": "Pilih gambar",
205
+ "image_failed": "Gambar tidak dapat diunggah. Coba lagi.",
206
+ "image_remove": "Hapus gambar",
207
+ "image_replace": "Ganti",
208
+ "layout": "Tampilan",
209
+ "layout_compact": "Ringkas",
210
+ "layout_large": "Besar",
211
+ "layout_text": "Tanpa gambar",
212
+ "loading": "Memuat data halaman…",
213
+ "page_title": "Judul",
214
+ "paste_dismiss": "Pertahankan tautan",
215
+ "paste_error": "Tidak ada pratinjau untuk halaman ini.",
216
+ "protocol_missing": "Awali alamat dengan https:// atau http://.",
217
+ "refresh": "Muat ulang data",
218
+ "site_name": "Nama situs",
219
+ "title_edit": "Sunting kartu tautan",
220
+ "title_insert": "Sisipkan kartu tautan"
86
221
  },
87
222
  "preview": {
88
223
  "title": "Pratinjau"
89
224
  },
225
+ "remove": "Hapus",
226
+ "save": "Simpan",
90
227
  "source": {
91
228
  "prettify": "Rapihkan",
92
229
  "title": "Lihat kode sumber"
93
230
  },
94
231
  "video": {
232
+ "apply_failed": "Video tidak dapat disisipkan di sini.",
233
+ "autoplay": "Putar otomatis tanpa suara",
234
+ "controls": "Tampilkan kontrol",
95
235
  "height": "Tinggi",
96
- "src": "Sumber",
97
- "title": "Tambah/sunting video",
236
+ "keep_ratio": "Pertahankan rasio",
237
+ "loop": "Ulangi",
238
+ "poster": "Poster",
239
+ "poster_choose": "Pilih gambar",
240
+ "poster_hint": "Opsional. Ditampilkan hingga video dimulai.",
241
+ "poster_url": "URL gambar poster",
242
+ "preview": "Pratinjau video",
243
+ "preview_empty": "Pratinjau muncul setelah tautan dikenali.",
244
+ "size": "Ukuran",
245
+ "size_custom": "Kustom",
246
+ "size_invalid": "Masukkan ukuran dalam piksel.",
247
+ "size_responsive": "Responsif",
248
+ "size_responsive_embed": "Responsif 16:9",
249
+ "source_upload": "Unggah",
250
+ "source_url": "Lewat URL",
251
+ "start": "Mulai pada",
252
+ "start_invalid": "Masukkan waktu dalam format m:ss atau h:mm:ss.",
253
+ "title_edit": "Sunting video",
254
+ "title_insert": "Sisipkan video",
255
+ "upload_choose": "Pilih berkas video",
256
+ "upload_failed": "Berkas tidak dapat diunggah. Coba lagi.",
257
+ "upload_progress": "{loaded} dari {total} MB",
258
+ "upload_replace": "Ganti",
259
+ "url": "Tautan video",
260
+ "url_file_protocol": "Tambahkan protokol ke tautan file: https:// atau http://.",
261
+ "url_required": "Tempel tautan YouTube, Vimeo, atau file video.",
262
+ "url_unsupported": "Gunakan tautan YouTube atau Vimeo, atau tautan ke file video (.mp4, .webm, .ogg, .mov). Untuk situs lain, gunakan kode sematan.",
98
263
  "width": "Lebar"
99
264
  }
100
265
  },
@@ -171,7 +336,7 @@
171
336
  "search": "Cari emoji...",
172
337
  "title": "Emoji"
173
338
  },
174
- "iframe": "iframe",
339
+ "iframe": "Sematan",
175
340
  "image": "Gambar",
176
341
  "image_toolbar": {
177
342
  "align_left": "Align left",
@@ -213,9 +378,47 @@
213
378
  "style": {
214
379
  "color": {
215
380
  "custom": "Warna kustom",
381
+ "default": "Default",
382
+ "eyedropper": "Ambil warna dari layar",
383
+ "hex": "Warna heksadesimal",
384
+ "hex_invalid": "Masukkan warna dalam format #rgb atau #rrggbb.",
216
385
  "highlight": "Warna sorotan",
217
- "text": "Warna teks",
218
- "unset": "Hapus warna"
386
+ "names": {
387
+ "amber": "Amber",
388
+ "black": "Hitam",
389
+ "blue": "Biru",
390
+ "dark_amber": "Amber gelap",
391
+ "dark_blue": "Biru gelap",
392
+ "dark_green": "Hijau gelap",
393
+ "dark_grey": "Abu-abu gelap",
394
+ "dark_orange": "Oranye gelap",
395
+ "dark_pink": "Merah muda gelap",
396
+ "dark_purple": "Ungu gelap",
397
+ "dark_red": "Merah gelap",
398
+ "dark_teal": "Hijau kebiruan gelap",
399
+ "green": "Hijau",
400
+ "grey": "Abu-abu",
401
+ "light_amber": "Amber terang",
402
+ "light_blue": "Biru terang",
403
+ "light_green": "Hijau terang",
404
+ "light_grey": "Abu-abu terang",
405
+ "light_orange": "Oranye terang",
406
+ "light_pink": "Merah muda terang",
407
+ "light_purple": "Ungu terang",
408
+ "light_red": "Merah terang",
409
+ "light_teal": "Hijau kebiruan terang",
410
+ "medium_grey": "Abu-abu sedang",
411
+ "orange": "Oranye",
412
+ "pale_grey": "Abu-abu pucat",
413
+ "pink": "Merah muda",
414
+ "purple": "Ungu",
415
+ "red": "Merah",
416
+ "teal": "Hijau kebiruan",
417
+ "white": "Putih"
418
+ },
419
+ "no_highlight": "Tanpa sorotan",
420
+ "recent": "Terbaru",
421
+ "text": "Warna teks"
219
422
  },
220
423
  "fontFamily": "Keluarga font",
221
424
  "fontSize": "Ukuran font",