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": "撤销"
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": "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": "添加/编辑内嵌框架",
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": "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} MB",
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",
@@ -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": "Zpět"
5
5
  },
6
6
  "ai": {
7
+ "another_version": "Jiná verze",
7
8
  "append": "Přidat na konec",
9
+ "change_vs_original": "{percent} oproti originálu",
10
+ "changes": "Změny",
11
+ "context": {
12
+ "characters": "{n} zn.",
13
+ "cursor": "Na pozici kurzoru",
14
+ "document": "Celý text",
15
+ "excerpt": "„{text}“",
16
+ "paragraphs": "{n} odst.",
17
+ "selection": "Vybráno: {paragraphs}, {characters}"
18
+ },
19
+ "copied": "Zkopírováno",
20
+ "copy": "Kopírovat",
8
21
  "defaultExamples": {
9
22
  "expand": {
10
23
  "prompt": "Rozviňte tento text do podrobnější verze.",
@@ -23,19 +36,58 @@
23
36
  "title": "Shrnutí"
24
37
  }
25
38
  },
39
+ "effort_label": {
40
+ "default": "Úroveň: výchozí",
41
+ "high": "Úroveň: vysoká",
42
+ "low": "Úroveň: nízká",
43
+ "max": "Úroveň: maximální",
44
+ "medium": "Úroveň: střední",
45
+ "xhigh": "Úroveň: velmi vysoká"
46
+ },
47
+ "effort_levels": {
48
+ "default": "Výchozí",
49
+ "high": "Vysoká",
50
+ "low": "Nízká",
51
+ "max": "Maximální",
52
+ "medium": "Střední",
53
+ "xhigh": "Velmi vysoká"
54
+ },
26
55
  "error": "Generování AI selhalo",
56
+ "errors": {
57
+ "auth": "Služba AI požadavek odmítla: zkontrolujte klíč API nebo přístupová práva.",
58
+ "network": "Službu AI se nepodařilo kontaktovat. Ověřte, že běží a povoluje požadavky z této stránky (CORS): příčinu ukáže konzole prohlížeče.",
59
+ "not_found": "Adresa služby AI nebyla nalezena: zkontrolujte cestu endpointu.",
60
+ "rate_limit": "Příliš mnoho požadavků na službu AI. Chvíli počkejte a zkuste to znovu.",
61
+ "request": "Služba AI nedokázala požadavek zpracovat.",
62
+ "service_says": "Odpověď služby:",
63
+ "timeout": "Služba AI neodpověděla včas. Zkuste to znovu.",
64
+ "unavailable": "Služba AI není dostupná: možná načítá model nebo je vytížená. Zkuste to později."
65
+ },
27
66
  "generate": "Generovat",
28
67
  "insert": "Vložit",
29
- "limit_exceeded": "Výsledek přesahuje limit znaků v editoru. Zkraťte text a použijte ho znovu.",
68
+ "insert_below": "Vložit pod",
69
+ "limit_exceeded": "Výsledek přesahuje limit znaků editoru. Požádejte o kratší verzi.",
30
70
  "loading": "Generování...",
31
71
  "prompt": "Příkaz",
72
+ "prompt_placeholder": "Požádejte o napsání nebo úpravu textu",
32
73
  "quick_prompts": "Rychlé příkazy",
33
74
  "reasoning_effort": "Úsilí přemýšlení",
34
- "replace": "Nahradit",
75
+ "replace_selection": "Nahradit výběr",
35
76
  "result": "Výsledek",
77
+ "send_hint": "Enter — odeslat",
36
78
  "stop": "Zastavit",
37
79
  "thinking": "Přemýšlení",
38
- "title": "AI psaní",
80
+ "thinking_label": {
81
+ "off": "Přemýšlení: vypnuto",
82
+ "on": "Přemýšlení: zapnuto"
83
+ },
84
+ "thinking_now": "Přemýšlí…",
85
+ "thinking_states": {
86
+ "off": "Vypnuto",
87
+ "on": "Zapnuto"
88
+ },
89
+ "thought_for": "Přemýšlení: {seconds} s",
90
+ "title": "Asistent",
39
91
  "unavailable": "Pro použití tohoto kroku nakonfigurujte poskytovatele AI"
40
92
  },
41
93
  "alignment": "Zarovnání",
