@agent-native/core 0.84.38 → 0.84.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +6 -0
- package/corpus/core/package.json +1 -1
- package/corpus/templates/design/app/components/design/CodeWorkbenchHost.tsx +486 -341
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +13 -0
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +76 -58
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +6 -0
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +80 -8
- package/corpus/templates/design/app/i18n/zh-TW.ts +2 -2
- package/corpus/templates/design/app/i18n-data.ts +22 -30
- package/corpus/templates/design/app/lib/design-import.ts +42 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +180 -109
- package/corpus/templates/design/changelog/2026-07-01-code-workspace-now-opens-a-vs-code-like-editor-with-real-cod.md +6 -0
- package/corpus/templates/design/changelog/2026-07-01-import-is-more-compact-local-app-setup-is-clearer-and-figma.md +6 -0
- package/corpus/templates/design/package.json +1 -0
- package/dist/observability/routes.d.ts +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface ImportResult {
|
|
2
|
+
designId?: string;
|
|
3
|
+
files?: Array<{ id: string; filename: string }>;
|
|
4
|
+
warnings?: string[];
|
|
5
|
+
error?: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const VISUAL_EDIT_CONNECT_COMMAND =
|
|
9
|
+
"npx @agent-native/core@latest design connect";
|
|
10
|
+
|
|
11
|
+
export function hasFigmaClipboardPayload(value: string): boolean {
|
|
12
|
+
return /<[^>]+\sdata-(metadata|buffer)=["'][^"']*\((figmeta|figma)\)[^"']*["']/i.test(
|
|
13
|
+
value,
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function looksLikeStandaloneHtml(value: string): boolean {
|
|
18
|
+
return /<(html|body|main|section|div|article|header|footer|button|img)\b/i.test(
|
|
19
|
+
value,
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getFigmaClipboardContent(
|
|
24
|
+
clipboardData: Pick<DataTransfer, "getData"> | null | undefined,
|
|
25
|
+
): string | null {
|
|
26
|
+
if (!clipboardData) return null;
|
|
27
|
+
const html = clipboardData.getData("text/html");
|
|
28
|
+
if (html && hasFigmaClipboardPayload(html)) return html;
|
|
29
|
+
const text = clipboardData.getData("text/plain");
|
|
30
|
+
if (text && hasFigmaClipboardPayload(text)) return text;
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function importResultSummary(
|
|
35
|
+
result: ImportResult | undefined,
|
|
36
|
+
fallback: string,
|
|
37
|
+
) {
|
|
38
|
+
const count = result?.files?.length ?? 0;
|
|
39
|
+
if (count === 0) return fallback;
|
|
40
|
+
if (count === 1) return `Imported ${result!.files![0]!.filename}.`;
|
|
41
|
+
return `Imported ${count} screens.`;
|
|
42
|
+
}
|
|
@@ -129,6 +129,8 @@ import {
|
|
|
129
129
|
useCallback,
|
|
130
130
|
useRef,
|
|
131
131
|
useMemo,
|
|
132
|
+
lazy,
|
|
133
|
+
Suspense,
|
|
132
134
|
type ReactNode,
|
|
133
135
|
type PointerEvent as ReactPointerEvent,
|
|
134
136
|
type SetStateAction,
|
|
@@ -150,10 +152,7 @@ import {
|
|
|
150
152
|
CanvasContextMenu,
|
|
151
153
|
type CanvasContextMenuHandle,
|
|
152
154
|
} from "@/components/design/CanvasContextMenu";
|
|
153
|
-
import {
|
|
154
|
-
CodeWorkbenchHost,
|
|
155
|
-
type CodeWorkbenchActiveFile,
|
|
156
|
-
} from "@/components/design/CodeWorkbenchHost";
|
|
155
|
+
import { type CodeWorkbenchActiveFile } from "@/components/design/CodeWorkbenchHost";
|
|
157
156
|
import {
|
|
158
157
|
DesignCanvas,
|
|
159
158
|
type IframeContextMenuPayload,
|
|
@@ -273,6 +272,11 @@ import {
|
|
|
273
272
|
DESIGN_CHAT_STORAGE_KEY,
|
|
274
273
|
sendToDesignAgentChat,
|
|
275
274
|
} from "@/lib/agent-chat";
|
|
275
|
+
import {
|
|
276
|
+
getFigmaClipboardContent,
|
|
277
|
+
importResultSummary,
|
|
278
|
+
type ImportResult,
|
|
279
|
+
} from "@/lib/design-import";
|
|
276
280
|
import {
|
|
277
281
|
clearPendingGeneration,
|
|
278
282
|
hasFreshPendingGeneration,
|
|
@@ -3526,6 +3530,12 @@ type DesignLeftPanel =
|
|
|
3526
3530
|
| "import"
|
|
3527
3531
|
| "code";
|
|
3528
3532
|
|
|
3533
|
+
const CodeWorkbenchHost = lazy(() =>
|
|
3534
|
+
import("@/components/design/CodeWorkbenchHost").then((module) => ({
|
|
3535
|
+
default: module.CodeWorkbenchHost,
|
|
3536
|
+
})),
|
|
3537
|
+
);
|
|
3538
|
+
|
|
3529
3539
|
const INITIAL_GENERATION_DISABLED_LEFT_PANELS = new Set<DesignLeftPanel>([
|
|
3530
3540
|
"file",
|
|
3531
3541
|
"assets",
|
|
@@ -3570,6 +3580,7 @@ function DesignWorkspaceRail({
|
|
|
3570
3580
|
panel: DesignLeftPanel;
|
|
3571
3581
|
label: string;
|
|
3572
3582
|
icon: ReactNode;
|
|
3583
|
+
separatorBefore?: boolean;
|
|
3573
3584
|
}> = [
|
|
3574
3585
|
{
|
|
3575
3586
|
panel: "file",
|
|
@@ -3601,12 +3612,13 @@ function DesignWorkspaceRail({
|
|
|
3601
3612
|
label: t("designEditor.leftRail.tokens"),
|
|
3602
3613
|
icon: <IconAssembly className="size-[15px]" />,
|
|
3603
3614
|
},
|
|
3615
|
+
{
|
|
3616
|
+
panel: "code",
|
|
3617
|
+
label: "Code" /* i18n-ignore */,
|
|
3618
|
+
icon: <IconCode className="size-[15px]" />,
|
|
3619
|
+
separatorBefore: true,
|
|
3620
|
+
},
|
|
3604
3621
|
];
|
|
3605
|
-
const codeItem = {
|
|
3606
|
-
panel: "code" as const,
|
|
3607
|
-
label: "Code" /* i18n-ignore */,
|
|
3608
|
-
icon: <IconCode className="size-[15px]" />,
|
|
3609
|
-
};
|
|
3610
3622
|
|
|
3611
3623
|
return (
|
|
3612
3624
|
<nav
|
|
@@ -3622,94 +3634,54 @@ function DesignWorkspaceRail({
|
|
|
3622
3634
|
const active = item.panel === activePanel;
|
|
3623
3635
|
const disabled = disabledPanels?.has(item.panel) ?? false;
|
|
3624
3636
|
return (
|
|
3625
|
-
<
|
|
3626
|
-
|
|
3627
|
-
<
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
active && "text-foreground",
|
|
3645
|
-
)}
|
|
3646
|
-
>
|
|
3647
|
-
<span
|
|
3637
|
+
<div key={item.panel} className="flex w-full flex-col items-center">
|
|
3638
|
+
{item.separatorBefore ? (
|
|
3639
|
+
<div className="-mt-1 mb-3 h-px w-8 bg-border/70" />
|
|
3640
|
+
) : null}
|
|
3641
|
+
<Tooltip>
|
|
3642
|
+
<TooltipTrigger asChild>
|
|
3643
|
+
<button
|
|
3644
|
+
type="button"
|
|
3645
|
+
aria-label={item.label}
|
|
3646
|
+
aria-disabled={disabled || undefined}
|
|
3647
|
+
aria-current={active ? "page" : undefined}
|
|
3648
|
+
tabIndex={disabled ? -1 : undefined}
|
|
3649
|
+
onClick={(event) => {
|
|
3650
|
+
if (disabled) {
|
|
3651
|
+
event.preventDefault();
|
|
3652
|
+
return;
|
|
3653
|
+
}
|
|
3654
|
+
onPanelChange(item.panel);
|
|
3655
|
+
}}
|
|
3648
3656
|
className={cn(
|
|
3649
|
-
"flex
|
|
3650
|
-
active
|
|
3651
|
-
? "bg-[var(--design-editor-selection-color)] text-[var(--design-editor-accent-color)]"
|
|
3652
|
-
: "text-muted-foreground group-hover:bg-[var(--design-editor-layer-hover-color)] group-hover:text-foreground",
|
|
3657
|
+
"group flex w-12 cursor-pointer flex-col items-center justify-start gap-1 rounded-none text-[10px] font-[450] leading-none text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-[var(--design-editor-accent-color)]",
|
|
3653
3658
|
disabled &&
|
|
3654
|
-
"
|
|
3659
|
+
"cursor-default opacity-35 hover:text-muted-foreground",
|
|
3660
|
+
active && "text-foreground",
|
|
3655
3661
|
)}
|
|
3656
3662
|
>
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3663
|
+
<span
|
|
3664
|
+
className={cn(
|
|
3665
|
+
"flex size-8 items-center justify-center rounded-lg transition-colors",
|
|
3666
|
+
active
|
|
3667
|
+
? "bg-[var(--design-editor-selection-color)] text-[var(--design-editor-accent-color)]"
|
|
3668
|
+
: "text-muted-foreground group-hover:bg-[var(--design-editor-layer-hover-color)] group-hover:text-foreground",
|
|
3669
|
+
disabled &&
|
|
3670
|
+
"group-hover:bg-transparent group-hover:text-muted-foreground",
|
|
3671
|
+
)}
|
|
3672
|
+
>
|
|
3673
|
+
{item.icon}
|
|
3674
|
+
</span>
|
|
3675
|
+
<span className="max-w-full truncate leading-none">
|
|
3676
|
+
{item.label}
|
|
3677
|
+
</span>
|
|
3678
|
+
</button>
|
|
3679
|
+
</TooltipTrigger>
|
|
3680
|
+
<TooltipContent side="right">{item.label}</TooltipContent>
|
|
3681
|
+
</Tooltip>
|
|
3682
|
+
</div>
|
|
3666
3683
|
);
|
|
3667
3684
|
})}
|
|
3668
|
-
<div className="mt-auto flex w-full flex-col items-center border-t border-border/70 pt-3">
|
|
3669
|
-
<Tooltip>
|
|
3670
|
-
<TooltipTrigger asChild>
|
|
3671
|
-
<button
|
|
3672
|
-
type="button"
|
|
3673
|
-
aria-label={codeItem.label}
|
|
3674
|
-
aria-disabled={disabledPanels?.has(codeItem.panel) || undefined}
|
|
3675
|
-
aria-current={
|
|
3676
|
-
activePanel === codeItem.panel ? "page" : undefined
|
|
3677
|
-
}
|
|
3678
|
-
tabIndex={disabledPanels?.has(codeItem.panel) ? -1 : undefined}
|
|
3679
|
-
onClick={(event) => {
|
|
3680
|
-
if (disabledPanels?.has(codeItem.panel)) {
|
|
3681
|
-
event.preventDefault();
|
|
3682
|
-
return;
|
|
3683
|
-
}
|
|
3684
|
-
onPanelChange(codeItem.panel);
|
|
3685
|
-
}}
|
|
3686
|
-
className={cn(
|
|
3687
|
-
"group flex w-12 cursor-pointer flex-col items-center justify-start gap-1 rounded-none text-[10px] font-[450] leading-none text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-[var(--design-editor-accent-color)]",
|
|
3688
|
-
disabledPanels?.has(codeItem.panel) &&
|
|
3689
|
-
"cursor-default opacity-35 hover:text-muted-foreground",
|
|
3690
|
-
activePanel === codeItem.panel && "text-foreground",
|
|
3691
|
-
)}
|
|
3692
|
-
>
|
|
3693
|
-
<span
|
|
3694
|
-
className={cn(
|
|
3695
|
-
"flex size-8 items-center justify-center rounded-lg transition-colors",
|
|
3696
|
-
activePanel === codeItem.panel
|
|
3697
|
-
? "bg-[var(--design-editor-selection-color)] text-[var(--design-editor-accent-color)]"
|
|
3698
|
-
: "text-muted-foreground group-hover:bg-[var(--design-editor-layer-hover-color)] group-hover:text-foreground",
|
|
3699
|
-
disabledPanels?.has(codeItem.panel) &&
|
|
3700
|
-
"group-hover:bg-transparent group-hover:text-muted-foreground",
|
|
3701
|
-
)}
|
|
3702
|
-
>
|
|
3703
|
-
{codeItem.icon}
|
|
3704
|
-
</span>
|
|
3705
|
-
<span className="max-w-full truncate leading-none">
|
|
3706
|
-
{codeItem.label}
|
|
3707
|
-
</span>
|
|
3708
|
-
</button>
|
|
3709
|
-
</TooltipTrigger>
|
|
3710
|
-
<TooltipContent side="right">{codeItem.label}</TooltipContent>
|
|
3711
|
-
</Tooltip>
|
|
3712
|
-
</div>
|
|
3713
3685
|
</div>
|
|
3714
3686
|
{onMotionToggle ? (
|
|
3715
3687
|
<div className="mt-4 flex w-full flex-col items-center border-t border-border/70 pt-3">
|
|
@@ -11241,6 +11213,82 @@ export default function DesignEditor() {
|
|
|
11241
11213
|
],
|
|
11242
11214
|
);
|
|
11243
11215
|
|
|
11216
|
+
const importFigmaClipboardIntoDesign = useCallback(
|
|
11217
|
+
async (content: string) => {
|
|
11218
|
+
if (!id) return;
|
|
11219
|
+
if (!canEditDesign) {
|
|
11220
|
+
toast.error("Import requires editor access" /* i18n-ignore */);
|
|
11221
|
+
return;
|
|
11222
|
+
}
|
|
11223
|
+
try {
|
|
11224
|
+
const result = (await callAction("import-design-source", {
|
|
11225
|
+
designId: id,
|
|
11226
|
+
sourceType: "figma-paste-html",
|
|
11227
|
+
content,
|
|
11228
|
+
originalName: "figma-paste.html",
|
|
11229
|
+
})) as ImportResult;
|
|
11230
|
+
if (result?.error) throw new Error(result.error);
|
|
11231
|
+
await Promise.all([
|
|
11232
|
+
queryClient.invalidateQueries({ queryKey: ["action", "get-design"] }),
|
|
11233
|
+
queryClient.invalidateQueries({ queryKey: ["action"] }),
|
|
11234
|
+
]);
|
|
11235
|
+
toast.success(
|
|
11236
|
+
importResultSummary(result, t("designEditor.import.figmaSuccess")),
|
|
11237
|
+
);
|
|
11238
|
+
if (result?.warnings?.length) {
|
|
11239
|
+
toast.warning(t("designEditor.import.warningsToast"), {
|
|
11240
|
+
description: result.warnings[0],
|
|
11241
|
+
});
|
|
11242
|
+
}
|
|
11243
|
+
navigate(`/design/${result?.designId ?? id}?view=overview`);
|
|
11244
|
+
} catch (error) {
|
|
11245
|
+
toast.error(t("designEditor.import.errors.figmaPasteFailed"), {
|
|
11246
|
+
description:
|
|
11247
|
+
error instanceof Error ? error.message : t("common.genericError"),
|
|
11248
|
+
});
|
|
11249
|
+
}
|
|
11250
|
+
},
|
|
11251
|
+
[canEditDesign, id, navigate, queryClient, t],
|
|
11252
|
+
);
|
|
11253
|
+
|
|
11254
|
+
const handleCanvasFigmaClipboardPaste = useCallback(
|
|
11255
|
+
({ content }: { content: string }) => {
|
|
11256
|
+
void importFigmaClipboardIntoDesign(content);
|
|
11257
|
+
},
|
|
11258
|
+
[importFigmaClipboardIntoDesign],
|
|
11259
|
+
);
|
|
11260
|
+
|
|
11261
|
+
const handleEditorPaste = useCallback(
|
|
11262
|
+
(event: ClipboardEvent) => {
|
|
11263
|
+
if (event.defaultPrevented) return;
|
|
11264
|
+
if (isDesignHotkeyEditableTarget(event.target)) return;
|
|
11265
|
+
const figmaContent = getFigmaClipboardContent(event.clipboardData);
|
|
11266
|
+
if (figmaContent) {
|
|
11267
|
+
event.preventDefault();
|
|
11268
|
+
void importFigmaClipboardIntoDesign(figmaContent);
|
|
11269
|
+
return;
|
|
11270
|
+
}
|
|
11271
|
+
if (canEditDesign && hasCanvasClipboard) {
|
|
11272
|
+
event.preventDefault();
|
|
11273
|
+
handlePasteSelection();
|
|
11274
|
+
}
|
|
11275
|
+
},
|
|
11276
|
+
[
|
|
11277
|
+
canEditDesign,
|
|
11278
|
+
handlePasteSelection,
|
|
11279
|
+
hasCanvasClipboard,
|
|
11280
|
+
importFigmaClipboardIntoDesign,
|
|
11281
|
+
],
|
|
11282
|
+
);
|
|
11283
|
+
|
|
11284
|
+
useEffect(() => {
|
|
11285
|
+
if (embedded || (pendingQuestions && pendingQuestions.length > 0)) return;
|
|
11286
|
+
document.addEventListener("paste", handleEditorPaste, true);
|
|
11287
|
+
return () => {
|
|
11288
|
+
document.removeEventListener("paste", handleEditorPaste, true);
|
|
11289
|
+
};
|
|
11290
|
+
}, [embedded, handleEditorPaste, pendingQuestions]);
|
|
11291
|
+
|
|
11244
11292
|
const handlePasteOverSelection = useCallback(() => {
|
|
11245
11293
|
const entries = getCanvasClipboardEntries();
|
|
11246
11294
|
if (!activeFile || entries.length === 0) return;
|
|
@@ -13108,8 +13156,21 @@ export default function DesignEditor() {
|
|
|
13108
13156
|
setOverviewSelectAllRequest((request) => request + 1);
|
|
13109
13157
|
}, [files]);
|
|
13110
13158
|
|
|
13159
|
+
const shouldHandleEditorHotkey = useCallback((event: KeyboardEvent) => {
|
|
13160
|
+
const key = event.key.length === 1 ? event.key.toLowerCase() : event.key;
|
|
13161
|
+
const primary = event.metaKey || event.ctrlKey;
|
|
13162
|
+
const plainPasteHotkey =
|
|
13163
|
+
primary && key === "v" && !event.altKey && !event.shiftKey;
|
|
13164
|
+
if (!plainPasteHotkey) return true;
|
|
13165
|
+
return (
|
|
13166
|
+
(event as KeyboardEvent & { __agentNativeIframeHotkey?: boolean })
|
|
13167
|
+
.__agentNativeIframeHotkey === true
|
|
13168
|
+
);
|
|
13169
|
+
}, []);
|
|
13170
|
+
|
|
13111
13171
|
useDesignHotkeys({
|
|
13112
13172
|
enabled: !embedded && !(pendingQuestions && pendingQuestions.length > 0),
|
|
13173
|
+
shouldHandleEvent: shouldHandleEditorHotkey,
|
|
13113
13174
|
onMoveTool: canEditDesign ? handleMoveTool : undefined,
|
|
13114
13175
|
onFrameTool: canEditDesign ? handleFrameTool : undefined,
|
|
13115
13176
|
onRectangleTool: canEditDesign ? handleRectTool : undefined,
|
|
@@ -13119,7 +13180,10 @@ export default function DesignEditor() {
|
|
|
13119
13180
|
onCommentTool: canEditDesign ? handlePinToolToggle : undefined,
|
|
13120
13181
|
onScaleTool: canEditDesign ? handleScaleTool : undefined,
|
|
13121
13182
|
onCopy: handleCopySelection,
|
|
13122
|
-
onPaste:
|
|
13183
|
+
onPaste:
|
|
13184
|
+
canEditDesign && hasCanvasClipboard
|
|
13185
|
+
? () => handlePasteSelection()
|
|
13186
|
+
: undefined,
|
|
13123
13187
|
onCut: canEditDesign ? handleCutSelection : undefined,
|
|
13124
13188
|
onPasteOver: canEditDesign ? handlePasteOverSelection : undefined,
|
|
13125
13189
|
onCopyProps: canEditDesign ? handleCopyProps : undefined,
|
|
@@ -16957,24 +17021,24 @@ ${serializedHtml}
|
|
|
16957
17021
|
activeLeftPanel === "code" ? "flex" : "hidden",
|
|
16958
17022
|
)}
|
|
16959
17023
|
>
|
|
16960
|
-
{id ? (
|
|
16961
|
-
<
|
|
16962
|
-
|
|
16963
|
-
|
|
16964
|
-
|
|
16965
|
-
|
|
16966
|
-
: (activeFile?.id ?? activeFileId)
|
|
16967
|
-
}
|
|
16968
|
-
activeFilename={
|
|
16969
|
-
activeLeftPanel === "code"
|
|
16970
|
-
? routeCodeFilename
|
|
16971
|
-
: activeFile?.filename
|
|
17024
|
+
{id && activeLeftPanel === "code" ? (
|
|
17025
|
+
<Suspense
|
|
17026
|
+
fallback={
|
|
17027
|
+
<div className="flex min-h-0 flex-1 items-center justify-center bg-[var(--design-editor-panel-bg)] text-muted-foreground">
|
|
17028
|
+
<Spinner className="size-4" />
|
|
17029
|
+
</div>
|
|
16972
17030
|
}
|
|
16973
|
-
|
|
16974
|
-
|
|
16975
|
-
|
|
16976
|
-
|
|
16977
|
-
|
|
17031
|
+
>
|
|
17032
|
+
<CodeWorkbenchHost
|
|
17033
|
+
designId={id}
|
|
17034
|
+
activeFileId={routeCodeFileId}
|
|
17035
|
+
activeFilename={routeCodeFilename}
|
|
17036
|
+
selectedNodeId={selectedElementLayerId}
|
|
17037
|
+
selectedSelector={selectedCanvasSelector}
|
|
17038
|
+
canEdit={canEditDesign}
|
|
17039
|
+
onActiveFileChange={setActiveCodeFile}
|
|
17040
|
+
/>
|
|
17041
|
+
</Suspense>
|
|
16978
17042
|
) : null}
|
|
16979
17043
|
</div>
|
|
16980
17044
|
</div>
|
|
@@ -17299,6 +17363,9 @@ ${serializedHtml}
|
|
|
17299
17363
|
: undefined
|
|
17300
17364
|
}
|
|
17301
17365
|
onBoardIframeHotkey={handleIframeHotkey}
|
|
17366
|
+
onBoardFigmaClipboardPaste={
|
|
17367
|
+
handleCanvasFigmaClipboardPaste
|
|
17368
|
+
}
|
|
17302
17369
|
onBoardIframeContextMenu={handleIframeContextMenu}
|
|
17303
17370
|
onBoardTextEditingStateChange={setTextEditingState}
|
|
17304
17371
|
onBoardElementDblClickText={
|
|
@@ -17572,6 +17639,9 @@ ${serializedHtml}
|
|
|
17572
17639
|
handleScreenElementClear(screen.id)
|
|
17573
17640
|
}
|
|
17574
17641
|
onIframeHotkey={handleIframeHotkey}
|
|
17642
|
+
onFigmaClipboardPaste={
|
|
17643
|
+
handleCanvasFigmaClipboardPaste
|
|
17644
|
+
}
|
|
17575
17645
|
onIframeContextMenu={handleIframeContextMenu}
|
|
17576
17646
|
onVisualStyleChange={(selector, styles, info) =>
|
|
17577
17647
|
handleScreenVisualStyleChange(
|
|
@@ -17696,6 +17766,7 @@ ${serializedHtml}
|
|
|
17696
17766
|
setSelectedLayerIdsState([]);
|
|
17697
17767
|
}}
|
|
17698
17768
|
onIframeHotkey={handleIframeHotkey}
|
|
17769
|
+
onFigmaClipboardPaste={handleCanvasFigmaClipboardPaste}
|
|
17699
17770
|
onIframeContextMenu={handleIframeContextMenu}
|
|
17700
17771
|
onVisualStyleChange={handleVisualStyleChange}
|
|
17701
17772
|
onVisualStructureChange={handleVisualStructureChange}
|
|
@@ -42,22 +42,22 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
|
|
|
42
42
|
avgEvalScore: number;
|
|
43
43
|
} | {
|
|
44
44
|
error?: undefined;
|
|
45
|
+
ok?: undefined;
|
|
45
46
|
summary: import("./types.js").TraceSummary;
|
|
46
47
|
spans: import("./types.js").TraceSpan[];
|
|
47
48
|
id?: undefined;
|
|
48
|
-
ok?: undefined;
|
|
49
49
|
} | {
|
|
50
50
|
error?: undefined;
|
|
51
|
+
ok?: undefined;
|
|
51
52
|
summary?: undefined;
|
|
52
53
|
spans?: undefined;
|
|
53
54
|
id: string;
|
|
54
|
-
ok?: undefined;
|
|
55
55
|
} | {
|
|
56
|
+
ok?: undefined;
|
|
56
57
|
summary?: undefined;
|
|
57
58
|
spans?: undefined;
|
|
58
59
|
id?: undefined;
|
|
59
60
|
error: any;
|
|
60
|
-
ok?: undefined;
|
|
61
61
|
} | {
|
|
62
62
|
error?: undefined;
|
|
63
63
|
summary?: undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.84.
|
|
3
|
+
"version": "0.84.39",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|