tiptapify 0.3.5 → 0.4.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 (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 +34 -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 +200 -0
  52. package/src/extensions/components/media/image/imageDialog.ts +114 -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 +8 -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": "تراجع"
5
5
  },
6
6
  "ai": {
7
+ "another_version": "نسخة أخرى",
7
8
  "append": "أضف في النهاية",
9
+ "change_vs_original": "{percent} مقارنة بالأصل",
10
+ "changes": "التغييرات",
11
+ "context": {
12
+ "characters": "{n} حرف",
13
+ "cursor": "عند المؤشر",
14
+ "document": "النص كاملًا",
15
+ "excerpt": "«{text}»",
16
+ "paragraphs": "{n} فقرة",
17
+ "selection": "المحدد: {paragraphs}، {characters}"
18
+ },
19
+ "copied": "تم النسخ",
20
+ "copy": "نسخ",
8
21
  "defaultExamples": {
9
22
  "expand": {
10
23
  "prompt": "وسّع هذا النص إلى إصدار أكثر تفصيلاً.",
@@ -23,19 +36,58 @@
23
36
  "title": "تلخيص"
24
37
  }
25
38
  },
39
+ "effort_label": {
40
+ "default": "المستوى: افتراضي",
41
+ "high": "المستوى: مرتفع",
42
+ "low": "المستوى: منخفض",
43
+ "max": "المستوى: أقصى",
44
+ "medium": "المستوى: متوسط",
45
+ "xhigh": "المستوى: مرتفع جدًا"
46
+ },
47
+ "effort_levels": {
48
+ "default": "افتراضي",
49
+ "high": "مرتفع",
50
+ "low": "منخفض",
51
+ "max": "أقصى",
52
+ "medium": "متوسط",
53
+ "xhigh": "مرتفع جدًا"
54
+ },
26
55
  "error": "فشل توليد الذكاء الاصطناعي",
56
+ "errors": {
57
+ "auth": "رفضت خدمة الذكاء الاصطناعي الطلب: تحقق من مفتاح API أو صلاحيات الوصول.",
58
+ "network": "تعذّر الوصول إلى خدمة الذكاء الاصطناعي. تحقق من أنها تعمل وتسمح بالطلبات من هذه الصفحة (CORS): تُظهر وحدة تحكم المتصفح السبب.",
59
+ "not_found": "لم يُعثر على عنوان خدمة الذكاء الاصطناعي: تحقق من مسار نقطة النهاية.",
60
+ "rate_limit": "طلبات كثيرة جدًا إلى خدمة الذكاء الاصطناعي. انتظر قليلًا ثم حاول مرة أخرى.",
61
+ "request": "تعذّر على خدمة الذكاء الاصطناعي معالجة الطلب.",
62
+ "service_says": "رد الخدمة:",
63
+ "timeout": "لم تستجب خدمة الذكاء الاصطناعي في الوقت المناسب. حاول مرة أخرى.",
64
+ "unavailable": "خدمة الذكاء الاصطناعي غير متاحة: ربما تحمّل نموذجًا أو مشغولة. حاول لاحقًا."
65
+ },
27
66
  "generate": "توليد",
28
67
  "insert": "إدراج",
29
- "limit_exceeded": "يتجاوز الناتج حد الأحرف في المحرر. قصّر النص وطبّقه مرة أخرى.",
68
+ "insert_below": "إدراج في الأسفل",
69
+ "limit_exceeded": "الناتج أطول مما يسمح به حد الأحرف في المحرر. اطلب نسخة أقصر.",
30
70
  "loading": "جارٍ التوليد...",
31
71
  "prompt": "الطلب",
72
+ "prompt_placeholder": "اطلب كتابة النص أو تعديله",
32
73
  "quick_prompts": "طلبات سريعة",
33
74
  "reasoning_effort": "مستوى التفكير",
34
- "replace": "استبدال",
75
+ "replace_selection": "استبدال المحدد",
35
76
  "result": "النتيجة",
77
+ "send_hint": "Enter — إرسال",
36
78
  "stop": "إيقاف",
37
79
  "thinking": "التفكير",
38
- "title": "الكتابة بالذكاء الاصطناعي",
80
+ "thinking_label": {
81
+ "off": "التفكير: متوقف",
82
+ "on": "التفكير: مفعّل"
83
+ },
84
+ "thinking_now": "يفكر…",
85
+ "thinking_states": {
86
+ "off": "متوقف",
87
+ "on": "مفعّل"
88
+ },
89
+ "thought_for": "فكّر لمدة {seconds} ث",
90
+ "title": "المساعد",
39
91
  "unavailable": "قم بتكوين مزوّد ذكاء اصطناعي لاستخدام هذا الإجراء"
40
92
  },
