From 38119cbe55e45abeecee58a871cb7ceb89156640 Mon Sep 17 00:00:00 2001 From: clawdbot Date: Tue, 27 Jan 2026 22:47:10 +0800 Subject: [PATCH] fix: broaden legacy import + context-menu selection --- packages/editor/src/editor/Canvas.tsx | 3 ++- packages/sdk/src/core/goview/convert.ts | 34 +++++++++++++++++------- packages/sdk/src/core/widgets/urlLike.ts | 12 +++++++++ 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/packages/editor/src/editor/Canvas.tsx b/packages/editor/src/editor/Canvas.tsx index 8f08958..0910cb0 100644 --- a/packages/editor/src/editor/Canvas.tsx +++ b/packages/editor/src/editor/Canvas.tsx @@ -192,7 +192,8 @@ export function Canvas(props: CanvasProps) { const p = clientToWorld(e.clientX, e.clientY); if (!p) return; - const additive = (e as React.MouseEvent).ctrlKey || (e as React.MouseEvent).metaKey; + const additive = + (e as React.MouseEvent).ctrlKey || (e as React.MouseEvent).metaKey || (e as React.MouseEvent).shiftKey; if (targetId) { if (!props.selectionIds.includes(targetId)) { diff --git a/packages/sdk/src/core/goview/convert.ts b/packages/sdk/src/core/goview/convert.ts index 0825556..ea670c8 100644 --- a/packages/sdk/src/core/goview/convert.ts +++ b/packages/sdk/src/core/goview/convert.ts @@ -124,8 +124,18 @@ function isVideo(c: GoViewComponentLike): boolean { // goView variants: "Video", "VideoCommon", etc. if (k === 'video' || k.includes('video')) return true; + // Misspellings / aliases seen in forks. + if (k.includes('vedio')) return true; + // Other names seen in the wild. - return k.includes('mp4') || k.includes('media') || k.includes('player') || k.includes('stream'); + return ( + k.includes('mp4') || + k.includes('media') || + k.includes('player') || + k.includes('stream') || + k.includes('rtsp') || + k.includes('hls') + ); } function looksLikeImageOption(option: unknown): boolean { @@ -142,11 +152,13 @@ function looksLikeImageOption(option: unknown): boolean { } function looksLikeIframeOption(option: unknown): boolean { - if (!option || typeof option !== 'object') return false; - const o = option as Record; + if (!option) return false; - // Prefer explicit iframe-ish keys. - if ('iframeUrl' in o || 'iframeSrc' in o || 'embedUrl' in o) return true; + // Prefer explicit iframe-ish keys when option is an object. + if (typeof option === 'object') { + const o = option as Record; + if ('iframeUrl' in o || 'iframeSrc' in o || 'embedUrl' in o) return true; + } const url = pickUrlLike(option); if (!url) return false; @@ -161,11 +173,15 @@ function looksLikeIframeOption(option: unknown): boolean { } function looksLikeVideoOption(option: unknown): boolean { - if (!option || typeof option !== 'object') return false; - const o = option as Record; + if (!option) return false; - // Prefer explicit video-ish keys. - if ('videoUrl' in o || 'videoSrc' in o || 'mp4' in o || 'm3u8' in o || 'flv' in o || 'hls' in o || 'rtsp' in o) return true; + // Prefer explicit video-ish keys when option is an object. + if (typeof option === 'object') { + const o = option as Record; + if ('videoUrl' in o || 'videoSrc' in o || 'mp4' in o || 'm3u8' in o || 'flv' in o || 'hls' in o || 'rtsp' in o) { + return true; + } + } const url = pickUrlLike(option); if (!url) return false; diff --git a/packages/sdk/src/core/widgets/urlLike.ts b/packages/sdk/src/core/widgets/urlLike.ts index 84e9e6b..dbe1f54 100644 --- a/packages/sdk/src/core/widgets/urlLike.ts +++ b/packages/sdk/src/core/widgets/urlLike.ts @@ -40,13 +40,23 @@ function pickUrlLikeInner(input: unknown, depth: number): string { 'path', 'source', 'address', + // common aliases + 'srcUrl', + 'sourceUrl', + 'playUrl', // iframe-ish 'iframeUrl', 'iframeSrc', 'embedUrl', + 'frameUrl', + 'frameSrc', + 'htmlUrl', + 'htmlSrc', // video-ish 'videoUrl', 'videoSrc', + 'vedioUrl', + 'vedioSrc', 'mp4', 'm3u8', 'flv', @@ -57,6 +67,8 @@ function pickUrlLikeInner(input: unknown, depth: number): string { 'streamUrl', 'rtsp', 'rtspUrl', + 'rtmp', + 'rtmpUrl', ]) { const v = obj[key]; if (typeof v === 'string' && v) return v;