@@ -51,50 +103,163 @@
51
103
  "defaultValue": "Výchozí hodnota",
52
104
  "dialog": {
53
105
  "apply": "Použít",
106
+ "cancel": "Zrušit",
54
107
  "clear": "Vymazat",
55
108
  "close": "Zavřít",
56
109
  "iframe": {
57
- "dialog_title": "Přidat/upravit iframe",
58
- "frameborder": "Okraj rámce",
110
+ "advanced": "Pokročilé",
111
+ "allow": "Oprávnění (allow)",
112
+ "allow_hint": "Například: autoplay; fullscreen; clipboard-write",
113
+ "apply_failed": "Vložený obsah sem nelze vložit.",
114
+ "border": "Zobrazit rámeček",
115
+ "code_invalid": "Vložte kód jednoho prvku iframe s adresou. Kódy se skripty nebo jinými značkami nejsou podporovány.",
116
+ "code_parsed": "Kód rozpoznán: {fields}.",
59
117
  "height": "Výška",
118
+ "input": "Odkaz nebo kód pro vložení",
119
+ "input_hint": "Vložte adresu nebo kód iframe z nabídky Sdílet nebo Vložit na webu.",
120
+ "keep_ratio": "Zachovat poměr stran",
121
+ "lazy": "Načíst při posunutí do zobrazení",
60
122
  "name": "Název",
61
- "src": "Zdroj",
62
- "src_invalid": "Zadaná URL adresa je neplatná",
63
- "title": "Titulek",
123
+ "parsed_allow": "oprávnění",
124
+ "parsed_fullscreen": "celá obrazovka",
125
+ "parsed_loading": "odložené načítání",
126
+ "parsed_name": "název",
127
+ "parsed_sandbox": "sandbox",
128
+ "parsed_size": "velikost {width} × {height}",
129
+ "parsed_src": "adresa",
130
+ "parsed_title": "titulek",
131
+ "preview": "Náhled vloženého obsahu",
132
+ "preview_empty": "Náhled se zobrazí, jakmile bude adresa platná.",
133
+ "sandbox": "Sandbox",
134
+ "sandbox_hint": "Prázdné: bez omezení. Například: allow-scripts allow-same-origin",
135
+ "size": "Velikost",
136
+ "size_custom": "Vlastní",
137
+ "size_invalid": "Zadejte velikost v pixelech.",
138
+ "size_responsive": "Responzivní",
139
+ "size_responsive_hint": "Vyplní šířku textu v poměru {ratio}.",
140
+ "src_invalid": "Vložený obsah vyžaduje webovou adresu začínající https:// nebo http://.",
141
+ "src_protocol": "Doplňte k adrese protokol: https:// nebo http://.",
142
+ "src_required": "Vložte odkaz nebo kód pro vložení.",
143
+ "title_edit": "Upravit vložený obsah",
144
+ "title_insert": "Vložit obsah",
145
+ "title_missing": "Čtečky obrazovky ohlašují vložený obsah podle titulku. Popište, co zobrazuje.",
146
+ "title_text": "Titulek pro čtečky obrazovky",
64
147
  "width": "Šířka"
65
148
  },
66
149
  "image": {
67
- "alt": "alt",
150
+ "alt_missing": "Čtečky obrazovky a vyhledávače nedokážou přečíst obrázek bez alternativního textu.",
151
+ "alt_text": "Alternativní text pro čtečky obrazovky",
152
+ "apply_error": "Obrázek se sem nepodařilo uložit.",
68
153
  "caption": "Popisek",
69
154
  "caption_placeholder": "Přidejte popisek…",
70
- "dialog_title": "Přidání/úprava obrázku",
71
155
  "height": "Výška",
72
156
  "keep_ratio": "Udržet poměr stran",
157
+ "original_size": "Originál {width} × {height}",
158
+ "position": "Umístění",
159
+ "position_center": "Na střed",
160
+ "position_left": "Vlevo",
161
+ "position_right": "Vpravo",
162
+ "remove_error": "Obrázek se nepodařilo odstranit.",
163
+ "size": "Velikost",
164
+ "size_custom": "Vlastní",
165
+ "size_original": "Původní",
166
+ "size_text": "Šířka textu",
167
+ "source_upload": "Nahrát",
168
+ "source_url": "Z URL",
73
169
  "src": "Zdroj",
74
- "title": "Název",
170
+ "title_edit": "Upravit obrázek",
171
+ "title_insert": "Vložit obrázek",
172
+ "upload_cancel": "Zrušit nahrávání",
173
+ "upload_error": "Obrázek se nepodařilo nahrát.",
174
+ "upload_file": "Soubor obrázku",
75
175
  "width": "Šířka"
76
176
  },
177
+ "insert": "Vložit",
77
178
  "link": {
179
+ "advanced": "Pokročilé",
180
+ "apply_error": "Odkaz se nepodařilo použít.",
78
181
  "class": "CSS třída",
79
182
  "href": "Adresa odkazu",
80
- "href_error": "Neplatná adresa odkazu",
81
- "rel": "rel",
82
- "target": "Otevřít v...",
83
- "target_blank": "Novém okně",
84
- "target_self": "Aktuálním okně",
85
- "title": "Přidání/úprava odkazu"
183
+ "href_invalid": "Zadejte adresu odkazu, například https://example.com, #kotva nebo /stránka.",
184
+ "new_tab": "Otevřít na nové kartě",
185
+ "protocol_missing": "Chybí protokol. Přidat:",
186
+ "rel": "Atributy rel",
187
+ "rel_hint": "Libovolná hodnota: přidáte ji klávesou Enter, mezerou nebo čárkou.",
188
+ "rel_new_tab_hint": "Odkaz otevíraný na nové kartě dostane také noopener a noreferrer.",
189
+ "remove": "Odstranit odkaz",
190
+ "text": "Text",
191
+ "text_hint": "Ponechte prázdné, aby se jako text použila adresa.",
192
+ "title_edit": "Upravit odkaz",
193
+ "title_insert": "Vložit odkaz"
194
+ },
195
+ "linkCard": {
196
+ "apply_failed": "Kartu sem nelze vložit.",
197
+ "description": "Popis",
198
+ "display": "Zobrazit jako",
199
+ "display_card": "Karta",
200
+ "display_link": "Odkaz",
201
+ "fetch_failed": "Data stránky se nepodařilo načíst: {error}. Pole můžete vyplnit ručně.",
202
+ "href_invalid": "Zadejte úplnou adresu stránky, například https://example.com/page.",
203
+ "image": "Obrázek",
204
+ "image_choose": "Vybrat obrázek",
205
+ "image_failed": "Obrázek se nepodařilo nahrát. Zkuste to znovu.",
206
+ "image_remove": "Odstranit obrázek",
207
+ "image_replace": "Nahradit",
208
+ "layout": "Zobrazení",
209
+ "layout_compact": "Kompaktní",
210
+ "layout_large": "Velká",
211
+ "layout_text": "Bez obrázku",
212
+ "loading": "Načítají se data stránky…",
213
+ "page_title": "Název",
214
+ "paste_dismiss": "Ponechat odkaz",
215
+ "paste_error": "Pro tuto stránku není k dispozici náhled.",
216
+ "protocol_missing": "Začněte adresu https:// nebo http://.",
217
+ "refresh": "Obnovit data",
218
+ "site_name": "Název webu",
219
+ "title_edit": "Upravit kartu odkazu",
220
+ "title_insert": "Vložit kartu odkazu"
86
221
  },
87
222
  "preview": {
88
223
  "title": "Náhled"
89
224
  },
225
+ "remove": "Odstranit",
226
+ "save": "Uložit",
90
227
  "source": {
91
228
  "prettify": "prettify",
92
229
  "title": "Zobrazit zdrojový kód"
93
230
  },
94
231
  "video": {
232
+ "apply_failed": "Video sem nelze vložit.",
233
+ "autoplay": "Automaticky přehrát bez zvuku",
234
+ "controls": "Zobrazit ovládací prvky",
95
235
  "height": "Výška",
96
- "src": "Zdroj",
97
- "title": "Přidat/upravit video",
236
+ "keep_ratio": "Udržet poměr stran",
237
+ "loop": "Opakovat",
238
+ "poster": "Náhledový obrázek",
239
+ "poster_choose": "Vybrat obrázek",
240
+ "poster_hint": "Volitelné. Zobrazuje se, dokud se video nespustí.",
241
+ "poster_url": "URL náhledového obrázku",
242
+ "preview": "Náhled videa",
243
+ "preview_empty": "Náhled se zobrazí, jakmile bude odkaz rozpoznán.",
244
+ "size": "Velikost",
245
+ "size_custom": "Vlastní",
246
+ "size_invalid": "Zadejte velikost v pixelech.",
247
+ "size_responsive": "Responzivní",
248
+ "size_responsive_embed": "Responzivní 16:9",
249
+ "source_upload": "Nahrát",
250
+ "source_url": "Z URL",
251
+ "start": "Začít od",
252
+ "start_invalid": "Zadejte čas ve formátu m:ss nebo h:mm:ss.",
253
+ "title_edit": "Upravit video",
254
+ "title_insert": "Vložit video",
255
+ "upload_choose": "Vyberte soubor videa",
256
+ "upload_failed": "Soubor se nepodařilo nahrát. Zkuste to znovu.",
257
+ "upload_progress": "{loaded} z {total} MB",
258
+ "upload_replace": "Nahradit",
259
+ "url": "Odkaz na video",
260
+ "url_file_protocol": "Doplňte protokol do odkazu na soubor: https:// nebo http://.",
261
+ "url_required": "Vložte odkaz na YouTube, Vimeo nebo videosoubor.",
262
+ "url_unsupported": "Použijte odkaz na YouTube nebo Vimeo, nebo odkaz na videosoubor (.mp4, .webm, .ogg, .mov). Pro jiné weby použijte kód pro vložení.",
98
263
  "width": "Šířka"
99
264
  }
100
265
  },