41
93
  "alignment": "محاذاة",
@@ -51,50 +103,163 @@
51
103
  "defaultValue": "القيمة الافتراضية",
52
104
  "dialog": {
53
105
  "apply": "تطبيق",
106
+ "cancel": "إلغاء",
54
107
  "clear": "مسح",
55
108
  "close": "إغلاق",
56
109
  "iframe": {
57
- "dialog_title": "إضافة/تعديل إطار مضمن",
58
- "frameborder": "حدود الإطار",
110
+ "advanced": "متقدم",
111
+ "allow": "الأذونات (allow)",
112
+ "allow_hint": "على سبيل المثال: autoplay; fullscreen; clipboard-write",
113
+ "apply_failed": "لا يمكن إدراج المحتوى المضمّن هنا.",
114
+ "border": "إظهار الإطار",
115
+ "code_invalid": "الصق كود iframe واحد يحتوي على عنوان. الأكواد التي تحتوي على سكربتات أو وسوم أخرى غير مدعومة.",
116
+ "code_parsed": "تم التعرف على الكود: {fields}.",
59
117
  "height": "الارتفاع",
118
+ "input": "رابط أو كود تضمين",
119
+ "input_hint": "الصق العنوان أو كود iframe من قائمة المشاركة أو التضمين في الموقع.",
120
+ "keep_ratio": "الحفاظ على النسبة",
121
+ "lazy": "التحميل عند التمرير إليه",
60
122
  "name": "الاسم",
61
- "src": "المصدر",
62
- "src_invalid": "عنوان URL المدخل غير صالح",
63
- "title": "العنوان",
123
+ "parsed_allow": "الأذونات",
124
+ "parsed_fullscreen": "ملء الشاشة",
125
+ "parsed_loading": "التحميل المؤجل",
126
+ "parsed_name": "الاسم",
127
+ "parsed_sandbox": "sandbox",
128
+ "parsed_size": "الحجم {width} × {height}",
129
+ "parsed_src": "الرابط",
130
+ "parsed_title": "العنوان",
131
+ "preview": "معاينة المحتوى المضمّن",
132
+ "preview_empty": "تظهر المعاينة عندما يصبح العنوان صالحًا.",
133
+ "sandbox": "بيئة معزولة (sandbox)",
134
+ "sandbox_hint": "فارغ: بلا قيود. على سبيل المثال: allow-scripts allow-same-origin",
135
+ "size": "الحجم",
136
+ "size_custom": "مخصص",
137
+ "size_invalid": "أدخل الحجم بالبكسل.",
138
+ "size_responsive": "متجاوب",
139
+ "size_responsive_hint": "يملأ عرض النص بنسبة {ratio}.",
140
+ "src_invalid": "يحتاج التضمين إلى عنوان ويب يبدأ بـ https:// أو http://.",
141
+ "src_protocol": "أضف البروتوكول إلى العنوان: https:// أو http://.",
142
+ "src_required": "الصق رابطًا أو كود تضمين.",
143
+ "title_edit": "تعديل المحتوى المضمّن",
144
+ "title_insert": "تضمين محتوى",
145
+ "title_missing": "تعلن قارئات الشاشة عن المحتوى المضمّن بعنوانه. صِف ما يعرضه.",
146
+ "title_text": "عنوان لقارئات الشاشة",
64
147
  "width": "العرض"
65
148
  },
66
149
  "image": {
67
- "alt": "نص بديل",
150
+ "alt_missing": "لا تستطيع قارئات الشاشة ومحركات البحث قراءة صورة بدون نص بديل.",
151
+ "alt_text": "نص بديل لقارئات الشاشة",
152
+ "apply_error": "تعذّر حفظ الصورة هنا.",
68
153
  "caption": "التعليق",
69
154
  "caption_placeholder": "أضف تعليقًا…",
70
- "dialog_title": "إضافة/تعديل صورة",
71
155
  "height": "الارتفاع",
72
156
  "keep_ratio": "الحفاظ على نسبة العرض إلى الارتفاع",
157
+ "original_size": "الأصلي {width} × {height}",
158
+ "position": "الموضع",
159
+ "position_center": "الوسط",
160
+ "position_left": "اليسار",
161
+ "position_right": "اليمين",
162
+ "remove_error": "تعذّرت إزالة الصورة.",
163
+ "size": "الحجم",
164
+ "size_custom": "مخصص",
165
+ "size_original": "الأصلي",
166
+ "size_text": "عرض النص",
167
+ "source_upload": "رفع",
168
+ "source_url": "عبر URL",
73
169
  "src": "المصدر",
74
- "title": "العنوان",
170
+ "title_edit": "تعديل الصورة",
171
+ "title_insert": "إدراج صورة",
172
+ "upload_cancel": "إلغاء الرفع",
173
+ "upload_error": "تعذّر رفع الصورة.",
174
+ "upload_file": "ملف الصورة",
75
175
  "width": "العرض"
76
176
  },
177
+ "insert": "إدراج",
77
178
  "link": {
179
+ "advanced": "متقدم",
180
+ "apply_error": "تعذّر تطبيق الرابط.",
78
181
  "class": "فئة CSS",
79
182
  "href": "عنوان الرابط",
80
- "href_error": "عنوان رابط غير صالح",
81
- "rel": "نسبة",
82
- "target": "افتح في...",
83
- "target_blank": "نافذة جديدة",
84
- "target_self": "النافذة الحالية",
85
- "title": "إضافة/تعديل رابط"
183
+ "href_invalid": "أدخل عنوان رابط، مثل https://example.com أو #مرساة أو /صفحة.",
184
+ "new_tab": "فتح في علامة تبويب جديدة",
185
+ "protocol_missing": "لا يوجد بروتوكول. أضف:",
186
+ "rel": "سمات rel",
187
+ "rel_hint": "أي قيمة: يضيفها مفتاح Enter أو المسافة أو الفاصلة.",
188
+ "rel_new_tab_hint": "الرابط الذي يُفتح في علامة تبويب جديدة يحصل أيضًا على noopener و noreferrer.",
189
+ "remove": "إزالة الرابط",
190
+ "text": "النص",
191
+ "text_hint": "اتركه فارغًا لاستخدام العنوان كنص.",
192
+ "title_edit": "تعديل الرابط",
193
+ "title_insert": "إدراج رابط"
194
+ },
195
+ "linkCard": {
196
+ "apply_failed": "لا يمكن إدراج البطاقة هنا.",
197
+ "description": "الوصف",
198
+ "display": "العرض كـ",
199
+ "display_card": "بطاقة",
200
+ "display_link": "رابط",
201
+ "fetch_failed": "تعذّر تحميل بيانات الصفحة: {error}. يمكنك ملء الحقول يدويًا.",
202
+ "href_invalid": "أدخل العنوان الكامل لصفحة، مثل https://example.com/page.",
203
+ "image": "صورة",
204
+ "image_choose": "اختيار صورة",
205
+ "image_failed": "تعذّر رفع الصورة. حاول مرة أخرى.",
206
+ "image_remove": "إزالة الصورة",
207
+ "image_replace": "استبدال",
208
+ "layout": "طريقة العرض",
209
+ "layout_compact": "مضغوطة",
210
+ "layout_large": "كبيرة",
211
+ "layout_text": "بدون صورة",
212
+ "loading": "جارٍ تحميل بيانات الصفحة…",
213
+ "page_title": "العنوان",
214
+ "paste_dismiss": "الإبقاء على الرابط",
215
+ "paste_error": "لا توجد معاينة لهذه الصفحة.",
216
+ "protocol_missing": "ابدأ العنوان بـ https:// أو http://.",
217
+ "refresh": "تحديث البيانات",
218
+ "site_name": "اسم الموقع",
219
+ "title_edit": "تعديل بطاقة الرابط",
220
+ "title_insert": "إدراج بطاقة رابط"
86
221
  },
87
222
  "preview": {
88
223
  "title": "معاينة"
89
224
  },
225
+ "remove": "إزالة",
226
+ "save": "حفظ",
90
227
  "source": {
91
228
  "prettify": "تنسيق",
92
229
  "title": "عرض كود المصدر"
93
230
  },
94
231
  "video": {
232
+ "apply_failed": "لا يمكن إدراج الفيديو هنا.",
233
+ "autoplay": "تشغيل تلقائي بدون صوت",
234
+ "controls": "إظهار عناصر التحكم",
95
235
  "height": "الارتفاع",
96
- "src": "المصدر",
97
- "title": "إضافة/تعديل فيديو",
236
+ "keep_ratio": "الحفاظ على نسبة العرض إلى الارتفاع",
237
+ "loop": "تكرار",
238
+ "poster": "صورة الغلاف",
239
+ "poster_choose": "اختيار صورة",
240
+ "poster_hint": "اختياري. تظهر حتى يبدأ الفيديو.",
241
+ "poster_url": "عنوان URL لصورة الغلاف",
242
+ "preview": "معاينة الفيديو",
243
+ "preview_empty": "تظهر المعاينة بمجرد التعرّف على الرابط.",
244
+ "size": "الحجم",
245
+ "size_custom": "مخصص",
246
+ "size_invalid": "أدخل الحجم بالبكسل.",
247
+ "size_responsive": "متجاوب",
248
+ "size_responsive_embed": "متجاوب 16:9",
249
+ "source_upload": "رفع",
250
+ "source_url": "عبر URL",
251
+ "start": "البدء عند",
252
+ "start_invalid": "أدخل الوقت بالصيغة m:ss أو h:mm:ss.",
253
+ "title_edit": "تعديل الفيديو",
254
+ "title_insert": "إدراج فيديو",
255
+ "upload_choose": "اختر ملف فيديو",
256
+ "upload_failed": "تعذّر رفع الملف. حاول مرة أخرى.",
257
+ "upload_progress": "{loaded} من {total} ميغابايت",
258
+ "upload_replace": "استبدال",
259
+ "url": "رابط الفيديو",
260
+ "url_file_protocol": "أضف البروتوكول إلى رابط الملف: https:// أو http://.",
261
+ "url_required": "الصق رابط YouTube أو Vimeo أو رابط ملف فيديو.",
262
+ "url_unsupported": "استخدم رابط YouTube أو Vimeo أو رابطًا لملف فيديو (.mp4، .webm، .ogg، .mov). للمواقع الأخرى استخدم رمز التضمين.",
98
263
  "width": "العرض"
99
264
  }
100
265
  },
