Edit workspace files directly on web (#2270)
* feat(files): edit workspace files on web Keep source buffers synchronized with host file changes and require an explicit overwrite or reload when revisions diverge. * feat(panels): surface and protect modified tabs Expose tooltip and modification state through the generic panel boundary so tabs can show stable metadata and guard every close route consistently. * fix(tests): use portable fake timeout handle * fix(files): harden editor conflict handling Preserve modified panel state across tab eviction, use precise revisions for optimistic writes, coalesce concurrent file watchers, and localize the editor interface. * fix(files): close editor concurrency gaps Coalesce clean reloads, preserve subscriber identities and file permissions, suspend pending saves during close confirmation, and carry precise revisions through file reads. * test(files): expect read revision metadata
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
import type { ComponentType } from "react";
|
||||
import { SvgXml } from "react-native-svg";
|
||||
import { getFileIconSvg } from "@/components/material-file-icons";
|
||||
import type { PanelIconProps } from "@/panels/panel-registry";
|
||||
|
||||
export function MaterialFileIcon({ fileName, size }: { fileName: string; size: number }) {
|
||||
return <SvgXml xml={getFileIconSvg(fileName)} width={size} height={size} />;
|
||||
}
|
||||
|
||||
export function createMaterialFileIcon(fileName: string): ComponentType<PanelIconProps> {
|
||||
function BoundMaterialFileIcon({ size }: PanelIconProps) {
|
||||
return <MaterialFileIcon fileName={fileName} size={size} />;
|
||||
}
|
||||
return BoundMaterialFileIcon;
|
||||
}
|
||||
Reference in New Issue
Block a user