@@ -171,7 +336,7 @@
171
336
  "search": "Hledat emoji...",
172
337
  "title": "Emoji"
173
338
  },
174
- "iframe": "iframe",
339
+ "iframe": "Vložený obsah",
175
340
  "image": "Obrázek",
176
341
  "image_toolbar": {
177
342
  "align_left": "Align left",
@@ -212,10 +377,48 @@
212
377
  },
213
378
  "style": {
214
379
  "color": {
215
- "custom": "Vlastní výběr",
380
+ "custom": "Vlastní barva",
381
+ "default": "Výchozí",
382
+ "eyedropper": "Vybrat barvu z obrazovky",
383
+ "hex": "Hexadecimální barva",
384
+ "hex_invalid": "Zadejte barvu ve formátu #rgb nebo #rrggbb.",
216
385
  "highlight": "Barva zvýraznění",
217
- "text": "Barva textu",
218
- "unset": "Vymazat barvu"
386
+ "names": {
387
+ "amber": "Jantarová",
388
+ "black": "Černá",
389
+ "blue": "Modrá",
390
+ "dark_amber": "Tmavě jantarová",
391
+ "dark_blue": "Tmavě modrá",
392
+ "dark_green": "Tmavě zelená",
393
+ "dark_grey": "Tmavě šedá",
394
+ "dark_orange": "Tmavě oranžová",
395
+ "dark_pink": "Tmavě růžová",
396
+ "dark_purple": "Tmavě fialová",
397
+ "dark_red": "Tmavě červená",
398
+ "dark_teal": "Tmavě modrozelená",
399
+ "green": "Zelená",
400
+ "grey": "Šedá",
401
+ "light_amber": "Světle jantarová",
402
+ "light_blue": "Světle modrá",
403
+ "light_green": "Světle zelená",
404
+ "light_grey": "Světle šedá",
405
+ "light_orange": "Světle oranžová",
406
+ "light_pink": "Světle růžová",
407
+ "light_purple": "Světle fialová",
408
+ "light_red": "Světle červená",
409
+ "light_teal": "Světle modrozelená",
410
+ "medium_grey": "Středně šedá",
411
+ "orange": "Oranžová",
412
+ "pale_grey": "Bledě šedá",
413
+ "pink": "Růžová",
414
+ "purple": "Fialová",
415
+ "red": "Červená",
416
+ "teal": "Modrozelená",
417
+ "white": "Bílá"
418
+ },
419
+ "no_highlight": "Bez zvýraznění",
420
+ "recent": "Nedávné",
421
+ "text": "Barva textu"
219
422
  },
220
423
  "fontFamily": "Písmo",
221
424
  "fontSize": "Velikost",