@@ -171,7 +336,7 @@
171
336
  "search": "البحث عن رموز تعبيرية...",
172
337
  "title": "رموز تعبيرية"
173
338
  },
174
- "iframe": "إطار مضمن",
339
+ "iframe": "محتوى مضمّن",
175
340
  "image": "صورة",
176
341
  "image_toolbar": {
177
342
  "align_left": "Align left",
@@ -212,10 +377,48 @@
212
377
  },
213
378
  "style": {
214
379
  "color": {
215
- "custom": "تحديد مخصص",
380
+ "custom": "لون مخصص",
381
+ "default": "افتراضي",
382
+ "eyedropper": "التقاط لون من الشاشة",
383
+ "hex": "لون سداسي عشري",
384
+ "hex_invalid": "أدخل لونًا بصيغة #rgb أو #rrggbb.",
216
385
  "highlight": "لون التحديد",
217
- "text": "لون النص",
218
- "unset": "إزالة اللون"
386
+ "names": {
387
+ "amber": "كهرماني",
388
+ "black": "أسود",
389
+ "blue": "أزرق",
390
+ "dark_amber": "كهرماني داكن",
391
+ "dark_blue": "أزرق داكن",
392
+ "dark_green": "أخضر داكن",
393
+ "dark_grey": "رمادي داكن",
394
+ "dark_orange": "برتقالي داكن",
395
+ "dark_pink": "وردي داكن",
396
+ "dark_purple": "بنفسجي داكن",
397
+ "dark_red": "أحمر داكن",
398
+ "dark_teal": "أزرق مخضر داكن",
399
+ "green": "أخضر",
400
+ "grey": "رمادي",
401
+ "light_amber": "كهرماني فاتح",
402
+ "light_blue": "أزرق فاتح",
403
+ "light_green": "أخضر فاتح",
404
+ "light_grey": "رمادي فاتح",
405
+ "light_orange": "برتقالي فاتح",
406
+ "light_pink": "وردي فاتح",
407
+ "light_purple": "بنفسجي فاتح",
408
+ "light_red": "أحمر فاتح",
409
+ "light_teal": "أزرق مخضر فاتح",
410
+ "medium_grey": "رمادي متوسط",
411
+ "orange": "برتقالي",
412
+ "pale_grey": "رمادي باهت",
413
+ "pink": "وردي",
414
+ "purple": "بنفسجي",
415
+ "red": "أحمر",
416
+ "teal": "أزرق مخضر",
417
+ "white": "أبيض"
418
+ },
419
+ "no_highlight": "بلا تمييز",
420
+ "recent": "الأخيرة",
421
+ "text": "لون النص"
219
422
  },
220
423
  "fontFamily": "عائلة الخطوط",
221
424
  "fontSize": "حجم الخط",
@@ -4,7 +4,20 @@
4
4
  "undo": "Отмъкни"
5
5
  },
