mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-30 08:37:56 +09:00
- **Restore points for agent work**: Create named restore points before major edits, review changes with a dry run, and safely revert project content if needed. - **Shared Slot authoring**: Agents can turn existing sections into shared Slots and insert linked copies across pages, including valid nested Slots. - **DTCG and Figma token imports**: Import design tokens and CSS variables through CLI, MCP, or direct paste, with aliases, modes, composite values, and mappings supported. - **Consistent token conflict handling**: Every paste workflow now offers the same preserve, rename, or merge choices instead of silently overwriting existing design tokens. - **Draft-page previews**: Agents can generate and inspect previews of draft pages without publishing them or exposing drafts in production builds. - **Safer MCP mutations**: Destructive operations require explicit confirmation, invalid raw patches and invented record IDs are rejected, and restore operations commit atomically. - **More dependable agent contracts**: New tools have complete runtime schemas, clearer validation errors, and consistent behavior across CLI, MCP, Builder, and server APIs.
27 lines
941 B
TypeScript
27 lines
941 B
TypeScript
import type { WebstudioFragment } from "@webstudio-is/sdk";
|
|
import { breakpointPasteLimitWarning } from "@webstudio-is/project-build/runtime";
|
|
import {
|
|
insertWebstudioFragmentAt,
|
|
type Insertable,
|
|
} from "../instance-utils/insert";
|
|
import { builderApi } from "../builder-api";
|
|
import { resolveFragmentTokenConflicts } from "../resolve-token-conflicts";
|
|
|
|
export const hasFragmentData = (fragment: WebstudioFragment) =>
|
|
fragment.children.length > 0 || fragment.styleSources.length > 0;
|
|
|
|
export const insertFragmentWithBreakpointWarning = async (
|
|
fragment: WebstudioFragment,
|
|
insertable?: Insertable
|
|
) => {
|
|
const conflictResolution = await resolveFragmentTokenConflicts(fragment);
|
|
if (conflictResolution === "cancel") {
|
|
return false;
|
|
}
|
|
return insertWebstudioFragmentAt(fragment, insertable, conflictResolution, {
|
|
onBreakpointLimitMerge: () => {
|
|
builderApi.toast.warn(breakpointPasteLimitWarning);
|
|
},
|
|
});
|
|
};
|