feat(lexical): support local image data URLs

Allow the image insertion dialog to select a local image and embed it as a Base64 data URL, while retaining URL-based insertion and leaving video URL-only.

Extract shared abortable FileReader handling for clipboard uploads and dialog selection; add English and Simplified Chinese messages plus an interaction test covering file selection through insertion.
This commit is contained in:
Maofeng
2026-07-31 16:03:54 +08:00
parent cbf5ee784f
commit 263b400860
7 changed files with 274 additions and 87 deletions
+15 -4
View File
@@ -68,18 +68,29 @@ export const messages = {
"lexical.media.alignLeft": "Align image left",
"lexical.media.alignRight": "Align image right",
"lexical.media.caption": "Caption",
"lexical.media.chooseImageFile": "Choose image",
"lexical.media.controls": "Image controls",
"lexical.media.deleteImage": "Delete image",
"lexical.media.editCaption": "Edit caption",
"lexical.media.imageAlt": "Alternative text",
"lexical.media.imageAltDescription": "Leave blank for decorative images; provide it when the image conveys information.",
"lexical.media.imageDescription": "Enter a publicly accessible image URL and provide alternative text.",
"lexical.media.imageAltDescription":
"Leave blank for decorative images; provide it when the image conveys information.",
"lexical.media.imageDescription":
"Enter an image URL or choose a local image file, then provide alternative text.",
"lexical.media.imageFile": "Image file",
"lexical.media.imageFileDescription":
"Choose an image from your device to embed it as a Base64 data URL.",
"lexical.media.imageFileReadError":
"The image could not be read. Try selecting it again.",
"lexical.media.imageUrl": "Image URL",
"lexical.media.readingImageFile": "Reading image…",
"lexical.media.uploading": "Uploading image",
"lexical.media.uploadingProgress": "Uploading {progress}%",
"lexical.media.uploadProgress": "Image upload progress",
"lexical.media.urlDescription": "Supports absolute URLs and relative URLs within this site.",
"lexical.media.videoDescription": "Enter a publicly accessible video URL in a browser-supported format.",
"lexical.media.urlDescription":
"Supports absolute URLs and relative URLs within this site.",
"lexical.media.videoDescription":
"Enter a publicly accessible video URL in a browser-supported format.",
"lexical.media.videoPoster": "Video poster URL",
"lexical.media.videoUrl": "Video URL",
"lexical.resize.east": "Resize image to the right",
+12 -3
View File
@@ -68,18 +68,27 @@ export const messages = {
"lexical.media.alignLeft": "图片左对齐",
"lexical.media.alignRight": "图片右对齐",
"lexical.media.caption": "图片说明",
"lexical.media.chooseImageFile": "选择图片",
"lexical.media.controls": "图片操作",
"lexical.media.deleteImage": "删除图片",
"lexical.media.editCaption": "编辑图片说明",
"lexical.media.imageAlt": "替代文本",
"lexical.media.imageAltDescription": "纯装饰图片可以留空;有信息含义时请填写。",
"lexical.media.imageDescription": "输入可公开访问的图片地址,并补充替代文本。",
"lexical.media.imageAltDescription":
"纯装饰图片可以留空;有信息含义时请填写。",
"lexical.media.imageDescription":
"输入图片地址,或选择本地图片,并补充替代文本。",
"lexical.media.imageFile": "图片文件",
"lexical.media.imageFileDescription":
"从设备选择图片,将以 Base64 Data URL 内嵌到内容中。",
"lexical.media.imageFileReadError": "无法读取该图片,请重新选择。",
"lexical.media.imageUrl": "图片地址",
"lexical.media.readingImageFile": "正在读取图片…",
"lexical.media.uploading": "正在上传图片",
"lexical.media.uploadingProgress": "正在上传 {progress}%",
"lexical.media.uploadProgress": "图片上传进度",
"lexical.media.urlDescription": "支持绝对地址或站内相对地址。",
"lexical.media.videoDescription": "输入可公开访问的视频地址;支持浏览器可播放的格式。",
"lexical.media.videoDescription":
"输入可公开访问的视频地址;支持浏览器可播放的格式。",
"lexical.media.videoPoster": "视频封面地址",
"lexical.media.videoUrl": "视频地址",
"lexical.resize.east": "向右调整图片尺寸",