6
6
  "ai": {
7
+ "another_version": "Друг вариант",
7
8
  "append": "Добавяне в края",
9
+ "change_vs_original": "{percent} спрямо оригинала",
10
+ "changes": "Промени",
11
+ "context": {
12
+ "characters": "{n} символ | {n} символа",
13
+ "cursor": "На позицията на курсора",
14
+ "document": "Целият текст",
15
+ "excerpt": "„{text}“",
16
+ "paragraphs": "{n} абзац | {n} абзаца",
17
+ "selection": "Избрано: {paragraphs}, {characters}"
18
+ },
19
+ "copied": "Копирано",
20
+ "copy": "Копиране",
8
21
  "defaultExamples": {
9
22
  "expand": {
10
23
  "prompt": "Разширете този текст в по-подробна версия.",
@@ -23,19 +36,58 @@
23
36
  "title": "Обобщение"
24
37
  }
25
38
  },
39
+ "effort_label": {
40
+ "default": "Ниво: по подразбиране",
41
+ "high": "Ниво: високо",
42
+ "low": "Ниво: ниско",
43
+ "max": "Ниво: максимално",
44
+ "medium": "Ниво: средно",
45
+ "xhigh": "Ниво: много високо"
46
+ },
47
+ "effort_levels": {
48
+ "default": "По подразбиране",
49
+ "high": "Високо",
50
+ "low": "Ниско",
51
+ "max": "Максимално",
52
+ "medium": "Средно",
53
+ "xhigh": "Много високо"
54
+ },
26
55
  "error": "Генерирането на AI не е успяло",
56
+ "errors": {
57
+ "auth": "AI услугата отхвърли заявката: проверете API ключа или правата за достъп.",
58
+ "network": "Неуспешна връзка с AI услугата. Проверете дали работи и позволява заявки от тази страница (CORS): причината се вижда в конзолата на браузъра.",
59
+ "not_found": "Адресът на AI услугата не е намерен: проверете пътя на крайната точка.",
60
+ "rate_limit": "Твърде много заявки към AI услугата. Изчакайте малко и опитайте отново.",
61
+ "request": "AI услугата не можа да обработи заявката.",
62
+ "service_says": "Отговор на услугата:",
63
+ "timeout": "AI услугата не отговори навреме. Опитайте отново.",
64
+ "unavailable": "AI услугата е недостъпна: може да зарежда модел или да е заета. Опитайте по-късно."
65
+ },
27
66
  "generate": "Генериране",
28
67
  "insert": "Вмъкване",
29
- "limit_exceeded": "Резултатът надхвърля лимита на символи в редактора. Съкратете текста и приложете отново.",
68
+ "insert_below": "Вмъкване отдолу",
69
+ "limit_exceeded": "Резултатът надхвърля лимита на символи в редактора. Поискайте по-кратък вариант.",
30
70
  "loading": "Генериране...",
31
71
  "prompt": "Промпт",
72
+ "prompt_placeholder": "Помолете да се напише или редактира текстът",
32
73
  "quick_prompts": "Бързи промпти",
33
74
  "reasoning_effort": "Труд на разсъждения",
34
- "replace": "Замяна",
75
+ "replace_selection": "Замяна на избраното",
35
76
  "result": "Резултат",
77
+ "send_hint": "Enter — изпращане",
36
78
  "stop": "Спи",
37
79
  "thinking": "Мислене",
38
- "title": "AI писане",
80
+ "thinking_label": {
81
+ "off": "Разсъждение: изключено",
82
+ "on": "Разсъждение: включено"
83
+ },
84
+ "thinking_now": "Мисли…",
85
+ "thinking_states": {
86
+ "off": "Изключено",
87
+ "on": "Включено"
88
+ },
89
+ "thought_for": "Мисли {seconds} с",
90
+ "title": "Асистент",
39
91
  "unavailable": "Конфигурирайте AI доставчик, за да използвате това действие"
40
92
  },
