feat(map-editor): 站点/路径视口样式实时编辑与画布快捷键联动

- reflection API 新增 viewport-style GET/PATCH 及 ARGB 无符号化工具
- 属性面板「类型默认」重构为选中对象的视口样式实时编辑(防抖 + 序号防竞态)
- 画布 iframe 聚焦时经 SSE 转发撤销/重做/删除,移除冗余的坐标添加菜单

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zhaowei.huang
2026-05-31 00:16:46 +08:00
co-authored by Cursor
parent 62943e6c42
commit 061acad9de
7 changed files with 580 additions and 214 deletions
@@ -49,6 +49,10 @@ export interface SelectionDetailEvent {
names: string[]
}
export interface WorkspaceShortcutEvent {
action: 'undo' | 'redo' | 'delete'
}
export interface MapEditStreamHandlers {
onAlarm?: (e: AlarmEvent) => void
onObjectCreated?: (e: ObjectChangeEvent) => void
@@ -57,6 +61,10 @@ export interface MapEditStreamHandlers {
onObjectBatchChanged?: (e: { count: number; source?: string }) => void
onPickResult?: (e: PickResultEvent) => void
onSelectionDetail?: (e: SelectionDetailEvent) => void
/** iframe 画布聚焦时由 SimpleLite 经 SSE 转发的撤销/重做/删除。 */
onWorkspaceShortcut?: (e: WorkspaceShortcutEvent) => void
/** 视口样式(站点/路径 Painter)在 Web 或桌面对话框中变更后广播。 */
onViewportStyleUpdated?: () => void
}
export function useMapEditStream(handlers: MapEditStreamHandlers) {
@@ -87,6 +95,12 @@ export function useMapEditStream(handlers: MapEditStreamHandlers) {
case 'selection-detail':
handlers.onSelectionDetail?.(payload as unknown as SelectionDetailEvent)
break
case 'workspace-shortcut':
handlers.onWorkspaceShortcut?.(payload as unknown as WorkspaceShortcutEvent)
break
case 'viewport-style-updated':
handlers.onViewportStyleUpdated?.()
break
}
}
@@ -49,7 +49,9 @@ export const KNOWN_EVENT_KINDS = [
'project-loaded',
'car-state',
'mission-status',
'monitor-config-updated'
'monitor-config-updated',
'workspace-shortcut',
'viewport-style-updated'
] as const
type Listener = (event: StreamEvent) => void