41
93
  "alignment": "Поравяване",
@@ -51,50 +103,163 @@
51
103
  "defaultValue": "Дефалтна стойност",
52
104
  "dialog": {
53
105
  "apply": "Приложи",
106
+ "cancel": "Отказ",
54
107
  "clear": "Изчисти",
55
108
  "close": "Затвори",
56
109
  "iframe": {
57
- "dialog_title": "Добави/редактирай iframe",
58
- "frameborder": "Рамка на iframe",
110
+ "advanced": "Разширени",
111
+ "allow": "Разрешения (allow)",
112
+ "allow_hint": "Например: autoplay; fullscreen; clipboard-write",
113
+ "apply_failed": "Вграждането не може да бъде вмъкнато тук.",
114
+ "border": "Показване на рамка",
115
+ "code_invalid": "Поставете кода на един iframe с адрес. Кодове със скриптове или други тагове не се поддържат.",
116
+ "code_parsed": "Кодът е разпознат: {fields}.",
59
117
  "height": "Височина",
118
+ "input": "Връзка или код за вграждане",
119
+ "input_hint": "Поставете адреса или iframe кода от менюто „Споделяне“ или „Вграждане“ на сайта.",
120
+ "keep_ratio": "Запазване на пропорцията",
121
+ "lazy": "Зареждане при превъртане до него",
60
122
  "name": "Име",
61
- "src": "Източник",
62
- "src_invalid": "Входът не е валиден URL",
63
- "title": "Заглавие",
123
+ "parsed_allow": "разрешения",
124
+ "parsed_fullscreen": "цял екран",
125
+ "parsed_loading": "отложено зареждане",
126
+ "parsed_name": "име",
127
+ "parsed_sandbox": "sandbox",
128
+ "parsed_size": "размер {width} × {height}",
129
+ "parsed_src": "адрес",
130
+ "parsed_title": "заглавие",
131
+ "preview": "Преглед на вграждането",
132
+ "preview_empty": "Прегледът се появява, когато адресът е валиден.",
133
+ "sandbox": "Пясъчник (sandbox)",
134
+ "sandbox_hint": "Празно: без ограничения. Например: allow-scripts allow-same-origin",
135
+ "size": "Размер",
136
+ "size_custom": "Персонализиран",
137
+ "size_invalid": "Въведете размера в пиксели.",
138
+ "size_responsive": "Адаптивен",
139
+ "size_responsive_hint": "Запълва ширината на текста в пропорции {ratio}.",
140
+ "src_invalid": "За вграждане е нужен уеб адрес, започващ с https:// или http://.",
141
+ "src_protocol": "Добавете протокол към адреса: https:// или http://.",
142
+ "src_required": "Поставете връзка или код за вграждане.",
143
+ "title_edit": "Редактиране на вграждането",
144
+ "title_insert": "Вграждане на съдържание",
145
+ "title_missing": "Екранните четци обявяват вграждането по заглавието му. Опишете какво показва.",
146
+ "title_text": "Заглавие за екранни четци",
64
147
  "width": "Широчина"
65
148
  },
66
149
  "image": {
67
- "alt": "Алтернативен текст",
150
+ "alt_missing": "Екранните четци и търсачките не могат да прочетат изображение без алтернативен текст.",
151
+ "alt_text": "Алтернативен текст за екранни четци",
152
+ "apply_error": "Изображението не може да бъде запазено тук.",
68
153
  "caption": "Надпис",
69
154
  "caption_placeholder": "Добавете надпис…",
70
- "dialog_title": "Добави/редактирай изображение",
71
155
  "height": "Височина",
72
156
  "keep_ratio": "Пазене на пропорцията",
157
+ "original_size": "Оригинал {width} × {height}",
158
+ "position": "Позиция",
159
+ "position_center": "Център",
160
+ "position_left": "Ляво",
161
+ "position_right": "Дясно",
162
+ "remove_error": "Изображението не може да бъде премахнато.",
163
+ "size": "Размер",
164
+ "size_custom": "Персонализиран",
165
+ "size_original": "Оригинален",
166
+ "size_text": "Ширина на текста",
167
+ "source_upload": "Качване",
168
+ "source_url": "От URL",
73
169
  "src": "Източник",
74
- "title": "Добави/редактирай изображение",
170
+ "title_edit": "Редактиране на изображение",
171
+ "title_insert": "Вмъкване на изображение",
172
+ "upload_cancel": "Отказ от качването",
173
+ "upload_error": "Изображението не може да бъде качено.",
174
+ "upload_file": "Файл с изображение",
75
175
  "width": "Широчина"
76
176
  },
177
+ "insert": "Вмъкване",
77
178
  "link": {
179
+ "advanced": "Разширени",
180
+ "apply_error": "Линкът не може да бъде приложен.",
78
181
  "class": "CSS клас",
79
182
  "href": "Адрес на линка",
80
- "href_error": "Невалиден адрес на линк",
81
- "rel": "Rel",
82
- "target": "Отваряне в...",
83
- "target_blank": "Нов прозорец",
84
- "target_self": "Текущ прозорец",
85
- "title": "Добави/редактирай линк"
183
+ "href_invalid": "Въведете адрес на връзката, например https://example.com, #котва или /страница.",
184
+ "new_tab": "Отваряне в нов раздел",
185
+ "protocol_missing": "Няма протокол. Добави:",
186
+ "rel": "Атрибути rel",
187
+ "rel_hint": "Произволна стойност: Enter, интервал или запетая я добавя.",
188
+ "rel_new_tab_hint": "Линк, който се отваря в нов раздел, получава и noopener и noreferrer.",
189
+ "remove": "Премахване на линка",
190
+ "text": "Текст",
191
+ "text_hint": "Оставете празно, за да се използва адресът като текст.",
192
+ "title_edit": "Редактиране на линк",
193
+ "title_insert": "Вмъкване на линк"
194
+ },
195
+ "linkCard": {
196
+ "apply_failed": "Картата не може да бъде вмъкната тук.",
197
+ "description": "Описание",
198
+ "display": "Показване като",
199
+ "display_card": "Карта",
200
+ "display_link": "Линк",
201
+ "fetch_failed": "Данните на страницата не могат да бъдат заредени: {error}. Можете да попълните полетата ръчно.",
202
+ "href_invalid": "Въведете пълния адрес на страница, например https://example.com/page.",
203
+ "image": "Изображение",
204
+ "image_choose": "Избор на изображение",
205
+ "image_failed": "Изображението не може да бъде качено. Опитайте отново.",
206
+ "image_remove": "Премахване на изображението",
207
+ "image_replace": "Замяна",
208
+ "layout": "Изглед",
209
+ "layout_compact": "Компактна",
210
+ "layout_large": "Голяма",
211
+ "layout_text": "Без изображение",
212
+ "loading": "Зареждане на данните на страницата…",
213
+ "page_title": "Заглавие",
214
+ "paste_dismiss": "Запазване на линка",
215
+ "paste_error": "Няма преглед за тази страница.",
216
+ "protocol_missing": "Започнете адреса с https:// или http://.",
217
+ "refresh": "Обновяване на данните",
218
+ "site_name": "Име на сайта",
219
+ "title_edit": "Редактиране на карта на линк",
220
+ "title_insert": "Вмъкване на карта на линк"
86
221
  },
87
222
  "preview": {
88
223
  "title": "Преглед"
89
224
  },
225
+ "remove": "Премахване",
226
+ "save": "Запазване",
90
227
  "source": {
91
228
  "prettify": "Форматиране",
92
229
  "title": "Вижте изходния код"
93
230
  },
94
231
  "video": {
232
+ "apply_failed": "Видеото не може да бъде вмъкнато тук.",
233
+ "autoplay": "Автоматично пускане без звук",
234
+ "controls": "Показване на контролите",
95
235
  "height": "Височина",
96
- "src": "Източник",
97
- "title": "Добави/редактирай видео",
236
+ "keep_ratio": "Пазене на пропорцията",
237
+ "loop": "Повторение",
238
+ "poster": "Корица",
239
+ "poster_choose": "Избор на изображение",
240
+ "poster_hint": "По избор. Показва се, докато видеото започне.",
241
+ "poster_url": "URL на изображението за корица",
242
+ "preview": "Преглед на видеото",
243
+ "preview_empty": "Прегледът ще се появи, когато линкът бъде разпознат.",
244
+ "size": "Размер",
245
+ "size_custom": "Персонализиран",
246
+ "size_invalid": "Въведете размера в пиксели.",
247
+ "size_responsive": "Адаптивен",
248
+ "size_responsive_embed": "Адаптивен 16:9",
249
+ "source_upload": "Качване",
250
+ "source_url": "От URL",
251
+ "start": "Начало от",
252
+ "start_invalid": "Въведете времето във формат m:ss или h:mm:ss.",
253
+ "title_edit": "Редактиране на видео",
254
+ "title_insert": "Вмъкване на видео",
255
+ "upload_choose": "Изберете видеофайл",
256
+ "upload_failed": "Файлът не може да бъде качен. Опитайте отново.",
257
+ "upload_progress": "{loaded} от {total} МБ",
258
+ "upload_replace": "Замяна",
259
+ "url": "Линк към видео",
260
+ "url_file_protocol": "Добавете протокол към връзката към файла: https:// или http://.",
261
+ "url_required": "Поставете връзка към YouTube, Vimeo или видеофайл.",
262
+ "url_unsupported": "Използвайте връзка към YouTube или Vimeo или към видеофайл (.mp4, .webm, .ogg, .mov). За други сайтове използвайте кода за вграждане.",
98
263
  "width": "Широчина"
99
264
  }
100
265
  },
@@ -171,7 +336,7 @@
171
336
  "search": "Търсене на емоджита...",
172
337
  "title": "Емоджита"
173
338
  },
174
- "iframe": "iframe",
339
+ "iframe": "Вграждане",
175
340
  "image": "Изображение",
176
341
  "image_toolbar": {
177
342
  "align_left": "Align left",
@@ -213,9 +378,47 @@
213
378
  "style": {
214
379
  "color": {
215
380
  "custom": "Персонализиран цвят",
381
+ "default": "По подразбиране",
382
+ "eyedropper": "Вземане на цвят от екрана",
383
+ "hex": "Шестнадесетичен цвят",
384
+ "hex_invalid": "Въведете цвят във формат #rgb или #rrggbb.",
216
385
  "highlight": "Цвят на подсветката",
217
- "text": "Цвят на текста",
218
- "unset": "Резетиране на цвета"
386
+ "names": {
387
+ "amber": "Кехлибарен",
388
+ "black": "Черен",
389
+ "blue": "Син",
390
+ "dark_amber": "Тъмнокехлибарен",
391
+ "dark_blue": "Тъмносин",
392
+ "dark_green": "Тъмнозелен",
393
+ "dark_grey": "Тъмносив",
394
+ "dark_orange": "Тъмнооранжев",
395
+ "dark_pink": "Тъмнорозов",
396
+ "dark_purple": "Тъмнолилав",
397
+ "dark_red": "Тъмночервен",
398
+ "dark_teal": "Тъмносиньозелен",
399
+ "green": "Зелен",
400
+ "grey": "Сив",
401
+ "light_amber": "Светлокехлибарен",
402
+ "light_blue": "Светлосин",
403
+ "light_green": "Светлозелен",
404
+ "light_grey": "Светлосив",
405
+ "light_orange": "Светлооранжев",
406
+ "light_pink": "Светлорозов",
407
+ "light_purple": "Светлолилав",
408
+ "light_red": "Светлочервен",
409
+ "light_teal": "Светлосиньозелен",
410
+ "medium_grey": "Средносив",
411
+ "orange": "Оранжев",
412
+ "pale_grey": "Бледосив",
413
+ "pink": "Розов",
414
+ "purple": "Лилав",
415
+ "red": "Червен",
416
+ "teal": "Синьозелен",
417
+ "white": "Бял"
418
+ },
419
+ "no_highlight": "Без подсветка",
420
+ "recent": "Скорошни",
421
+ "text": "Цвят на текста"
219
422
  },
220
423
  "fontFamily": "Семейство шрифт",
221
424
  "fontSize": "Големина на шрифта",