framer-api 0.1.7 → 0.1.9
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/dist/index.d.ts +350 -1
- package/dist/index.js +6 -6
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -60,6 +60,16 @@ interface SubmitAgentClarificationOptions {
|
|
|
60
60
|
conversationId: string;
|
|
61
61
|
answers: AgentClarificationAnswer[];
|
|
62
62
|
}
|
|
63
|
+
interface RunSupervisorAgentCommandOptions {
|
|
64
|
+
goal: string;
|
|
65
|
+
model: string;
|
|
66
|
+
pagePath?: string;
|
|
67
|
+
maxSteps?: number;
|
|
68
|
+
}
|
|
69
|
+
interface RunSupervisorAgentCommandResult {
|
|
70
|
+
filename: string;
|
|
71
|
+
archiveBase64: string;
|
|
72
|
+
}
|
|
63
73
|
interface AgentTurnOptions {
|
|
64
74
|
/**
|
|
65
75
|
* Treat these nodes as the implicit selection for this agent turn.
|
|
@@ -4646,10 +4656,25 @@ declare const readProjectForAgent: unique symbol;
|
|
|
4646
4656
|
declare const getAgentSystemPrompt: unique symbol;
|
|
4647
4657
|
declare const getAgentContext: unique symbol;
|
|
4648
4658
|
declare const applyAgentChanges: unique symbol;
|
|
4659
|
+
declare const flattenComponentInstanceForAgent: unique symbol;
|
|
4660
|
+
declare const getAncestorsForAgent: unique symbol;
|
|
4661
|
+
declare const getGroundNodeForAgent: unique symbol;
|
|
4662
|
+
declare const getNodeForAgent: unique symbol;
|
|
4663
|
+
declare const getNodesForAgent: unique symbol;
|
|
4664
|
+
declare const getNodesOfTypesForAgent: unique symbol;
|
|
4665
|
+
declare const getParentNodeForAgent: unique symbol;
|
|
4666
|
+
declare const getScopeNodeForAgent: unique symbol;
|
|
4667
|
+
declare const makeExternalComponentLocalForAgent: unique symbol;
|
|
4668
|
+
declare const paginateForAgent: unique symbol;
|
|
4669
|
+
declare const publishForAgent: unique symbol;
|
|
4670
|
+
declare const queryImagesForAgent: unique symbol;
|
|
4649
4671
|
declare const reviewChangesForAgent: unique symbol;
|
|
4672
|
+
declare const serializeForAgent: unique symbol;
|
|
4673
|
+
declare const serializeNodesForAgent: unique symbol;
|
|
4650
4674
|
declare const startAgentConversation: unique symbol;
|
|
4651
4675
|
declare const continueAgentConversation: unique symbol;
|
|
4652
4676
|
declare const submitAgentClarification: unique symbol;
|
|
4677
|
+
declare const runSupervisorAgentCommand: unique symbol;
|
|
4653
4678
|
declare const $framerApiOnly: {
|
|
4654
4679
|
readonly publish: typeof publish;
|
|
4655
4680
|
readonly getDeployments: typeof getDeployments;
|
|
@@ -4662,10 +4687,25 @@ declare const $framerApiOnly: {
|
|
|
4662
4687
|
readonly getAgentSystemPrompt: typeof getAgentSystemPrompt;
|
|
4663
4688
|
readonly getAgentContext: typeof getAgentContext;
|
|
4664
4689
|
readonly applyAgentChanges: typeof applyAgentChanges;
|
|
4690
|
+
readonly flattenComponentInstanceForAgent: typeof flattenComponentInstanceForAgent;
|
|
4691
|
+
readonly getAncestorsForAgent: typeof getAncestorsForAgent;
|
|
4692
|
+
readonly getGroundNodeForAgent: typeof getGroundNodeForAgent;
|
|
4693
|
+
readonly getNodeForAgent: typeof getNodeForAgent;
|
|
4694
|
+
readonly getNodesForAgent: typeof getNodesForAgent;
|
|
4695
|
+
readonly getNodesOfTypesForAgent: typeof getNodesOfTypesForAgent;
|
|
4696
|
+
readonly getParentNodeForAgent: typeof getParentNodeForAgent;
|
|
4697
|
+
readonly getScopeNodeForAgent: typeof getScopeNodeForAgent;
|
|
4698
|
+
readonly makeExternalComponentLocalForAgent: typeof makeExternalComponentLocalForAgent;
|
|
4699
|
+
readonly paginateForAgent: typeof paginateForAgent;
|
|
4700
|
+
readonly publishForAgent: typeof publishForAgent;
|
|
4701
|
+
readonly queryImagesForAgent: typeof queryImagesForAgent;
|
|
4665
4702
|
readonly reviewChangesForAgent: typeof reviewChangesForAgent;
|
|
4703
|
+
readonly serializeForAgent: typeof serializeForAgent;
|
|
4704
|
+
readonly serializeNodesForAgent: typeof serializeNodesForAgent;
|
|
4666
4705
|
readonly startAgentConversation: typeof startAgentConversation;
|
|
4667
4706
|
readonly continueAgentConversation: typeof continueAgentConversation;
|
|
4668
4707
|
readonly submitAgentClarification: typeof submitAgentClarification;
|
|
4708
|
+
readonly runSupervisorAgentCommand: typeof runSupervisorAgentCommand;
|
|
4669
4709
|
};
|
|
4670
4710
|
|
|
4671
4711
|
type Ownership = {
|
|
@@ -4739,7 +4779,7 @@ type AllMembers = Omit<FramerPluginAPIAlpha, "isAllowedTo" | "subscribeToIsAllow
|
|
|
4739
4779
|
"WebPageNode.clone": WebPageNode["clone"];
|
|
4740
4780
|
"DesignPageNode.clone": DesignPageNode["clone"];
|
|
4741
4781
|
} & NamespaceMembers<ColorStyle, "ColorStyle"> & NamespaceMembers<TextStyle, "TextStyle"> & NamespaceMembers<Variable, "Variable"> & NamespaceMembers<BooleanVariable, "BooleanVariable", Variable> & NamespaceMembers<NumberVariable, "NumberVariable", Variable> & NamespaceMembers<StringVariable, "StringVariable", Variable> & NamespaceMembers<FormattedTextVariable, "FormattedTextVariable", Variable> & NamespaceMembers<EnumCase, "EnumCase"> & NamespaceMembers<EnumVariable, "EnumVariable", Variable> & NamespaceMembers<ColorVariable, "ColorVariable", Variable> & NamespaceMembers<ImageVariable, "ImageVariable", Variable> & NamespaceMembers<FileVariable, "FileVariable", Variable> & NamespaceMembers<LinkVariable, "LinkVariable", Variable> & NamespaceMembers<DateVariable, "DateVariable", Variable> & NamespaceMembers<BorderVariable, "BorderVariable", Variable> & NamespaceMembers<UnsupportedVariable, "UnsupportedVariable", Variable> & NamespaceMembers<VectorSet, "VectorSet"> & NamespaceMembers<VectorSetItem, "VectorSetItem">;
|
|
4742
|
-
declare const unprotectedMessageTypesSource: ["closeNotification", "closePlugin", "setCloseWarning", "getActiveCollection", "getActiveLocale", "getActiveManagedCollection", "getCanvasRoot", "getChildren", "getCollection", "getCollectionFields", "getCollectionFields2", "getCollectionItems", "getCollectionItems2", "getCollections", "getColorStyle", "getColorStyles", "getCurrentUser", "getCurrentUser2", "getCustomCode", "getDefaultLocale", "getFont", "getFonts", "getImage", "getImageData", "getLocales", "getLocaleLanguages", "getLocaleRegions", "getLocalizationGroups", "getManagedCollection", "getManagedCollectionFields", "getManagedCollectionFields2", "getManagedCollectionItemIds", "getManagedCollections", "getNode", "getNodesWithAttribute", "getNodesWithAttributeSet", "getNodesWithType", "getParent", "getPluginData", "getPluginDataForNode", "getPluginDataKeys", "getPluginDataKeysForNode", "getProjectInfo", "getProjectInfo2", "getPublishInfo", "getRect", "getSelection", "getSVGForNode", "getText", "getTextForNode", "getTextStyle", "getTextStyles", "hideUI", "setBackgroundMessage", "notify", "onPointerDown", "setActiveCollection", "setSelection", "showUI", "getCodeFileVersionContent", "typecheckCode", "getCodeFileVersions", "getCodeFiles", "getCodeFile", "getRedirects", "uploadFile", "uploadFiles", "uploadImage", "uploadImages", "zoomIntoView", "navigateTo", "getRuntimeErrorForModule", "getRuntimeErrorForCodeComponentNode", "showProgressOnInstances", "removeProgressFromInstances", "addComponentInstancePlaceholder", "updateComponentInstancePlaceholder", "removeComponentInstancePlaceholder", "setMenu", "showContextMenu", "getBreakpointSuggestionsForWebPage", "getActiveCollectionItemForWebPage", "getVariables", "getVectorSets", "getVectorSetItems", "getVectorSetItemVariables", "getChangedPaths", "getChangeContributors", "getDeployments", "readProjectForAgent", "getAgentSystemPrompt", "getAgentContext", "reviewChangesForAgent", "INTERNAL_getAiServiceInfo", "INTERNAL_sendTrackingEvent", "INTERNAL_getCurrentUser", "INTERNAL_getProjectInfo", "INTERNAL_getHTMLForNode", "getAiServiceInfo", "sendTrackingEvent", "unstable_getCodeFile", "unstable_getCodeFiles", "unstable_getCodeFileVersionContent", "unstable_getCodeFileLint2", "unstable_getCodeFileTypecheck2", "unstable_getCodeFileVersions", "lintCode"];
|
|
4782
|
+
declare const unprotectedMessageTypesSource: ["closeNotification", "closePlugin", "setCloseWarning", "getActiveCollection", "getActiveLocale", "getActiveManagedCollection", "getCanvasRoot", "getChildren", "getCollection", "getCollectionFields", "getCollectionFields2", "getCollectionItems", "getCollectionItems2", "getCollections", "getColorStyle", "getColorStyles", "getCurrentUser", "getCurrentUser2", "getCustomCode", "getDefaultLocale", "getFont", "getFonts", "getImage", "getImageData", "getLocales", "getLocaleLanguages", "getLocaleRegions", "getLocalizationGroups", "getManagedCollection", "getManagedCollectionFields", "getManagedCollectionFields2", "getManagedCollectionItemIds", "getManagedCollections", "getNode", "getNodesWithAttribute", "getNodesWithAttributeSet", "getNodesWithType", "getParent", "getPluginData", "getPluginDataForNode", "getPluginDataKeys", "getPluginDataKeysForNode", "getProjectInfo", "getProjectInfo2", "getPublishInfo", "getRect", "getSelection", "getSVGForNode", "getText", "getTextForNode", "getTextStyle", "getTextStyles", "hideUI", "setBackgroundMessage", "notify", "onPointerDown", "setActiveCollection", "setSelection", "showUI", "getCodeFileVersionContent", "typecheckCode", "getCodeFileVersions", "getCodeFiles", "getCodeFile", "unstable_getDependencyVersion", "getRedirects", "uploadFile", "uploadFiles", "uploadImage", "uploadImages", "zoomIntoView", "navigateTo", "getRuntimeErrorForModule", "getRuntimeErrorForCodeComponentNode", "showProgressOnInstances", "removeProgressFromInstances", "addComponentInstancePlaceholder", "updateComponentInstancePlaceholder", "removeComponentInstancePlaceholder", "setMenu", "showContextMenu", "getBreakpointSuggestionsForWebPage", "getActiveCollectionItemForWebPage", "getVariables", "getVectorSets", "getVectorSetItems", "getVectorSetItemVariables", "getChangedPaths", "getChangeContributors", "getDeployments", "readProjectForAgent", "getAgentSystemPrompt", "getAgentContext", "queryImagesForAgent", "reviewChangesForAgent", "getNodeForAgent", "getNodesForAgent", "getNodesOfTypesForAgent", "getScopeNodeForAgent", "getGroundNodeForAgent", "getParentNodeForAgent", "getAncestorsForAgent", "paginateForAgent", "serializeForAgent", "serializeNodesForAgent", "INTERNAL_getAiServiceInfo", "INTERNAL_sendTrackingEvent", "INTERNAL_getCurrentUser", "INTERNAL_getProjectInfo", "INTERNAL_getHTMLForNode", "getAiServiceInfo", "sendTrackingEvent", "unstable_getCodeFile", "unstable_getCodeFiles", "unstable_getCodeFileVersionContent", "unstable_getCodeFileLint2", "unstable_getCodeFileTypecheck2", "unstable_getCodeFileVersions", "lintCode"];
|
|
4743
4783
|
type UnprotectedMessageType = (typeof unprotectedMessageTypesSource)[number];
|
|
4744
4784
|
type ProtectedMessageType = Exclude<keyof PluginMessageAPI, UnprotectedMessageType>;
|
|
4745
4785
|
type Method = keyof {
|
|
@@ -4838,6 +4878,7 @@ declare const methodToMessageTypes: {
|
|
|
4838
4878
|
readonly subscribeToText: [];
|
|
4839
4879
|
readonly subscribeToTextStyles: [];
|
|
4840
4880
|
readonly createCodeFile: ["createCodeFile"];
|
|
4881
|
+
readonly unstable_getDependencyVersion: [];
|
|
4841
4882
|
readonly unstable_ensureMinimumDependencyVersion: ["unstable_ensureMinimumDependencyVersion"];
|
|
4842
4883
|
readonly getCodeFiles: [];
|
|
4843
4884
|
readonly getCodeFile: [];
|
|
@@ -4987,10 +5028,25 @@ declare const methodToMessageTypes: {
|
|
|
4987
5028
|
readonly [getAgentSystemPrompt]: [];
|
|
4988
5029
|
readonly [getAgentContext]: [];
|
|
4989
5030
|
readonly [applyAgentChanges]: ["applyAgentChanges"];
|
|
5031
|
+
readonly [flattenComponentInstanceForAgent]: ["flattenComponentInstanceForAgent"];
|
|
5032
|
+
readonly [getAncestorsForAgent]: [];
|
|
5033
|
+
readonly [getGroundNodeForAgent]: [];
|
|
5034
|
+
readonly [getNodeForAgent]: [];
|
|
5035
|
+
readonly [getNodesForAgent]: [];
|
|
5036
|
+
readonly [getNodesOfTypesForAgent]: [];
|
|
5037
|
+
readonly [getParentNodeForAgent]: [];
|
|
5038
|
+
readonly [getScopeNodeForAgent]: [];
|
|
5039
|
+
readonly [makeExternalComponentLocalForAgent]: ["makeExternalComponentLocalForAgent"];
|
|
5040
|
+
readonly [paginateForAgent]: [];
|
|
5041
|
+
readonly [publishForAgent]: ["publishForAgent"];
|
|
5042
|
+
readonly [queryImagesForAgent]: [];
|
|
4990
5043
|
readonly [reviewChangesForAgent]: [];
|
|
5044
|
+
readonly [serializeForAgent]: [];
|
|
5045
|
+
readonly [serializeNodesForAgent]: [];
|
|
4991
5046
|
readonly [startAgentConversation]: ["startAgentConversation"];
|
|
4992
5047
|
readonly [continueAgentConversation]: ["continueAgentConversation"];
|
|
4993
5048
|
readonly [submitAgentClarification]: ["submitAgentClarification"];
|
|
5049
|
+
readonly [runSupervisorAgentCommand]: ["runSupervisorAgentCommand"];
|
|
4994
5050
|
};
|
|
4995
5051
|
type AllMethods = keyof {
|
|
4996
5052
|
[K in Method as (typeof methodToMessageTypes)[K] extends [] ? never : K]: (typeof methodToMessageTypes)[K];
|
|
@@ -6375,6 +6431,13 @@ declare class FramerPluginAPIBeta extends FramerPluginAPI {
|
|
|
6375
6431
|
declare class FramerPluginAPIAlpha extends FramerPluginAPIBeta {
|
|
6376
6432
|
#private;
|
|
6377
6433
|
constructor(engine: PluginEngine);
|
|
6434
|
+
/**
|
|
6435
|
+
* Gets a dependency version from the project's dependencies.json file.
|
|
6436
|
+
*
|
|
6437
|
+
* @alpha
|
|
6438
|
+
* @category code-files
|
|
6439
|
+
*/
|
|
6440
|
+
unstable_getDependencyVersion(packageName: string): Promise<string | null>;
|
|
6378
6441
|
/**
|
|
6379
6442
|
* Adds a new component instance placeholder.
|
|
6380
6443
|
*
|
|
@@ -6538,6 +6601,28 @@ declare class FramerPluginAPIAlpha extends FramerPluginAPIBeta {
|
|
|
6538
6601
|
[$framerApiOnly.applyAgentChanges](dsl: string, options?: {
|
|
6539
6602
|
pagePath?: string;
|
|
6540
6603
|
}): Promise<void>;
|
|
6604
|
+
/**
|
|
6605
|
+
* Executes the publish flow on behalf of an agent.
|
|
6606
|
+
*
|
|
6607
|
+
* The input schema is documented in the string returned by {@link getAgentSystemPrompt}.
|
|
6608
|
+
*
|
|
6609
|
+
* @param input - Action-discriminated input object (preview / confirm_publish / deploy_to_production).
|
|
6610
|
+
* @returns The action's result — status, publish URLs, and any errors, warnings, or changes.
|
|
6611
|
+
*/
|
|
6612
|
+
[$framerApiOnly.publishForAgent](input?: Record<string, unknown>): Promise<unknown>;
|
|
6613
|
+
/**
|
|
6614
|
+
* Searches for stock images to use on the canvas (e.g. `"FrameNode"` `fill` values). Returns
|
|
6615
|
+
* candidate images with preview thumbnails and a `url` field for each. The returned URLs are
|
|
6616
|
+
* registered as trusted for this session so they can be applied directly via `fill="<url>"`
|
|
6617
|
+
* in a subsequent {@link applyAgentChanges} DSL command. Without calling this method first,
|
|
6618
|
+
* external image URLs are rejected at apply time.
|
|
6619
|
+
*
|
|
6620
|
+
* The input schema is documented in the string returned by {@link getAgentSystemPrompt}.
|
|
6621
|
+
*
|
|
6622
|
+
* @param input - Search input object (source / query / count / orientation).
|
|
6623
|
+
* @returns An object describing the candidates or an error.
|
|
6624
|
+
*/
|
|
6625
|
+
[$framerApiOnly.queryImagesForAgent](input: Record<string, unknown>): Promise<unknown>;
|
|
6541
6626
|
/**
|
|
6542
6627
|
* Reviews changes made by prior {@link applyAgentChanges} calls in this session.
|
|
6543
6628
|
*
|
|
@@ -6549,12 +6634,182 @@ declare class FramerPluginAPIAlpha extends FramerPluginAPIBeta {
|
|
|
6549
6634
|
[$framerApiOnly.reviewChangesForAgent](options?: {
|
|
6550
6635
|
pagePath?: string;
|
|
6551
6636
|
}): Promise<unknown>;
|
|
6637
|
+
/**
|
|
6638
|
+
* Flattens a local component instance into raw editable layers.
|
|
6639
|
+
*
|
|
6640
|
+
* @param input - `{ id }`: the id of the component instance to flatten.
|
|
6641
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6642
|
+
* @returns The flatten result — `success` with a `replacementId`, or `blocked` with a reason.
|
|
6643
|
+
*/
|
|
6644
|
+
[$framerApiOnly.flattenComponentInstanceForAgent](input: {
|
|
6645
|
+
id: string;
|
|
6646
|
+
}, options?: {
|
|
6647
|
+
pagePath?: string;
|
|
6648
|
+
}): Promise<unknown>;
|
|
6649
|
+
/**
|
|
6650
|
+
* Converts an external component into a local project component.
|
|
6651
|
+
*
|
|
6652
|
+
* @param input - `{ id, replaceAll? }`: the id of the external instance, and whether to replace all instances.
|
|
6653
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6654
|
+
* @returns `success` (with the local component name), `needs_confirmation` (retry with `replaceAll`), or `blocked` with a reason.
|
|
6655
|
+
*/
|
|
6656
|
+
[$framerApiOnly.makeExternalComponentLocalForAgent](input: {
|
|
6657
|
+
id: string;
|
|
6658
|
+
replaceAll?: boolean;
|
|
6659
|
+
}, options?: {
|
|
6660
|
+
pagePath?: string;
|
|
6661
|
+
}): Promise<unknown>;
|
|
6662
|
+
/**
|
|
6663
|
+
* Get a single node on the page, including its children.
|
|
6664
|
+
*
|
|
6665
|
+
* @param input - `{ id }`: the id of the node to read.
|
|
6666
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6667
|
+
* @returns The node, or `null` if no node with that id exists on the page.
|
|
6668
|
+
*/
|
|
6669
|
+
[$framerApiOnly.getNodeForAgent](input: {
|
|
6670
|
+
id: string;
|
|
6671
|
+
}, options?: {
|
|
6672
|
+
pagePath?: string;
|
|
6673
|
+
}): Promise<unknown>;
|
|
6674
|
+
/**
|
|
6675
|
+
* Get multiple nodes on the page, including their children.
|
|
6676
|
+
* Ids that don't resolve to a node are skipped.
|
|
6677
|
+
*
|
|
6678
|
+
* @param input - `{ ids }`: the ids of the nodes to read.
|
|
6679
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6680
|
+
* @returns The nodes that were found, in input order.
|
|
6681
|
+
*/
|
|
6682
|
+
[$framerApiOnly.getNodesForAgent](input: {
|
|
6683
|
+
ids: readonly string[];
|
|
6684
|
+
}, options?: {
|
|
6685
|
+
pagePath?: string;
|
|
6686
|
+
}): Promise<unknown>;
|
|
6687
|
+
/**
|
|
6688
|
+
* Get every node on the page of one or more kinds (e.g. `"FrameNode"`, `"RichTextNode"`, `"ComponentInstanceNode"`).
|
|
6689
|
+
*
|
|
6690
|
+
* @param input - `{ types }`: the node kinds to match.
|
|
6691
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6692
|
+
* @returns The matching nodes without their children.
|
|
6693
|
+
*/
|
|
6694
|
+
[$framerApiOnly.getNodesOfTypesForAgent](input: {
|
|
6695
|
+
types: readonly string[];
|
|
6696
|
+
}, options?: {
|
|
6697
|
+
pagePath?: string;
|
|
6698
|
+
}): Promise<unknown>;
|
|
6699
|
+
/**
|
|
6700
|
+
* Get the scope node (page or component) that contains the given node.
|
|
6701
|
+
*
|
|
6702
|
+
* @param input - `{ id }`: the id of a node inside the scope.
|
|
6703
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6704
|
+
* @returns The enclosing scope node, or `null` if the node isn't in any scope.
|
|
6705
|
+
*/
|
|
6706
|
+
[$framerApiOnly.getScopeNodeForAgent](input: {
|
|
6707
|
+
id: string;
|
|
6708
|
+
}, options?: {
|
|
6709
|
+
pagePath?: string;
|
|
6710
|
+
}): Promise<unknown>;
|
|
6711
|
+
/**
|
|
6712
|
+
* Get the top-level node on the canvas that contains the given node.
|
|
6713
|
+
*
|
|
6714
|
+
* @param input - `{ id }`: the id of a descendant node.
|
|
6715
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6716
|
+
* @returns The top-level node, or `null` if none applies.
|
|
6717
|
+
*/
|
|
6718
|
+
[$framerApiOnly.getGroundNodeForAgent](input: {
|
|
6719
|
+
id: string;
|
|
6720
|
+
}, options?: {
|
|
6721
|
+
pagePath?: string;
|
|
6722
|
+
}): Promise<unknown>;
|
|
6723
|
+
/**
|
|
6724
|
+
* Get the direct parent of a node.
|
|
6725
|
+
*
|
|
6726
|
+
* @param input - `{ id }`: the id of the child node.
|
|
6727
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6728
|
+
* @returns The parent node, or `null` if the node has no parent or doesn't exist.
|
|
6729
|
+
*/
|
|
6730
|
+
[$framerApiOnly.getParentNodeForAgent](input: {
|
|
6731
|
+
id: string;
|
|
6732
|
+
}, options?: {
|
|
6733
|
+
pagePath?: string;
|
|
6734
|
+
}): Promise<unknown>;
|
|
6735
|
+
/**
|
|
6736
|
+
* Get every ancestor of a node, from the direct parent up to the page root.
|
|
6737
|
+
*
|
|
6738
|
+
* @param input - `{ id }`: the id of the node to start from.
|
|
6739
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6740
|
+
* @returns The ancestors ordered from closest parent to the page root.
|
|
6741
|
+
*/
|
|
6742
|
+
[$framerApiOnly.getAncestorsForAgent](input: {
|
|
6743
|
+
id: string;
|
|
6744
|
+
}, options?: {
|
|
6745
|
+
pagePath?: string;
|
|
6746
|
+
}): Promise<unknown>;
|
|
6747
|
+
/**
|
|
6748
|
+
* Serialize a single node on the page.
|
|
6749
|
+
*
|
|
6750
|
+
* @param input - `{ id }` plus optional serialization options:
|
|
6751
|
+
* - `depth` — limit how many descendant levels to include.
|
|
6752
|
+
* - `attributeFilter` — only return the listed attributes per node.
|
|
6753
|
+
* - `ancestorPath` — also return the path of ancestors up to the page root.
|
|
6754
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6755
|
+
* @returns The serialized node, or `null` if no node with that id exists on the page.
|
|
6756
|
+
*/
|
|
6757
|
+
[$framerApiOnly.serializeForAgent](input: {
|
|
6758
|
+
id: string;
|
|
6759
|
+
depth?: number;
|
|
6760
|
+
attributeFilter?: readonly string[];
|
|
6761
|
+
ancestorPath?: boolean;
|
|
6762
|
+
}, options?: {
|
|
6763
|
+
pagePath?: string;
|
|
6764
|
+
}): Promise<unknown>;
|
|
6765
|
+
/**
|
|
6766
|
+
* Serialize multiple nodes on the page. Ids that don't resolve to a node are skipped.
|
|
6767
|
+
*
|
|
6768
|
+
* @param input - `{ ids }` plus optional serialization options:
|
|
6769
|
+
* - `depth` — limit how many descendant levels to include.
|
|
6770
|
+
* - `attributeFilter` — only return the listed attributes per node.
|
|
6771
|
+
* - `ancestorPath` — also return the path of ancestors up to the page root.
|
|
6772
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6773
|
+
* @returns The serialized nodes that were found, in input order.
|
|
6774
|
+
*/
|
|
6775
|
+
[$framerApiOnly.serializeNodesForAgent](input: {
|
|
6776
|
+
ids: readonly string[];
|
|
6777
|
+
depth?: number;
|
|
6778
|
+
attributeFilter?: readonly string[];
|
|
6779
|
+
ancestorPath?: boolean;
|
|
6780
|
+
}, options?: {
|
|
6781
|
+
pagePath?: string;
|
|
6782
|
+
}): Promise<unknown>;
|
|
6783
|
+
/**
|
|
6784
|
+
* Paginate a large array of values across multiple calls. The cursor is
|
|
6785
|
+
* opaque and only valid within the same headless session and page.
|
|
6786
|
+
*
|
|
6787
|
+
* - First page: pass `{ items }`.
|
|
6788
|
+
* - Continuation: pass `{ keyName, cursor }` using values returned by a previous call.
|
|
6789
|
+
*
|
|
6790
|
+
* @param input - `{ items }` for a fresh array, or `{ keyName, cursor }` for continuation.
|
|
6791
|
+
* @param options.pagePath - Target page path (e.g. `"/about"`). Defaults to the active page.
|
|
6792
|
+
* @returns The current page, including `keyName`, `cursor`, `results`, `totalResults`, and (if more pages remain) `nextCursor`.
|
|
6793
|
+
*/
|
|
6794
|
+
[$framerApiOnly.paginateForAgent](input: {
|
|
6795
|
+
items: readonly unknown[];
|
|
6796
|
+
keyName?: never;
|
|
6797
|
+
cursor?: never;
|
|
6798
|
+
} | {
|
|
6799
|
+
keyName: string;
|
|
6800
|
+
cursor: number;
|
|
6801
|
+
items?: never;
|
|
6802
|
+
}, options?: {
|
|
6803
|
+
pagePath?: string;
|
|
6804
|
+
}): Promise<unknown>;
|
|
6552
6805
|
/** @internal - Available only through framer-api */
|
|
6553
6806
|
[$framerApiOnly.startAgentConversation](prompt: string, options?: StartAgentConversationOptions): Promise<StartAgentConversationResult>;
|
|
6554
6807
|
/** @internal - Available only through framer-api */
|
|
6555
6808
|
[$framerApiOnly.continueAgentConversation](prompt: string, options: ContinueAgentConversationOptions): Promise<ContinueAgentConversationResult>;
|
|
6556
6809
|
/** @internal - Available only through framer-api */
|
|
6557
6810
|
[$framerApiOnly.submitAgentClarification](options: SubmitAgentClarificationOptions): Promise<SubmitAgentClarificationResult>;
|
|
6811
|
+
/** @internal - Available only through framer-api */
|
|
6812
|
+
[$framerApiOnly.runSupervisorAgentCommand](options: RunSupervisorAgentCommandOptions): Promise<RunSupervisorAgentCommandResult>;
|
|
6558
6813
|
}
|
|
6559
6814
|
/**
|
|
6560
6815
|
* Methods that are only available through framer-api (server API),
|
|
@@ -6665,6 +6920,8 @@ interface PluginMessageAPI {
|
|
|
6665
6920
|
name: string;
|
|
6666
6921
|
isCommon: boolean;
|
|
6667
6922
|
}[]>;
|
|
6923
|
+
/** @alpha */
|
|
6924
|
+
unstable_getDependencyVersion: FramerPluginAPIAlpha["unstable_getDependencyVersion"];
|
|
6668
6925
|
unstable_ensureMinimumDependencyVersion: FramerPluginAPI["unstable_ensureMinimumDependencyVersion"];
|
|
6669
6926
|
showUI: (options?: UIOptions) => Promise<void>;
|
|
6670
6927
|
notify: (message: string, options: NotifyOptionsData) => Promise<NotificationCloseReason>;
|
|
@@ -6852,15 +7109,106 @@ interface PluginMessageAPI {
|
|
|
6852
7109
|
pagePath?: string;
|
|
6853
7110
|
}) => Promise<void>;
|
|
6854
7111
|
/** @alpha */
|
|
7112
|
+
publishForAgent: (input?: Record<string, unknown>) => Promise<unknown>;
|
|
7113
|
+
/** @alpha */
|
|
7114
|
+
queryImagesForAgent: (input: Record<string, unknown>) => Promise<unknown>;
|
|
7115
|
+
/** @alpha */
|
|
6855
7116
|
reviewChangesForAgent: (options?: {
|
|
6856
7117
|
pagePath?: string;
|
|
6857
7118
|
}) => Promise<unknown>;
|
|
6858
7119
|
/** @alpha */
|
|
7120
|
+
flattenComponentInstanceForAgent: (input: {
|
|
7121
|
+
id: string;
|
|
7122
|
+
}, options?: {
|
|
7123
|
+
pagePath?: string;
|
|
7124
|
+
}) => Promise<unknown>;
|
|
7125
|
+
/** @alpha */
|
|
7126
|
+
makeExternalComponentLocalForAgent: (input: {
|
|
7127
|
+
id: string;
|
|
7128
|
+
replaceAll?: boolean;
|
|
7129
|
+
}, options?: {
|
|
7130
|
+
pagePath?: string;
|
|
7131
|
+
}) => Promise<unknown>;
|
|
7132
|
+
/** @alpha */
|
|
7133
|
+
getNodeForAgent: (input: {
|
|
7134
|
+
id: string;
|
|
7135
|
+
}, options?: {
|
|
7136
|
+
pagePath?: string;
|
|
7137
|
+
}) => Promise<unknown>;
|
|
7138
|
+
/** @alpha */
|
|
7139
|
+
getNodesForAgent: (input: {
|
|
7140
|
+
ids: readonly string[];
|
|
7141
|
+
}, options?: {
|
|
7142
|
+
pagePath?: string;
|
|
7143
|
+
}) => Promise<unknown>;
|
|
7144
|
+
/** @alpha */
|
|
7145
|
+
getNodesOfTypesForAgent: (input: {
|
|
7146
|
+
types: readonly string[];
|
|
7147
|
+
}, options?: {
|
|
7148
|
+
pagePath?: string;
|
|
7149
|
+
}) => Promise<unknown>;
|
|
7150
|
+
/** @alpha */
|
|
7151
|
+
getScopeNodeForAgent: (input: {
|
|
7152
|
+
id: string;
|
|
7153
|
+
}, options?: {
|
|
7154
|
+
pagePath?: string;
|
|
7155
|
+
}) => Promise<unknown>;
|
|
7156
|
+
/** @alpha */
|
|
7157
|
+
getGroundNodeForAgent: (input: {
|
|
7158
|
+
id: string;
|
|
7159
|
+
}, options?: {
|
|
7160
|
+
pagePath?: string;
|
|
7161
|
+
}) => Promise<unknown>;
|
|
7162
|
+
/** @alpha */
|
|
7163
|
+
getParentNodeForAgent: (input: {
|
|
7164
|
+
id: string;
|
|
7165
|
+
}, options?: {
|
|
7166
|
+
pagePath?: string;
|
|
7167
|
+
}) => Promise<unknown>;
|
|
7168
|
+
/** @alpha */
|
|
7169
|
+
getAncestorsForAgent: (input: {
|
|
7170
|
+
id: string;
|
|
7171
|
+
}, options?: {
|
|
7172
|
+
pagePath?: string;
|
|
7173
|
+
}) => Promise<unknown>;
|
|
7174
|
+
/** @alpha */
|
|
7175
|
+
serializeForAgent: (input: {
|
|
7176
|
+
id: string;
|
|
7177
|
+
depth?: number;
|
|
7178
|
+
attributeFilter?: readonly string[];
|
|
7179
|
+
ancestorPath?: boolean;
|
|
7180
|
+
}, options?: {
|
|
7181
|
+
pagePath?: string;
|
|
7182
|
+
}) => Promise<unknown>;
|
|
7183
|
+
/** @alpha */
|
|
7184
|
+
serializeNodesForAgent: (input: {
|
|
7185
|
+
ids: readonly string[];
|
|
7186
|
+
depth?: number;
|
|
7187
|
+
attributeFilter?: readonly string[];
|
|
7188
|
+
ancestorPath?: boolean;
|
|
7189
|
+
}, options?: {
|
|
7190
|
+
pagePath?: string;
|
|
7191
|
+
}) => Promise<unknown>;
|
|
7192
|
+
/** @alpha */
|
|
7193
|
+
paginateForAgent: (input: {
|
|
7194
|
+
items: readonly unknown[];
|
|
7195
|
+
keyName?: never;
|
|
7196
|
+
cursor?: never;
|
|
7197
|
+
} | {
|
|
7198
|
+
keyName: string;
|
|
7199
|
+
cursor: number;
|
|
7200
|
+
items?: never;
|
|
7201
|
+
}, options?: {
|
|
7202
|
+
pagePath?: string;
|
|
7203
|
+
}) => Promise<unknown>;
|
|
7204
|
+
/** @alpha */
|
|
6859
7205
|
startAgentConversation: (prompt: string, options?: StartAgentConversationOptions) => Promise<StartAgentConversationResult>;
|
|
6860
7206
|
/** @alpha */
|
|
6861
7207
|
continueAgentConversation: (prompt: string, options: ContinueAgentConversationOptions) => Promise<ContinueAgentConversationResult>;
|
|
6862
7208
|
/** @alpha */
|
|
6863
7209
|
submitAgentClarification: (options: SubmitAgentClarificationOptions) => Promise<SubmitAgentClarificationResult>;
|
|
7210
|
+
/** @alpha */
|
|
7211
|
+
runSupervisorAgentCommand: (options: RunSupervisorAgentCommandOptions) => Promise<RunSupervisorAgentCommandResult>;
|
|
6864
7212
|
[getAiServiceInfoMessageType]: (version?: AiServiceVersion) => Promise<AiServiceInfo>;
|
|
6865
7213
|
[sendTrackingEventMessageType]: (key: string, value: string, identifier: string) => Promise<void>;
|
|
6866
7214
|
[getCurrentUserMessageType]: () => Promise<User>;
|
|
@@ -7187,6 +7535,7 @@ declare const enabledMethods: {
|
|
|
7187
7535
|
subscribeToIsAllowedTo: false;
|
|
7188
7536
|
subscribeToCanvasRoot: false;
|
|
7189
7537
|
subscribeToPublishInfo: false;
|
|
7538
|
+
unstable_getDependencyVersion: false;
|
|
7190
7539
|
unstable_ensureMinimumDependencyVersion: false;
|
|
7191
7540
|
removeNode: true;
|
|
7192
7541
|
removeNodes: true;
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {env,isDeno,isWorkerd}from'std-env';import*as ue from'devalue';/* Framer API SDK v0.1.
|
|
2
|
-
var
|
|
1
|
+
import {env,isDeno,isWorkerd}from'std-env';import*as ue from'devalue';/* Framer API SDK v0.1.9 */
|
|
2
|
+
var bo=Object.defineProperty;var r=(n,e)=>bo(n,"name",{value:e,configurable:true});function pt(n){return n!==void 0}r(pt,"isDefined");function Pi(n){return n===void 0}r(Pi,"isUndefined");function I(n){return n===null}r(I,"isNull");function Si(n){return n!==null}r(Si,"isNotNull");function Pe(n){return n===true||n===false}r(Pe,"isBoolean");function f(n){return typeof n=="string"}r(f,"isString");function q(n){return typeof n=="number"&&Number.isFinite(n)}r(q,"isNumber");function xo(n){return typeof n=="function"}r(xo,"isFunction");function k(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}r(k,"isObject");function Se(n){if(typeof n!="object"||n===null)return false;let e=Object.getPrototypeOf(n);return e===null||e===Object.prototype}r(Se,"isPlainObject");function gt(n){return Array.isArray(n)}r(gt,"isArray");function Fe(n,e){throw e instanceof Error?e:e!==void 0?new Error(String(e)):new Error(n?`Unexpected value: ${n}`:"Application entered invalid state")}r(Fe,"assertNever");function c(n,...e){if(n)return;let t=Error("Assertion Error"+(e.length>0?": "+e.join(" "):""));if(t.stack)try{let i=t.stack.split(`
|
|
3
3
|
`);i[1]?.includes("assert")?(i.splice(1,1),t.stack=i.join(`
|
|
4
4
|
`)):i[0]?.includes("assert")&&(i.splice(0,1),t.stack=i.join(`
|
|
5
|
-
`));}catch{}throw t}r(c,"assert");function P(n){for(let e of Reflect.ownKeys(n)){let t=n[e];!t||typeof t!="object"&&!no(t)||P(t);}return Object.freeze(n)}r(P,"deepFreeze");function ui(n){return [n.slice(0,-1),n.at(-1)]}r(ui,"splitRestAndLast");var g="__class";var qt=Symbol(),Yt=Symbol(),Xt=Symbol(),Zt=Symbol(),io=Symbol(),ro=Symbol(),oo=Symbol(),ao=Symbol(),so=Symbol(),Jt=Symbol(),Qt=Symbol(),l={getAiServiceInfo:qt,sendTrackingEvent:Yt,getCurrentUser:Xt,getProjectInfo:Zt,environmentInfo:io,initialState:ro,showUncheckedPermissionToasts:oo,marshal:ao,unmarshal:so,getHTMLForNode:Jt,setHTMLForNode:Qt},pe="INTERNAL_",gt=`${pe}getAiServiceInfo`,ft=`${pe}sendTrackingEvent`,yt=`${pe}getCurrentUser`,ht=`${pe}getProjectInfo`,me=`${pe}getHTMLForNode`,ge=`${pe}setHTMLForNode`;var M=class{static{r(this,"VariableBase");}#e;#t;get nodeId(){return this.#t.nodeId}get nodeType(){return this.#t.nodeType}get id(){return this.#t.id}get name(){return this.#t.name}get description(){return this.#t.description??null}constructor(e,t){this.#e=e,this.#t=t;}async setAttributes(e){let t=await this.#e.invoke("updateVariable",this.nodeId,this.id,{...e,type:this.type});if(C(t))return null;let i=this.constructor;return new i(this.#e,t)}async remove(){await this.#e.invoke("removeVariables",this.nodeId,[this.id]);}},w="Variable";function V(n){let e=n.at(0);return c(!li(e)),`${e.toLowerCase()}${n.slice(1,-w.length)}`}r(V,"classToType");var lo=`Boolean${w}`,uo=V(lo),De=class n extends M{static{r(this,"BooleanVariable");}type=uo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},co=`Number${w}`,po=V(co),ve=class n extends M{static{r(this,"NumberVariable");}type=po;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},mo=`String${w}`,go=V(mo),Ne=class n extends M{static{r(this,"StringVariable");}type=go;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},fo=`FormattedText${w}`,yo=V(fo),ke=class n extends M{static{r(this,"FormattedTextVariable");}type=yo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},ho=`Enum${w}`,bo=V(ho),Y=class n{static{r(this,"EnumCase");}#e;#t;#n;#i;get id(){return this.#i.id}get name(){return this.#i.name}get nameByLocale(){return this.#i.nameByLocale}constructor(e,t,i,o){this.#e=e,this.#t=t,this.#n=i,this.#i=o;}async setAttributes(e){let t=await this.#e.invoke("updateEnumCase",this.#t,this.#n,this.id,e);return t?new n(this.#e,this.#t,this.#n,t):null}async remove(){await this.#e.invoke("removeEnumCase",this.#t,this.#n,this.id);}},Ee=class n extends M{static{r(this,"EnumVariable");}type=bo;#e;#t;#n;get cases(){return this.#n||(this.#n=P(this.#t.cases.map(e=>new Y(this.#e,this.nodeId,this.id,e)))),this.#n}constructor(e,t){super(e,t),this.#e=e,this.#t=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#t}async addCase(e){let t=await this.#e.invoke("addEnumCase",this.nodeId,this.id,e);return t?new Y(this.#e,this.nodeId,this.id,t):null}async setCaseOrder(e){await this.#e.invoke("setEnumCaseOrder",this.nodeId,this.id,e);}},xo=`Color${w}`,Co=V(xo),Me=class n extends M{static{r(this,"ColorVariable");}type=Co;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Io=`Image${w}`,To=V(Io),Ae=class n extends M{static{r(this,"ImageVariable");}type=To;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Po=`File${w}`,So=V(Po),we=class n extends M{static{r(this,"FileVariable");}type=So;#e;get allowedFileTypes(){return this.#e.allowedFileTypes}constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Fo=`Link${w}`,Do=V(Fo),Ve=class n extends M{static{r(this,"LinkVariable");}type=Do;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},vo=`Date${w}`,No=V(vo),Le=class n extends M{static{r(this,"DateVariable");}type=No;#e;get displayTime(){return this.#e.displayTime}constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},ko=`Border${w}`,Eo=V(ko),We=class n extends M{static{r(this,"BorderVariable");}type=Eo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Mo=`Unsupported${w}`,Ao=V(Mo),Re=class n extends M{static{r(this,"UnsupportedVariable");}type=Ao;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}};function ci(n){return n instanceof M}r(ci,"isVariable");function wo(n){return ci(n)&&n.nodeType==="component"}r(wo,"isComponentVariable");var B=class{static{r(this,"FieldBase");}#e;#t;#n;get id(){return this.#n.id}get name(){return this.#n.name}constructor(e,t,i){this.#e=e,this.#t=t,this.#n=i;}async setAttributes(e){let t={...e,type:this.type,id:this.id},[i]=await this.#e.invoke("addCollectionFields2",this.#t,[t]);if(c(pt(i)),C(i))return null;c(i.type===this.type);let o=this.constructor;return new o(this.#e,this.#t,i)}async remove(){await this.#e.invoke("removeCollectionFields",this.#t,[this.id]);}},R=class extends B{static{r(this,"FieldBaseWithRequired");}#e;get required(){return this.#e.required}constructor(e,t,i){super(e,t,i),this.#e=i;}},bt=class extends B{static{r(this,"BooleanField");}type=nn},xt=class extends B{static{r(this,"ColorField");}type=rn},Ct=class extends B{static{r(this,"NumberField");}type=on},It=class extends R{static{r(this,"StringField");}type=an;#e;constructor(e,t,i){super(e,t,i),this.#e=i;}get basedOn(){return this.#e.basedOn}},Tt=class extends R{static{r(this,"FormattedTextField");}type=sn},Be=class extends R{static{r(this,"ImageField");}type=ln},Pt=class extends R{static{r(this,"LinkField");}type=un},St=class extends R{static{r(this,"DateField");}type=cn;#e;get displayTime(){return this.#e.displayTime}constructor(e,t,i){super(e,t,i),this.#e=i;}},Ft=class extends B{static{r(this,"FieldDivider");}type=yn},Ue=class extends B{static{r(this,"UnsupportedField");}type=hn},Dt=class extends R{static{r(this,"FileField");}type=pn;#e;get allowedFileTypes(){return this.#e.allowedFileTypes}constructor(e,t,i){super(e,t,i),this.#e=i;}},vt=class extends B{static{r(this,"EnumField");}type=mn;#e;#t;#n;#i;get cases(){return this.#i||(this.#i=this.#n.cases.map(e=>new Y(this.#e,this.#t,this.id,e)),P(this.#i)),this.#i}constructor(e,t,i){super(e,t,i),this.#e=e,this.#t=t,this.#n=i;}async addCase(e){let t=await this.#e.invoke("addEnumCase",this.#t,this.id,e);return t?new Y(this.#e,this.#t,this.id,t):null}async setCaseOrder(e){await this.#e.invoke("setEnumCaseOrder",this.#t,this.id,e);}},Nt=class extends R{static{r(this,"CollectionReferenceField");}type=gn;#e;get collectionId(){return this.#e.collectionId}constructor(e,t,i){super(e,t,i),this.#e=i;}},kt=class extends R{static{r(this,"MultiCollectionReferenceField");}type=fn;#e;get collectionId(){return this.#e.collectionId}constructor(e,t,i){super(e,t,i),this.#e=i;}},en=class extends R{static{r(this,"ArrayField");}type=dn;fields;constructor(e,t,i){super(e,t,i);let o=i.fields[0];this.fields=[new Be(e,t,o)];}};function tn(n,e,t){return n.map(i=>{switch(i.type){case nn:return new bt(e,t,i);case rn:return new xt(e,t,i);case on:return new Ct(e,t,i);case an:return new It(e,t,i);case sn:return new Tt(e,t,i);case ln:return new Be(e,t,i);case un:return new Pt(e,t,i);case cn:return new St(e,t,i);case yn:return new Ft(e,t,i);case hn:return new Ue(e,t,i);case pn:return new Dt(e,t,i);case mn:return new vt(e,t,i);case gn:return new Nt(e,t,i);case fn:return new kt(e,t,i);case dn:return new en(e,t,i);default:return new Ue(e,t,i)}})}r(tn,"fieldDefinitionDataArrayToFieldClassInstances");function Vo(n){return n instanceof B}r(Vo,"isField");var pi="action";function Lo(n){return !!n&&pi in n&&f(n[pi])}r(Lo,"isLocalizedValueUpdate");function mi(n){return Object.keys(n).reduce((e,t)=>{let i=n[t];return Lo(i)&&(e[t]=i),e},{})}r(mi,"filterInlineLocalizationValues");var Oe=class n{static{r(this,"FileAsset");}id;url;extension;constructor(e){this.url=e.url,this.id=e.id,this.extension=e.extension;}static[l.unmarshal](e,t){return new n(t)}[l.marshal](){return {[g]:"FileAsset",id:this.id,url:this.url,extension:this.extension}}};function Wo(n){return n instanceof Oe}r(Wo,"isFileAsset");var Ro="ImageAsset";function gi(n){return N(n)?n[g]===Ro:false}r(gi,"isImageAssetData");var X=class n{static{r(this,"ImageAsset");}id;url;thumbnailUrl;altText;resolution;#e;#t;constructor(e,t){this.#t=e,this.url=t.url,this.id=t.id,this.thumbnailUrl=t.thumbnailUrl,this.altText=t.altText,this.resolution=t.resolution;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return {[g]:"ImageAsset",id:this.id,url:this.url,thumbnailUrl:this.thumbnailUrl,altText:this.altText,resolution:this.resolution}}cloneWithAttributes({altText:e,resolution:t}){return new n(this.#t,{[g]:"ImageAsset",id:this.id,url:this.url,thumbnailUrl:this.thumbnailUrl,altText:e??this.altText,resolution:t??this.resolution})}async measure(){return Oo(this.url)}async getData(){if(this.#e&&this.#e.bytes.length>0)return this.#e;let e=await this.#t.invoke("getImageData",{id:this.id,resolution:this.resolution});if(!e)throw new Error("Failed to load image data");return this.#e=e,e}async loadBitmap(){let{mimeType:e,bytes:t}=await this.getData(),i=new Blob([t],{type:e});return createImageBitmap(i)}async loadImage(){let e=await this.getData(),t=URL.createObjectURL(new Blob([e.bytes]));return new Promise((i,o)=>{let a=new Image;a.onload=()=>i(a),a.onerror=()=>o(),a.src=t;})}};function Bo(n){return n instanceof X}r(Bo,"isImageAsset");function Z(n){return n.type==="bytes"?[n.bytes.buffer]:[]}r(Z,"getTransferable");function Uo(n){if(!N(n))return false;let e="bytes",t="mimeType";return !(!(e in n)||!(t in n)||!(n[e]instanceof Uint8Array)||!f(n[t]))}r(Uo,"isBytesData");async function ze(n){if(n instanceof File)return Cn(n);let e=await fi(n.image);return {name:n.name,altText:n.altText,resolution:n.resolution,preferredImageRendering:n.preferredImageRendering,...e}}r(ze,"createImageTransferFromInput");async function bn(n){if(n instanceof File)return Cn(n);let e=await fi(n.file);return {name:n.name,...e}}r(bn,"createFileTransferFromInput");async function fi(n){return n instanceof File?Cn(n):Uo(n)?{type:"bytes",mimeType:n.mimeType,bytes:n.bytes}:{type:"url",url:n}}r(fi,"createAssetTransferFromAssetInput");function xn(n){return Promise.all(n.map(ze))}r(xn,"createNamedAssetDataTransferFromInput");async function Cn(n){return new Promise((e,t)=>{let i=new FileReader;i.onload=o=>{let a=n.type,s=o.target?.result;if(!s||!(s instanceof ArrayBuffer)){t(new Error("Failed to read file, arrayBuffer is null"));return}let d=new Uint8Array(s);e({bytes:d,mimeType:a,type:"bytes",name:n.name});},i.onerror=o=>{t(o);},i.readAsArrayBuffer(n);})}r(Cn,"getAssetDataFromFile");async function Oo(n){let e=n instanceof File,t=e?URL.createObjectURL(n):n,i=new Image;return i.crossOrigin="anonymous",new Promise((o,a)=>{i.onload=()=>{o({width:i.naturalWidth,height:i.naturalHeight});},i.onerror=s=>{a(s);},i.src=t;}).finally(()=>{e&&URL.revokeObjectURL(t);})}r(Oo,"measureImage");var Et=class{static{r(this,"ComputedValueBase");}};var zo="unsupported",Ge=class n extends Et{static{r(this,"UnsupportedComputedValue");}type=zo;#e;constructor(e){super(),this.#e=e;}static[l.unmarshal](e,t){return new n(t)}[l.marshal](){return this.#e}};function Go(n){return n instanceof Et}r(Go,"isComputedValue");var Ko="Font";function hi(n){return N(n)&&n[g]===Ko}r(hi,"isFontData");function $o(n){if(!q(n))return false;switch(n){case 100:case 200:case 300:case 400:case 500:case 600:case 700:case 800:case 900:return true;default:return false}}r($o,"isFontWeight");function jo(n){if(!f(n))return false;switch(n){case "normal":case "italic":return true;default:return false}}r(jo,"isFontStyle");function bi(n){return N(n)?f(n.family)&&f(n.selector)&&$o(n.weight)&&jo(n.style):false}r(bi,"isFont");var G=class n{static{r(this,"Font");}selector;family;weight;style;constructor(e){this.selector=e.selector,this.family=e.family,this.weight=e.weight,this.style=e.style;}static[l.unmarshal](e,t){let i=yi.get(t.selector);if(i)return i;let o=new n(t);return yi.set(t.selector,o),o}[l.marshal](){return {[g]:"Font",selector:this.selector,family:this.family,weight:this.weight,style:this.style}}},yi=new Map;var Mt="plugin-marshal";function In(n){return N(n)&&l.marshal in n}r(In,"isSelfMarshalable");function L(n){if(In(n))return n[l.marshal]();if(mt(n))return n.map(L);if(Se(n)){let e={};for(let t of Object.keys(n))e[t]=L(n[t]);return e}return n}r(L,"marshal");var Ho="LinearGradient",_o="RadialGradient",qo="ConicGradient",fe=class{static{r(this,"GradientBase");}#e;get stops(){return this.#e.stops}constructor(e){this.#e=e;}cloneWithAttributes(e){let t=this.constructor;return new t({...this.#e,...e})}},Ke=class n extends fe{static{r(this,"LinearGradient");}[g]=Ho;#e;get angle(){return this.#e.angle}constructor(e){super(e),this.#e=e;}static[l.unmarshal](e,t){return new n({...t,stops:y(e,t.stops)})}[l.marshal](){return L({...this.#e,[g]:this[g]})}toCSS(){let e=this.#e.stops.map(t=>(c(f(t.color),"ColorStyle not supported yet"),`${t.color} ${t.position*100}%`)).join(", ");return `linear-gradient(${this.angle}deg, ${e})`}},$e=class n extends fe{static{r(this,"RadialGradient");}[g]=_o;#e;get width(){return this.#e.width}get height(){return this.#e.height}get x(){return this.#e.x}get y(){return this.#e.y}constructor(e){super(e),this.#e=e;}static[l.unmarshal](e,t){return new n({...t,stops:y(e,t.stops)})}[l.marshal](){return L({...this.#e,[g]:this[g]})}toCSS(){let e=this.stops.map((t,i)=>{c(f(t.color),"ColorStyle not supported yet");let o=this.stops[i+1],a=t.position===1&&o?.position===1?t.position-1e-4:t.position;return `${t.color} ${a*100}%`}).join(", ");return `radial-gradient(${this.width} ${this.height} at ${this.x} ${this.y}, ${e})`}},je=class n extends fe{static{r(this,"ConicGradient");}[g]=qo;#e;get angle(){return this.#e.angle}get x(){return this.#e.x}get y(){return this.#e.y}constructor(e){super(e),this.#e=e;}static[l.unmarshal](e,t){return new n({...t,stops:y(e,t.stops)})}[l.marshal](){return L({...this.#e,[g]:this[g]})}toCSS(){let e=this.stops.map(t=>(c(f(t.color),"ColorStyle not supported yet"),`${t.color} ${t.position*360}deg`)).join(", ");return `conic-gradient(from ${this.angle}deg at ${this.x} ${this.y}, ${e})`}};function xi(n){return n instanceof fe}r(xi,"isGradient");var Yo="ColorStyle";function At(n){return N(n)?n[g]===Yo:false}r(At,"isColorStyleData");var ne=class n{static{r(this,"ColorStyle");}id;name;path;light;dark;#e;constructor(e,t){this.id=t.id,this.name=t.name,this.light=t.light,this.dark=t.dark,this.path=t.path,this.#e=e;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return {[g]:"ColorStyle",id:this.id,name:this.name,light:this.light,dark:this.dark,path:this.path}}async setAttributes(e){let t=await this.#e.invoke("setColorStyleAttributes",this.id,e);return t?new n(this.#e,t):null}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async remove(){return this.#e.invoke("removeColorStyle",this.id)}};function ye(n){return n instanceof ne}r(ye,"isColorStyle");var Xo="TextStyle";function Ci(n){return N(n)?n[g]===Xo:false}r(Ci,"isTextStyleData");var He=class n{static{r(this,"TextStyle");}id;name;path;tag;font;boldFont;italicFont;boldItalicFont;color;transform;alignment;decoration;decorationColor;decorationThickness;decorationStyle;decorationSkipInk;decorationOffset;balance;breakpoints;minWidth;fontSize;letterSpacing;lineHeight;paragraphSpacing;#e;constructor(e,t){this.id=t.id,this.name=t.name,this.path=t.path,this.tag=t.tag,this.font=G[l.unmarshal](e,t.font),this.boldFont=t.boldFont&&G[l.unmarshal](e,t.boldFont),this.italicFont=t.italicFont&&G[l.unmarshal](e,t.italicFont),this.boldItalicFont=t.boldItalicFont&&G[l.unmarshal](e,t.boldItalicFont),this.color=At(t.color)?ne[l.unmarshal](e,t.color):t.color,this.transform=t.transform,this.alignment=t.alignment,this.decoration=t.decoration,this.decorationColor=At(t.decorationColor)?ne[l.unmarshal](e,t.decorationColor):t.decorationColor,this.decorationThickness=t.decorationThickness,this.decorationStyle=t.decorationStyle,this.decorationSkipInk=t.decorationSkipInk,this.decorationOffset=t.decorationOffset,this.balance=t.balance,this.breakpoints=t.breakpoints,this.minWidth=t.minWidth,this.fontSize=t.fontSize,this.letterSpacing=t.letterSpacing,this.lineHeight=t.lineHeight,this.paragraphSpacing=t.paragraphSpacing,this.#e=e;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return {[g]:"TextStyle",id:this.id,name:this.name,path:this.path,tag:this.tag,font:this.font[l.marshal](),boldFont:this.boldFont?.[l.marshal]()??null,italicFont:this.italicFont?.[l.marshal]()??null,boldItalicFont:this.boldItalicFont?.[l.marshal]()??null,color:ye(this.color)?this.color[l.marshal]():this.color,transform:this.transform,alignment:this.alignment,decoration:this.decoration,decorationColor:ye(this.decorationColor)?this.decorationColor[l.marshal]():this.decorationColor,decorationThickness:this.decorationThickness,decorationStyle:this.decorationStyle,decorationSkipInk:this.decorationSkipInk,decorationOffset:this.decorationOffset,balance:this.balance,breakpoints:this.breakpoints,minWidth:this.minWidth,fontSize:this.fontSize,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,paragraphSpacing:this.paragraphSpacing}}async setAttributes(e){let t=await this.#e.invoke("setTextStyleAttributes",this.id,e);return t?new n(this.#e,t):null}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async remove(){return this.#e.invoke("removeTextStyle",this.id)}};function Tn(n){return n instanceof He}r(Tn,"isTextStyle");var Ii={ColorStyle:ne,ConicGradient:je,FileAsset:Oe,Font:G,ImageAsset:X,LinearGradient:Ke,RadialGradient:$e,TextStyle:He,BooleanVariable:De,BorderVariable:We,ColorVariable:Me,DateVariable:Le,EnumVariable:Ee,FileVariable:we,FormattedTextVariable:ke,ImageVariable:Ae,LinkVariable:Ve,NumberVariable:ve,StringVariable:Ne,UnsupportedVariable:Re,UnsupportedComputedValue:Ge};function Zo(n){return Se(n)&&f(n[g])&&n[g]in Ii}r(Zo,"isSelfUnmarshalable");function y(n,e){if(Zo(e))return Ii[e[g]][l.unmarshal](n,e);if(mt(e))return e.map(t=>y(n,t));if(Se(e)){let t={};for(let i of Object.keys(e))t[i]=y(n,e[i]);return t}return e}r(y,"unmarshal");var Jo={array:false,boolean:false,collectionReference:false,color:false,date:false,enum:false,file:false,formattedText:false,image:true,link:false,multiCollectionReference:false,number:false,string:false,unsupported:false};function Qo(n){return Jo[n]}r(Qo,"isSupportedArrayItemFieldType");function ea(n){return Qo(n.type)}r(ea,"isSupportedArrayItemFieldDataEntry");var nn="boolean",rn="color",on="number",an="string",sn="formattedText",ln="image",dn="array",un="link",cn="date",pn="file",mn="enum",gn="collectionReference",fn="multiCollectionReference",yn="divider",hn="unsupported";function ta(n){return n.map(e=>{if(e.type!=="enum")return e;let t=e.cases.map(i=>{let o=i.nameByLocale?mi(i.nameByLocale):void 0;return {...i,nameByLocale:o}});return {...e,cases:t}})}r(ta,"sanitizeEnumFieldForMessage");function Ti(n,e){let t={};for(let i in n){let o=n[i];if(!o)continue;if(o.type!=="array"){t[i]=y(e,o);continue}let a=o.value.map(s=>{let d=Ti(s.fieldData,e),u={};for(let I in d){let S=d[I];c(S&&ea(S),"Unsupported array item field data entry"),u[I]=S;}return {...s,fieldData:u}});t[i]={...o,value:a};}return t}r(Ti,"deserializeFieldData");var he=class{static{r(this,"ManagedCollection");}id;name;readonly;managedBy;#e;constructor(e,t){this.id=e.id,this.name=e.name,this.readonly=e.readonly,c(e.managedBy!=="user","Managed Collection can only be managed by a plugin"),this.managedBy=e.managedBy,this.#e=t,P(this);}async getItemIds(){return this.#e.invoke("getManagedCollectionItemIds",this.id)}async setItemOrder(e){return this.#e.invoke("setManagedCollectionItemOrder",this.id,e)}async getFields(){return this.#e.invoke("getManagedCollectionFields2",this.id)}async setFields(e){let t=ta(e);return this.#e.invoke("setManagedCollectionFields",this.id,t)}async addItems(e){return this.#e.invoke("addManagedCollectionItems2",this.id,e)}async removeItems(e){return this.#e.invoke("removeManagedCollectionItems",this.id,e)}async setAsActive(){return this.#e.invoke("setActiveCollection",this.id)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async navigateTo(e){return this.#e.invoke("navigateTo",this.id,e)}},ie=class{static{r(this,"Collection");}id;name;slugFieldName;slugFieldBasedOn;readonly;managedBy;#e;constructor(e,t){this.id=e.id,this.name=e.name,this.slugFieldName=e.slugFieldName,this.slugFieldBasedOn=e.slugFieldBasedOn,this.readonly=e.readonly,this.managedBy=e.managedBy,this.#e=t,P(this);}async setItemOrder(e){return this.#e.invoke("setCollectionItemOrder",this.id,e)}async getFields(){let e=await this.#e.invoke("getCollectionFields2",this.id,true);return tn(e,this.#e,this.id)}async addFields(e){let t=await this.#e.invoke("addCollectionFields2",this.id,e);return c(t.every(di)),tn(t,this.#e,this.id)}async removeFields(e){return this.#e.invoke("removeCollectionFields",this.id,e)}async setFieldOrder(e){return this.#e.invoke("setCollectionFieldOrder",this.id,e)}async getItems(){return (await this.#e.invoke("getCollectionItems2",this.id)).map(t=>new _e(t,this.#e))}async addItems(e){await this.#e.invoke("addCollectionItems2",this.id,e);}async removeItems(e){return this.#e.invoke("removeCollectionItems",e)}async setAsActive(){return this.#e.invoke("setActiveCollection",this.id)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async navigateTo(e){return this.#e.invoke("navigateTo",this.id,e)}},_e=class n{static{r(this,"CollectionItem");}id;nodeId;slug;slugByLocale;draft;fieldData;#e;constructor(e,t){let i=Ti(e.fieldData,t);this.id=e.externalId??e.nodeId,this.nodeId=e.nodeId,this.slug=e.slug,this.slugByLocale=e.slugByLocale,this.draft=e.draft??false,this.fieldData=i,this.#e=t,P(this);}async remove(){return this.#e.invoke("removeCollectionItems",[this.id])}async setAttributes(e){let t=await this.#e.invoke("setCollectionItemAttributes2",this.id,e);return t?new n(t,this.#e):null}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async navigateTo(e){return this.#e.invoke("navigateTo",this.nodeId,e)}};var na={fixed:true,sticky:true,absolute:true,relative:true},Pi="position";function cl(n){if(!(Pi in n))return false;let e=n[Pi];return f(e)&&na[e]===true}r(cl,"supportsPosition");var Si="top";function pl(n){if(!(Si in n))return false;let e=n[Si];return f(e)||C(e)}r(pl,"supportsPins");var Fi="width";function ml(n){if(!(Fi in n))return false;let e=n[Fi];return f(e)||C(e)}r(ml,"supportsSize");var Di="maxWidth";function gl(n){if(!(Di in n))return false;let e=n[Di];return f(e)||C(e)}r(gl,"supportsSizeConstraints");var vi="aspectRatio";function fl(n){if(!(vi in n))return false;let e=n[vi];return q(e)||C(e)}r(fl,"supportsAspectRatio");var Ni="name";function yl(n){if(!(Ni in n))return false;let e=n[Ni];return f(e)||C(e)}r(yl,"supportsName");var ki="visible";function hl(n){if(!(ki in n))return false;let e=n[ki];return Pe(e)}r(hl,"supportsVisible");var Ei="locked";function bl(n){if(!(Ei in n))return false;let e=n[Ei];return Pe(e)}r(bl,"supportsLocked");var Mi="backgroundColor";function xl(n){if(!(Mi in n))return false;let e=n[Mi];return f(e)||ye(e)||C(e)}r(xl,"supportsBackgroundColor");var Ai="backgroundColor";function Cl(n){if(!(Ai in n))return false;let e=n[Ai];return f(e)||At(e)||C(e)}r(Cl,"supportsBackgroundColorData");var wi="backgroundImage";function Il(n){if(!(wi in n))return false;let e=n[wi];return e instanceof X||C(e)}r(Il,"supportsBackgroundImage");var Vi="backgroundImage";function Tl(n){if(!(Vi in n))return false;let e=n[Vi];return e instanceof X?false:gi(e)||C(e)}r(Tl,"supportsBackgroundImageData");var Li="backgroundGradient";function Pl(n){if(!(Li in n))return false;let e=n[Li];return xi(e)||C(e)}r(Pl,"supportsBackgroundGradient");var Wi="backgroundGradient";function Sl(n){if(!(Wi in n))return false;let e=n[Wi];return N(e)||C(e)}r(Sl,"supportsBackgroundGradientData");var Ri="rotation";function Fl(n){if(!(Ri in n))return false;let e=n[Ri];return q(e)}r(Fl,"supportsRotation");var Bi="opacity";function Dl(n){if(!(Bi in n))return false;let e=n[Bi];return q(e)}r(Dl,"supportsOpacity");var Ui="borderRadius";function vl(n){if(!(Ui in n))return false;let e=n[Ui];return f(e)||C(e)}r(vl,"supportsBorderRadius");var Oi="border";function Nl(n){if(!(Oi in n))return false;let e=n[Oi];return C(e)||ye(e.color)}r(Nl,"supportsBorder");var zi="svg";function kl(n){if(!(zi in n))return false;let e=n[zi];return f(e)}r(kl,"supportsSVG");var Gi="textTruncation";function El(n){if(!(Gi in n))return false;let e=n[Gi];return q(e)||C(e)}r(El,"supportsTextTruncation");var Ki="zIndex";function Ml(n){if(!(Ki in n))return false;let e=n[Ki];return q(e)||C(e)}r(Ml,"supportsZIndex");var $i="overflow";function Al(n){if(!($i in n))return false;let e=n[$i];return f(e)||C(e)}r(Al,"supportsOverflow");var ji="componentIdentifier";function wl(n){if(!(ji in n))return false;let e=n[ji];return f(e)}r(wl,"supportsComponentInfo");var Hi="font";function Vl(n){if(!(Hi in n))return false;let e=n[Hi];return bi(e)}r(Vl,"supportsFont");var _i="font";function Ll(n){if(!(_i in n))return false;let e=n[_i];return hi(e)||C(e)}r(Ll,"supportsFontData");var qi="inlineTextStyle";function Wl(n){if(!(qi in n))return false;let e=n[qi];return Tn(e)||C(e)}r(Wl,"supportsInlineTextStyle");var Yi="inlineTextStyle";function Rl(n){if(!(Yi in n))return false;let e=n[Yi];return Ci(e)||C(e)}r(Rl,"supportsInlineTextStyleData");var Xi="link";function Bl(n){if(!(Xi in n))return false;let e=n[Xi];return f(e)||C(e)}r(Bl,"supportsLink");var Zi="imageRendering";function Ul(n){if(!(Zi in n))return false;let e=n[Zi];return f(e)||C(e)}r(Ul,"supportsImageRendering");var Ji="layout";function tr(n){if(!(Ji in n))return false;let e=n[Ji];return f(e)||C(e)}r(tr,"supportsLayout");function Ol(n){return tr(n)?n.layout==="stack":false}r(Ol,"hasStackLayout");function zl(n){return tr(n)?n.layout==="grid":false}r(zl,"hasGridLayout");var Qi="isVariant";function nr(n){if(!(Qi in n))return false;let e=n[Qi];return Pe(e)}r(nr,"supportsComponentVariant");function Pn(n){return nr(n)?n.isVariant:false}r(Pn,"isComponentVariant");function ir(n){return !nr(n)||!Pn(n)?false:!C(n.gesture)}r(ir,"isComponentGestureVariant");var er="isBreakpoint";function ia(n){if(!(er in n))return false;let e=n[er];return Pe(e)}r(ia,"supportsBreakpoint");function rr(n){return ia(n)?n.isBreakpoint:false}r(rr,"isBreakpoint");var W=class{static{r(this,"NodeMethods");}id;originalId;#e;constructor(e,t){this.id=e.id,this.originalId=e.originalId??null,this.#e=t;}get isReplica(){return this.originalId!==null}async remove(){return this.#e.invoke("removeNodes2",[this.id])}async select(){return this.#e.invoke("setSelection",[this.id])}async clone(){return this.#e.cloneNode(this.id)}async setAttributes(e){if(this[g]==="UnknownNode")throw Error("Can not set attributes on unknown node");return this.#e.setAttributes(this.id,e)}async getRect(){return this.#e.invoke("getRect",this.id)}async zoomIntoView(e){return this.#e.invoke("zoomIntoView",[this.id],e)}async navigateTo(e){return this.#e.invoke("navigateTo",this.id,e)}async getParent(){return this.#e.getParent(this.id)}async getChildren(){return re(this)?Promise.resolve([]):this.#e.getChildren(this.id)}async getNodesWithType(e){return re(this)?Promise.resolve([]):(await this.#e.invoke("getNodesWithType",this.id,e)).map(i=>x(i,this.#e))}async getNodesWithAttribute(e){return re(this)?Promise.resolve([]):(await this.#e.invoke("getNodesWithAttribute",this.id,e)).map(i=>x(i,this.#e))}async getNodesWithAttributeSet(e){return re(this)?Promise.resolve([]):(await this.#e.invoke("getNodesWithAttributeSet",this.id,e)).map(i=>x(i,this.#e))}async*walk(){if(yield this,!re(this))for(let e of await this.getChildren())yield*e.walk();}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}},U=class extends W{static{r(this,"FrameNode");}[g]="FrameNode";name;visible;locked;backgroundColor;backgroundImage;backgroundGradient;rotation;opacity;borderRadius;border;imageRendering;position;top;right;bottom;left;centerX;centerY;width;height;maxWidth;minWidth;maxHeight;minHeight;aspectRatio;zIndex;link;linkOpenInNewTab;linkSmoothScroll;linkClickTrackingId;linkRelValues;linkPreserveParams;overflow;overflowX;overflowY;layout;gap;padding;stackDirection;stackDistribution;stackAlignment;stackWrapEnabled;gridColumnCount;gridRowCount;gridAlignment;gridColumnWidthType;gridColumnWidth;gridColumnMinWidth;gridRowHeightType;gridRowHeight;gridItemFillCellWidth;gridItemFillCellHeight;gridItemHorizontalAlignment;gridItemVerticalAlignment;gridItemColumnSpan;gridItemRowSpan;isVariant;isPrimaryVariant;isBreakpoint;isPrimaryBreakpoint;inheritsFromId;gesture;constructor(e,t){super(e,t),this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.backgroundColor=y(t,e.backgroundColor)??null,this.backgroundImage=y(t,e.backgroundImage)??null,this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.borderRadius=e.borderRadius??null,this.border=y(t,e.border)??null,this.backgroundGradient=y(t,e.backgroundGradient)??null,this.imageRendering=e.imageRendering??null,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,this.maxWidth=e.maxWidth??null,this.minWidth=e.minWidth??null,this.maxHeight=e.maxHeight??null,this.minHeight=e.minHeight??null,this.aspectRatio=e.aspectRatio??null,this.zIndex=e.zIndex??null,this.link=e.link??null,this.linkOpenInNewTab=e.linkOpenInNewTab??null,this.linkSmoothScroll=e.linkSmoothScroll??null,this.linkClickTrackingId=e.linkClickTrackingId??null,this.linkRelValues=e.linkRelValues??null,this.linkPreserveParams=e.linkPreserveParams??null,this.overflow=e.overflow??null,this.overflowX=e.overflowX??null,this.overflowY=e.overflowY??null,this.layout=e.layout??null,this.gap=e.gap??null,this.padding=e.padding??null,this.stackDirection=e.stackDirection??null,this.stackDistribution=e.stackDistribution??null,this.stackAlignment=e.stackAlignment??null,this.stackWrapEnabled=e.stackWrapEnabled??null,this.gridColumnCount=e.gridColumnCount??null,this.gridRowCount=e.gridRowCount??null,this.gridAlignment=e.gridAlignment??null,this.gridColumnWidthType=e.gridColumnWidthType??null,this.gridColumnWidth=e.gridColumnWidth??null,this.gridColumnMinWidth=e.gridColumnMinWidth??null,this.gridRowHeightType=e.gridRowHeightType??null,this.gridRowHeight=e.gridRowHeight??null,this.gridItemFillCellWidth=e.gridItemFillCellWidth??null,this.gridItemFillCellHeight=e.gridItemFillCellHeight??null,this.gridItemHorizontalAlignment=e.gridItemHorizontalAlignment??null,this.gridItemVerticalAlignment=e.gridItemVerticalAlignment??null,this.gridItemColumnSpan=e.gridItemColumnSpan??null,this.gridItemRowSpan=e.gridItemRowSpan??null,this.inheritsFromId=e.inheritsFromId??null,this.gesture=e.gesture??null,this.isVariant=e.isVariant??false,this.isPrimaryVariant=e.isPrimaryVariant??false,this.isBreakpoint=e.isBreakpoint??false,this.isPrimaryBreakpoint=e.isPrimaryBreakpoint??false,P(this);}},oe=class extends W{static{r(this,"TextNode");}[g]="TextNode";name;visible;locked;rotation;opacity;zIndex;font;inlineTextStyle;position;top;right;bottom;left;centerX;centerY;width;height;maxWidth;minWidth;maxHeight;minHeight;link;linkOpenInNewTab;linkSmoothScroll;linkClickTrackingId;linkRelValues;linkPreserveParams;gridItemFillCellWidth;gridItemFillCellHeight;gridItemHorizontalAlignment;gridItemVerticalAlignment;gridItemColumnSpan;gridItemRowSpan;overflow;overflowX;overflowY;textTruncation;#e;constructor(e,t){super(e,t),this.#e=t,this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.zIndex=e.zIndex??null,this.font=y(t,e.font)??null,this.inlineTextStyle=y(t,e.inlineTextStyle)??null,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,this.maxWidth=e.maxWidth??null,this.minWidth=e.minWidth??null,this.maxHeight=e.maxHeight??null,this.minHeight=e.minHeight??null,this.link=e.link??null,this.linkOpenInNewTab=e.linkOpenInNewTab??null,this.linkSmoothScroll=e.linkSmoothScroll??null,this.linkClickTrackingId=e.linkClickTrackingId??null,this.linkRelValues=e.linkRelValues??null,this.linkPreserveParams=e.linkPreserveParams??null,this.overflow=e.overflow??null,this.overflowX=e.overflowX??null,this.overflowY=e.overflowY??null,this.textTruncation=e.textTruncation??null,this.gridItemFillCellWidth=e.gridItemFillCellWidth??null,this.gridItemFillCellHeight=e.gridItemFillCellHeight??null,this.gridItemHorizontalAlignment=e.gridItemHorizontalAlignment??null,this.gridItemVerticalAlignment=e.gridItemVerticalAlignment??null,this.gridItemColumnSpan=e.gridItemColumnSpan??null,this.gridItemRowSpan=e.gridItemRowSpan??null,P(this);}async setText(e){await this.#e.invoke("setTextForNode",this.id,e);}async getText(){return this.#e.invoke("getTextForNode",this.id)}async setHTML(e){await this.#e.invoke(ge,this.id,e),await new Promise(t=>{setTimeout(t,30);});}async getHTML(){return this.#e.invoke(me,this.id)}},qe=class extends W{static{r(this,"SVGNode");}[g]="SVGNode";name;visible;locked;svg;rotation;opacity;position;top;right;bottom;left;centerX;centerY;width;height;constructor(e,t){super(e,t),this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.svg=e.svg,this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,P(this);}},Ye=class extends W{static{r(this,"VectorSetItemNode");}[g]="VectorSetItemNode";name;visible;locked;top;right;bottom;left;centerX;centerY;width;height;#e;constructor(e,t){super(e,t),this.#e=t,this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.top=e.top??null,this.right=e.right??null,this.bottom=e.bottom??null,this.left=e.left??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,P(this);}async getSVG(){return this.#e.invoke("getSVGForNode",this.id)}},Xe=class extends W{static{r(this,"ComponentInstanceNode");}[g]="ComponentInstanceNode";name;visible;locked;componentIdentifier;insertURL;componentName;controls;rotation;opacity;position;top;right;bottom;left;centerX;centerY;width;height;maxWidth;minWidth;maxHeight;minHeight;aspectRatio;#e;#t;#n;get typedControls(){return this.#n||(this.#n=y(this.#e,this.#t.typedControls)??{}),this.#n}constructor(e,t){super(e,t),this.#e=t,this.#t=e,this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.componentIdentifier=e.componentIdentifier,this.componentName=e.componentName??null,this.insertURL=e.insertURL??null,this.controls=y(t,e.controls)??{},this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,this.maxWidth=e.maxWidth??null,this.minWidth=e.minWidth??null,this.maxHeight=e.maxHeight??null,this.minHeight=e.minHeight??null,this.aspectRatio=e.aspectRatio??null,P(this);}async getRuntimeError(){return this.#e.invoke("getRuntimeErrorForCodeComponentNode",this.id)}},K=class extends W{static{r(this,"WebPageNode");}[g]="WebPageNode";#e;path;collectionId;constructor(e,t){super(e,t),this.path=e.path??null,this.collectionId=e.collectionId??null,this.#e=t,P(this);}async clone(e){return this.#e.cloneWebPage(this.id,e)}getBreakpointSuggestions(){return this.#e.invoke("getBreakpointSuggestionsForWebPage",this.id)}async addBreakpoint(e,t){let i=await this.#e.invoke("addBreakpointToWebPage",this.id,e,t),o=x(i,this.#e);return c(o instanceof U),c(rr(o),"Expected node to be a FrameNode"),o}async getActiveCollectionItem(){let e=await this.#e.invoke("getActiveCollectionItemForWebPage",this.id);return e?new _e(e,this.#e):null}},ae=class extends W{static{r(this,"ComponentNode");}[g]="ComponentNode";name;componentIdentifier;insertURL;componentName;#e;constructor(e,t){super(e,t),this.#e=t,this.componentIdentifier=e.componentIdentifier,this.insertURL=e.insertURL??null,this.componentName=e.componentName??null,this.name=e.name??null,P(this);}async addVariant(e,t){let i=await this.#e.invoke("addVariantToComponent",this.id,e,t);if(!i)throw new Error("Failed to add variant to component");let o=x(i,this.#e);return c(o instanceof U),c(Pn(o),"Node is not a component variant"),o}async addGestureVariant(e,t,i){let o=await this.#e.invoke("addGestureVariantToComponent",this.id,e,t,i);if(!o)throw new Error("Failed to add state to component");let a=x(o,this.#e);return c(a instanceof U),c(ir(a),"Node is not a gesture variant"),a}async getVariables(){let e=await this.#e.invoke("getVariables",this.id);return y(this.#e,e)}async addVariables(e){let t=await this.#e.invoke("addVariables",this.id,L(e));return y(this.#e,t)}async removeVariables(e){await this.#e.invoke("removeVariables",this.id,e);}async setVariableOrder(e){await this.#e.invoke("setVariableOrder",this.id,e);}},Ze=class extends W{static{r(this,"VectorSetNode");}[g]="VectorSetNode";name;constructor(e,t){super(e,t),this.name=e.name??null,P(this);}},$=class extends W{static{r(this,"DesignPageNode");}[g]="DesignPageNode";name;#e;constructor(e,t){super(e,t),this.#e=t,this.name=e.name??null,P(this);}async clone(e){return this.#e.cloneDesignPage(this.id,e)}},Je=class extends W{static{r(this,"UnknownNode");}[g]="UnknownNode";constructor(e,t){super(e,t),P(this);}async clone(){throw new Error("Cannot clone an unknown node")}};function x(n,e){switch(n[g]){case "DesignPageNode":return new $(n,e);case "WebPageNode":return new K(n,e);case "ComponentNode":return new ae(n,e);case "VectorSetNode":return new Ze(n,e);case "VectorSetItemNode":return new Ye(n,e);case "ComponentInstanceNode":return new Xe(n,e);case "FrameNode":return new U(n,e);case "SVGNode":return new qe(n,e);case "TextNode":return new oe(n,e);case "UnknownNode":return new Je(n,e);default:return new Je(n,e)}}r(x,"convertRawNodeDataToNode");function wt(n){return n instanceof U}r(wt,"isFrameNode");function or(n){return n instanceof oe}r(or,"isTextNode");function ar(n){return n instanceof qe}r(ar,"isSVGNode");function be(n){return n instanceof Xe}r(be,"isComponentInstanceNode");function sr(n){return n instanceof K}r(sr,"isWebPageNode");function lr(n){return n instanceof ae}r(lr,"isComponentNode");function dr(n){return n instanceof $}r(dr,"isDesignPageNode");function ur(n){return n instanceof Ze}r(ur,"isVectorSetNode");function cr(n){return n instanceof Ye}r(cr,"isVectorSetItemNode");function re(n){return n instanceof Je}r(re,"isUnknownNode");function Qe(n){return !!(wt(n)||or(n)||be(n)||ar(n)||cr(n)||re(n))}r(Qe,"isCanvasNode");function Sn(n){return !!(sr(n)||dr(n)||lr(n)||ur(n)||re(n))}r(Sn,"isCanvasRootNode");var et=class{static{r(this,"VectorSet");}id;name;owner;#e;constructor(e,t){this.id=e.id,this.name=e.name,this.owner=e.owner,this.#e=t;}async getItems(){return (await this.#e.invoke("getVectorSetItems",this.id)).map(t=>new Vt(t,this.#e))}},Vt=class{static{r(this,"VectorSetItem");}id;name;insertUrl;iconUrl;#e;#t;constructor(e,t){this.id=e.id,this.name=e.name,this.insertUrl=e.insertUrl,this.iconUrl=e.iconUrl,this.#e=e.moduleId,this.#t=t;}async getVariables(){return this.#t.invoke("getVectorSetItemVariables",this.id,this.#e)}};var tt=class extends Error{static{r(this,"FramerPluginError");}name=this.constructor.name},J=class extends Error{static{r(this,"FramerPluginClosedError");}name=this.constructor.name};function ra(n){return n.type==="separator"}r(ra,"isSeparatorMenuItem");function Lt(n,e){let t=[];for(let i of n){if(ra(i)){t.push(i);continue}let{onAction:o,...a}=i,s=a;if(i.onAction){let d=Math.random();e.set(d,i.onAction),s.actionId=d;}i.submenu&&(s.submenu=Lt(i.submenu,e)),t.push(s);}return t}r(Lt,"addMenuItemsToOnActionCallbackMap");var Wt="type",pr={[Wt]:"pluginReadySignal"},aa="pluginReadyResponse";var sa={methodResponse:true,subscriptionMessage:true,permissionUpdate:true,menuAction:true};function mr(n){return N(n)&&f(n[Wt])&&n[Wt]in sa}r(mr,"isVekterToPluginNonHandshakeMessage");function gr(n){return N(n)&&n[Wt]===aa}r(gr,"isPluginReadyResponse");var Fn=Symbol(),Dn=Symbol(),vn=Symbol(),Nn=Symbol(),kn=Symbol(),En=Symbol(),Mn=Symbol(),An=Symbol(),wn=Symbol(),Vn=Symbol(),Ln=Symbol(),Wn=Symbol(),Rn=Symbol(),Bn=Symbol(),Un=Symbol(),v={publish:Fn,getDeployments:Dn,deploy:vn,getChangedPaths:Nn,getChangeContributors:kn,createManagedCollection:En,rejectAllPending:Mn,readProjectForAgent:An,getAgentSystemPrompt:wn,getAgentContext:Vn,applyAgentChanges:Ln,reviewChangesForAgent:Wn,startAgentConversation:Rn,continueAgentConversation:Bn,submitAgentClarification:Un};function On(n){return typeof n=="string"&&n in v}r(On,"isFramerApiOnlyMethod");var la=["unstable_getCodeFile","unstable_getCodeFiles","unstable_getCodeFileVersionContent","unstable_getCodeFileLint2","unstable_getCodeFileTypecheck2","unstable_getCodeFileVersions","lintCode"],da=["closeNotification","closePlugin","setCloseWarning","getActiveCollection","getActiveLocale","getActiveManagedCollection","getCanvasRoot","getChildren","getCollection","getCollectionFields","getCollectionFields2","getCollectionItems","getCollectionItems2","getCollections","getColorStyle","getColorStyles","getCurrentUser","getCurrentUser2","getCustomCode","getDefaultLocale","getFont","getFonts","getImage","getImageData","getLocales","getLocaleLanguages","getLocaleRegions","getLocalizationGroups","getManagedCollection","getManagedCollectionFields","getManagedCollectionFields2","getManagedCollectionItemIds","getManagedCollections","getNode","getNodesWithAttribute","getNodesWithAttributeSet","getNodesWithType","getParent","getPluginData","getPluginDataForNode","getPluginDataKeys","getPluginDataKeysForNode","getProjectInfo","getProjectInfo2","getPublishInfo","getRect","getSelection","getSVGForNode","getText","getTextForNode","getTextStyle","getTextStyles","hideUI","setBackgroundMessage","notify","onPointerDown","setActiveCollection","setSelection","showUI","getCodeFileVersionContent","typecheckCode","getCodeFileVersions","getCodeFiles","getCodeFile","getRedirects","uploadFile","uploadFiles","uploadImage","uploadImages","zoomIntoView","navigateTo","getRuntimeErrorForModule","getRuntimeErrorForCodeComponentNode","showProgressOnInstances","removeProgressFromInstances","addComponentInstancePlaceholder","updateComponentInstancePlaceholder","removeComponentInstancePlaceholder","setMenu","showContextMenu","getBreakpointSuggestionsForWebPage","getActiveCollectionItemForWebPage","getVariables","getVectorSets","getVectorSetItems","getVectorSetItemVariables","getChangedPaths","getChangeContributors","getDeployments","readProjectForAgent","getAgentSystemPrompt","getAgentContext","reviewChangesForAgent",gt,ft,yt,ht,me,"getAiServiceInfo","sendTrackingEvent",...la];new Set(da);var zn={addComponentInstance:["addComponentInstance"],addComponentInstancePlaceholder:[],addDetachedComponentLayers:["addDetachedComponentLayers"],addImage:["addImage"],addImages:["addImages"],addSVG:["addSVG"],addText:["addText"],addRedirects:["addRedirects"],getRedirects:[],removeRedirects:["removeRedirects"],setRedirectOrder:["setRedirectOrder"],subscribeToRedirects:[],cloneNode:["cloneNode"],closePlugin:[],createColorStyle:["createColorStyle"],createFrameNode:["createNode"],createTextNode:["createNode"],createComponentNode:["createNode"],createTextStyle:["createTextStyle"],createDesignPage:["createDesignPage"],createWebPage:["createWebPage"],getActiveCollection:[],getActiveLocale:[],getActiveManagedCollection:[],getCanvasRoot:[],getChildren:[],getCollection:[],getCollections:[],getColorStyle:[],getColorStyles:[],getCurrentUser:[],getCustomCode:[],getDefaultLocale:[],getFont:[],getFonts:[],getImage:[],getLocales:[],getLocalizationGroups:[],getManagedCollection:[],getManagedCollections:[],getNode:[],getNodesWithAttribute:[],getNodesWithAttributeSet:[],getNodesWithType:[],getParent:[],getPluginData:[],getPluginDataKeys:[],getProjectInfo:[],getPublishInfo:[],getRect:[],getSelection:[],getText:[],getTextStyle:[],getTextStyles:[],hideUI:[],setBackgroundMessage:[],setCloseWarning:[],lintCode:[],makeDraggable:["onDragEnd","onDragStart","onDrag","setDragData","preloadDetachedComponentLayers","preloadImageUrlForInsertion","preloadDragPreviewImage"],notify:[],preloadDetachedComponentLayers:["preloadDetachedComponentLayers"],preloadDragPreviewImage:["preloadDragPreviewImage"],preloadImageUrlForInsertion:["preloadImageUrlForInsertion"],removeNode:["removeNodes2"],removeNodes:["removeNodes2"],setAttributes:["setAttributes"],setCustomCode:["setCustomCode"],setImage:["setImage"],setLocalizationData:["setLocalizationData"],createLocale:["createLocale"],getLocaleLanguages:[],getLocaleRegions:[],setMenu:[],showContextMenu:[],setParent:["setParent"],setPluginData:["setPluginData"],setSelection:[],setText:["setText"],typecheckCode:[],showUI:[],subscribeToCanvasRoot:[],subscribeToColorStyles:[],subscribeToCustomCode:[],subscribeToImage:[],subscribeToPublishInfo:[],subscribeToSelection:[],subscribeToText:[],subscribeToTextStyles:[],createCodeFile:["createCodeFile"],unstable_ensureMinimumDependencyVersion:["unstable_ensureMinimumDependencyVersion"],getCodeFiles:[],getCodeFile:[],subscribeToCodeFiles:[],subscribeToOpenCodeFile:[],uploadFile:[],uploadFiles:[],uploadImage:[],uploadImages:[],zoomIntoView:[],navigateTo:[],getVectorSets:[],"VectorSet.getItems":[],"VectorSetItem.getVariables":[],"Node.navigateTo":[],"CodeFile.navigateTo":[],"Collection.navigateTo":[],"ManagedCollection.navigateTo":[],"CollectionItem.navigateTo":[],"ComponentInstanceNode.getRuntimeError":[],"ImageAsset.cloneWithAttributes":[],"ImageAsset.getData":[],"ImageAsset.loadBitmap":[],"ImageAsset.loadImage":[],"ImageAsset.measure":[],"CodeFile.remove":["removeCodeFile"],"CodeFile.rename":["renameCodeFile"],"CodeFile.setFileContent":["setCodeFileContent"],"CodeFile.getVersions":[],"CodeFile.showProgressOnInstances":[],"CodeFile.removeProgressFromInstances":[],"CodeFile.lint":[],"CodeFile.typecheck":[],"CodeFileVersion.getContent":[],"ComponentInstancePlaceholder.setAttributes":[],"ComponentInstancePlaceholder.remove":[],"ComponentInstancePlaceholder.replaceWithComponentInstance":["replaceComponentInstancePlaceholderWithComponentInstance"],"Field.remove":["removeCollectionFields"],"Field.setAttributes":["addCollectionFields2"],"EnumField.addCase":["addEnumCase"],"EnumField.setCaseOrder":["setEnumCaseOrder"],"Collection.addFields":["addCollectionFields2"],"Collection.addItems":["addCollectionItems2"],"Collection.getFields":[],"Collection.getItems":[],"Collection.getPluginData":[],"Collection.getPluginDataKeys":[],"Collection.removeFields":["removeCollectionFields"],"Collection.removeItems":["removeCollectionItems"],"Collection.setAsActive":[],"Collection.setFieldOrder":["setCollectionFieldOrder"],"Collection.setItemOrder":["setCollectionItemOrder"],"Collection.setPluginData":["setPluginDataForNode"],"CollectionItem.getPluginData":[],"CollectionItem.getPluginDataKeys":[],"CollectionItem.remove":["removeCollectionItems"],"CollectionItem.setAttributes":["setCollectionItemAttributes2"],"CollectionItem.setPluginData":["setPluginDataForNode"],"ManagedCollection.addItems":["addManagedCollectionItems2"],"ManagedCollection.getFields":[],"ManagedCollection.getItemIds":[],"ManagedCollection.getPluginData":[],"ManagedCollection.getPluginDataKeys":[],"ManagedCollection.removeItems":["removeManagedCollectionItems"],"ManagedCollection.setAsActive":[],"ManagedCollection.setFields":["setManagedCollectionFields"],"ManagedCollection.setItemOrder":["setManagedCollectionItemOrder"],"ManagedCollection.setPluginData":["setPluginDataForNode"],"Node.clone":["cloneNode","cloneWebPage","cloneDesignPage"],"WebPageNode.clone":["cloneWebPage"],"DesignPageNode.clone":["cloneDesignPage"],"Node.getChildren":[],"Node.getNodesWithAttribute":[],"Node.getNodesWithAttributeSet":[],"Node.getNodesWithType":[],"Node.getParent":[],"Node.getPluginData":[],"Node.getPluginDataKeys":[],"Node.getRect":[],"Node.remove":["removeNodes2"],"Node.select":[],"Node.setAttributes":["setAttributes"],"Node.setPluginData":["setPluginDataForNode"],"Node.walk":[],"Node.zoomIntoView":[],"TextNode.getText":[],"TextNode.setText":["setTextForNode"],"TextNode.setHTML":[ge],"TextNode.getHTML":[],"ComponentNode.addVariant":["addVariantToComponent"],"ComponentNode.addGestureVariant":["addGestureVariantToComponent"],"ComponentNode.getVariables":[],"ComponentNode.addVariables":["addVariables"],"ComponentNode.removeVariables":["removeVariables"],"WebPageNode.getBreakpointSuggestions":[],"WebPageNode.addBreakpoint":["addBreakpointToWebPage"],"WebPageNode.getActiveCollectionItem":[],"ColorStyle.getPluginData":[],"ColorStyle.getPluginDataKeys":[],"ColorStyle.remove":["removeColorStyle"],"ColorStyle.setAttributes":["setColorStyleAttributes"],"ColorStyle.setPluginData":["setPluginDataForNode"],"TextStyle.getPluginData":[],"TextStyle.getPluginDataKeys":[],"TextStyle.remove":["removeTextStyle"],"TextStyle.setAttributes":["setTextStyleAttributes"],"TextStyle.setPluginData":["setPluginDataForNode"],"Variable.setAttributes":["updateVariable"],"Variable.remove":["removeVariables"],"ComponentNode.setVariableOrder":["setVariableOrder"],"EnumCase.remove":["removeEnumCase"],"EnumCase.setAttributes":["updateEnumCase"],"EnumVariable.addCase":["addEnumCase"],"EnumVariable.setCaseOrder":["setEnumCaseOrder"],createCollection:["createCollection"],createManagedCollection:["createManagedCollection"],[qt]:[],[Yt]:[],[Xt]:[],[Zt]:[],[Jt]:[],[Qt]:[],[Fn]:["publish"],[Dn]:[],[vn]:["deploy"],[Nn]:[],[kn]:[],[En]:["createManagedCollection"],[Mn]:[],[An]:[],[wn]:[],[Vn]:[],[Ln]:["applyAgentChanges"],[Wn]:[],[Rn]:["startAgentConversation"],[Bn]:["continueAgentConversation"],[Un]:["submitAgentClarification"]},Rt=[];for(let n of Object.keys(zn))zn[n].length!==0&&Rt.push(n);P(Rt);function Gn(n){let e={};for(let t of Rt){let i=zn[t];e[t]=i.every(o=>n[o]);}return e}r(Gn,"createPerMethodPermissionMap");function fr(){let n={};for(let e of Rt)n[e]=true;return n}r(fr,"createPerMethodPermissionMapForTesting");var xe=null;function yr(n){if(typeof window>"u")return;if(!xe){let t=document.createElement("style");document.head.appendChild(t),xe=t.sheet;}if(!xe){n();return}let e=xe.insertRule("* { transition: none !important; animation: none !important; }");n(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{xe&&xe.deleteRule(e);});});}r(yr,"withDisabledCssTransitions");var nt=class{static{r(this,"PluginEngine");}methodInvocationId=0;notificationId=0;postMessage;methodResponseHandlers=new Map;mode;subscriptions=new Map;perMethodPermissionMap;permissionSubscriptions=new Set;messageTypesCheckedInIsAllowedTo=new Set;showUncheckedPermissionToasts=true;environmentInfo=null;initialState;menuItemOnActionCallbackMap=new Map;contextMenuItemOnActionCallbackMap=new Map;rejectAllPending(e){for(let[t,i]of this.methodResponseHandlers)i.reject(e),this.methodResponseHandlers.delete(t);}constructor(e){if(!e){this.postMessage=()=>{},this.mode="canvas",this.perMethodPermissionMap=fr(),this.initialState={mode:"canvas",intent:"plugin/open"};return}switch(e.transport.onMessage(this.onMessage),typeof window<"u"&&(window.addEventListener("error",t=>{t.error instanceof J&&(t.preventDefault(),t.stopImmediatePropagation());}),window.addEventListener("unhandledrejection",t=>{t.reason instanceof J&&(t.preventDefault(),t.stopImmediatePropagation());})),this.mode=e.mode,this.initialState=e.initialState??{mode:e.mode,intent:"plugin/open"},this.environmentInfo=e.environmentInfo,this.perMethodPermissionMap=Gn(e.permissionMap),this.postMessage=(t,i)=>e.transport.send(t,i),this.mode){case "canvas":case "image":case "editImage":case "configureManagedCollection":case "syncManagedCollection":case "collection":case "localization":case "code":typeof window<"u"&&window.addEventListener("pointerdown",()=>{this.invoke("onPointerDown");}),e.theme&&this.applyPluginTheme(e.theme),this.subscribe("theme",this.applyPluginTheme),this.applyPrereleaseStyles();break;case "api":break;default:Fe(this.mode);}}async invoke(e,...t){return this.invokeTransferable(e,void 0,...t)}async invokeTransferable(e,t,...i){return new Promise((a,s)=>{let d={type:"methodInvocation",methodName:e,id:this.methodInvocationId,args:i.map(L)};this.methodInvocationId+=1,this.methodResponseHandlers.set(d.id,{resolve:a,reject:s}),this.postMessage(d,t);})}subscribe(e,t){this.postMessage({type:"subscribe",topic:e});let i=this.subscriptions.get(e)??new Set;return i.add(t),this.subscriptions.set(e,i),()=>{let o=this.subscriptions.get(e)??new Set;o.delete(t),o.size===0&&this.postMessage({type:"unsubscribe",topic:e}),this.subscriptions.set(e,o);}}onMessage=r(e=>{let t=e?.data??e;if(mr(t))switch(t.type){case "permissionUpdate":{this.perMethodPermissionMap=Gn(t.permissionMap);for(let i of this.permissionSubscriptions)i();break}case "methodResponse":{let i=this.methodResponseHandlers.get(t.id);if(!i){switch(this.mode){case "canvas":case "image":case "editImage":case "configureManagedCollection":case "syncManagedCollection":case "collection":case "localization":case "code":throw new Error(`No handler for response with id ${t.id}`);case "api":{if(!(t.id<this.methodInvocationId))throw new Error(`No handler for unknown response id ${t.id}`);break}default:Fe(this.mode);}break}this.methodResponseHandlers.delete(t.id),f(t.error)?i.reject(new tt(t.error)):i.resolve(t.result);break}case "subscriptionMessage":{let{topic:i,payload:o}=t,a=this.subscriptions.get(i);if(!a)throw new Error("Received a subscription message but no handler present");for(let s of a)s(o);break}case "menuAction":{let i=this.getOnActionFromCallbackMap(t.actionId,t.actionType);if(!i)throw new Error("Menu action received for an unknown menu item");i();break}default:Fe(t);}},"onMessage");getOnActionFromCallbackMap(e,t){switch(t){case "pluginMenu":return this.menuItemOnActionCallbackMap.get(e);case "contextMenu":return this.contextMenuItemOnActionCallbackMap.get(e);default:Fe(t);}}applyPluginTheme=r(e=>{yr(()=>{document.body.setAttribute("data-framer-theme",e.mode);for(let t in e.tokens)document.body.style.setProperty(t,e.tokens[t]);});},"applyPluginTheme");applyPrereleaseStyles(){typeof window>"u"||new URLSearchParams(window.location.search).get("styles")==="prerelease"&&document.body.setAttribute("data-framer-styles","prerelease");}async cloneNode(e){let t=await this.invoke("cloneNode",e);return t?x(t,this):null}async cloneWebPage(e,t){let i=await this.invoke("cloneWebPage",e,t);c(i,"Expected to receive data for cloned web page");let o=x(i,this);return c(o instanceof K,"Expected cloned node to be an instance of WebPageNode"),o}async cloneDesignPage(e,t){let i=await this.invoke("cloneDesignPage",e,t);c(i,"Expected to receive data for cloned design page");let o=x(i,this);return c(o instanceof $,"Expected cloned node to be an instance of DesignPageNode"),o}async setAttributes(e,t){let i=await this.invoke("setAttributes",e,t);return i?x(i,this):null}async getParent(e){let t=await this.invoke("getParent",e);return t?x(t,this):null}async getChildren(e){return (await this.invoke("getChildren",e)).map(i=>{let o=x(i,this);return c(Qe(o)),o})}notify=r((e,t)=>{let i=`notification-${this.notificationId}`;return this.notificationId+=1,this.invoke("notify",e,{notificationId:i,variant:t?.variant??"info",buttonText:t?.button?.text,durationMs:t?.durationMs}).then(o=>{o==="actionButtonClicked"&&t?.button?.onClick&&t.button.onClick(),t?.onDisappear&&t.onDisappear();}),{close:r(()=>this.invoke("closeNotification",i),"close")}},"notify");async setMenu(e){this.menuItemOnActionCallbackMap=new Map;let t=Lt(e,this.menuItemOnActionCallbackMap);await this.invoke("setMenu",t);}async showContextMenu(e,t){this.contextMenuItemOnActionCallbackMap=new Map;let i=Lt(e,this.contextMenuItemOnActionCallbackMap);await this.invoke("showContextMenu",i,t);}};function ua(n){return n.type==="component"}r(ua,"isCodeFileComponentExport");function ca(n){return n.type==="override"}r(ca,"isCodeFileOverrideExport");var Kn=class{static{r(this,"CodeFileVersion");}#e;#t;get id(){return this.#e.id}get name(){return this.#e.name}get createdAt(){return this.#e.createdAt}get createdBy(){return this.#e.createdBy}constructor(e,t){this.#t=t,this.#e=e;}async getContent(){return await this.#t.invoke("getCodeFileVersionContent",this.#e.fileId,this.#e.id)}},Q=class n{static{r(this,"CodeFile");}#e;#t;get id(){return this.#e.id}get name(){return this.#e.name}get path(){return this.#e.path}get content(){return this.#e.content}get exports(){return this.#e.exports}get versionId(){return this.#e.versionId}constructor(e,t){this.#t=t,this.#e=e;}async setFileContent(e){let t=await this.#t.invoke("setCodeFileContent",this.id,e);return new n(t,this.#t)}async rename(e){let t=await this.#t.invoke("renameCodeFile",this.id,e);return new n(t,this.#t)}async remove(){return this.#t.invoke("removeCodeFile",this.id)}async getVersions(){return (await this.#t.invoke("getCodeFileVersions",this.id)).map(t=>new Kn(t,this.#t))}async showProgressOnInstances(e){return this.#t.invoke("showProgressOnInstances",this.id,e)}async removeProgressFromInstances(){return this.#t.invoke("removeProgressFromInstances",this.id)}async lint(e){return Promise.resolve([])}async typecheck(e){return await this.#t.invoke("typecheckCode",this.name,this.content,e,this.id)}async navigateTo(){return this.#t.invoke("navigateTo",this.id)}};var Bt=class n{static{r(this,"ComponentInstancePlaceholder");}#e;#t;constructor(e,t){this.#e=e,this.#t=t;}get id(){return this.#e.id}get width(){return this.#e.width}get height(){return this.#e.height}get title(){return this.#e.title}get codePreview(){return this.#e.codePreview}async setAttributes(e){let t=await this.#t.invoke("updateComponentInstancePlaceholder",this.id,e);return t?new n(t,this.#t):null}async remove(){await this.#t.invoke("removeComponentInstancePlaceholder",this.id);}async replaceWithComponentInstance(e,t){let i=await this.#t.invoke("replaceComponentInstancePlaceholderWithComponentInstance",this.id,e,t);if(!i)return null;let o=x(i,this.#t);return c(be(o)),o}};var pa=(()=>{let n=null;return {disableUntilMouseUp:r(()=>{if(n)return;n=document.createElement("style"),n.textContent="* { pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; }",document.head.appendChild(n);let e=r(()=>{n&&(document.head.removeChild(n),n=null,o());},"enablePointerEvents"),t=r(a=>{a.buttons>0&&a.buttons&1||e();},"handlePointerChange"),i=r(()=>{e();},"handleBlur");window.addEventListener("pointerup",t,true),window.addEventListener("pointermove",t,true),window.addEventListener("blur",i);function o(){window.removeEventListener("pointerup",t,true),window.removeEventListener("pointermove",t,true),window.removeEventListener("blur",i);}r(o,"cleanup");},"disableUntilMouseUp")}})(),hr=5,ma=(()=>{let n=1;return {next:r(()=>`drag-${n++}`,"next")}})();function ga(){}r(ga,"noop");function br(n,e,t,i){if(n.mode!=="canvas")return ga;let o=ma.next(),a=document.body.style.cursor,s={type:"idle"},d=document.body,u=se.subscribeToIsAllowedTo("makeDraggable",m=>{m||T();}),I=r(m=>{se.isAllowedTo("makeDraggable")&&s.type!=="idle"&&(s.type==="dragging"&&n.invoke("onDragEnd",{...m,dragSessionId:o}).then(h=>{try{i?.(h);}catch{}}).catch(h=>{if(h instanceof Error){i?.({status:"error",reason:h.message});return}if(typeof h=="string"){i?.({status:"error",reason:h});return}i?.({status:"error"});}),T());},"endDrag"),S=r(m=>{if(!se.isAllowedTo("makeDraggable")||s.type==="idle")return;if(!(m.buttons>0&&!!(m.buttons&1))){I({cancelled:false});return}let{clientX:A,clientY:z}=m;if(s.type==="pointerDown"){let E=A-s.dragStart.mouse.x,ct=z-s.dragStart.mouse.y;if(Math.abs(E)<hr&&Math.abs(ct)<hr)return;s={type:"dragging",dragStart:s.dragStart},n.invoke("onDragStart",s.dragStart),document.getSelection()?.empty(),pa.disableUntilMouseUp();}d.setPointerCapture(m.pointerId);let te={x:A,y:z};n.invoke("onDrag",{dragSessionId:o,mouse:te}).then(E=>{s.type==="dragging"&&(document.body.style.cursor=E??"");});},"handlePointerChange"),O=r(m=>{m.key==="Escape"&&I({cancelled:true});},"handleKeyDown"),_=r(()=>{I({cancelled:true});},"handleBlur"),b=r(m=>{if(!se.isAllowedTo("makeDraggable"))return;I({cancelled:true});let h=e.getBoundingClientRect(),A={x:h.x,y:h.y,width:h.width,height:h.height},z,te=e.querySelectorAll("svg");if(te.length===1){let ce=te.item(0).getBoundingClientRect();z={x:ce.x,y:ce.y,width:ce.width,height:ce.height};}let E={x:m.clientX,y:m.clientY};s={type:"pointerDown",dragStart:{dragSessionId:o,elementRect:A,svgRect:z,mouse:E}},n.invoke("setDragData",o,t()),d.addEventListener("pointermove",S,true),d.addEventListener("pointerup",S,true),window.addEventListener("keydown",O,true),window.addEventListener("blur",_);},"handlePointerDown"),p=r(()=>{if(!se.isAllowedTo("makeDraggable"))return;let m=t();m.type==="detachedComponentLayers"&&n.invoke("preloadDetachedComponentLayers",m.url),m.type==="image"&&n.invoke("preloadImageUrlForInsertion",m.image),m.previewImage&&n.invoke("preloadDragPreviewImage",m.previewImage);},"preload");e.addEventListener("pointerdown",b),e.addEventListener("mouseenter",p);function T(){s={type:"idle"},document.body.style.cursor=a,d.removeEventListener("pointermove",S,true),d.removeEventListener("pointerup",S,true),window.removeEventListener("keydown",O,true),window.removeEventListener("blur",_);}return r(T,"dragCleanup"),()=>{e.removeEventListener("pointerdown",b),e.removeEventListener("mouseenter",p),I({cancelled:true}),u();}}r(br,"makeDraggable");var Ce=class n{static{r(this,"Redirect");}#e;#t;get id(){return this.#e.id}get from(){return this.#e.from}get to(){return this.#e.to}get expandToAllLocales(){return this.#e.expandToAllLocales}constructor(e,t){this.#t=t,this.#e=e;}remove(){return this.#t.invoke("removeRedirects",[this.id])}async setAttributes(e){let t={...e,id:this.id},[i]=await this.#t.invoke("addRedirects",[t]);return c(pt(i)),C(i)?null:new n(i,this.#t)}};var $n=class{static{r(this,"FramerPluginAPI");}#e;constructor(e){this.#e=e;}get mode(){return this.#e.mode}isAllowedTo(...e){return e.every(t=>this.#e.perMethodPermissionMap[t])}subscribeToIsAllowedTo(...e){let[t,i]=ui(e),o=this.isAllowedTo(...t),a=r(()=>{let s=this.isAllowedTo(...t);s!==o&&(o=s,i(o));},"update");return this.#e.permissionSubscriptions.add(a),()=>{this.#e.permissionSubscriptions.delete(a);}}async showUI(e){return this.#e.invoke("showUI",e)}async hideUI(){return this.#e.invoke("hideUI")}async setBackgroundMessage(e){return this.#e.invoke("setBackgroundMessage",e)}closePlugin(e,t){throw this.#e.invoke("closePlugin",e,t),new J}async getCurrentUser(){return this.#e.invoke("getCurrentUser2")}async getProjectInfo(){return this.#e.invoke("getProjectInfo2")}async getSelection(){return (await this.#e.invoke("getSelection")).map(t=>{let i=x(t,this.#e);return c(Qe(i)),i})}async setSelection(e){let t=f(e)?[e]:Array.from(e);return this.#e.invoke("setSelection",t)}subscribeToSelection(e){return this.#e.subscribe("selection",t=>{let i=t.map(o=>{let a=x(o,this.#e);return c(Qe(a)),a});e(i);})}async getCanvasRoot(){let e=await this.#e.invoke("getCanvasRoot"),t=x(e,this.#e);return c(Sn(t)),t}subscribeToCanvasRoot(e){return this.#e.subscribe("canvasRoot",t=>{let i=x(t,this.#e);c(Sn(i)),e(i);})}async getPublishInfo(){return this.#e.invoke("getPublishInfo")}subscribeToPublishInfo(e){return this.#e.subscribe("publishInfo",e)}async createFrameNode(e,t){let i=await this.#e.invoke("createNode","FrameNode",t??null,e);if(!i)return null;let o=x(i,this.#e);return c(o instanceof U),o}async removeNodes(e){return this.#e.invoke("removeNodes2",e)}async removeNode(e){return this.removeNodes([e])}async cloneNode(e){return this.#e.cloneNode(e)}async getNode(e){let t=await this.#e.invoke("getNode",e);return t?x(t,this.#e):null}async getParent(e){return this.#e.getParent(e)}async getChildren(e){return this.#e.getChildren(e)}async getRect(e){return this.#e.invoke("getRect",e)}async zoomIntoView(e,t){let i=f(e)?[e]:Array.from(e);return this.#e.invoke("zoomIntoView",i,t)}async setAttributes(e,t){return this.#e.setAttributes(e,t)}async setParent(e,t,i){return this.#e.invoke("setParent",e,t,i)}async getNodesWithType(e){return (await this.#e.invoke("getNodesWithType",null,e)).map(i=>x(i,this.#e))}async getNodesWithAttribute(e){return (await this.#e.invoke("getNodesWithAttribute",null,e)).map(i=>x(i,this.#e))}async getNodesWithAttributeSet(e){return (await this.#e.invoke("getNodesWithAttributeSet",null,e)).map(i=>x(i,this.#e))}async getImage(){let e=await this.#e.invoke("getImage");return e?y(this.#e,e):null}subscribeToImage(e){return this.#e.subscribe("image",t=>{if(!t){e(null);return}e(y(this.#e,t));})}async addImage(e){let t=await ze(e),i=Z(t);return this.#e.invokeTransferable("addImage",i,t)}async setImage(e){let t=await ze(e),i=Z(t);return this.#e.invokeTransferable("setImage",i,t)}async uploadImage(e){let t=await ze(e),i=Z(t),o=await this.#e.invokeTransferable("uploadImage",i,t);return y(this.#e,o)}async addImages(e){let t=await xn(e),i=t.flatMap(Z);await this.#e.invokeTransferable("addImages",i,t);}async uploadImages(e){let t=await xn(e),i=t.flatMap(Z),o=await this.#e.invokeTransferable("uploadImages",i,t);return y(this.#e,o)}async uploadFile(e){let t=await bn(e),i=await this.#e.invokeTransferable("uploadFile",Z(t),t);return y(this.#e,i)}async uploadFiles(e){let t=await Promise.all(e.map(bn)),i=t.flatMap(Z),o=await this.#e.invokeTransferable("uploadFiles",i,t);return y(this.#e,o)}async addSVG(e){return this.#e.invoke("addSVG",e)}async addComponentInstance({url:e,attributes:t,parentId:i}){let o=await this.#e.invoke("addComponentInstance",{url:e,attributes:t,parentId:i}),a=x(o,this.#e);return c(be(a)),a}async addDetachedComponentLayers({url:e,layout:t,attributes:i}){let o=await this.#e.invoke("addDetachedComponentLayers",{url:e,layout:t,attributes:i}),a=x(o,this.#e);return c(wt(a)),a}async preloadDetachedComponentLayers(e){await this.#e.invoke("preloadDetachedComponentLayers",e);}async preloadImageUrlForInsertion(e){await this.#e.invoke("preloadImageUrlForInsertion",e);}async preloadDragPreviewImage(e){await this.#e.invoke("preloadDragPreviewImage",e);}async getText(){return this.#e.invoke("getText")}async setText(e){return this.#e.invoke("setText",e)}async addText(e,t){return this.#e.invoke("addText",e,t)}async setCustomCode(e){return this.#e.invoke("setCustomCode",e)}async getCustomCode(){return this.#e.invoke("getCustomCode")}subscribeToCustomCode(e){return this.#e.subscribe("customCode",e)}subscribeToText(e){return this.#e.subscribe("text",e)}makeDraggable(e,t,i){return br(this.#e,e,t,i)}async getActiveManagedCollection(){let e=await this.#e.invoke("getActiveManagedCollection");return c(e,"Collection data must be defined"),new he(e,this.#e)}async getManagedCollection(){return this.getActiveManagedCollection()}async getManagedCollections(){let e=await this.#e.invoke("getManagedCollections");return c(e,"Collections data must be defined"),e.map(t=>new he(t,this.#e))}async getCollection(e){let t=await this.#e.invoke("getCollection",e);return t?new ie(t,this.#e):null}async getActiveCollection(){let e=await this.#e.invoke("getActiveCollection");return e?new ie(e,this.#e):null}async getCollections(){return (await this.#e.invoke("getCollections")).map(t=>new ie(t,this.#e))}notify=r((e,t)=>this.#e.notify(e,t),"notify");async getPluginData(e){return this.#e.invoke("getPluginData",e)}async setPluginData(e,t){return this.#e.invoke("setPluginData",e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeys")}async getColorStyles(){let e=await this.#e.invoke("getColorStyles");return y(this.#e,e)}async getColorStyle(e){let t=await this.#e.invoke("getColorStyle",e);return t?y(this.#e,t):null}async createColorStyle(e){let t=await this.#e.invoke("createColorStyle",e);return y(this.#e,t)}subscribeToColorStyles(e){return this.#e.subscribe("colorStyles",t=>{let i=y(this.#e,t);return e(i)})}async getTextStyles(){let e=await this.#e.invoke("getTextStyles");return y(this.#e,e)}async getTextStyle(e){let t=await this.#e.invoke("getTextStyle",e);return t?y(this.#e,t):null}async createTextStyle(e){let t=await this.#e.invoke("createTextStyle",e);return y(this.#e,t)}subscribeToTextStyles(e){return this.#e.subscribe("textStyles",t=>{let i=y(this.#e,t);return e(i)})}async getFont(e,t){let i=await this.#e.invoke("getFont",e,t);return i?y(this.#e,i):null}async getFonts(){let e=await this.#e.invoke("getFonts");return y(this.#e,e)}getLocales(){return this.#e.invoke("getLocales")}getDefaultLocale(){return this.#e.invoke("getDefaultLocale")}getActiveLocale(){return this.#e.invoke("getActiveLocale")}async getLocalizationGroups(e){return this.#e.invoke("getLocalizationGroups",e)}setLocalizationData(e){return this.#e.invoke("setLocalizationData",e)}async getRedirects(){return (await this.#e.invoke("getRedirects")).map(t=>new Ce(t,this.#e))}subscribeToRedirects(e){return this.#e.subscribe("redirects",t=>{let i=t.map(o=>new Ce(o,this.#e));return e(i)})}async addRedirects(e){return (await this.#e.invoke("addRedirects",e)).map(i=>new Ce(i,this.#e))}async removeRedirects(e){return this.#e.invoke("removeRedirects",e)}async setRedirectOrder(e){return this.#e.invoke("setRedirectOrder",e)}async createCodeFile(e,t,i){let o=await this.#e.invoke("createCodeFile",e,t,i);return new Q(o,this.#e)}async getCodeFiles(){let e=await this.#e.invoke("getCodeFiles"),t=[];for(let i of e)t.push(new Q(i,this.#e));return t}async getCodeFile(e){let t=await this.#e.invoke("getCodeFile",e);return t?new Q(t,this.#e):null}lintCode(e,t,i){return Promise.resolve([])}typecheckCode(e,t,i,o){return this.#e.invoke("typecheckCode",e,t,i,o)}subscribeToCodeFiles(e){return this.#e.subscribe("codeFiles",t=>{let i=t?.map(o=>new Q(o,this.#e));return e(i)})}setMenu(e){return this.#e.setMenu(e)}showContextMenu(e,t){return this.#e.showContextMenu(e,t)}async unstable_ensureMinimumDependencyVersion(e,t){return this.#e.invoke("unstable_ensureMinimumDependencyVersion",e,t)}async navigateTo(e,t){return this.#e.invoke("navigateTo",e,t)}subscribeToOpenCodeFile(e){return this.#e.subscribe("openCodeFile",t=>{let i=t?new Q(t,this.#e):null;return e(i)})}async createDesignPage(e){let t=await this.#e.invoke("createDesignPage",e),i=x(t,this.#e);return c(i instanceof $,"Expected node to be a DesignPageNode"),i}async createWebPage(e){let t=await this.#e.invoke("createWebPage",e),i=x(t,this.#e);return c(i instanceof K,"Expected node to be a WebPageNode"),i}async createCollection(e){let t=await this.#e.invoke("createCollection",e);return new ie(t,this.#e)}async createManagedCollection(e){let t=await this.#e.invoke("createManagedCollection",e);return new he(t,this.#e)}async setCloseWarning(e){return this.#e.invoke("setCloseWarning",e)}get[l.initialState](){return this.#e.initialState}},jn=class extends $n{static{r(this,"FramerPluginAPIBeta");}#e;constructor(e){super(e),this.#e=e,this.#e;}},it=class extends jn{static{r(this,"FramerPluginAPIAlpha");}#e;constructor(e){super(e),this.#e=e,this.#e;}async addComponentInstancePlaceholder(e){let t=await this.#e.invoke("addComponentInstancePlaceholder",e);return new Bt(t,this.#e)}async[l.getAiServiceInfo](e){return this.#e.invoke(gt,e)}async[l.sendTrackingEvent](e,t,i){return this.#e.invoke(ft,e,t,i)}async[l.getCurrentUser](){return this.#e.invoke(yt)}async[l.getProjectInfo](){return this.#e.invoke(ht)}async[l.getHTMLForNode](e){return this.#e.invoke(me,e)}async[l.setHTMLForNode](e,t){return this.#e.invoke(ge,e,t)}get[l.environmentInfo](){return this.#e.environmentInfo}get[l.showUncheckedPermissionToasts](){return this.#e.showUncheckedPermissionToasts}set[l.showUncheckedPermissionToasts](e){this.#e.showUncheckedPermissionToasts=e;}async createTextNode(e,t){let i=await this.#e.invoke("createNode","TextNode",t??null,e);if(!i)return null;let o=x(i,this.#e);return c(o instanceof oe),o}async createComponentNode(e){let t=await this.#e.invoke("createNode","ComponentNode",null,{name:e});if(!t)return null;let i=x(t,this.#e);return c(i instanceof ae),i}async getVectorSets(){return (await this.#e.invoke("getVectorSets")).map(t=>new et(t,this.#e))}async createLocale(e){return this.#e.invoke("createLocale",e)}async getLocaleLanguages(){return this.#e.invoke("getLocaleLanguages")}async getLocaleRegions(e){return this.#e.invoke("getLocaleRegions",e)}async[v.publish](){return this.#e.invoke("publish")}async[v.getDeployments](){return this.#e.invoke("getDeployments")}async[v.deploy](e,t){return this.#e.invoke("deploy",e,t)}async[v.getChangedPaths](){return this.#e.invoke("getChangedPaths")}async[v.getChangeContributors](e,t){return this.#e.invoke("getChangeContributors",e,t)}async[v.createManagedCollection](e){return this.createManagedCollection(e)}[v.rejectAllPending](e){this.#e.rejectAllPending(e);}async[v.getAgentSystemPrompt](){return this.#e.invoke("getAgentSystemPrompt")}async[v.getAgentContext](e){return this.#e.invoke("getAgentContext",e)}async[v.readProjectForAgent](e,t){return this.#e.invoke("readProjectForAgent",e,t)}async[v.applyAgentChanges](e,t){return this.#e.invoke("applyAgentChanges",e,t)}async[v.reviewChangesForAgent](e){return this.#e.invoke("reviewChangesForAgent",e)}async[v.startAgentConversation](e,t){return this.#e.invoke("startAgentConversation",e,t)}async[v.continueAgentConversation](e,t){return this.#e.invoke("continueAgentConversation",e,t)}async[v.submitAgentClarification](e){return this.#e.invoke("submitAgentClarification",e)}};var Hn=class{constructor(e){this.origin=e;}origin;static{r(this,"IframeTransport");}send(e,t){window.parent.postMessage(e,this.origin,t);}onMessage(e){window.addEventListener("message",e);}};async function fa(){return new Promise(n=>{function e({data:t,origin:i}){if(!gr(t))return;window.removeEventListener("message",e);let a={transport:new Hn(i),mode:t.mode,permissionMap:t.permissionMap,environmentInfo:t.environmentInfo,origin:i,theme:t.theme??null,initialState:t.initialState};n(a);}r(e,"handshakeListener"),window.addEventListener("message",e),window.parent.postMessage(pr,"*");})}r(fa,"createBrowserContext");async function ya(){return typeof window>"u"||"Deno"in globalThis?null:fa()}r(ya,"bootstrap");var xr=await ya(),se=xr?new it(new nt(xr)):new Proxy({},{get(n,e){throw new Error(`Cannot access framer.${String(e)} in server runtime. Use createFramerInstance() with a custom transport.`)}});function Cr(n){return new it(new nt(n))}r(Cr,"createFramerInstance");var Ir={};function ba(n){if(env)try{Object.assign(env,n);}catch{}Object.assign(Ir,n);}r(ba,"configure");function Ie(n,e){let t=Ir[n]??env[n];return t&&t.length>0?t:e}r(Ie,"getEnv");var Tr=isWorkerd,qn=globalThis.WebSocket;async function Pr(n,e){let t=new URL(n.href);t.protocol=t.protocol==="wss:"?"https:":t.protocol==="ws:"?"http:":t.protocol;let o=(await fetch(t.href,{headers:{Upgrade:"websocket",...e}})).webSocket;if(!o)throw new Error("WebSocket upgrade failed - server did not accept");return o.accept(),o}r(Pr,"connectWebSocketCF");var Sr,Fr;try{Sr=await import('fs'),Fr=await import('path');}catch{}var Yn=Sr,Xn=Fr;var le=(u=>(u.PROJECT_CLOSED="PROJECT_CLOSED",u.POOL_EXHAUSTED="POOL_EXHAUSTED",u.TIMEOUT="TIMEOUT",u.INTERNAL="INTERNAL",u.NODE_NOT_FOUND="NODE_NOT_FOUND",u.SCREENSHOT_TOO_LARGE="SCREENSHOT_TOO_LARGE",u.INVALID_REQUEST="INVALID_REQUEST",u.UNAUTHORIZED="UNAUTHORIZED",u))(le||{}),D=class extends Error{static{r(this,"FramerAPIError");}code;constructor(e,t){super(e),this.name="FramerAPIError",this.code=t,this.stack=void 0;}};function xa(n){return n instanceof D?n.code==="POOL_EXHAUSTED":false}r(xa,"isRetryableError");var Ca=new Map(Object.values(le).map(n=>[n,n]));function vr(n){return typeof n=="string"?Ca.get(n)??"INTERNAL":"INTERNAL"}r(vr,"parseErrorCode");var Ia={pluginMarshalTag:Mt};var Zn={silent:0,error:1,warn:2,info:3,debug:4};function Ta(){let n=Ie("FRAMER_API_LOG_LEVEL")?.toLowerCase();return n&&n in Zn?n:"warn"}r(Ta,"getLogLevel");var Jn=Ta();function rt(n){return Zn[n]<=Zn[Jn]}r(rt,"shouldLog");var ot=globalThis.console,Pa="\x1B[90m",Sa="\x1B[0m";function Fa(n){return n?`[FramerAPI:${n}]`:"[FramerAPI]"}r(Fa,"formatPrefix");function Da(n,...e){return [Pa+n,...e,Sa]}r(Da,"formatDebug");function Nr(n){let e=Fa(n);return {warn:r((...t)=>{rt("warn")&&ot.warn(e,...t);},"warn"),error:r((...t)=>{rt("error")&&ot.error(e,...t);},"error"),log:r((...t)=>{rt("info")&&ot.log(e,...t);},"log"),info:r((...t)=>{rt("info")&&ot.info(e,...t);},"info"),debug:r((...t)=>{rt("debug")&&ot.debug(...Da(e,...t));},"debug"),setLevel:r(t=>{Jn=t;},"setLevel"),getLevel:r(()=>Jn,"getLevel"),withRequestId:r(t=>Nr(t),"withRequestId")}}r(Nr,"createLogger");var k=Nr();k.warn;k.error;k.log;k.info;k.debug;k.setLevel;k.getLevel;var Ut="0.1.7";function ee(n,...e){if(n)return;let t=Error("Assertion Error"+(e.length>0?": "+e.join(" "):""));if(t.stack)try{let i=t.stack.split(`
|
|
5
|
+
`));}catch{}throw t}r(c,"assert");function S(n){for(let e of Reflect.ownKeys(n)){let t=n[e];!t||typeof t!="object"&&!xo(t)||S(t);}return Object.freeze(n)}r(S,"deepFreeze");function Fi(n){return [n.slice(0,-1),n.at(-1)]}r(Fi,"splitRestAndLast");var m="__class";var qt=Symbol(),Yt=Symbol(),Xt=Symbol(),Zt=Symbol(),Co=Symbol(),Io=Symbol(),To=Symbol(),Po=Symbol(),So=Symbol(),Jt=Symbol(),Qt=Symbol(),l={getAiServiceInfo:qt,sendTrackingEvent:Yt,getCurrentUser:Xt,getProjectInfo:Zt,environmentInfo:Co,initialState:Io,showUncheckedPermissionToasts:To,marshal:Po,unmarshal:So,getHTMLForNode:Jt,setHTMLForNode:Qt},pe="INTERNAL_",mt=`${pe}getAiServiceInfo`,ft=`${pe}sendTrackingEvent`,yt=`${pe}getCurrentUser`,ht=`${pe}getProjectInfo`,ge=`${pe}getHTMLForNode`,me=`${pe}setHTMLForNode`;var E=class{static{r(this,"VariableBase");}#e;#t;get nodeId(){return this.#t.nodeId}get nodeType(){return this.#t.nodeType}get id(){return this.#t.id}get name(){return this.#t.name}get description(){return this.#t.description??null}constructor(e,t){this.#e=e,this.#t=t;}async setAttributes(e){let t=await this.#e.invoke("updateVariable",this.nodeId,this.id,{...e,type:this.type});if(I(t))return null;let i=this.constructor;return new i(this.#e,t)}async remove(){await this.#e.invoke("removeVariables",this.nodeId,[this.id]);}},w="Variable";function V(n){let e=n.at(0);return c(!Pi(e)),`${e.toLowerCase()}${n.slice(1,-w.length)}`}r(V,"classToType");var Fo=`Boolean${w}`,vo=V(Fo),ve=class n extends E{static{r(this,"BooleanVariable");}type=vo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Do=`Number${w}`,ko=V(Do),De=class n extends E{static{r(this,"NumberVariable");}type=ko;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},No=`String${w}`,Ao=V(No),ke=class n extends E{static{r(this,"StringVariable");}type=Ao;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Eo=`FormattedText${w}`,Mo=V(Eo),Ne=class n extends E{static{r(this,"FormattedTextVariable");}type=Mo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},wo=`Enum${w}`,Vo=V(wo),Y=class n{static{r(this,"EnumCase");}#e;#t;#n;#i;get id(){return this.#i.id}get name(){return this.#i.name}get nameByLocale(){return this.#i.nameByLocale}constructor(e,t,i,o){this.#e=e,this.#t=t,this.#n=i,this.#i=o;}async setAttributes(e){let t=await this.#e.invoke("updateEnumCase",this.#t,this.#n,this.id,e);return t?new n(this.#e,this.#t,this.#n,t):null}async remove(){await this.#e.invoke("removeEnumCase",this.#t,this.#n,this.id);}},Ae=class n extends E{static{r(this,"EnumVariable");}type=Vo;#e;#t;#n;get cases(){return this.#n||(this.#n=S(this.#t.cases.map(e=>new Y(this.#e,this.nodeId,this.id,e)))),this.#n}constructor(e,t){super(e,t),this.#e=e,this.#t=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#t}async addCase(e){let t=await this.#e.invoke("addEnumCase",this.nodeId,this.id,e);return t?new Y(this.#e,this.nodeId,this.id,t):null}async setCaseOrder(e){await this.#e.invoke("setEnumCaseOrder",this.nodeId,this.id,e);}},Lo=`Color${w}`,Wo=V(Lo),Ee=class n extends E{static{r(this,"ColorVariable");}type=Wo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Ro=`Image${w}`,Bo=V(Ro),Me=class n extends E{static{r(this,"ImageVariable");}type=Bo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Uo=`File${w}`,Oo=V(Uo),we=class n extends E{static{r(this,"FileVariable");}type=Oo;#e;get allowedFileTypes(){return this.#e.allowedFileTypes}constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},zo=`Link${w}`,Go=V(zo),Ve=class n extends E{static{r(this,"LinkVariable");}type=Go;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},Ko=`Date${w}`,$o=V(Ko),Le=class n extends E{static{r(this,"DateVariable");}type=$o;#e;get displayTime(){return this.#e.displayTime}constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},jo=`Border${w}`,Ho=V(jo),We=class n extends E{static{r(this,"BorderVariable");}type=Ho;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}},_o=`Unsupported${w}`,qo=V(_o),Re=class n extends E{static{r(this,"UnsupportedVariable");}type=qo;#e;constructor(e,t){super(e,t),this.#e=t;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return this.#e}};function vi(n){return n instanceof E}r(vi,"isVariable");function Yo(n){return vi(n)&&n.nodeType==="component"}r(Yo,"isComponentVariable");var B=class{static{r(this,"FieldBase");}#e;#t;#n;get id(){return this.#n.id}get name(){return this.#n.name}constructor(e,t,i){this.#e=e,this.#t=t,this.#n=i;}async setAttributes(e){let t={...e,type:this.type,id:this.id},[i]=await this.#e.invoke("addCollectionFields2",this.#t,[t]);if(c(pt(i)),I(i))return null;c(i.type===this.type);let o=this.constructor;return new o(this.#e,this.#t,i)}async remove(){await this.#e.invoke("removeCollectionFields",this.#t,[this.id]);}},R=class extends B{static{r(this,"FieldBaseWithRequired");}#e;get required(){return this.#e.required}constructor(e,t,i){super(e,t,i),this.#e=i;}},bt=class extends B{static{r(this,"BooleanField");}type=nn},xt=class extends B{static{r(this,"ColorField");}type=rn},Ct=class extends B{static{r(this,"NumberField");}type=on},It=class extends R{static{r(this,"StringField");}type=an;#e;constructor(e,t,i){super(e,t,i),this.#e=i;}get basedOn(){return this.#e.basedOn}},Tt=class extends R{static{r(this,"FormattedTextField");}type=sn},Be=class extends R{static{r(this,"ImageField");}type=ln},Pt=class extends R{static{r(this,"LinkField");}type=un},St=class extends R{static{r(this,"DateField");}type=cn;#e;get displayTime(){return this.#e.displayTime}constructor(e,t,i){super(e,t,i),this.#e=i;}},Ft=class extends B{static{r(this,"FieldDivider");}type=yn},Ue=class extends B{static{r(this,"UnsupportedField");}type=hn},vt=class extends R{static{r(this,"FileField");}type=pn;#e;get allowedFileTypes(){return this.#e.allowedFileTypes}constructor(e,t,i){super(e,t,i),this.#e=i;}},Dt=class extends B{static{r(this,"EnumField");}type=gn;#e;#t;#n;#i;get cases(){return this.#i||(this.#i=this.#n.cases.map(e=>new Y(this.#e,this.#t,this.id,e)),S(this.#i)),this.#i}constructor(e,t,i){super(e,t,i),this.#e=e,this.#t=t,this.#n=i;}async addCase(e){let t=await this.#e.invoke("addEnumCase",this.#t,this.id,e);return t?new Y(this.#e,this.#t,this.id,t):null}async setCaseOrder(e){await this.#e.invoke("setEnumCaseOrder",this.#t,this.id,e);}},kt=class extends R{static{r(this,"CollectionReferenceField");}type=mn;#e;get collectionId(){return this.#e.collectionId}constructor(e,t,i){super(e,t,i),this.#e=i;}},Nt=class extends R{static{r(this,"MultiCollectionReferenceField");}type=fn;#e;get collectionId(){return this.#e.collectionId}constructor(e,t,i){super(e,t,i),this.#e=i;}},en=class extends R{static{r(this,"ArrayField");}type=dn;fields;constructor(e,t,i){super(e,t,i);let o=i.fields[0];this.fields=[new Be(e,t,o)];}};function tn(n,e,t){return n.map(i=>{switch(i.type){case nn:return new bt(e,t,i);case rn:return new xt(e,t,i);case on:return new Ct(e,t,i);case an:return new It(e,t,i);case sn:return new Tt(e,t,i);case ln:return new Be(e,t,i);case un:return new Pt(e,t,i);case cn:return new St(e,t,i);case yn:return new Ft(e,t,i);case hn:return new Ue(e,t,i);case pn:return new vt(e,t,i);case gn:return new Dt(e,t,i);case mn:return new kt(e,t,i);case fn:return new Nt(e,t,i);case dn:return new en(e,t,i);default:return new Ue(e,t,i)}})}r(tn,"fieldDefinitionDataArrayToFieldClassInstances");function Xo(n){return n instanceof B}r(Xo,"isField");var Di="action";function Zo(n){return !!n&&Di in n&&f(n[Di])}r(Zo,"isLocalizedValueUpdate");function ki(n){return Object.keys(n).reduce((e,t)=>{let i=n[t];return Zo(i)&&(e[t]=i),e},{})}r(ki,"filterInlineLocalizationValues");var Oe=class n{static{r(this,"FileAsset");}id;url;extension;constructor(e){this.url=e.url,this.id=e.id,this.extension=e.extension;}static[l.unmarshal](e,t){return new n(t)}[l.marshal](){return {[m]:"FileAsset",id:this.id,url:this.url,extension:this.extension}}};function Jo(n){return n instanceof Oe}r(Jo,"isFileAsset");var Qo="ImageAsset";function Ni(n){return k(n)?n[m]===Qo:false}r(Ni,"isImageAssetData");var X=class n{static{r(this,"ImageAsset");}id;url;thumbnailUrl;altText;resolution;#e;#t;constructor(e,t){this.#t=e,this.url=t.url,this.id=t.id,this.thumbnailUrl=t.thumbnailUrl,this.altText=t.altText,this.resolution=t.resolution;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return {[m]:"ImageAsset",id:this.id,url:this.url,thumbnailUrl:this.thumbnailUrl,altText:this.altText,resolution:this.resolution}}cloneWithAttributes({altText:e,resolution:t}){return new n(this.#t,{[m]:"ImageAsset",id:this.id,url:this.url,thumbnailUrl:this.thumbnailUrl,altText:e??this.altText,resolution:t??this.resolution})}async measure(){return na(this.url)}async getData(){if(this.#e&&this.#e.bytes.length>0)return this.#e;let e=await this.#t.invoke("getImageData",{id:this.id,resolution:this.resolution});if(!e)throw new Error("Failed to load image data");return this.#e=e,e}async loadBitmap(){let{mimeType:e,bytes:t}=await this.getData(),i=new Blob([t],{type:e});return createImageBitmap(i)}async loadImage(){let e=await this.getData(),t=URL.createObjectURL(new Blob([e.bytes]));return new Promise((i,o)=>{let a=new Image;a.onload=()=>i(a),a.onerror=()=>o(),a.src=t;})}};function ea(n){return n instanceof X}r(ea,"isImageAsset");function Z(n){return n.type==="bytes"?[n.bytes.buffer]:[]}r(Z,"getTransferable");function ta(n){if(!k(n))return false;let e="bytes",t="mimeType";return !(!(e in n)||!(t in n)||!(n[e]instanceof Uint8Array)||!f(n[t]))}r(ta,"isBytesData");async function ze(n){if(n instanceof File)return Cn(n);let e=await Ai(n.image);return {name:n.name,altText:n.altText,resolution:n.resolution,preferredImageRendering:n.preferredImageRendering,...e}}r(ze,"createImageTransferFromInput");async function bn(n){if(n instanceof File)return Cn(n);let e=await Ai(n.file);return {name:n.name,...e}}r(bn,"createFileTransferFromInput");async function Ai(n){return n instanceof File?Cn(n):ta(n)?{type:"bytes",mimeType:n.mimeType,bytes:n.bytes}:{type:"url",url:n}}r(Ai,"createAssetTransferFromAssetInput");function xn(n){return Promise.all(n.map(ze))}r(xn,"createNamedAssetDataTransferFromInput");async function Cn(n){return new Promise((e,t)=>{let i=new FileReader;i.onload=o=>{let a=n.type,s=o.target?.result;if(!s||!(s instanceof ArrayBuffer)){t(new Error("Failed to read file, arrayBuffer is null"));return}let d=new Uint8Array(s);e({bytes:d,mimeType:a,type:"bytes",name:n.name});},i.onerror=o=>{t(o);},i.readAsArrayBuffer(n);})}r(Cn,"getAssetDataFromFile");async function na(n){let e=n instanceof File,t=e?URL.createObjectURL(n):n,i=new Image;return i.crossOrigin="anonymous",new Promise((o,a)=>{i.onload=()=>{o({width:i.naturalWidth,height:i.naturalHeight});},i.onerror=s=>{a(s);},i.src=t;}).finally(()=>{e&&URL.revokeObjectURL(t);})}r(na,"measureImage");var At=class{static{r(this,"ComputedValueBase");}};var ia="unsupported",Ge=class n extends At{static{r(this,"UnsupportedComputedValue");}type=ia;#e;constructor(e){super(),this.#e=e;}static[l.unmarshal](e,t){return new n(t)}[l.marshal](){return this.#e}};function ra(n){return n instanceof At}r(ra,"isComputedValue");var oa="Font";function Mi(n){return k(n)&&n[m]===oa}r(Mi,"isFontData");function aa(n){if(!q(n))return false;switch(n){case 100:case 200:case 300:case 400:case 500:case 600:case 700:case 800:case 900:return true;default:return false}}r(aa,"isFontWeight");function sa(n){if(!f(n))return false;switch(n){case "normal":case "italic":return true;default:return false}}r(sa,"isFontStyle");function wi(n){return k(n)?f(n.family)&&f(n.selector)&&aa(n.weight)&&sa(n.style):false}r(wi,"isFont");var G=class n{static{r(this,"Font");}selector;family;weight;style;constructor(e){this.selector=e.selector,this.family=e.family,this.weight=e.weight,this.style=e.style;}static[l.unmarshal](e,t){let i=Ei.get(t.selector);if(i)return i;let o=new n(t);return Ei.set(t.selector,o),o}[l.marshal](){return {[m]:"Font",selector:this.selector,family:this.family,weight:this.weight,style:this.style}}},Ei=new Map;var Et="plugin-marshal";function In(n){return k(n)&&l.marshal in n}r(In,"isSelfMarshalable");function L(n){if(In(n))return n[l.marshal]();if(gt(n))return n.map(L);if(Se(n)){let e={};for(let t of Object.keys(n))e[t]=L(n[t]);return e}return n}r(L,"marshal");var la="LinearGradient",da="RadialGradient",ua="ConicGradient",fe=class{static{r(this,"GradientBase");}#e;get stops(){return this.#e.stops}constructor(e){this.#e=e;}cloneWithAttributes(e){let t=this.constructor;return new t({...this.#e,...e})}},Ke=class n extends fe{static{r(this,"LinearGradient");}[m]=la;#e;get angle(){return this.#e.angle}constructor(e){super(e),this.#e=e;}static[l.unmarshal](e,t){return new n({...t,stops:y(e,t.stops)})}[l.marshal](){return L({...this.#e,[m]:this[m]})}toCSS(){let e=this.#e.stops.map(t=>(c(f(t.color),"ColorStyle not supported yet"),`${t.color} ${t.position*100}%`)).join(", ");return `linear-gradient(${this.angle}deg, ${e})`}},$e=class n extends fe{static{r(this,"RadialGradient");}[m]=da;#e;get width(){return this.#e.width}get height(){return this.#e.height}get x(){return this.#e.x}get y(){return this.#e.y}constructor(e){super(e),this.#e=e;}static[l.unmarshal](e,t){return new n({...t,stops:y(e,t.stops)})}[l.marshal](){return L({...this.#e,[m]:this[m]})}toCSS(){let e=this.stops.map((t,i)=>{c(f(t.color),"ColorStyle not supported yet");let o=this.stops[i+1],a=t.position===1&&o?.position===1?t.position-1e-4:t.position;return `${t.color} ${a*100}%`}).join(", ");return `radial-gradient(${this.width} ${this.height} at ${this.x} ${this.y}, ${e})`}},je=class n extends fe{static{r(this,"ConicGradient");}[m]=ua;#e;get angle(){return this.#e.angle}get x(){return this.#e.x}get y(){return this.#e.y}constructor(e){super(e),this.#e=e;}static[l.unmarshal](e,t){return new n({...t,stops:y(e,t.stops)})}[l.marshal](){return L({...this.#e,[m]:this[m]})}toCSS(){let e=this.stops.map(t=>(c(f(t.color),"ColorStyle not supported yet"),`${t.color} ${t.position*360}deg`)).join(", ");return `conic-gradient(from ${this.angle}deg at ${this.x} ${this.y}, ${e})`}};function Vi(n){return n instanceof fe}r(Vi,"isGradient");var ca="ColorStyle";function Mt(n){return k(n)?n[m]===ca:false}r(Mt,"isColorStyleData");var ne=class n{static{r(this,"ColorStyle");}id;name;path;light;dark;#e;constructor(e,t){this.id=t.id,this.name=t.name,this.light=t.light,this.dark=t.dark,this.path=t.path,this.#e=e;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return {[m]:"ColorStyle",id:this.id,name:this.name,light:this.light,dark:this.dark,path:this.path}}async setAttributes(e){let t=await this.#e.invoke("setColorStyleAttributes",this.id,e);return t?new n(this.#e,t):null}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async remove(){return this.#e.invoke("removeColorStyle",this.id)}};function ye(n){return n instanceof ne}r(ye,"isColorStyle");var pa="TextStyle";function Li(n){return k(n)?n[m]===pa:false}r(Li,"isTextStyleData");var He=class n{static{r(this,"TextStyle");}id;name;path;tag;font;boldFont;italicFont;boldItalicFont;color;transform;alignment;decoration;decorationColor;decorationThickness;decorationStyle;decorationSkipInk;decorationOffset;balance;breakpoints;minWidth;fontSize;letterSpacing;lineHeight;paragraphSpacing;#e;constructor(e,t){this.id=t.id,this.name=t.name,this.path=t.path,this.tag=t.tag,this.font=G[l.unmarshal](e,t.font),this.boldFont=t.boldFont&&G[l.unmarshal](e,t.boldFont),this.italicFont=t.italicFont&&G[l.unmarshal](e,t.italicFont),this.boldItalicFont=t.boldItalicFont&&G[l.unmarshal](e,t.boldItalicFont),this.color=Mt(t.color)?ne[l.unmarshal](e,t.color):t.color,this.transform=t.transform,this.alignment=t.alignment,this.decoration=t.decoration,this.decorationColor=Mt(t.decorationColor)?ne[l.unmarshal](e,t.decorationColor):t.decorationColor,this.decorationThickness=t.decorationThickness,this.decorationStyle=t.decorationStyle,this.decorationSkipInk=t.decorationSkipInk,this.decorationOffset=t.decorationOffset,this.balance=t.balance,this.breakpoints=t.breakpoints,this.minWidth=t.minWidth,this.fontSize=t.fontSize,this.letterSpacing=t.letterSpacing,this.lineHeight=t.lineHeight,this.paragraphSpacing=t.paragraphSpacing,this.#e=e;}static[l.unmarshal](e,t){return new n(e,t)}[l.marshal](){return {[m]:"TextStyle",id:this.id,name:this.name,path:this.path,tag:this.tag,font:this.font[l.marshal](),boldFont:this.boldFont?.[l.marshal]()??null,italicFont:this.italicFont?.[l.marshal]()??null,boldItalicFont:this.boldItalicFont?.[l.marshal]()??null,color:ye(this.color)?this.color[l.marshal]():this.color,transform:this.transform,alignment:this.alignment,decoration:this.decoration,decorationColor:ye(this.decorationColor)?this.decorationColor[l.marshal]():this.decorationColor,decorationThickness:this.decorationThickness,decorationStyle:this.decorationStyle,decorationSkipInk:this.decorationSkipInk,decorationOffset:this.decorationOffset,balance:this.balance,breakpoints:this.breakpoints,minWidth:this.minWidth,fontSize:this.fontSize,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,paragraphSpacing:this.paragraphSpacing}}async setAttributes(e){let t=await this.#e.invoke("setTextStyleAttributes",this.id,e);return t?new n(this.#e,t):null}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async remove(){return this.#e.invoke("removeTextStyle",this.id)}};function Tn(n){return n instanceof He}r(Tn,"isTextStyle");var Wi={ColorStyle:ne,ConicGradient:je,FileAsset:Oe,Font:G,ImageAsset:X,LinearGradient:Ke,RadialGradient:$e,TextStyle:He,BooleanVariable:ve,BorderVariable:We,ColorVariable:Ee,DateVariable:Le,EnumVariable:Ae,FileVariable:we,FormattedTextVariable:Ne,ImageVariable:Me,LinkVariable:Ve,NumberVariable:De,StringVariable:ke,UnsupportedVariable:Re,UnsupportedComputedValue:Ge};function ga(n){return Se(n)&&f(n[m])&&n[m]in Wi}r(ga,"isSelfUnmarshalable");function y(n,e){if(ga(e))return Wi[e[m]][l.unmarshal](n,e);if(gt(e))return e.map(t=>y(n,t));if(Se(e)){let t={};for(let i of Object.keys(e))t[i]=y(n,e[i]);return t}return e}r(y,"unmarshal");var ma={array:false,boolean:false,collectionReference:false,color:false,date:false,enum:false,file:false,formattedText:false,image:true,link:false,multiCollectionReference:false,number:false,string:false,unsupported:false};function fa(n){return ma[n]}r(fa,"isSupportedArrayItemFieldType");function ya(n){return fa(n.type)}r(ya,"isSupportedArrayItemFieldDataEntry");var nn="boolean",rn="color",on="number",an="string",sn="formattedText",ln="image",dn="array",un="link",cn="date",pn="file",gn="enum",mn="collectionReference",fn="multiCollectionReference",yn="divider",hn="unsupported";function ha(n){return n.map(e=>{if(e.type!=="enum")return e;let t=e.cases.map(i=>{let o=i.nameByLocale?ki(i.nameByLocale):void 0;return {...i,nameByLocale:o}});return {...e,cases:t}})}r(ha,"sanitizeEnumFieldForMessage");function Ri(n,e){let t={};for(let i in n){let o=n[i];if(!o)continue;if(o.type!=="array"){t[i]=y(e,o);continue}let a=o.value.map(s=>{let d=Ri(s.fieldData,e),u={};for(let T in d){let F=d[T];c(F&&ya(F),"Unsupported array item field data entry"),u[T]=F;}return {...s,fieldData:u}});t[i]={...o,value:a};}return t}r(Ri,"deserializeFieldData");var he=class{static{r(this,"ManagedCollection");}id;name;readonly;managedBy;#e;constructor(e,t){this.id=e.id,this.name=e.name,this.readonly=e.readonly,c(e.managedBy!=="user","Managed Collection can only be managed by a plugin"),this.managedBy=e.managedBy,this.#e=t,S(this);}async getItemIds(){return this.#e.invoke("getManagedCollectionItemIds",this.id)}async setItemOrder(e){return this.#e.invoke("setManagedCollectionItemOrder",this.id,e)}async getFields(){return this.#e.invoke("getManagedCollectionFields2",this.id)}async setFields(e){let t=ha(e);return this.#e.invoke("setManagedCollectionFields",this.id,t)}async addItems(e){return this.#e.invoke("addManagedCollectionItems2",this.id,e)}async removeItems(e){return this.#e.invoke("removeManagedCollectionItems",this.id,e)}async setAsActive(){return this.#e.invoke("setActiveCollection",this.id)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async navigateTo(e){return this.#e.invoke("navigateTo",this.id,e)}},ie=class{static{r(this,"Collection");}id;name;slugFieldName;slugFieldBasedOn;readonly;managedBy;#e;constructor(e,t){this.id=e.id,this.name=e.name,this.slugFieldName=e.slugFieldName,this.slugFieldBasedOn=e.slugFieldBasedOn,this.readonly=e.readonly,this.managedBy=e.managedBy,this.#e=t,S(this);}async setItemOrder(e){return this.#e.invoke("setCollectionItemOrder",this.id,e)}async getFields(){let e=await this.#e.invoke("getCollectionFields2",this.id,true);return tn(e,this.#e,this.id)}async addFields(e){let t=await this.#e.invoke("addCollectionFields2",this.id,e);return c(t.every(Si)),tn(t,this.#e,this.id)}async removeFields(e){return this.#e.invoke("removeCollectionFields",this.id,e)}async setFieldOrder(e){return this.#e.invoke("setCollectionFieldOrder",this.id,e)}async getItems(){return (await this.#e.invoke("getCollectionItems2",this.id)).map(t=>new _e(t,this.#e))}async addItems(e){await this.#e.invoke("addCollectionItems2",this.id,e);}async removeItems(e){return this.#e.invoke("removeCollectionItems",e)}async setAsActive(){return this.#e.invoke("setActiveCollection",this.id)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async navigateTo(e){return this.#e.invoke("navigateTo",this.id,e)}},_e=class n{static{r(this,"CollectionItem");}id;nodeId;slug;slugByLocale;draft;fieldData;#e;constructor(e,t){let i=Ri(e.fieldData,t);this.id=e.externalId??e.nodeId,this.nodeId=e.nodeId,this.slug=e.slug,this.slugByLocale=e.slugByLocale,this.draft=e.draft??false,this.fieldData=i,this.#e=t,S(this);}async remove(){return this.#e.invoke("removeCollectionItems",[this.id])}async setAttributes(e){let t=await this.#e.invoke("setCollectionItemAttributes2",this.id,e);return t?new n(t,this.#e):null}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}async navigateTo(e){return this.#e.invoke("navigateTo",this.nodeId,e)}};var ba={fixed:true,sticky:true,absolute:true,relative:true},Bi="position";function Dl(n){if(!(Bi in n))return false;let e=n[Bi];return f(e)&&ba[e]===true}r(Dl,"supportsPosition");var Ui="top";function kl(n){if(!(Ui in n))return false;let e=n[Ui];return f(e)||I(e)}r(kl,"supportsPins");var Oi="width";function Nl(n){if(!(Oi in n))return false;let e=n[Oi];return f(e)||I(e)}r(Nl,"supportsSize");var zi="maxWidth";function Al(n){if(!(zi in n))return false;let e=n[zi];return f(e)||I(e)}r(Al,"supportsSizeConstraints");var Gi="aspectRatio";function El(n){if(!(Gi in n))return false;let e=n[Gi];return q(e)||I(e)}r(El,"supportsAspectRatio");var Ki="name";function Ml(n){if(!(Ki in n))return false;let e=n[Ki];return f(e)||I(e)}r(Ml,"supportsName");var $i="visible";function wl(n){if(!($i in n))return false;let e=n[$i];return Pe(e)}r(wl,"supportsVisible");var ji="locked";function Vl(n){if(!(ji in n))return false;let e=n[ji];return Pe(e)}r(Vl,"supportsLocked");var Hi="backgroundColor";function Ll(n){if(!(Hi in n))return false;let e=n[Hi];return f(e)||ye(e)||I(e)}r(Ll,"supportsBackgroundColor");var _i="backgroundColor";function Wl(n){if(!(_i in n))return false;let e=n[_i];return f(e)||Mt(e)||I(e)}r(Wl,"supportsBackgroundColorData");var qi="backgroundImage";function Rl(n){if(!(qi in n))return false;let e=n[qi];return e instanceof X||I(e)}r(Rl,"supportsBackgroundImage");var Yi="backgroundImage";function Bl(n){if(!(Yi in n))return false;let e=n[Yi];return e instanceof X?false:Ni(e)||I(e)}r(Bl,"supportsBackgroundImageData");var Xi="backgroundGradient";function Ul(n){if(!(Xi in n))return false;let e=n[Xi];return Vi(e)||I(e)}r(Ul,"supportsBackgroundGradient");var Zi="backgroundGradient";function Ol(n){if(!(Zi in n))return false;let e=n[Zi];return k(e)||I(e)}r(Ol,"supportsBackgroundGradientData");var Ji="rotation";function zl(n){if(!(Ji in n))return false;let e=n[Ji];return q(e)}r(zl,"supportsRotation");var Qi="opacity";function Gl(n){if(!(Qi in n))return false;let e=n[Qi];return q(e)}r(Gl,"supportsOpacity");var er="borderRadius";function Kl(n){if(!(er in n))return false;let e=n[er];return f(e)||I(e)}r(Kl,"supportsBorderRadius");var tr="border";function $l(n){if(!(tr in n))return false;let e=n[tr];return I(e)||ye(e.color)}r($l,"supportsBorder");var nr="svg";function jl(n){if(!(nr in n))return false;let e=n[nr];return f(e)}r(jl,"supportsSVG");var ir="textTruncation";function Hl(n){if(!(ir in n))return false;let e=n[ir];return q(e)||I(e)}r(Hl,"supportsTextTruncation");var rr="zIndex";function _l(n){if(!(rr in n))return false;let e=n[rr];return q(e)||I(e)}r(_l,"supportsZIndex");var or="overflow";function ql(n){if(!(or in n))return false;let e=n[or];return f(e)||I(e)}r(ql,"supportsOverflow");var ar="componentIdentifier";function Yl(n){if(!(ar in n))return false;let e=n[ar];return f(e)}r(Yl,"supportsComponentInfo");var sr="font";function Xl(n){if(!(sr in n))return false;let e=n[sr];return wi(e)}r(Xl,"supportsFont");var lr="font";function Zl(n){if(!(lr in n))return false;let e=n[lr];return Mi(e)||I(e)}r(Zl,"supportsFontData");var dr="inlineTextStyle";function Jl(n){if(!(dr in n))return false;let e=n[dr];return Tn(e)||I(e)}r(Jl,"supportsInlineTextStyle");var ur="inlineTextStyle";function Ql(n){if(!(ur in n))return false;let e=n[ur];return Li(e)||I(e)}r(Ql,"supportsInlineTextStyleData");var cr="link";function ed(n){if(!(cr in n))return false;let e=n[cr];return f(e)||I(e)}r(ed,"supportsLink");var pr="imageRendering";function td(n){if(!(pr in n))return false;let e=n[pr];return f(e)||I(e)}r(td,"supportsImageRendering");var gr="layout";function yr(n){if(!(gr in n))return false;let e=n[gr];return f(e)||I(e)}r(yr,"supportsLayout");function nd(n){return yr(n)?n.layout==="stack":false}r(nd,"hasStackLayout");function id(n){return yr(n)?n.layout==="grid":false}r(id,"hasGridLayout");var mr="isVariant";function hr(n){if(!(mr in n))return false;let e=n[mr];return Pe(e)}r(hr,"supportsComponentVariant");function Pn(n){return hr(n)?n.isVariant:false}r(Pn,"isComponentVariant");function br(n){return !hr(n)||!Pn(n)?false:!I(n.gesture)}r(br,"isComponentGestureVariant");var fr="isBreakpoint";function xa(n){if(!(fr in n))return false;let e=n[fr];return Pe(e)}r(xa,"supportsBreakpoint");function xr(n){return xa(n)?n.isBreakpoint:false}r(xr,"isBreakpoint");var W=class{static{r(this,"NodeMethods");}id;originalId;#e;constructor(e,t){this.id=e.id,this.originalId=e.originalId??null,this.#e=t;}get isReplica(){return this.originalId!==null}async remove(){return this.#e.invoke("removeNodes2",[this.id])}async select(){return this.#e.invoke("setSelection",[this.id])}async clone(){return this.#e.cloneNode(this.id)}async setAttributes(e){if(this[m]==="UnknownNode")throw Error("Can not set attributes on unknown node");return this.#e.setAttributes(this.id,e)}async getRect(){return this.#e.invoke("getRect",this.id)}async zoomIntoView(e){return this.#e.invoke("zoomIntoView",[this.id],e)}async navigateTo(e){return this.#e.invoke("navigateTo",this.id,e)}async getParent(){return this.#e.getParent(this.id)}async getChildren(){return re(this)?Promise.resolve([]):this.#e.getChildren(this.id)}async getNodesWithType(e){return re(this)?Promise.resolve([]):(await this.#e.invoke("getNodesWithType",this.id,e)).map(i=>C(i,this.#e))}async getNodesWithAttribute(e){return re(this)?Promise.resolve([]):(await this.#e.invoke("getNodesWithAttribute",this.id,e)).map(i=>C(i,this.#e))}async getNodesWithAttributeSet(e){return re(this)?Promise.resolve([]):(await this.#e.invoke("getNodesWithAttributeSet",this.id,e)).map(i=>C(i,this.#e))}async*walk(){if(yield this,!re(this))for(let e of await this.getChildren())yield*e.walk();}async getPluginData(e){return this.#e.invoke("getPluginDataForNode",this.id,e)}async setPluginData(e,t){return this.#e.invoke("setPluginDataForNode",this.id,e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeysForNode",this.id)}},U=class extends W{static{r(this,"FrameNode");}[m]="FrameNode";name;visible;locked;backgroundColor;backgroundImage;backgroundGradient;rotation;opacity;borderRadius;border;imageRendering;position;top;right;bottom;left;centerX;centerY;width;height;maxWidth;minWidth;maxHeight;minHeight;aspectRatio;zIndex;link;linkOpenInNewTab;linkSmoothScroll;linkClickTrackingId;linkRelValues;linkPreserveParams;overflow;overflowX;overflowY;layout;gap;padding;stackDirection;stackDistribution;stackAlignment;stackWrapEnabled;gridColumnCount;gridRowCount;gridAlignment;gridColumnWidthType;gridColumnWidth;gridColumnMinWidth;gridRowHeightType;gridRowHeight;gridItemFillCellWidth;gridItemFillCellHeight;gridItemHorizontalAlignment;gridItemVerticalAlignment;gridItemColumnSpan;gridItemRowSpan;isVariant;isPrimaryVariant;isBreakpoint;isPrimaryBreakpoint;inheritsFromId;gesture;constructor(e,t){super(e,t),this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.backgroundColor=y(t,e.backgroundColor)??null,this.backgroundImage=y(t,e.backgroundImage)??null,this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.borderRadius=e.borderRadius??null,this.border=y(t,e.border)??null,this.backgroundGradient=y(t,e.backgroundGradient)??null,this.imageRendering=e.imageRendering??null,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,this.maxWidth=e.maxWidth??null,this.minWidth=e.minWidth??null,this.maxHeight=e.maxHeight??null,this.minHeight=e.minHeight??null,this.aspectRatio=e.aspectRatio??null,this.zIndex=e.zIndex??null,this.link=e.link??null,this.linkOpenInNewTab=e.linkOpenInNewTab??null,this.linkSmoothScroll=e.linkSmoothScroll??null,this.linkClickTrackingId=e.linkClickTrackingId??null,this.linkRelValues=e.linkRelValues??null,this.linkPreserveParams=e.linkPreserveParams??null,this.overflow=e.overflow??null,this.overflowX=e.overflowX??null,this.overflowY=e.overflowY??null,this.layout=e.layout??null,this.gap=e.gap??null,this.padding=e.padding??null,this.stackDirection=e.stackDirection??null,this.stackDistribution=e.stackDistribution??null,this.stackAlignment=e.stackAlignment??null,this.stackWrapEnabled=e.stackWrapEnabled??null,this.gridColumnCount=e.gridColumnCount??null,this.gridRowCount=e.gridRowCount??null,this.gridAlignment=e.gridAlignment??null,this.gridColumnWidthType=e.gridColumnWidthType??null,this.gridColumnWidth=e.gridColumnWidth??null,this.gridColumnMinWidth=e.gridColumnMinWidth??null,this.gridRowHeightType=e.gridRowHeightType??null,this.gridRowHeight=e.gridRowHeight??null,this.gridItemFillCellWidth=e.gridItemFillCellWidth??null,this.gridItemFillCellHeight=e.gridItemFillCellHeight??null,this.gridItemHorizontalAlignment=e.gridItemHorizontalAlignment??null,this.gridItemVerticalAlignment=e.gridItemVerticalAlignment??null,this.gridItemColumnSpan=e.gridItemColumnSpan??null,this.gridItemRowSpan=e.gridItemRowSpan??null,this.inheritsFromId=e.inheritsFromId??null,this.gesture=e.gesture??null,this.isVariant=e.isVariant??false,this.isPrimaryVariant=e.isPrimaryVariant??false,this.isBreakpoint=e.isBreakpoint??false,this.isPrimaryBreakpoint=e.isPrimaryBreakpoint??false,S(this);}},oe=class extends W{static{r(this,"TextNode");}[m]="TextNode";name;visible;locked;rotation;opacity;zIndex;font;inlineTextStyle;position;top;right;bottom;left;centerX;centerY;width;height;maxWidth;minWidth;maxHeight;minHeight;link;linkOpenInNewTab;linkSmoothScroll;linkClickTrackingId;linkRelValues;linkPreserveParams;gridItemFillCellWidth;gridItemFillCellHeight;gridItemHorizontalAlignment;gridItemVerticalAlignment;gridItemColumnSpan;gridItemRowSpan;overflow;overflowX;overflowY;textTruncation;#e;constructor(e,t){super(e,t),this.#e=t,this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.zIndex=e.zIndex??null,this.font=y(t,e.font)??null,this.inlineTextStyle=y(t,e.inlineTextStyle)??null,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,this.maxWidth=e.maxWidth??null,this.minWidth=e.minWidth??null,this.maxHeight=e.maxHeight??null,this.minHeight=e.minHeight??null,this.link=e.link??null,this.linkOpenInNewTab=e.linkOpenInNewTab??null,this.linkSmoothScroll=e.linkSmoothScroll??null,this.linkClickTrackingId=e.linkClickTrackingId??null,this.linkRelValues=e.linkRelValues??null,this.linkPreserveParams=e.linkPreserveParams??null,this.overflow=e.overflow??null,this.overflowX=e.overflowX??null,this.overflowY=e.overflowY??null,this.textTruncation=e.textTruncation??null,this.gridItemFillCellWidth=e.gridItemFillCellWidth??null,this.gridItemFillCellHeight=e.gridItemFillCellHeight??null,this.gridItemHorizontalAlignment=e.gridItemHorizontalAlignment??null,this.gridItemVerticalAlignment=e.gridItemVerticalAlignment??null,this.gridItemColumnSpan=e.gridItemColumnSpan??null,this.gridItemRowSpan=e.gridItemRowSpan??null,S(this);}async setText(e){await this.#e.invoke("setTextForNode",this.id,e);}async getText(){return this.#e.invoke("getTextForNode",this.id)}async setHTML(e){await this.#e.invoke(me,this.id,e),await new Promise(t=>{setTimeout(t,30);});}async getHTML(){return this.#e.invoke(ge,this.id)}},qe=class extends W{static{r(this,"SVGNode");}[m]="SVGNode";name;visible;locked;svg;rotation;opacity;position;top;right;bottom;left;centerX;centerY;width;height;constructor(e,t){super(e,t),this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.svg=e.svg,this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,S(this);}},Ye=class extends W{static{r(this,"VectorSetItemNode");}[m]="VectorSetItemNode";name;visible;locked;top;right;bottom;left;centerX;centerY;width;height;#e;constructor(e,t){super(e,t),this.#e=t,this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.top=e.top??null,this.right=e.right??null,this.bottom=e.bottom??null,this.left=e.left??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,S(this);}async getSVG(){return this.#e.invoke("getSVGForNode",this.id)}},Xe=class extends W{static{r(this,"ComponentInstanceNode");}[m]="ComponentInstanceNode";name;visible;locked;componentIdentifier;insertURL;componentName;controls;rotation;opacity;position;top;right;bottom;left;centerX;centerY;width;height;maxWidth;minWidth;maxHeight;minHeight;aspectRatio;#e;#t;#n;get typedControls(){return this.#n||(this.#n=y(this.#e,this.#t.typedControls)??{}),this.#n}constructor(e,t){super(e,t),this.#e=t,this.#t=e,this.name=e.name??null,this.visible=e.visible??true,this.locked=e.locked??false,this.componentIdentifier=e.componentIdentifier,this.componentName=e.componentName??null,this.insertURL=e.insertURL??null,this.controls=y(t,e.controls)??{},this.rotation=e.rotation??0,this.opacity=e.opacity??1,this.position=e.position,this.left=e.left??null,this.right=e.right??null,this.top=e.top??null,this.bottom=e.bottom??null,this.centerX=e.centerX??null,this.centerY=e.centerY??null,this.width=e.width??null,this.height=e.height??null,this.maxWidth=e.maxWidth??null,this.minWidth=e.minWidth??null,this.maxHeight=e.maxHeight??null,this.minHeight=e.minHeight??null,this.aspectRatio=e.aspectRatio??null,S(this);}async getRuntimeError(){return this.#e.invoke("getRuntimeErrorForCodeComponentNode",this.id)}},K=class extends W{static{r(this,"WebPageNode");}[m]="WebPageNode";#e;path;collectionId;constructor(e,t){super(e,t),this.path=e.path??null,this.collectionId=e.collectionId??null,this.#e=t,S(this);}async clone(e){return this.#e.cloneWebPage(this.id,e)}getBreakpointSuggestions(){return this.#e.invoke("getBreakpointSuggestionsForWebPage",this.id)}async addBreakpoint(e,t){let i=await this.#e.invoke("addBreakpointToWebPage",this.id,e,t),o=C(i,this.#e);return c(o instanceof U),c(xr(o),"Expected node to be a FrameNode"),o}async getActiveCollectionItem(){let e=await this.#e.invoke("getActiveCollectionItemForWebPage",this.id);return e?new _e(e,this.#e):null}},ae=class extends W{static{r(this,"ComponentNode");}[m]="ComponentNode";name;componentIdentifier;insertURL;componentName;#e;constructor(e,t){super(e,t),this.#e=t,this.componentIdentifier=e.componentIdentifier,this.insertURL=e.insertURL??null,this.componentName=e.componentName??null,this.name=e.name??null,S(this);}async addVariant(e,t){let i=await this.#e.invoke("addVariantToComponent",this.id,e,t);if(!i)throw new Error("Failed to add variant to component");let o=C(i,this.#e);return c(o instanceof U),c(Pn(o),"Node is not a component variant"),o}async addGestureVariant(e,t,i){let o=await this.#e.invoke("addGestureVariantToComponent",this.id,e,t,i);if(!o)throw new Error("Failed to add state to component");let a=C(o,this.#e);return c(a instanceof U),c(br(a),"Node is not a gesture variant"),a}async getVariables(){let e=await this.#e.invoke("getVariables",this.id);return y(this.#e,e)}async addVariables(e){let t=await this.#e.invoke("addVariables",this.id,L(e));return y(this.#e,t)}async removeVariables(e){await this.#e.invoke("removeVariables",this.id,e);}async setVariableOrder(e){await this.#e.invoke("setVariableOrder",this.id,e);}},Ze=class extends W{static{r(this,"VectorSetNode");}[m]="VectorSetNode";name;constructor(e,t){super(e,t),this.name=e.name??null,S(this);}},$=class extends W{static{r(this,"DesignPageNode");}[m]="DesignPageNode";name;#e;constructor(e,t){super(e,t),this.#e=t,this.name=e.name??null,S(this);}async clone(e){return this.#e.cloneDesignPage(this.id,e)}},Je=class extends W{static{r(this,"UnknownNode");}[m]="UnknownNode";constructor(e,t){super(e,t),S(this);}async clone(){throw new Error("Cannot clone an unknown node")}};function C(n,e){switch(n[m]){case "DesignPageNode":return new $(n,e);case "WebPageNode":return new K(n,e);case "ComponentNode":return new ae(n,e);case "VectorSetNode":return new Ze(n,e);case "VectorSetItemNode":return new Ye(n,e);case "ComponentInstanceNode":return new Xe(n,e);case "FrameNode":return new U(n,e);case "SVGNode":return new qe(n,e);case "TextNode":return new oe(n,e);case "UnknownNode":return new Je(n,e);default:return new Je(n,e)}}r(C,"convertRawNodeDataToNode");function wt(n){return n instanceof U}r(wt,"isFrameNode");function Cr(n){return n instanceof oe}r(Cr,"isTextNode");function Ir(n){return n instanceof qe}r(Ir,"isSVGNode");function be(n){return n instanceof Xe}r(be,"isComponentInstanceNode");function Tr(n){return n instanceof K}r(Tr,"isWebPageNode");function Pr(n){return n instanceof ae}r(Pr,"isComponentNode");function Sr(n){return n instanceof $}r(Sr,"isDesignPageNode");function Fr(n){return n instanceof Ze}r(Fr,"isVectorSetNode");function vr(n){return n instanceof Ye}r(vr,"isVectorSetItemNode");function re(n){return n instanceof Je}r(re,"isUnknownNode");function Qe(n){return !!(wt(n)||Cr(n)||be(n)||Ir(n)||vr(n)||re(n))}r(Qe,"isCanvasNode");function Sn(n){return !!(Tr(n)||Sr(n)||Pr(n)||Fr(n)||re(n))}r(Sn,"isCanvasRootNode");var et=class{static{r(this,"VectorSet");}id;name;owner;#e;constructor(e,t){this.id=e.id,this.name=e.name,this.owner=e.owner,this.#e=t;}async getItems(){return (await this.#e.invoke("getVectorSetItems",this.id)).map(t=>new Vt(t,this.#e))}},Vt=class{static{r(this,"VectorSetItem");}id;name;insertUrl;iconUrl;#e;#t;constructor(e,t){this.id=e.id,this.name=e.name,this.insertUrl=e.insertUrl,this.iconUrl=e.iconUrl,this.#e=e.moduleId,this.#t=t;}async getVariables(){return this.#t.invoke("getVectorSetItemVariables",this.id,this.#e)}};var tt=class extends Error{static{r(this,"FramerPluginError");}name=this.constructor.name},J=class extends Error{static{r(this,"FramerPluginClosedError");}name=this.constructor.name};function Ca(n){return n.type==="separator"}r(Ca,"isSeparatorMenuItem");function Lt(n,e){let t=[];for(let i of n){if(Ca(i)){t.push(i);continue}let{onAction:o,...a}=i,s=a;if(i.onAction){let d=Math.random();e.set(d,i.onAction),s.actionId=d;}i.submenu&&(s.submenu=Lt(i.submenu,e)),t.push(s);}return t}r(Lt,"addMenuItemsToOnActionCallbackMap");var Wt="type",Dr={[Wt]:"pluginReadySignal"},Ta="pluginReadyResponse";var Pa={methodResponse:true,subscriptionMessage:true,permissionUpdate:true,menuAction:true};function kr(n){return k(n)&&f(n[Wt])&&n[Wt]in Pa}r(kr,"isVekterToPluginNonHandshakeMessage");function Nr(n){return k(n)&&n[Wt]===Ta}r(Nr,"isPluginReadyResponse");var Fn=Symbol(),vn=Symbol(),Dn=Symbol(),kn=Symbol(),Nn=Symbol(),An=Symbol(),En=Symbol(),Mn=Symbol(),wn=Symbol(),Vn=Symbol(),Ln=Symbol(),Wn=Symbol(),Rn=Symbol(),Bn=Symbol(),Un=Symbol(),On=Symbol(),zn=Symbol(),Gn=Symbol(),Kn=Symbol(),$n=Symbol(),jn=Symbol(),Hn=Symbol(),_n=Symbol(),qn=Symbol(),Yn=Symbol(),Xn=Symbol(),Zn=Symbol(),Jn=Symbol(),Qn=Symbol(),ei=Symbol(),b={publish:Fn,getDeployments:vn,deploy:Dn,getChangedPaths:kn,getChangeContributors:Nn,createManagedCollection:An,rejectAllPending:En,readProjectForAgent:Mn,getAgentSystemPrompt:wn,getAgentContext:Vn,applyAgentChanges:Ln,flattenComponentInstanceForAgent:Wn,getAncestorsForAgent:Rn,getGroundNodeForAgent:Bn,getNodeForAgent:Un,getNodesForAgent:On,getNodesOfTypesForAgent:zn,getParentNodeForAgent:Gn,getScopeNodeForAgent:Kn,makeExternalComponentLocalForAgent:$n,paginateForAgent:jn,publishForAgent:Hn,queryImagesForAgent:_n,reviewChangesForAgent:qn,serializeForAgent:Yn,serializeNodesForAgent:Xn,startAgentConversation:Zn,continueAgentConversation:Jn,submitAgentClarification:Qn,runSupervisorAgentCommand:ei};function ti(n){return typeof n=="string"&&n in b}r(ti,"isFramerApiOnlyMethod");var Sa=["unstable_getCodeFile","unstable_getCodeFiles","unstable_getCodeFileVersionContent","unstable_getCodeFileLint2","unstable_getCodeFileTypecheck2","unstable_getCodeFileVersions","lintCode"],Fa=["closeNotification","closePlugin","setCloseWarning","getActiveCollection","getActiveLocale","getActiveManagedCollection","getCanvasRoot","getChildren","getCollection","getCollectionFields","getCollectionFields2","getCollectionItems","getCollectionItems2","getCollections","getColorStyle","getColorStyles","getCurrentUser","getCurrentUser2","getCustomCode","getDefaultLocale","getFont","getFonts","getImage","getImageData","getLocales","getLocaleLanguages","getLocaleRegions","getLocalizationGroups","getManagedCollection","getManagedCollectionFields","getManagedCollectionFields2","getManagedCollectionItemIds","getManagedCollections","getNode","getNodesWithAttribute","getNodesWithAttributeSet","getNodesWithType","getParent","getPluginData","getPluginDataForNode","getPluginDataKeys","getPluginDataKeysForNode","getProjectInfo","getProjectInfo2","getPublishInfo","getRect","getSelection","getSVGForNode","getText","getTextForNode","getTextStyle","getTextStyles","hideUI","setBackgroundMessage","notify","onPointerDown","setActiveCollection","setSelection","showUI","getCodeFileVersionContent","typecheckCode","getCodeFileVersions","getCodeFiles","getCodeFile","unstable_getDependencyVersion","getRedirects","uploadFile","uploadFiles","uploadImage","uploadImages","zoomIntoView","navigateTo","getRuntimeErrorForModule","getRuntimeErrorForCodeComponentNode","showProgressOnInstances","removeProgressFromInstances","addComponentInstancePlaceholder","updateComponentInstancePlaceholder","removeComponentInstancePlaceholder","setMenu","showContextMenu","getBreakpointSuggestionsForWebPage","getActiveCollectionItemForWebPage","getVariables","getVectorSets","getVectorSetItems","getVectorSetItemVariables","getChangedPaths","getChangeContributors","getDeployments","readProjectForAgent","getAgentSystemPrompt","getAgentContext","queryImagesForAgent","reviewChangesForAgent","getNodeForAgent","getNodesForAgent","getNodesOfTypesForAgent","getScopeNodeForAgent","getGroundNodeForAgent","getParentNodeForAgent","getAncestorsForAgent","paginateForAgent","serializeForAgent","serializeNodesForAgent",mt,ft,yt,ht,ge,"getAiServiceInfo","sendTrackingEvent",...Sa];new Set(Fa);var ni={addComponentInstance:["addComponentInstance"],addComponentInstancePlaceholder:[],addDetachedComponentLayers:["addDetachedComponentLayers"],addImage:["addImage"],addImages:["addImages"],addSVG:["addSVG"],addText:["addText"],addRedirects:["addRedirects"],getRedirects:[],removeRedirects:["removeRedirects"],setRedirectOrder:["setRedirectOrder"],subscribeToRedirects:[],cloneNode:["cloneNode"],closePlugin:[],createColorStyle:["createColorStyle"],createFrameNode:["createNode"],createTextNode:["createNode"],createComponentNode:["createNode"],createTextStyle:["createTextStyle"],createDesignPage:["createDesignPage"],createWebPage:["createWebPage"],getActiveCollection:[],getActiveLocale:[],getActiveManagedCollection:[],getCanvasRoot:[],getChildren:[],getCollection:[],getCollections:[],getColorStyle:[],getColorStyles:[],getCurrentUser:[],getCustomCode:[],getDefaultLocale:[],getFont:[],getFonts:[],getImage:[],getLocales:[],getLocalizationGroups:[],getManagedCollection:[],getManagedCollections:[],getNode:[],getNodesWithAttribute:[],getNodesWithAttributeSet:[],getNodesWithType:[],getParent:[],getPluginData:[],getPluginDataKeys:[],getProjectInfo:[],getPublishInfo:[],getRect:[],getSelection:[],getText:[],getTextStyle:[],getTextStyles:[],hideUI:[],setBackgroundMessage:[],setCloseWarning:[],lintCode:[],makeDraggable:["onDragEnd","onDragStart","onDrag","setDragData","preloadDetachedComponentLayers","preloadImageUrlForInsertion","preloadDragPreviewImage"],notify:[],preloadDetachedComponentLayers:["preloadDetachedComponentLayers"],preloadDragPreviewImage:["preloadDragPreviewImage"],preloadImageUrlForInsertion:["preloadImageUrlForInsertion"],removeNode:["removeNodes2"],removeNodes:["removeNodes2"],setAttributes:["setAttributes"],setCustomCode:["setCustomCode"],setImage:["setImage"],setLocalizationData:["setLocalizationData"],createLocale:["createLocale"],getLocaleLanguages:[],getLocaleRegions:[],setMenu:[],showContextMenu:[],setParent:["setParent"],setPluginData:["setPluginData"],setSelection:[],setText:["setText"],typecheckCode:[],showUI:[],subscribeToCanvasRoot:[],subscribeToColorStyles:[],subscribeToCustomCode:[],subscribeToImage:[],subscribeToPublishInfo:[],subscribeToSelection:[],subscribeToText:[],subscribeToTextStyles:[],createCodeFile:["createCodeFile"],unstable_getDependencyVersion:[],unstable_ensureMinimumDependencyVersion:["unstable_ensureMinimumDependencyVersion"],getCodeFiles:[],getCodeFile:[],subscribeToCodeFiles:[],subscribeToOpenCodeFile:[],uploadFile:[],uploadFiles:[],uploadImage:[],uploadImages:[],zoomIntoView:[],navigateTo:[],getVectorSets:[],"VectorSet.getItems":[],"VectorSetItem.getVariables":[],"Node.navigateTo":[],"CodeFile.navigateTo":[],"Collection.navigateTo":[],"ManagedCollection.navigateTo":[],"CollectionItem.navigateTo":[],"ComponentInstanceNode.getRuntimeError":[],"ImageAsset.cloneWithAttributes":[],"ImageAsset.getData":[],"ImageAsset.loadBitmap":[],"ImageAsset.loadImage":[],"ImageAsset.measure":[],"CodeFile.remove":["removeCodeFile"],"CodeFile.rename":["renameCodeFile"],"CodeFile.setFileContent":["setCodeFileContent"],"CodeFile.getVersions":[],"CodeFile.showProgressOnInstances":[],"CodeFile.removeProgressFromInstances":[],"CodeFile.lint":[],"CodeFile.typecheck":[],"CodeFileVersion.getContent":[],"ComponentInstancePlaceholder.setAttributes":[],"ComponentInstancePlaceholder.remove":[],"ComponentInstancePlaceholder.replaceWithComponentInstance":["replaceComponentInstancePlaceholderWithComponentInstance"],"Field.remove":["removeCollectionFields"],"Field.setAttributes":["addCollectionFields2"],"EnumField.addCase":["addEnumCase"],"EnumField.setCaseOrder":["setEnumCaseOrder"],"Collection.addFields":["addCollectionFields2"],"Collection.addItems":["addCollectionItems2"],"Collection.getFields":[],"Collection.getItems":[],"Collection.getPluginData":[],"Collection.getPluginDataKeys":[],"Collection.removeFields":["removeCollectionFields"],"Collection.removeItems":["removeCollectionItems"],"Collection.setAsActive":[],"Collection.setFieldOrder":["setCollectionFieldOrder"],"Collection.setItemOrder":["setCollectionItemOrder"],"Collection.setPluginData":["setPluginDataForNode"],"CollectionItem.getPluginData":[],"CollectionItem.getPluginDataKeys":[],"CollectionItem.remove":["removeCollectionItems"],"CollectionItem.setAttributes":["setCollectionItemAttributes2"],"CollectionItem.setPluginData":["setPluginDataForNode"],"ManagedCollection.addItems":["addManagedCollectionItems2"],"ManagedCollection.getFields":[],"ManagedCollection.getItemIds":[],"ManagedCollection.getPluginData":[],"ManagedCollection.getPluginDataKeys":[],"ManagedCollection.removeItems":["removeManagedCollectionItems"],"ManagedCollection.setAsActive":[],"ManagedCollection.setFields":["setManagedCollectionFields"],"ManagedCollection.setItemOrder":["setManagedCollectionItemOrder"],"ManagedCollection.setPluginData":["setPluginDataForNode"],"Node.clone":["cloneNode","cloneWebPage","cloneDesignPage"],"WebPageNode.clone":["cloneWebPage"],"DesignPageNode.clone":["cloneDesignPage"],"Node.getChildren":[],"Node.getNodesWithAttribute":[],"Node.getNodesWithAttributeSet":[],"Node.getNodesWithType":[],"Node.getParent":[],"Node.getPluginData":[],"Node.getPluginDataKeys":[],"Node.getRect":[],"Node.remove":["removeNodes2"],"Node.select":[],"Node.setAttributes":["setAttributes"],"Node.setPluginData":["setPluginDataForNode"],"Node.walk":[],"Node.zoomIntoView":[],"TextNode.getText":[],"TextNode.setText":["setTextForNode"],"TextNode.setHTML":[me],"TextNode.getHTML":[],"ComponentNode.addVariant":["addVariantToComponent"],"ComponentNode.addGestureVariant":["addGestureVariantToComponent"],"ComponentNode.getVariables":[],"ComponentNode.addVariables":["addVariables"],"ComponentNode.removeVariables":["removeVariables"],"WebPageNode.getBreakpointSuggestions":[],"WebPageNode.addBreakpoint":["addBreakpointToWebPage"],"WebPageNode.getActiveCollectionItem":[],"ColorStyle.getPluginData":[],"ColorStyle.getPluginDataKeys":[],"ColorStyle.remove":["removeColorStyle"],"ColorStyle.setAttributes":["setColorStyleAttributes"],"ColorStyle.setPluginData":["setPluginDataForNode"],"TextStyle.getPluginData":[],"TextStyle.getPluginDataKeys":[],"TextStyle.remove":["removeTextStyle"],"TextStyle.setAttributes":["setTextStyleAttributes"],"TextStyle.setPluginData":["setPluginDataForNode"],"Variable.setAttributes":["updateVariable"],"Variable.remove":["removeVariables"],"ComponentNode.setVariableOrder":["setVariableOrder"],"EnumCase.remove":["removeEnumCase"],"EnumCase.setAttributes":["updateEnumCase"],"EnumVariable.addCase":["addEnumCase"],"EnumVariable.setCaseOrder":["setEnumCaseOrder"],createCollection:["createCollection"],createManagedCollection:["createManagedCollection"],[qt]:[],[Yt]:[],[Xt]:[],[Zt]:[],[Jt]:[],[Qt]:[],[Fn]:["publish"],[vn]:[],[Dn]:["deploy"],[kn]:[],[Nn]:[],[An]:["createManagedCollection"],[En]:[],[Mn]:[],[wn]:[],[Vn]:[],[Ln]:["applyAgentChanges"],[Wn]:["flattenComponentInstanceForAgent"],[Rn]:[],[Bn]:[],[Un]:[],[On]:[],[zn]:[],[Gn]:[],[Kn]:[],[$n]:["makeExternalComponentLocalForAgent"],[jn]:[],[Hn]:["publishForAgent"],[_n]:[],[qn]:[],[Yn]:[],[Xn]:[],[Zn]:["startAgentConversation"],[Jn]:["continueAgentConversation"],[Qn]:["submitAgentClarification"],[ei]:["runSupervisorAgentCommand"]},Rt=[];for(let n of Object.keys(ni))ni[n].length!==0&&Rt.push(n);S(Rt);function ii(n){let e={};for(let t of Rt){let i=ni[t];e[t]=i.every(o=>n[o]);}return e}r(ii,"createPerMethodPermissionMap");function Ar(){let n={};for(let e of Rt)n[e]=true;return n}r(Ar,"createPerMethodPermissionMapForTesting");var xe=null;function Er(n){if(typeof window>"u")return;if(!xe){let t=document.createElement("style");document.head.appendChild(t),xe=t.sheet;}if(!xe){n();return}let e=xe.insertRule("* { transition: none !important; animation: none !important; }");n(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{xe&&xe.deleteRule(e);});});}r(Er,"withDisabledCssTransitions");var nt=class{static{r(this,"PluginEngine");}methodInvocationId=0;notificationId=0;postMessage;methodResponseHandlers=new Map;mode;subscriptions=new Map;perMethodPermissionMap;permissionSubscriptions=new Set;messageTypesCheckedInIsAllowedTo=new Set;showUncheckedPermissionToasts=true;environmentInfo=null;initialState;menuItemOnActionCallbackMap=new Map;contextMenuItemOnActionCallbackMap=new Map;rejectAllPending(e){for(let[t,i]of this.methodResponseHandlers)i.reject(e),this.methodResponseHandlers.delete(t);}constructor(e){if(!e){this.postMessage=()=>{},this.mode="canvas",this.perMethodPermissionMap=Ar(),this.initialState={mode:"canvas",intent:"plugin/open"};return}switch(e.transport.onMessage(this.onMessage),typeof window<"u"&&(window.addEventListener("error",t=>{t.error instanceof J&&(t.preventDefault(),t.stopImmediatePropagation());}),window.addEventListener("unhandledrejection",t=>{t.reason instanceof J&&(t.preventDefault(),t.stopImmediatePropagation());})),this.mode=e.mode,this.initialState=e.initialState??{mode:e.mode,intent:"plugin/open"},this.environmentInfo=e.environmentInfo,this.perMethodPermissionMap=ii(e.permissionMap),this.postMessage=(t,i)=>e.transport.send(t,i),this.mode){case "canvas":case "image":case "editImage":case "configureManagedCollection":case "syncManagedCollection":case "collection":case "localization":case "code":typeof window<"u"&&window.addEventListener("pointerdown",()=>{this.invoke("onPointerDown");}),e.theme&&this.applyPluginTheme(e.theme),this.subscribe("theme",this.applyPluginTheme),this.applyPrereleaseStyles();break;case "api":break;default:Fe(this.mode);}}async invoke(e,...t){return this.invokeTransferable(e,void 0,...t)}async invokeTransferable(e,t,...i){return new Promise((a,s)=>{let d={type:"methodInvocation",methodName:e,id:this.methodInvocationId,args:i.map(L)};this.methodInvocationId+=1,this.methodResponseHandlers.set(d.id,{resolve:a,reject:s}),this.postMessage(d,t);})}subscribe(e,t){this.postMessage({type:"subscribe",topic:e});let i=this.subscriptions.get(e)??new Set;return i.add(t),this.subscriptions.set(e,i),()=>{let o=this.subscriptions.get(e)??new Set;o.delete(t),o.size===0&&this.postMessage({type:"unsubscribe",topic:e}),this.subscriptions.set(e,o);}}onMessage=r(e=>{let t=e?.data??e;if(kr(t))switch(t.type){case "permissionUpdate":{this.perMethodPermissionMap=ii(t.permissionMap);for(let i of this.permissionSubscriptions)i();break}case "methodResponse":{let i=this.methodResponseHandlers.get(t.id);if(!i){switch(this.mode){case "canvas":case "image":case "editImage":case "configureManagedCollection":case "syncManagedCollection":case "collection":case "localization":case "code":throw new Error(`No handler for response with id ${t.id}`);case "api":{if(!(t.id<this.methodInvocationId))throw new Error(`No handler for unknown response id ${t.id}`);break}default:Fe(this.mode);}break}this.methodResponseHandlers.delete(t.id),f(t.error)?i.reject(new tt(t.error)):i.resolve(t.result);break}case "subscriptionMessage":{let{topic:i,payload:o}=t,a=this.subscriptions.get(i);if(!a)throw new Error("Received a subscription message but no handler present");for(let s of a)s(o);break}case "menuAction":{let i=this.getOnActionFromCallbackMap(t.actionId,t.actionType);if(!i)throw new Error("Menu action received for an unknown menu item");i();break}default:Fe(t);}},"onMessage");getOnActionFromCallbackMap(e,t){switch(t){case "pluginMenu":return this.menuItemOnActionCallbackMap.get(e);case "contextMenu":return this.contextMenuItemOnActionCallbackMap.get(e);default:Fe(t);}}applyPluginTheme=r(e=>{Er(()=>{document.body.setAttribute("data-framer-theme",e.mode);for(let t in e.tokens)document.body.style.setProperty(t,e.tokens[t]);});},"applyPluginTheme");applyPrereleaseStyles(){typeof window>"u"||new URLSearchParams(window.location.search).get("styles")==="prerelease"&&document.body.setAttribute("data-framer-styles","prerelease");}async cloneNode(e){let t=await this.invoke("cloneNode",e);return t?C(t,this):null}async cloneWebPage(e,t){let i=await this.invoke("cloneWebPage",e,t);c(i,"Expected to receive data for cloned web page");let o=C(i,this);return c(o instanceof K,"Expected cloned node to be an instance of WebPageNode"),o}async cloneDesignPage(e,t){let i=await this.invoke("cloneDesignPage",e,t);c(i,"Expected to receive data for cloned design page");let o=C(i,this);return c(o instanceof $,"Expected cloned node to be an instance of DesignPageNode"),o}async setAttributes(e,t){let i=await this.invoke("setAttributes",e,t);return i?C(i,this):null}async getParent(e){let t=await this.invoke("getParent",e);return t?C(t,this):null}async getChildren(e){return (await this.invoke("getChildren",e)).map(i=>{let o=C(i,this);return c(Qe(o)),o})}notify=r((e,t)=>{let i=`notification-${this.notificationId}`;return this.notificationId+=1,this.invoke("notify",e,{notificationId:i,variant:t?.variant??"info",buttonText:t?.button?.text,durationMs:t?.durationMs}).then(o=>{o==="actionButtonClicked"&&t?.button?.onClick&&t.button.onClick(),t?.onDisappear&&t.onDisappear();}),{close:r(()=>this.invoke("closeNotification",i),"close")}},"notify");async setMenu(e){this.menuItemOnActionCallbackMap=new Map;let t=Lt(e,this.menuItemOnActionCallbackMap);await this.invoke("setMenu",t);}async showContextMenu(e,t){this.contextMenuItemOnActionCallbackMap=new Map;let i=Lt(e,this.contextMenuItemOnActionCallbackMap);await this.invoke("showContextMenu",i,t);}};function va(n){return n.type==="component"}r(va,"isCodeFileComponentExport");function Da(n){return n.type==="override"}r(Da,"isCodeFileOverrideExport");var ri=class{static{r(this,"CodeFileVersion");}#e;#t;get id(){return this.#e.id}get name(){return this.#e.name}get createdAt(){return this.#e.createdAt}get createdBy(){return this.#e.createdBy}constructor(e,t){this.#t=t,this.#e=e;}async getContent(){return await this.#t.invoke("getCodeFileVersionContent",this.#e.fileId,this.#e.id)}},Q=class n{static{r(this,"CodeFile");}#e;#t;get id(){return this.#e.id}get name(){return this.#e.name}get path(){return this.#e.path}get content(){return this.#e.content}get exports(){return this.#e.exports}get versionId(){return this.#e.versionId}constructor(e,t){this.#t=t,this.#e=e;}async setFileContent(e){let t=await this.#t.invoke("setCodeFileContent",this.id,e);return new n(t,this.#t)}async rename(e){let t=await this.#t.invoke("renameCodeFile",this.id,e);return new n(t,this.#t)}async remove(){return this.#t.invoke("removeCodeFile",this.id)}async getVersions(){return (await this.#t.invoke("getCodeFileVersions",this.id)).map(t=>new ri(t,this.#t))}async showProgressOnInstances(e){return this.#t.invoke("showProgressOnInstances",this.id,e)}async removeProgressFromInstances(){return this.#t.invoke("removeProgressFromInstances",this.id)}async lint(e){return Promise.resolve([])}async typecheck(e){return await this.#t.invoke("typecheckCode",this.name,this.content,e,this.id)}async navigateTo(){return this.#t.invoke("navigateTo",this.id)}};var Bt=class n{static{r(this,"ComponentInstancePlaceholder");}#e;#t;constructor(e,t){this.#e=e,this.#t=t;}get id(){return this.#e.id}get width(){return this.#e.width}get height(){return this.#e.height}get title(){return this.#e.title}get codePreview(){return this.#e.codePreview}async setAttributes(e){let t=await this.#t.invoke("updateComponentInstancePlaceholder",this.id,e);return t?new n(t,this.#t):null}async remove(){await this.#t.invoke("removeComponentInstancePlaceholder",this.id);}async replaceWithComponentInstance(e,t){let i=await this.#t.invoke("replaceComponentInstancePlaceholderWithComponentInstance",this.id,e,t);if(!i)return null;let o=C(i,this.#t);return c(be(o)),o}};var ka=(()=>{let n=null;return {disableUntilMouseUp:r(()=>{if(n)return;n=document.createElement("style"),n.textContent="* { pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; }",document.head.appendChild(n);let e=r(()=>{n&&(document.head.removeChild(n),n=null,o());},"enablePointerEvents"),t=r(a=>{a.buttons>0&&a.buttons&1||e();},"handlePointerChange"),i=r(()=>{e();},"handleBlur");window.addEventListener("pointerup",t,true),window.addEventListener("pointermove",t,true),window.addEventListener("blur",i);function o(){window.removeEventListener("pointerup",t,true),window.removeEventListener("pointermove",t,true),window.removeEventListener("blur",i);}r(o,"cleanup");},"disableUntilMouseUp")}})(),Mr=5,Na=(()=>{let n=1;return {next:r(()=>`drag-${n++}`,"next")}})();function Aa(){}r(Aa,"noop");function wr(n,e,t,i){if(n.mode!=="canvas")return Aa;let o=Na.next(),a=document.body.style.cursor,s={type:"idle"},d=document.body,u=se.subscribeToIsAllowedTo("makeDraggable",g=>{g||P();}),T=r(g=>{se.isAllowedTo("makeDraggable")&&s.type!=="idle"&&(s.type==="dragging"&&n.invoke("onDragEnd",{...g,dragSessionId:o}).then(h=>{try{i?.(h);}catch{}}).catch(h=>{if(h instanceof Error){i?.({status:"error",reason:h.message});return}if(typeof h=="string"){i?.({status:"error",reason:h});return}i?.({status:"error"});}),P());},"endDrag"),F=r(g=>{if(!se.isAllowedTo("makeDraggable")||s.type==="idle")return;if(!(g.buttons>0&&!!(g.buttons&1))){T({cancelled:false});return}let{clientX:M,clientY:z}=g;if(s.type==="pointerDown"){let A=M-s.dragStart.mouse.x,ct=z-s.dragStart.mouse.y;if(Math.abs(A)<Mr&&Math.abs(ct)<Mr)return;s={type:"dragging",dragStart:s.dragStart},n.invoke("onDragStart",s.dragStart),document.getSelection()?.empty(),ka.disableUntilMouseUp();}d.setPointerCapture(g.pointerId);let te={x:M,y:z};n.invoke("onDrag",{dragSessionId:o,mouse:te}).then(A=>{s.type==="dragging"&&(document.body.style.cursor=A??"");});},"handlePointerChange"),O=r(g=>{g.key==="Escape"&&T({cancelled:true});},"handleKeyDown"),_=r(()=>{T({cancelled:true});},"handleBlur"),x=r(g=>{if(!se.isAllowedTo("makeDraggable"))return;T({cancelled:true});let h=e.getBoundingClientRect(),M={x:h.x,y:h.y,width:h.width,height:h.height},z,te=e.querySelectorAll("svg");if(te.length===1){let ce=te.item(0).getBoundingClientRect();z={x:ce.x,y:ce.y,width:ce.width,height:ce.height};}let A={x:g.clientX,y:g.clientY};s={type:"pointerDown",dragStart:{dragSessionId:o,elementRect:M,svgRect:z,mouse:A}},n.invoke("setDragData",o,t()),d.addEventListener("pointermove",F,true),d.addEventListener("pointerup",F,true),window.addEventListener("keydown",O,true),window.addEventListener("blur",_);},"handlePointerDown"),p=r(()=>{if(!se.isAllowedTo("makeDraggable"))return;let g=t();g.type==="detachedComponentLayers"&&n.invoke("preloadDetachedComponentLayers",g.url),g.type==="image"&&n.invoke("preloadImageUrlForInsertion",g.image),g.previewImage&&n.invoke("preloadDragPreviewImage",g.previewImage);},"preload");e.addEventListener("pointerdown",x),e.addEventListener("mouseenter",p);function P(){s={type:"idle"},document.body.style.cursor=a,d.removeEventListener("pointermove",F,true),d.removeEventListener("pointerup",F,true),window.removeEventListener("keydown",O,true),window.removeEventListener("blur",_);}return r(P,"dragCleanup"),()=>{e.removeEventListener("pointerdown",x),e.removeEventListener("mouseenter",p),T({cancelled:true}),u();}}r(wr,"makeDraggable");var Ce=class n{static{r(this,"Redirect");}#e;#t;get id(){return this.#e.id}get from(){return this.#e.from}get to(){return this.#e.to}get expandToAllLocales(){return this.#e.expandToAllLocales}constructor(e,t){this.#t=t,this.#e=e;}remove(){return this.#t.invoke("removeRedirects",[this.id])}async setAttributes(e){let t={...e,id:this.id},[i]=await this.#t.invoke("addRedirects",[t]);return c(pt(i)),I(i)?null:new n(i,this.#t)}};var oi=class{static{r(this,"FramerPluginAPI");}#e;constructor(e){this.#e=e;}get mode(){return this.#e.mode}isAllowedTo(...e){return e.every(t=>this.#e.perMethodPermissionMap[t])}subscribeToIsAllowedTo(...e){let[t,i]=Fi(e),o=this.isAllowedTo(...t),a=r(()=>{let s=this.isAllowedTo(...t);s!==o&&(o=s,i(o));},"update");return this.#e.permissionSubscriptions.add(a),()=>{this.#e.permissionSubscriptions.delete(a);}}async showUI(e){return this.#e.invoke("showUI",e)}async hideUI(){return this.#e.invoke("hideUI")}async setBackgroundMessage(e){return this.#e.invoke("setBackgroundMessage",e)}closePlugin(e,t){throw this.#e.invoke("closePlugin",e,t),new J}async getCurrentUser(){return this.#e.invoke("getCurrentUser2")}async getProjectInfo(){return this.#e.invoke("getProjectInfo2")}async getSelection(){return (await this.#e.invoke("getSelection")).map(t=>{let i=C(t,this.#e);return c(Qe(i)),i})}async setSelection(e){let t=f(e)?[e]:Array.from(e);return this.#e.invoke("setSelection",t)}subscribeToSelection(e){return this.#e.subscribe("selection",t=>{let i=t.map(o=>{let a=C(o,this.#e);return c(Qe(a)),a});e(i);})}async getCanvasRoot(){let e=await this.#e.invoke("getCanvasRoot"),t=C(e,this.#e);return c(Sn(t)),t}subscribeToCanvasRoot(e){return this.#e.subscribe("canvasRoot",t=>{let i=C(t,this.#e);c(Sn(i)),e(i);})}async getPublishInfo(){return this.#e.invoke("getPublishInfo")}subscribeToPublishInfo(e){return this.#e.subscribe("publishInfo",e)}async createFrameNode(e,t){let i=await this.#e.invoke("createNode","FrameNode",t??null,e);if(!i)return null;let o=C(i,this.#e);return c(o instanceof U),o}async removeNodes(e){return this.#e.invoke("removeNodes2",e)}async removeNode(e){return this.removeNodes([e])}async cloneNode(e){return this.#e.cloneNode(e)}async getNode(e){let t=await this.#e.invoke("getNode",e);return t?C(t,this.#e):null}async getParent(e){return this.#e.getParent(e)}async getChildren(e){return this.#e.getChildren(e)}async getRect(e){return this.#e.invoke("getRect",e)}async zoomIntoView(e,t){let i=f(e)?[e]:Array.from(e);return this.#e.invoke("zoomIntoView",i,t)}async setAttributes(e,t){return this.#e.setAttributes(e,t)}async setParent(e,t,i){return this.#e.invoke("setParent",e,t,i)}async getNodesWithType(e){return (await this.#e.invoke("getNodesWithType",null,e)).map(i=>C(i,this.#e))}async getNodesWithAttribute(e){return (await this.#e.invoke("getNodesWithAttribute",null,e)).map(i=>C(i,this.#e))}async getNodesWithAttributeSet(e){return (await this.#e.invoke("getNodesWithAttributeSet",null,e)).map(i=>C(i,this.#e))}async getImage(){let e=await this.#e.invoke("getImage");return e?y(this.#e,e):null}subscribeToImage(e){return this.#e.subscribe("image",t=>{if(!t){e(null);return}e(y(this.#e,t));})}async addImage(e){let t=await ze(e),i=Z(t);return this.#e.invokeTransferable("addImage",i,t)}async setImage(e){let t=await ze(e),i=Z(t);return this.#e.invokeTransferable("setImage",i,t)}async uploadImage(e){let t=await ze(e),i=Z(t),o=await this.#e.invokeTransferable("uploadImage",i,t);return y(this.#e,o)}async addImages(e){let t=await xn(e),i=t.flatMap(Z);await this.#e.invokeTransferable("addImages",i,t);}async uploadImages(e){let t=await xn(e),i=t.flatMap(Z),o=await this.#e.invokeTransferable("uploadImages",i,t);return y(this.#e,o)}async uploadFile(e){let t=await bn(e),i=await this.#e.invokeTransferable("uploadFile",Z(t),t);return y(this.#e,i)}async uploadFiles(e){let t=await Promise.all(e.map(bn)),i=t.flatMap(Z),o=await this.#e.invokeTransferable("uploadFiles",i,t);return y(this.#e,o)}async addSVG(e){return this.#e.invoke("addSVG",e)}async addComponentInstance({url:e,attributes:t,parentId:i}){let o=await this.#e.invoke("addComponentInstance",{url:e,attributes:t,parentId:i}),a=C(o,this.#e);return c(be(a)),a}async addDetachedComponentLayers({url:e,layout:t,attributes:i}){let o=await this.#e.invoke("addDetachedComponentLayers",{url:e,layout:t,attributes:i}),a=C(o,this.#e);return c(wt(a)),a}async preloadDetachedComponentLayers(e){await this.#e.invoke("preloadDetachedComponentLayers",e);}async preloadImageUrlForInsertion(e){await this.#e.invoke("preloadImageUrlForInsertion",e);}async preloadDragPreviewImage(e){await this.#e.invoke("preloadDragPreviewImage",e);}async getText(){return this.#e.invoke("getText")}async setText(e){return this.#e.invoke("setText",e)}async addText(e,t){return this.#e.invoke("addText",e,t)}async setCustomCode(e){return this.#e.invoke("setCustomCode",e)}async getCustomCode(){return this.#e.invoke("getCustomCode")}subscribeToCustomCode(e){return this.#e.subscribe("customCode",e)}subscribeToText(e){return this.#e.subscribe("text",e)}makeDraggable(e,t,i){return wr(this.#e,e,t,i)}async getActiveManagedCollection(){let e=await this.#e.invoke("getActiveManagedCollection");return c(e,"Collection data must be defined"),new he(e,this.#e)}async getManagedCollection(){return this.getActiveManagedCollection()}async getManagedCollections(){let e=await this.#e.invoke("getManagedCollections");return c(e,"Collections data must be defined"),e.map(t=>new he(t,this.#e))}async getCollection(e){let t=await this.#e.invoke("getCollection",e);return t?new ie(t,this.#e):null}async getActiveCollection(){let e=await this.#e.invoke("getActiveCollection");return e?new ie(e,this.#e):null}async getCollections(){return (await this.#e.invoke("getCollections")).map(t=>new ie(t,this.#e))}notify=r((e,t)=>this.#e.notify(e,t),"notify");async getPluginData(e){return this.#e.invoke("getPluginData",e)}async setPluginData(e,t){return this.#e.invoke("setPluginData",e,t)}async getPluginDataKeys(){return this.#e.invoke("getPluginDataKeys")}async getColorStyles(){let e=await this.#e.invoke("getColorStyles");return y(this.#e,e)}async getColorStyle(e){let t=await this.#e.invoke("getColorStyle",e);return t?y(this.#e,t):null}async createColorStyle(e){let t=await this.#e.invoke("createColorStyle",e);return y(this.#e,t)}subscribeToColorStyles(e){return this.#e.subscribe("colorStyles",t=>{let i=y(this.#e,t);return e(i)})}async getTextStyles(){let e=await this.#e.invoke("getTextStyles");return y(this.#e,e)}async getTextStyle(e){let t=await this.#e.invoke("getTextStyle",e);return t?y(this.#e,t):null}async createTextStyle(e){let t=await this.#e.invoke("createTextStyle",e);return y(this.#e,t)}subscribeToTextStyles(e){return this.#e.subscribe("textStyles",t=>{let i=y(this.#e,t);return e(i)})}async getFont(e,t){let i=await this.#e.invoke("getFont",e,t);return i?y(this.#e,i):null}async getFonts(){let e=await this.#e.invoke("getFonts");return y(this.#e,e)}getLocales(){return this.#e.invoke("getLocales")}getDefaultLocale(){return this.#e.invoke("getDefaultLocale")}getActiveLocale(){return this.#e.invoke("getActiveLocale")}async getLocalizationGroups(e){return this.#e.invoke("getLocalizationGroups",e)}setLocalizationData(e){return this.#e.invoke("setLocalizationData",e)}async getRedirects(){return (await this.#e.invoke("getRedirects")).map(t=>new Ce(t,this.#e))}subscribeToRedirects(e){return this.#e.subscribe("redirects",t=>{let i=t.map(o=>new Ce(o,this.#e));return e(i)})}async addRedirects(e){return (await this.#e.invoke("addRedirects",e)).map(i=>new Ce(i,this.#e))}async removeRedirects(e){return this.#e.invoke("removeRedirects",e)}async setRedirectOrder(e){return this.#e.invoke("setRedirectOrder",e)}async createCodeFile(e,t,i){let o=await this.#e.invoke("createCodeFile",e,t,i);return new Q(o,this.#e)}async getCodeFiles(){let e=await this.#e.invoke("getCodeFiles"),t=[];for(let i of e)t.push(new Q(i,this.#e));return t}async getCodeFile(e){let t=await this.#e.invoke("getCodeFile",e);return t?new Q(t,this.#e):null}lintCode(e,t,i){return Promise.resolve([])}typecheckCode(e,t,i,o){return this.#e.invoke("typecheckCode",e,t,i,o)}subscribeToCodeFiles(e){return this.#e.subscribe("codeFiles",t=>{let i=t?.map(o=>new Q(o,this.#e));return e(i)})}setMenu(e){return this.#e.setMenu(e)}showContextMenu(e,t){return this.#e.showContextMenu(e,t)}async unstable_ensureMinimumDependencyVersion(e,t){return this.#e.invoke("unstable_ensureMinimumDependencyVersion",e,t)}async navigateTo(e,t){return this.#e.invoke("navigateTo",e,t)}subscribeToOpenCodeFile(e){return this.#e.subscribe("openCodeFile",t=>{let i=t?new Q(t,this.#e):null;return e(i)})}async createDesignPage(e){let t=await this.#e.invoke("createDesignPage",e),i=C(t,this.#e);return c(i instanceof $,"Expected node to be a DesignPageNode"),i}async createWebPage(e){let t=await this.#e.invoke("createWebPage",e),i=C(t,this.#e);return c(i instanceof K,"Expected node to be a WebPageNode"),i}async createCollection(e){let t=await this.#e.invoke("createCollection",e);return new ie(t,this.#e)}async createManagedCollection(e){let t=await this.#e.invoke("createManagedCollection",e);return new he(t,this.#e)}async setCloseWarning(e){return this.#e.invoke("setCloseWarning",e)}get[l.initialState](){return this.#e.initialState}},ai=class extends oi{static{r(this,"FramerPluginAPIBeta");}#e;constructor(e){super(e),this.#e=e,this.#e;}},it=class extends ai{static{r(this,"FramerPluginAPIAlpha");}#e;constructor(e){super(e),this.#e=e,this.#e;}async unstable_getDependencyVersion(e){return this.#e.invoke("unstable_getDependencyVersion",e)}async addComponentInstancePlaceholder(e){let t=await this.#e.invoke("addComponentInstancePlaceholder",e);return new Bt(t,this.#e)}async[l.getAiServiceInfo](e){return this.#e.invoke(mt,e)}async[l.sendTrackingEvent](e,t,i){return this.#e.invoke(ft,e,t,i)}async[l.getCurrentUser](){return this.#e.invoke(yt)}async[l.getProjectInfo](){return this.#e.invoke(ht)}async[l.getHTMLForNode](e){return this.#e.invoke(ge,e)}async[l.setHTMLForNode](e,t){return this.#e.invoke(me,e,t)}get[l.environmentInfo](){return this.#e.environmentInfo}get[l.showUncheckedPermissionToasts](){return this.#e.showUncheckedPermissionToasts}set[l.showUncheckedPermissionToasts](e){this.#e.showUncheckedPermissionToasts=e;}async createTextNode(e,t){let i=await this.#e.invoke("createNode","TextNode",t??null,e);if(!i)return null;let o=C(i,this.#e);return c(o instanceof oe),o}async createComponentNode(e){let t=await this.#e.invoke("createNode","ComponentNode",null,{name:e});if(!t)return null;let i=C(t,this.#e);return c(i instanceof ae),i}async getVectorSets(){return (await this.#e.invoke("getVectorSets")).map(t=>new et(t,this.#e))}async createLocale(e){return this.#e.invoke("createLocale",e)}async getLocaleLanguages(){return this.#e.invoke("getLocaleLanguages")}async getLocaleRegions(e){return this.#e.invoke("getLocaleRegions",e)}async[b.publish](){return this.#e.invoke("publish")}async[b.getDeployments](){return this.#e.invoke("getDeployments")}async[b.deploy](e,t){return this.#e.invoke("deploy",e,t)}async[b.getChangedPaths](){return this.#e.invoke("getChangedPaths")}async[b.getChangeContributors](e,t){return this.#e.invoke("getChangeContributors",e,t)}async[b.createManagedCollection](e){return this.createManagedCollection(e)}[b.rejectAllPending](e){this.#e.rejectAllPending(e);}async[b.getAgentSystemPrompt](){return this.#e.invoke("getAgentSystemPrompt")}async[b.getAgentContext](e){return this.#e.invoke("getAgentContext",e)}async[b.readProjectForAgent](e,t){return this.#e.invoke("readProjectForAgent",e,t)}async[b.applyAgentChanges](e,t){return this.#e.invoke("applyAgentChanges",e,t)}async[b.publishForAgent](e){return this.#e.invoke("publishForAgent",e)}async[b.queryImagesForAgent](e){return this.#e.invoke("queryImagesForAgent",e)}async[b.reviewChangesForAgent](e){return this.#e.invoke("reviewChangesForAgent",e)}async[b.flattenComponentInstanceForAgent](e,t){return this.#e.invoke("flattenComponentInstanceForAgent",e,t)}async[b.makeExternalComponentLocalForAgent](e,t){return this.#e.invoke("makeExternalComponentLocalForAgent",e,t)}async[b.getNodeForAgent](e,t){return this.#e.invoke("getNodeForAgent",e,t)}async[b.getNodesForAgent](e,t){return this.#e.invoke("getNodesForAgent",e,t)}async[b.getNodesOfTypesForAgent](e,t){return this.#e.invoke("getNodesOfTypesForAgent",e,t)}async[b.getScopeNodeForAgent](e,t){return this.#e.invoke("getScopeNodeForAgent",e,t)}async[b.getGroundNodeForAgent](e,t){return this.#e.invoke("getGroundNodeForAgent",e,t)}async[b.getParentNodeForAgent](e,t){return this.#e.invoke("getParentNodeForAgent",e,t)}async[b.getAncestorsForAgent](e,t){return this.#e.invoke("getAncestorsForAgent",e,t)}async[b.serializeForAgent](e,t){return this.#e.invoke("serializeForAgent",e,t)}async[b.serializeNodesForAgent](e,t){return this.#e.invoke("serializeNodesForAgent",e,t)}async[b.paginateForAgent](e,t){return this.#e.invoke("paginateForAgent",e,t)}async[b.startAgentConversation](e,t){return this.#e.invoke("startAgentConversation",e,t)}async[b.continueAgentConversation](e,t){return this.#e.invoke("continueAgentConversation",e,t)}async[b.submitAgentClarification](e){return this.#e.invoke("submitAgentClarification",e)}async[b.runSupervisorAgentCommand](e){return this.#e.invoke("runSupervisorAgentCommand",e)}};var si=class{constructor(e){this.origin=e;}origin;static{r(this,"IframeTransport");}send(e,t){window.parent.postMessage(e,this.origin,t);}onMessage(e){window.addEventListener("message",e);}};async function Ea(){return new Promise(n=>{function e({data:t,origin:i}){if(!Nr(t))return;window.removeEventListener("message",e);let a={transport:new si(i),mode:t.mode,permissionMap:t.permissionMap,environmentInfo:t.environmentInfo,origin:i,theme:t.theme??null,initialState:t.initialState};n(a);}r(e,"handshakeListener"),window.addEventListener("message",e),window.parent.postMessage(Dr,"*");})}r(Ea,"createBrowserContext");async function Ma(){return typeof window>"u"||"Deno"in globalThis?null:Ea()}r(Ma,"bootstrap");var Vr=await Ma(),se=Vr?new it(new nt(Vr)):new Proxy({},{get(n,e){throw new Error(`Cannot access framer.${String(e)} in server runtime. Use createFramerInstance() with a custom transport.`)}});function Lr(n){return new it(new nt(n))}r(Lr,"createFramerInstance");var Wr={};function Va(n){if(env)try{Object.assign(env,n);}catch{}Object.assign(Wr,n);}r(Va,"configure");function Ie(n,e){let t=Wr[n]??env[n];return t&&t.length>0?t:e}r(Ie,"getEnv");var Rr=isWorkerd,di=globalThis.WebSocket;async function Br(n,e){let t=new URL(n.href);t.protocol=t.protocol==="wss:"?"https:":t.protocol==="ws:"?"http:":t.protocol;let o=(await fetch(t.href,{headers:{Upgrade:"websocket",...e}})).webSocket;if(!o)throw new Error("WebSocket upgrade failed - server did not accept");return o.accept(),o}r(Br,"connectWebSocketCF");var Ur,Or;try{Ur=await import('fs'),Or=await import('path');}catch{}var ui=Ur,ci=Or;var le=(u=>(u.PROJECT_CLOSED="PROJECT_CLOSED",u.POOL_EXHAUSTED="POOL_EXHAUSTED",u.TIMEOUT="TIMEOUT",u.INTERNAL="INTERNAL",u.NODE_NOT_FOUND="NODE_NOT_FOUND",u.SCREENSHOT_TOO_LARGE="SCREENSHOT_TOO_LARGE",u.INVALID_REQUEST="INVALID_REQUEST",u.UNAUTHORIZED="UNAUTHORIZED",u))(le||{}),D=class extends Error{static{r(this,"FramerAPIError");}code;constructor(e,t){super(e),this.name="FramerAPIError",this.code=t,this.stack=void 0;}};function La(n){return n instanceof D?n.code==="POOL_EXHAUSTED":false}r(La,"isRetryableError");var Wa=new Map(Object.values(le).map(n=>[n,n]));function Gr(n){return typeof n=="string"?Wa.get(n)??"INTERNAL":"INTERNAL"}r(Gr,"parseErrorCode");var Ra={pluginMarshalTag:Et};var pi={silent:0,error:1,warn:2,info:3,debug:4};function Ba(){let n=Ie("FRAMER_API_LOG_LEVEL")?.toLowerCase();return n&&n in pi?n:"warn"}r(Ba,"getLogLevel");var gi=Ba();function rt(n){return pi[n]<=pi[gi]}r(rt,"shouldLog");var ot=globalThis.console,Ua="\x1B[90m",Oa="\x1B[0m";function za(n){return n?`[FramerAPI:${n}]`:"[FramerAPI]"}r(za,"formatPrefix");function Ga(n,...e){return [Ua+n,...e,Oa]}r(Ga,"formatDebug");function Kr(n){let e=za(n);return {warn:r((...t)=>{rt("warn")&&ot.warn(e,...t);},"warn"),error:r((...t)=>{rt("error")&&ot.error(e,...t);},"error"),log:r((...t)=>{rt("info")&&ot.log(e,...t);},"log"),info:r((...t)=>{rt("info")&&ot.info(e,...t);},"info"),debug:r((...t)=>{rt("debug")&&ot.debug(...Ga(e,...t));},"debug"),setLevel:r(t=>{gi=t;},"setLevel"),getLevel:r(()=>gi,"getLevel"),withRequestId:r(t=>Kr(t),"withRequestId")}}r(Kr,"createLogger");var N=Kr();N.warn;N.error;N.log;N.info;N.debug;N.setLevel;N.getLevel;var Ut="0.1.9";var $r="wss://api.framer.com/channel/headless-plugin";function ee(n,...e){if(n)return;let t=Error("Assertion Error"+(e.length>0?": "+e.join(" "):""));if(t.stack)try{let i=t.stack.split(`
|
|
6
6
|
`);i[1]?.includes("assert")?(i.splice(1,1),t.stack=i.join(`
|
|
7
7
|
`)):i[0]?.includes("assert")&&(i.splice(0,1),t.stack=i.join(`
|
|
8
|
-
`));}catch{}throw t}r(ee,"assert");var
|
|
9
|
-
`)};return n.logs&&console?.warn("extras.logs is reserved for log replay buffer, use another key"),e},"enrichWithLogs"),Kt=class{constructor(e,t){this.id=e;this.errorIsCritical=t??(e==="fatal"||e.endsWith(":fatal"));}id;static{r(this,"Logger");}level=3;didLog={};errorIsCritical;extend(e){let t=this.id+":"+e;return dt(t)}getBufferedMessages(){return j.filter(e=>e.logger===this)}setLevel(e){let t=this.level;return this.level=e,t}isLoggingTraceMessages(){return this.level>=0}trace=r((...e)=>{if(this.level>0)return;let t=de(this,0,e);console?.log(...t.toConsoleMessage());},"trace");debug=r((...e)=>{let t=de(this,1,e);this.level>1||console?.log(...t.toConsoleMessage());},"debug");info=r((...e)=>{let t=de(this,2,e);this.level>2||console?.info(...t.toConsoleMessage());},"info");warn=r((...e)=>{let t=de(this,3,e);this.level>3||console?.warn(...t.toConsoleMessage());},"warn");warnOncePerMinute=r((e,...t)=>{let i=this.didLog[e];if(i&&i>Date.now())return;this.didLog[e]=Date.now()+1e3*60,t.unshift(e);let o=de(this,3,t);this.level>3||console?.warn(...o.toConsoleMessage());},"warnOncePerMinute");error=r((...e)=>{let t=de(this,4,e);this.level>4||console?.error(...t.toConsoleMessage());},"error");errorOncePerMinute=r((e,...t)=>{let i=this.didLog[e];if(i&&i>Date.now())return;this.didLog[e]=Date.now()+1e3*60,t.unshift(e);let o=de(this,4,t);this.level>4||console?.error(...o.toConsoleMessage());},"errorOncePerMinute");reportWithoutLogging=r((e,t,i,o)=>{let a=La(t??{}),s=Er({caller:this.reportWithoutLogging,error:e,tags:{...i,handler:"logger",where:this.id},extras:t,critical:o??this.errorIsCritical});return [a,s]},"reportWithoutLogging");reportError=r((e,t,i,o)=>{let[a,s]=this.reportWithoutLogging(e,t,i,o);a?this.error(s,a):this.error(s);},"reportError");reportErrorWithThrottle=r((e,t,i,o,a)=>{if(!Wa(t))return;let s=this.didLog[t.message];s&&s>Date.now()||(this.didLog[t.message]=Date.now()+e,this.reportError(t,i,o,a));},"reportErrorWithThrottle");reportErrorOncePerMinute=r((e,t,i,o)=>this.reportErrorWithThrottle(1e3*60,e,t,i,o),"reportErrorOncePerMinute");reportErrorOnceEveryTenMinutes=r((e,t,i,o)=>this.reportErrorWithThrottle(1e3*60*10,e,t,i,o),"reportErrorOnceEveryTenMinutes");reportCriticalError=r((e,t,i)=>this.reportError(e,t,i,true),"reportCriticalError")};function Wa(n){return Object.prototype.hasOwnProperty.call(n,"message")}r(Wa,"isErrorWithMessage");function Gr(n){return n.replace(/[/\-\\^$*+?.()|[\]{}]/gu,"\\$&")}r(Gr,"escapeRegExp");function Ra(n,e,t){let i=ni[t];if(!i)return n;let o=`${i}: [${e}]`,a=Gr(o).replace("\\[","\\*?\\["),s=new RegExp(`^(?:T?\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\\s+)?${a}\\s*`);return n.replace(s,"")}r(Ra,"stripLogEntryPrefix");var jr;(_=>{function n(b,...p){return b.concat(p)}_.push=n,r(n,"push");function e(b){return b.slice(0,-1)}_.pop=e,r(e,"pop");function t(b,...p){return p.concat(b)}_.unshift=t,r(t,"unshift");function i(b,p,...T){let m=b.length;if(p<0||p>m)throw Error("index out of range: "+p);let h=b.slice();return h.splice(p,0,...T),h}_.insert=i,r(i,"insert");function o(b,p,T){let m=b.length;if(p<0||p>=m)throw Error("index out of range: "+p);let h=Array.isArray(T)?T:[T],A=b.slice();return A.splice(p,1,...h),A}_.replace=o,r(o,"replace");function a(b,p){let T=b.length;if(p<0||p>=T)throw Error("index out of range: "+p);let m=b.slice();return m.splice(p,1),m}_.remove=a,r(a,"remove");function s(b,p,T){let m=b.length;if(p<0||p>=m)throw Error("from index out of range: "+p);if(T<0||T>=m)throw Error("to index out of range: "+T);let h=b.slice();if(T===p)return h;let A=h[p];return p<T?(h.splice(T+1,0,A),h.splice(p,1)):(h.splice(p,1),h.splice(T,0,A)),h}_.move=s,r(s,"move");function d(b,p){let T=[],m=Math.min(b.length,p.length);for(let h=0;h<m;h++)T.push([b[h],p[h]]);return T}_.zip=d,r(d,"zip");function u(b,p,T){let m=b.slice(),h=m[p];return h===void 0||(m[p]=T(h)),m}_.update=u,r(u,"update");function I(b){return Array.from(new Set(b))}_.unique=I,r(I,"unique");function S(b,...p){return Array.from(new Set([...b,...p.flat()]))}_.union=S,r(S,"union");function O(b,p){return b.filter(p)}_.filter=O,r(O,"filter");})(jr||={});var Ka=Object.prototype.hasOwnProperty;function $a(n,e){return Ka.call(n,e)}r($a,"hasOwnProperty");var Hr;(i=>{function n(o,a){for(let s of Object.keys(o))$a(a,s)||delete o[s];for(let s of Object.keys(a))o[s]===void 0&&(o[s]=a[s]);return Object.setPrototypeOf(o,Object.getPrototypeOf(a)),o}i.morphUsingTemplate=n,r(n,"morphUsingTemplate");function e(o,a){a&&Object.assign(o,a);}i.writeOnce=e,r(e,"writeOnce");function t(o,a){return Object.assign(Object.create(Object.getPrototypeOf(o)),o,a)}i.update=t,r(t,"update");})(Hr||={});var _r;(o=>{function n(a,...s){return new Set([...a,...s])}o.add=n,r(n,"add");function e(a,...s){let d=new Set(a);for(let u of s)d.delete(u);return d}o.remove=e,r(e,"remove");function t(...a){let s=new Set;for(let d of a)for(let u of d)s.add(u);return s}o.union=t,r(t,"union");function i(a,s){return a.has(s)?o.remove(a,s):o.add(a,s)}o.toggle=i,r(i,"toggle");})(_r||={});var qr;(i=>{function n(o,...a){let s=new Map;o.forEach((u,I)=>s.set(I,u));let d=false;for(let u of a)u&&(u.forEach((I,S)=>s.set(S,I)),d=true);return d?s:o}i.merge=n,r(n,"merge");function e(o,a,s){let d=new Map(o);return d.set(a,s),d}i.set=e,r(e,"set");function t(o,a){let s=new Map(o);return s.delete(a),s}i.remove=t,r(t,"remove");})(qr||={});var $t=class extends Promise{static{r(this,"ResolvablePromise");}_state="initial";resolve;reject;get state(){return this._state}pending(){return this._state="pending",this}isResolved(){return this._state==="fulfilled"||this._state==="rejected"}constructor(){let e,t;super((i,o)=>{e=i,t=o;}),this.resolve=i=>{this._state="fulfilled",e(i);},this.reject=i=>{this._state="rejected",t(i);};}};$t.prototype.constructor=Promise;dt("task-queue");function Yr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}r(Yr,"isObject");var qa=-1,jt=class{static{r(this,"WebSocketTransport");}onError;closed=false;ws;messageHandlers=new Set;chunkBuffers=new Map;constructor(e){this.ws=e,this.setupListeners();}setupListeners(){this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("message",this.handleMessage);}removeListeners(){this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("message",this.handleMessage);}handleClose=r(()=>{this.removeListeners(),this.closed=true,this.chunkBuffers.clear(),this.onError?.(new D("Connection closed","PROJECT_CLOSED"));},"handleClose");handleMessage=r(e=>{let t=typeof e.data=="string"?e.data:String(e.data),i=this.tryParseChunkEnvelope(t);if(i){let o=this.handleChunk(i);if(!o)return;let a=new MessageEvent("message",{data:o});if(this.tryHandleDebugArchive(o))return;for(let s of this.messageHandlers)s(a);return}if(!this.tryHandleDebugArchive(t))for(let o of this.messageHandlers)o(e);},"handleMessage");tryHandleDebugArchive(e){try{let t=ue.parse(e);if(Yr(t)&&t.type==="debug-archive")return ai(t.data),!0}catch{}return false}replaceSocket(e){this.removeListeners(),this.chunkBuffers.clear(),this.ws=e,this.closed=false,this.setupListeners();}setOnError(e){this.onError=e;}send(e){if(this.closed)throw new D("Connection closed","PROJECT_CLOSED");this.ws.send(ue.stringify(e,{[Mt]:t=>In(t)&&L(t)}));}handleChunk(e){let t=this.chunkBuffers.get(e.id);return t||(t=[],this.chunkBuffers.set(e.id,t)),t.push(e.data),e.seq===qa?(this.chunkBuffers.delete(e.id),t.join("")):null}tryParseChunkEnvelope(e){if(!e.startsWith('{"$chunk":'))return null;try{let t=JSON.parse(e);if(t.$chunk===1&&typeof t.id=="string"&&typeof t.seq=="number")return t}catch{}return null}onMessage(e){let t=r(i=>{let o=typeof i.data=="string"?i.data:String(i.data);this.dispatchMessage(o,e);},"listener");this.messageHandlers.add(t);}dispatchMessage(e,t){let i=ue.parse(e);if(Yr(i)&&i.type==="error"){let o=i.message||JSON.stringify(i),a=i.code??"INTERNAL";k.error(`Server error: ${o}`),this.onError?.(new D(`Server error: ${o}`,a));return}t(i);}};function ai(n){ee(Yn,"File system module is not available."),ee(Xn,"Path module is not available.");let t=`debug-archive-${new Date().toISOString().replace(/[:.]/gu,"-")}.zip`,i=process.cwd(),o=Xn.resolve(i,t);Yn.writeFileSync(o,Buffer.from(n)),k.info(`Debug archive saved to ${o}`);}r(ai,"handleDebugArchive");function Te(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}r(Te,"isObject");var Ya={type:"pluginReadySignal"};function Xa(n){return Te(n)&&n.type==="pluginReadyResponse"}r(Xa,"isPluginReadyResponse");var Xr=9e4,Za=2e4;function Ja(n,e){return new Promise(t=>{let i=setTimeout(()=>{n.removeEventListener("message",o),t();},e),o=r(a=>{if(!(typeof a.data!="string"&&!(a.data instanceof String)))try{let s=ue.parse(a.data);Te(s)&&s.type==="disconnect-ack"&&(clearTimeout(i),n.removeEventListener("message",o),t());}catch{}},"handler");n.addEventListener("message",o);})}r(Ja,"waitForDisconnectAck");async function Qa(n,e){let t={Authorization:`Token ${e}`};if(Tr)return k.debug("Using Cloudflare Workers WebSocket connection"),Pr(n,t);if(isDeno)return new qn(n.href,[`token.${e}`]);let i=n.hostname==="api.framerlocal.com",o=process.env.NODE_TLS_REJECT_UNAUTHORIZED;i&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0"),k.debug("Using standard WebSocket connection");let a=new qn(n.href,{headers:t});return i&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED=o),a}r(Qa,"createWebSocket");async function Ht(n,e,t,i){let o=new URL(i??Ie("FRAMER_HEADLESS_SERVER_URL","wss://api.framer.com/channel/headless-plugin"));o.protocol=o.protocol==="https:"?"wss:":o.protocol==="http:"?"ws:":o.protocol,o.searchParams.set("projectId",n),o.searchParams.set("sdkVersion",Ut),t&&o.searchParams.set("clientId",t),k.debug(`Connecting to ${o.href}`);let a=await Qa(o,e);k.debug(`WebSocket created, readyState: ${a.readyState}`);let s,d,u=k,I=false,S=setInterval(()=>{a.readyState===a.OPEN&&(a.send(ue.stringify({type:"ping"})),u.debug("Sent ping"));},Za),O=r(()=>{clearInterval(S),a.readyState!==a.CLOSED&&a.readyState!==a.CLOSING&&a.close(1e3,"Client disconnect");},"forceClose"),_=r(async()=>{clearInterval(S),!(a.readyState===a.CLOSED||a.readyState===a.CLOSING)&&(I&&(u.debug("Initiating graceful disconnect"),a.send(ue.stringify({type:"client-disconnect"})),await Ja(a,15e3)),a.readyState!==a.CLOSED&&a.readyState!==a.CLOSING&&a.close(1e3,"Client disconnect"));},"cleanup"),b=await new Promise((p,T)=>{let m=setTimeout(()=>{O(),T(new D(`Connection timeout after ${Xr}ms`,"TIMEOUT"));},Xr),h=r(()=>{u.debug("WebSocket opened, waiting for ready");},"onOpen"),A=r(E=>{u.debug("WebSocket error:",E),clearTimeout(m),O(),T(new D("No connection to the server","INTERNAL"));},"onError"),z=r(E=>{u.debug(`WebSocket closed: code=${E.code}, reason=${E.reason||"(no reason)"}, wasClean=${E.wasClean}`),clearTimeout(m),clearInterval(S),T(new D(`Connection to the server was closed (code: ${E.code})`,"PROJECT_CLOSED"));},"onClose");function te(E){u.debug("Received message");let ct=typeof E.data=="string"?E.data:E.data.toString(),F=ue.parse(ct);if(u.debug(`Message type: ${F.type}`),F.type==="error"){clearTimeout(m),a.removeEventListener("close",z),a.removeEventListener("error",A);let ce=vr(F.code);T(new D(F.message||"Server error",ce)),O();}else F.type==="ready"?(Te(F)&&"requestId"in F&&(s=String(F.requestId),u=k.withRequestId(s),u.debug(`Server request ID: ${s}`)),Te(F)&&"sessionId"in F&&(d=String(F.sessionId),u.debug(`Server session ID: ${d}`)),Te(F)&&"version"in F&&u.debug(`Server version: ${F.version}`),Te(F)&&F.gracefulDisconnect===true&&(I=true),u.debug("Sending pluginReadySignal"),a.send(ue.stringify(Ya))):F.type==="debug-archive"?ai(F.data):Xa(F)&&(clearTimeout(m),a.removeEventListener("message",te),a.removeEventListener("error",A),a.removeEventListener("close",z),p(F));}r(te,"handshakeMessageHandler"),a.addEventListener("open",h),a.addEventListener("message",te),a.addEventListener("error",A),a.addEventListener("close",z);});return a.addEventListener("close",()=>{_();}),{ws:a,pluginReadyData:b,requestId:s,sessionId:d,clientId:t,logger:u,gracefulDisconnect:I,cleanup:_}}r(Ht,"connectAndHandshake");var Zr={showUI:false,hideUI:false,closePlugin:false,setCloseWarning:true,notify:false,setMenu:false,showContextMenu:false,preloadDetachedComponentLayers:false,preloadDragPreviewImage:false,preloadImageUrlForInsertion:false,setBackgroundMessage:false,getSelection:false,getActiveCollection:false,getActiveManagedCollection:false,getActiveLocale:false,zoomIntoView:false,navigateTo:false,getPluginData:false,setPluginData:false,getPluginDataKeys:false,makeDraggable:false,subscribeToSelection:false,subscribeToImage:false,subscribeToText:false,subscribeToCustomCode:false,subscribeToColorStyles:false,subscribeToTextStyles:false,subscribeToRedirects:false,subscribeToCodeFiles:false,subscribeToOpenCodeFile:false,subscribeToIsAllowedTo:false,subscribeToCanvasRoot:false,subscribeToPublishInfo:false,unstable_ensureMinimumDependencyVersion:false,removeNode:true,removeNodes:true,addSVG:true,getRect:true,setText:true,getText:true,addText:true,setCustomCode:true,getCustomCode:true,getLocales:true,getDefaultLocale:true,getLocalizationGroups:true,setLocalizationData:true,createLocale:true,getLocaleLanguages:true,getLocaleRegions:true,getCurrentUser:true,getProjectInfo:true,setSelection:true,getCanvasRoot:true,getPublishInfo:true,cloneNode:true,getNode:true,getParent:true,getChildren:true,setAttributes:true,getNodesWithType:true,getNodesWithAttribute:true,getNodesWithAttributeSet:true,addImages:true,getImage:true,addImage:true,setImage:true,uploadImage:true,uploadImages:true,uploadFile:true,uploadFiles:true,setParent:true,addComponentInstance:true,addDetachedComponentLayers:true,getManagedCollection:true,getManagedCollections:true,getCollection:true,getCollections:true,getColorStyle:true,getColorStyles:true,createColorStyle:true,getTextStyle:true,getTextStyles:true,createTextStyle:true,getFont:true,getFonts:true,createCodeFile:true,getCodeFiles:true,getCodeFile:true,lintCode:true,typecheckCode:true,addRedirects:true,getRedirects:true,setRedirectOrder:true,removeRedirects:true,addComponentInstancePlaceholder:true,createCollection:true,getVectorSets:true,createDesignPage:true,createWebPage:true,createTextNode:true,createComponentNode:true,mode:true,isAllowedTo:false,createFrameNode:true,createManagedCollection:true};function si(n){return n in Zr?Zr[n]===true:false}r(si,"isAllowedMethod");var _t=class n{static{r(this,"FramerAPI");}requestId;sessionId;#e;#t;#n;#i=new Map;#r=new Map;#p=0;#a;#s;#l;#d;constructor(e){this.#t=e.pluginAPI,this.#n=e.transport,this.#e=e.cleanup,this.#a=e.projectId,this.#s=e.apiKey,this.#l=e.serverUrl,this.requestId=e.requestId,this.sessionId=e.sessionId,this.#d=e.clientId,this.#n.onMessage(t=>{this.#m(t);}),this.#n.setOnError(t=>{this.#u(t);});}#u(e){for(let t of this.#i.values())t.reject(e);this.#i.clear();for(let t of this.#r.values())t.reject(e);this.#r.clear(),this.#t[v.rejectAllPending](e);}#c(){return `req-${++this.#p}-${Date.now()}`}#m=r(e=>{switch(e.type){case "screenshotResult":{let t=this.#i.get(e.id);if(t){this.#i.delete(e.id);let i=Buffer.from(e.data,"base64");t.resolve({data:i,mimeType:e.mimeType});}return true}case "screenshotError":{let t=this.#i.get(e.id);if(t){this.#i.delete(e.id);let i=e.code??"INTERNAL";t.reject(new D(e.error,i));}return true}case "exportSVGResult":{let t=this.#r.get(e.id);return t&&(this.#r.delete(e.id),t.resolve(e.data)),true}case "exportSVGError":{let t=this.#r.get(e.id);if(t){this.#r.delete(e.id);let i=e.code??"INTERNAL";t.reject(new D(e.error,i));}return true}default:return false}},"#handleServerApiResponse");static create(e){let t=new n(e);return new Proxy(t,{get(i,o){if(o in i)return Reflect.get(i,o);if(On(o)){let s=v[o],d=Reflect.get(i.#t,s);return typeof d=="function"?d.bind(i.#t):d}if(!si(o))return;let a=Reflect.get(i.#t,o);return typeof a=="function"?a.bind(i.#t):a},has(i,o){return o in i||On(o)?true:si(o)?o in i.#t:false}})}async#o(){this.#u(new D("Connection closed","PROJECT_CLOSED")),await this.#e();}disconnect=r(()=>this.#o(),"disconnect");reconnect=r(async()=>{await this.#o();let e=await Ht(this.#a,this.#s,this.#d,this.#l);this.#n.replaceSocket(e.ws),this.#e=e.cleanup,this.requestId=e.requestId,this.sessionId=e.sessionId;},"reconnect");screenshot=r((e,t)=>{let i=this.#c(),{format:o,quality:a,scale:s,clip:d}=t??{};return new Promise((u,I)=>{this.#i.set(i,{resolve:u,reject:I}),this.#n.send({type:"screenshot",id:i,nodeId:e,format:o,quality:a,scale:s,clip:d});})},"screenshot");exportSVG=r(e=>{let t=this.#c();return new Promise((i,o)=>{this.#r.set(t,{resolve:i,reject:o}),this.#n.send({type:"exportSVG",id:t,nodeId:e});})},"exportSVG");[Symbol.dispose]=()=>{this.#o();};[Symbol.asyncDispose]=()=>this.#o()};var es=/^.+--([A-Za-z0-9]+)/u,Jr=/^[A-Za-z0-9]{20}$/u;function Qr(n){if(Jr.test(n))return n;try{let t=new URL(n,"https://framer.com").pathname.split("/").filter(Boolean),i=t.findIndex(o=>o.toLowerCase()==="projects");if(i>=0){let o=t[i+1];if(o!==void 0){let a=decodeURIComponent(o),d=a.match(es)?.[1]??a;if(Jr.test(d))return d}}return null}catch{return null}}r(Qr,"parseProjectId");async function eo(n,e,t){let i=performance.now();if(!n)throw new D("FRAMER_PROJECT_URL environment variable is required","INVALID_REQUEST");let o=Qr(n);if(!o)throw new D(`Invalid project URL or ID: ${n}`,"INVALID_REQUEST");let a=e??Ie("FRAMER_API_KEY");if(!a)throw new D("FRAMER_API_KEY environment variable is required","INVALID_REQUEST");let s=t?.clientId?.trim()||`framer-api/${Ut}`,d=await Ht(o,a,s,t?.serverUrl);try{let u=new jt(d.ws),I={transport:u,mode:d.pluginReadyData.mode,permissionMap:d.pluginReadyData.permissionMap,environmentInfo:d.pluginReadyData.environmentInfo,origin:null,theme:null,initialState:d.pluginReadyData.initialState},S=Cr(I),O=r(async()=>{let _=((performance.now()-i)/1e3).toFixed(2);d.logger.debug(`Connection ended after ${_}s`),await d.cleanup();},"cleanup");return _t.create({pluginAPI:S,transport:u,cleanup:O,projectId:o,apiKey:a,serverUrl:t?.serverUrl,clientId:d.clientId,requestId:d.requestId,sessionId:d.sessionId})}catch(u){throw await d.cleanup(),u}}r(eo,"connect");async function ts(n,e,t,i){let o=await eo(n,t,i);try{return await e(o)}finally{await o.disconnect();}}r(ts,"withConnection");
|
|
10
|
-
export{
|
|
8
|
+
`));}catch{}throw t}r(ee,"assert");var jr;function Hr({error:n,tags:e,extras:t,critical:i,caller:o}){ee(jr,"Set up an error callback with setErrorReporter, or configure Sentry with initializeEnvironment");let a=fi(n,o);return jr({error:a,tags:{...a.tags,...e},extras:{...a.extras,...t},critical:!!i}),a}r(Hr,"reportError");function fi(n,e=fi){return n instanceof Error?n:new mi(n,e)}r(fi,"reportableError");var mi=class extends Error{static{r(this,"UnhandledError");}constructor(e,t){let i=e?JSON.stringify(e):"No error message provided";if(super(i),this.message=i,t&&Error.captureStackTrace)Error.captureStackTrace(this,t);else try{throw new Error}catch(o){this.stack=o.stack;}}};var at=typeof window<"u"&&!("Deno"in globalThis)?window.location.hostname:void 0,_r=!!(at&&["web.framerlocal.com","localhost","127.0.0.1","[::1]"].includes(at)),yi=(()=>{if(!at)return;if(_r)return {main:at,previewLink:void 0};let n=/^(([^.]+\.)?beta\.)?((?:development\.)?framer\.com)$/u,e=at.match(n);if(!(!e||!e[3]))return {previewLink:e[2]&&e[0],main:e[3]}})();({isDevelopment:yi?.main==="development.framer.com",isProduction:yi?.main==="framer.com"});var Ot;function zt(){return typeof window>"u"?{}:Ot||(Ot=ja(),Ot)}r(zt,"getServiceMap");function ja(){let n=window.location,e=window?.bootstrap?.services;if(e)return e;let t;try{if(t=window.top.location.origin,e=window.top?.bootstrap?.services,e)return e}catch{}if(t&&t!==n.origin)throw Error(`Unexpectedly embedded by ${t} (expected ${n.origin})`);if(n.origin.endsWith("framer.com")||n.origin.endsWith("framer.dev"))throw Error("ServiceMap data was not provided in document");try{let i=new URLSearchParams(n.search).get("services")||new URLSearchParams(n.hash.substring(1)).get("services");i&&(e=JSON.parse(i));}catch{}if(e&&typeof e=="object"&&e.api)return e;throw Error("ServiceMap requested but not available")}r(ja,"extractServiceMap");function st(n,e=0,t=new Set){if(n===null)return n;if(typeof n=="function")return `[Function: ${n.name??"unknown"}]`;if(typeof n!="object")return n;if(n instanceof Error)return `[${n.toString()}]`;if(t.has(n))return "[Circular]";if(e>2)return "...";t.add(n);try{if("toJSON"in n&&typeof n.toJSON=="function")return st(n.toJSON(),e+1,t);if(Array.isArray(n))return n.map(i=>st(i,e+1,t));if(Object.getPrototypeOf(n)!==Object.prototype)return `[Object: ${"__class"in n&&n.__class||n.constructor?.name}]`;{let i={};for(let[o,a]of Object.entries(n))i[o]=st(a,e+1,t);return i}}catch(i){return `[Throws: ${i instanceof Error?i.message:i}]`}finally{t.delete(n);}}r(st,"jsonSafeCopy");var hi=["trace","debug","info","warn","error"],Ha=["\u{1F50D}","\u{1F9EA}","\u2139\uFE0F","\u26A0\uFE0F","\u274C"],_a=[":trace",":debug",":info",":warn",":error"],Xr="logTimestamps";function Zr(n){return new Date(n).toISOString().substring(10,24)}r(Zr,"formatLogTimestamp");function Jr(n,e){let t=[];for(let i of n.split(/[ ,]/u)){let o=i.trim();if(o.length===0)continue;let a=1,s=false;o.startsWith("-")&&(o=o.slice(1),a=3,s=true);for(let T=0;T<=4;T++){let F=_a[T];if(F&&o.endsWith(F)){a=T,s&&(a+=1),o=o.slice(0,o.length-F.length),o.length===0&&(o="*");break}}let d=new RegExp("^"+ro(o).replace(/\\\*/gu,".*")+"$"),u=0;for(let T of e)T.id.match(d)&&(T.level=a,++u);u===0&&t.push(i);}return t}r(Jr,"applyLogLevelSpec");var lt=class n{constructor(e,t,i){this.logger=e;this.level=t;this.parts=i;this.id=n.nextId++,this.time=Date.now();}logger;level;parts;static{r(this,"LogEntry");}static nextId=0;id;time;stringPrefix;cachedMessage;toMessage(){if(this.stringPrefix)return this.cachedMessage??this.parts;let e=[hi[this.level]+": ["+this.logger.id+"]"];Gt&&e.unshift(Zr(this.time)),this.stringPrefix=e.join(" ");let t=this.parts[0];if(typeof t=="string"){let i=Qa(t,this.logger.id,this.level);this.cachedMessage=[i.length>0?`${this.stringPrefix} ${i}`:this.stringPrefix,...this.parts.slice(1)];}else this.cachedMessage=[this.stringPrefix,...this.parts];return this.cachedMessage}resetMessagePrefix(){this.stringPrefix=void 0,this.cachedMessage=void 0;}toConsoleMessage(){let e=this.toMessage().slice(),t=e[0];if(typeof t!="string")return e;let i=hi[this.level],o=Ha[this.level];i&&o&&(e[0]=t.replace(`${i}:`,`${o}`));let a=`[${this.logger.id}]`,s=e[0];if(typeof s!="string")return e;let d=s.indexOf(a);return d<0||(e[0]=s.slice(0,d)+"%c"+a+"%c"+s.slice(d+a.length),e.splice(1,0,"color: #9ca3af","")),e}toString(){return this.toMessage().map(e=>{let t=typeof e;if(t==="string")return e;if(t==="function")return `[Function: ${e.name??"unknown"}]`;if(e instanceof Error)return e.stack??e.toString();let i=JSON.stringify(st(e));return i?.length>253?i.slice(0,250)+"...":i}).join(" ")}},H="*:app:info,app:info",Gt=true,Qr=typeof process<"u"&&!!process.kill,qa=Qr&&!!process.env.CI;qa?H="-:warn":Qr&&(H="");try{typeof window<"u"&&window.localStorage&&(H=window.localStorage.logLevel||H,Gt=window.localStorage[Xr]!=="false");}catch{}try{typeof process<"u"&&(H=process.env.DEBUG||H);}catch{}try{typeof window<"u"&&Object.assign(window,{setLogLevel:no,setLogTimestamps:io});}catch{}try{typeof window<"u"&&window.postMessage&&window.top===window&&window.addEventListener("message",n=>{if(!n.data||typeof n.data!="object")return;let{loggerId:e,level:t,parts:i,printed:o}=n.data;if(typeof e!="string"||!Array.isArray(i)||i.length<1||typeof t!="number")return;let a=dt(e);if(t<0||t>5)return;i[0]=i[0].replace("[","*[");let s=new lt(a,t,i);s.stringPrefix=i[0],j.push(s),!o&&(a.level>t||console?.log(...s.toConsoleMessage()));});}catch{}var xi;try{typeof window<"u"&&window.postMessage&&window.parent!==window&&!window.location.pathname.startsWith("/edit")&&(xi=r(n=>{try{let e=n.toMessage().map(s=>st(s)),t=n.logger,i=n.level,o=t.level<=n.level,a={loggerId:t.id,level:i,parts:e,printed:o};window.parent?.postMessage(a,zt().app);}catch{}},"postLogEntry"));}catch{}var bi={},j=[],eo=1e3;function de(n,e,t){let i=new lt(n,e,t);for(j.push(i),xi?.(i);j.length>eo;)j.shift();return i}r(de,"createLogEntry");function to(n){return typeof n=="number"&&(eo=n),j}r(to,"getLogReplayBuffer");var Ya=/\/(?<filename>[^/.]+)(?=\.(?:debug\.)?html$)/u,Yr;function Xa(){if(!(typeof window>"u"||!window.location))return Yr??=Ya.exec(window.location.pathname)?.groups?.filename,Yr}r(Xa,"getFilenameFromWindowPathname");function dt(n){let e=Xa();n=(e?e+":":"")+n;let t=bi[n];if(t)return t;let i=new Kt(n);return bi[n]=i,Jr(H,[i]),xi?.(new lt(i,-1,[])),i}r(dt,"getLogger");function no(n,e=true){try{typeof window<"u"&&window.localStorage&&(window.localStorage.logLevel=n);}catch{}let t=H;H=n;let i=Object.values(bi);for(let a of i)a.level=3;let o=Jr(n,i);if(o.length>0&&console?.warn("Some log level specs matched no loggers:",o),e&&j.length>0){console?.log("--- LOG REPLAY ---");for(let a of j)a.logger.level>a.level||(a.level>=3?console?.warn(...a.toConsoleMessage()):console?.log(...a.toConsoleMessage()));console?.log("--- END OF LOG REPLAY ---");}return t}r(no,"setLogLevel");function io(n){let e=Gt;Gt=n;for(let t of j)t.resetMessagePrefix();try{typeof window<"u"&&window.localStorage&&(window.localStorage[Xr]=String(n));}catch{}return e}r(io,"setLogTimestamps");var Za=r(n=>{let e={...n,logs:to().slice(-50).map(t=>t.toString().slice(0,600)).join(`
|
|
9
|
+
`)};return n.logs&&console?.warn("extras.logs is reserved for log replay buffer, use another key"),e},"enrichWithLogs"),Kt=class{constructor(e,t){this.id=e;this.errorIsCritical=t??(e==="fatal"||e.endsWith(":fatal"));}id;static{r(this,"Logger");}level=3;didLog={};errorIsCritical;extend(e){let t=this.id+":"+e;return dt(t)}getBufferedMessages(){return j.filter(e=>e.logger===this)}setLevel(e){let t=this.level;return this.level=e,t}isLoggingTraceMessages(){return this.level>=0}trace=r((...e)=>{if(this.level>0)return;let t=de(this,0,e);console?.log(...t.toConsoleMessage());},"trace");debug=r((...e)=>{let t=de(this,1,e);this.level>1||console?.log(...t.toConsoleMessage());},"debug");info=r((...e)=>{let t=de(this,2,e);this.level>2||console?.info(...t.toConsoleMessage());},"info");warn=r((...e)=>{let t=de(this,3,e);this.level>3||console?.warn(...t.toConsoleMessage());},"warn");warnOncePerMinute=r((e,...t)=>{let i=this.didLog[e];if(i&&i>Date.now())return;this.didLog[e]=Date.now()+1e3*60,t.unshift(e);let o=de(this,3,t);this.level>3||console?.warn(...o.toConsoleMessage());},"warnOncePerMinute");error=r((...e)=>{let t=de(this,4,e);this.level>4||console?.error(...t.toConsoleMessage());},"error");errorOncePerMinute=r((e,...t)=>{let i=this.didLog[e];if(i&&i>Date.now())return;this.didLog[e]=Date.now()+1e3*60,t.unshift(e);let o=de(this,4,t);this.level>4||console?.error(...o.toConsoleMessage());},"errorOncePerMinute");reportWithoutLogging=r((e,t,i,o)=>{let a=Za(t??{}),s=Hr({caller:this.reportWithoutLogging,error:e,tags:{...i,handler:"logger",where:this.id},extras:t,critical:o??this.errorIsCritical});return [a,s]},"reportWithoutLogging");reportError=r((e,t,i,o)=>{let[a,s]=this.reportWithoutLogging(e,t,i,o);a?this.error(s,a):this.error(s);},"reportError");reportErrorWithThrottle=r((e,t,i,o,a)=>{if(!Ja(t))return;let s=this.didLog[t.message];s&&s>Date.now()||(this.didLog[t.message]=Date.now()+e,this.reportError(t,i,o,a));},"reportErrorWithThrottle");reportErrorOncePerMinute=r((e,t,i,o)=>this.reportErrorWithThrottle(1e3*60,e,t,i,o),"reportErrorOncePerMinute");reportErrorOnceEveryTenMinutes=r((e,t,i,o)=>this.reportErrorWithThrottle(1e3*60*10,e,t,i,o),"reportErrorOnceEveryTenMinutes");reportCriticalError=r((e,t,i)=>this.reportError(e,t,i,true),"reportCriticalError")};function Ja(n){return Object.prototype.hasOwnProperty.call(n,"message")}r(Ja,"isErrorWithMessage");function ro(n){return n.replace(/[/\-\\^$*+?.()|[\]{}]/gu,"\\$&")}r(ro,"escapeRegExp");function Qa(n,e,t){let i=hi[t];if(!i)return n;let o=`${i}: [${e}]`,a=ro(o).replace("\\[","\\*?\\["),s=new RegExp(`^(?:T?\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\\s+)?${a}\\s*`);return n.replace(s,"")}r(Qa,"stripLogEntryPrefix");var so;(_=>{function n(x,...p){return x.concat(p)}_.push=n,r(n,"push");function e(x){return x.slice(0,-1)}_.pop=e,r(e,"pop");function t(x,...p){return p.concat(x)}_.unshift=t,r(t,"unshift");function i(x,p,...P){let g=x.length;if(p<0||p>g)throw Error("index out of range: "+p);let h=x.slice();return h.splice(p,0,...P),h}_.insert=i,r(i,"insert");function o(x,p,P){let g=x.length;if(p<0||p>=g)throw Error("index out of range: "+p);let h=Array.isArray(P)?P:[P],M=x.slice();return M.splice(p,1,...h),M}_.replace=o,r(o,"replace");function a(x,p){let P=x.length;if(p<0||p>=P)throw Error("index out of range: "+p);let g=x.slice();return g.splice(p,1),g}_.remove=a,r(a,"remove");function s(x,p,P){let g=x.length;if(p<0||p>=g)throw Error("from index out of range: "+p);if(P<0||P>=g)throw Error("to index out of range: "+P);let h=x.slice();if(P===p)return h;let M=h[p];return p<P?(h.splice(P+1,0,M),h.splice(p,1)):(h.splice(p,1),h.splice(P,0,M)),h}_.move=s,r(s,"move");function d(x,p){let P=[],g=Math.min(x.length,p.length);for(let h=0;h<g;h++)P.push([x[h],p[h]]);return P}_.zip=d,r(d,"zip");function u(x,p,P){let g=x.slice(),h=g[p];return h===void 0||(g[p]=P(h)),g}_.update=u,r(u,"update");function T(x){return Array.from(new Set(x))}_.unique=T,r(T,"unique");function F(x,...p){return Array.from(new Set([...x,...p.flat()]))}_.union=F,r(F,"union");function O(x,p){return x.filter(p)}_.filter=O,r(O,"filter");})(so||={});var os=Object.prototype.hasOwnProperty;function as(n,e){return os.call(n,e)}r(as,"hasOwnProperty");var lo;(i=>{function n(o,a){for(let s of Object.keys(o))as(a,s)||delete o[s];for(let s of Object.keys(a))o[s]===void 0&&(o[s]=a[s]);return Object.setPrototypeOf(o,Object.getPrototypeOf(a)),o}i.morphUsingTemplate=n,r(n,"morphUsingTemplate");function e(o,a){a&&Object.assign(o,a);}i.writeOnce=e,r(e,"writeOnce");function t(o,a){return Object.assign(Object.create(Object.getPrototypeOf(o)),o,a)}i.update=t,r(t,"update");})(lo||={});var uo;(o=>{function n(a,...s){return new Set([...a,...s])}o.add=n,r(n,"add");function e(a,...s){let d=new Set(a);for(let u of s)d.delete(u);return d}o.remove=e,r(e,"remove");function t(...a){let s=new Set;for(let d of a)for(let u of d)s.add(u);return s}o.union=t,r(t,"union");function i(a,s){return a.has(s)?o.remove(a,s):o.add(a,s)}o.toggle=i,r(i,"toggle");})(uo||={});var co;(i=>{function n(o,...a){let s=new Map;o.forEach((u,T)=>s.set(T,u));let d=false;for(let u of a)u&&(u.forEach((T,F)=>s.set(F,T)),d=true);return d?s:o}i.merge=n,r(n,"merge");function e(o,a,s){let d=new Map(o);return d.set(a,s),d}i.set=e,r(e,"set");function t(o,a){let s=new Map(o);return s.delete(a),s}i.remove=t,r(t,"remove");})(co||={});var $t=class extends Promise{static{r(this,"ResolvablePromise");}_state="initial";resolve;reject;get state(){return this._state}pending(){return this._state="pending",this}isResolved(){return this._state==="fulfilled"||this._state==="rejected"}constructor(){let e,t;super((i,o)=>{e=i,t=o;}),this.resolve=i=>{this._state="fulfilled",e(i);},this.reject=i=>{this._state="rejected",t(i);};}};$t.prototype.constructor=Promise;dt("task-queue");function po(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}r(po,"isObject");var us=-1,jt=class{static{r(this,"WebSocketTransport");}onError;closed=false;ws;messageHandlers=new Set;chunkBuffers=new Map;constructor(e){this.ws=e,this.setupListeners();}setupListeners(){this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("message",this.handleMessage);}removeListeners(){this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("message",this.handleMessage);}handleClose=r(()=>{this.removeListeners(),this.closed=true,this.chunkBuffers.clear(),this.onError?.(new D("Connection closed","PROJECT_CLOSED"));},"handleClose");handleMessage=r(e=>{let t=typeof e.data=="string"?e.data:String(e.data),i=this.tryParseChunkEnvelope(t);if(i){let o=this.handleChunk(i);if(!o)return;let a=new MessageEvent("message",{data:o});if(this.tryHandleDebugArchive(o))return;for(let s of this.messageHandlers)s(a);return}if(!this.tryHandleDebugArchive(t))for(let o of this.messageHandlers)o(e);},"handleMessage");tryHandleDebugArchive(e){try{let t=ue.parse(e);if(po(t)&&t.type==="debug-archive")return Ii(t.data),!0}catch{}return false}replaceSocket(e){this.removeListeners(),this.chunkBuffers.clear(),this.ws=e,this.closed=false,this.setupListeners();}setOnError(e){this.onError=e;}send(e){if(this.closed)throw new D("Connection closed","PROJECT_CLOSED");this.ws.send(ue.stringify(e,{[Et]:t=>In(t)&&L(t)}));}handleChunk(e){let t=this.chunkBuffers.get(e.id);return t||(t=[],this.chunkBuffers.set(e.id,t)),t.push(e.data),e.seq===us?(this.chunkBuffers.delete(e.id),t.join("")):null}tryParseChunkEnvelope(e){if(!e.startsWith('{"$chunk":'))return null;try{let t=JSON.parse(e);if(t.$chunk===1&&typeof t.id=="string"&&typeof t.seq=="number")return t}catch{}return null}onMessage(e){let t=r(i=>{let o=typeof i.data=="string"?i.data:String(i.data);this.dispatchMessage(o,e);},"listener");this.messageHandlers.add(t);}dispatchMessage(e,t){let i=ue.parse(e);if(po(i)&&i.type==="error"){let o=i.message||JSON.stringify(i),a=i.code??"INTERNAL";N.error(`Server error: ${o}`),this.onError?.(new D(`Server error: ${o}`,a));return}t(i);}};function Ii(n){ee(ui,"File system module is not available."),ee(ci,"Path module is not available.");let t=`debug-archive-${new Date().toISOString().replace(/[:.]/gu,"-")}.zip`,i=process.cwd(),o=ci.resolve(i,t);ui.writeFileSync(o,Buffer.from(n)),N.info(`Debug archive saved to ${o}`);}r(Ii,"handleDebugArchive");function Te(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}r(Te,"isObject");var cs={type:"pluginReadySignal"};function ps(n){return Te(n)&&n.type==="pluginReadyResponse"}r(ps,"isPluginReadyResponse");var go=9e4,gs=2e4;function ms(n,e){return new Promise(t=>{let i=setTimeout(()=>{n.removeEventListener("message",o),t();},e),o=r(a=>{if(!(typeof a.data!="string"&&!(a.data instanceof String)))try{let s=ue.parse(a.data);Te(s)&&s.type==="disconnect-ack"&&(clearTimeout(i),n.removeEventListener("message",o),t());}catch{}},"handler");n.addEventListener("message",o);})}r(ms,"waitForDisconnectAck");async function fs(n,e){let t={Authorization:`Token ${e}`};if(Rr)return N.debug("Using Cloudflare Workers WebSocket connection"),Br(n,t);if(isDeno)return new di(n.href,[`token.${e}`]);let i=n.hostname==="api.framerlocal.com",o=process.env.NODE_TLS_REJECT_UNAUTHORIZED;i&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0"),N.debug("Using standard WebSocket connection");let a=new di(n.href,{headers:t});return i&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED=o),a}r(fs,"createWebSocket");async function Ht(n,e,t,i){let o=new URL(i??Ie("FRAMER_HEADLESS_SERVER_URL",$r));o.protocol=o.protocol==="https:"?"wss:":o.protocol==="http:"?"ws:":o.protocol,o.searchParams.set("projectId",n),o.searchParams.set("sdkVersion",Ut),t&&o.searchParams.set("clientId",t),N.debug(`Connecting to ${o.href}`);let a=await fs(o,e);N.debug(`WebSocket created, readyState: ${a.readyState}`);let s,d,u=N,T=false,F=setInterval(()=>{a.readyState===a.OPEN&&(a.send(ue.stringify({type:"ping"})),u.debug("Sent ping"));},gs),O=r(()=>{clearInterval(F),a.readyState!==a.CLOSED&&a.readyState!==a.CLOSING&&a.close(1e3,"Client disconnect");},"forceClose"),_=r(async()=>{clearInterval(F),!(a.readyState===a.CLOSED||a.readyState===a.CLOSING)&&(T&&(u.debug("Initiating graceful disconnect"),a.send(ue.stringify({type:"client-disconnect"})),await ms(a,15e3)),a.readyState!==a.CLOSED&&a.readyState!==a.CLOSING&&a.close(1e3,"Client disconnect"));},"cleanup"),x=await new Promise((p,P)=>{let g=setTimeout(()=>{O(),P(new D(`Connection timeout after ${go}ms`,"TIMEOUT"));},go),h=r(()=>{u.debug("WebSocket opened, waiting for ready");},"onOpen"),M=r(A=>{u.debug("WebSocket error:",A),clearTimeout(g),O(),P(new D("No connection to the server","INTERNAL"));},"onError"),z=r(A=>{u.debug(`WebSocket closed: code=${A.code}, reason=${A.reason||"(no reason)"}, wasClean=${A.wasClean}`),clearTimeout(g),clearInterval(F),P(new D(`Connection to the server was closed (code: ${A.code})`,"PROJECT_CLOSED"));},"onClose");function te(A){u.debug("Received message");let ct=typeof A.data=="string"?A.data:A.data.toString(),v=ue.parse(ct);if(u.debug(`Message type: ${v.type}`),v.type==="error"){clearTimeout(g),a.removeEventListener("close",z),a.removeEventListener("error",M);let ce=Gr(v.code);P(new D(v.message||"Server error",ce)),O();}else v.type==="ready"?(Te(v)&&"requestId"in v&&(s=String(v.requestId),u=N.withRequestId(s),u.debug(`Server request ID: ${s}`)),Te(v)&&"sessionId"in v&&(d=String(v.sessionId),u.debug(`Server session ID: ${d}`)),Te(v)&&"version"in v&&u.debug(`Server version: ${v.version}`),Te(v)&&v.gracefulDisconnect===true&&(T=true),u.debug("Sending pluginReadySignal"),a.send(ue.stringify(cs))):v.type==="debug-archive"?Ii(v.data):ps(v)&&(clearTimeout(g),a.removeEventListener("message",te),a.removeEventListener("error",M),a.removeEventListener("close",z),p(v));}r(te,"handshakeMessageHandler"),a.addEventListener("open",h),a.addEventListener("message",te),a.addEventListener("error",M),a.addEventListener("close",z);});return a.addEventListener("close",()=>{_();}),{ws:a,pluginReadyData:x,requestId:s,sessionId:d,clientId:t,logger:u,gracefulDisconnect:T,cleanup:_}}r(Ht,"connectAndHandshake");var mo={showUI:false,hideUI:false,closePlugin:false,setCloseWarning:true,notify:false,setMenu:false,showContextMenu:false,preloadDetachedComponentLayers:false,preloadDragPreviewImage:false,preloadImageUrlForInsertion:false,setBackgroundMessage:false,getSelection:false,getActiveCollection:false,getActiveManagedCollection:false,getActiveLocale:false,zoomIntoView:false,navigateTo:false,getPluginData:false,setPluginData:false,getPluginDataKeys:false,makeDraggable:false,subscribeToSelection:false,subscribeToImage:false,subscribeToText:false,subscribeToCustomCode:false,subscribeToColorStyles:false,subscribeToTextStyles:false,subscribeToRedirects:false,subscribeToCodeFiles:false,subscribeToOpenCodeFile:false,subscribeToIsAllowedTo:false,subscribeToCanvasRoot:false,subscribeToPublishInfo:false,unstable_getDependencyVersion:false,unstable_ensureMinimumDependencyVersion:false,removeNode:true,removeNodes:true,addSVG:true,getRect:true,setText:true,getText:true,addText:true,setCustomCode:true,getCustomCode:true,getLocales:true,getDefaultLocale:true,getLocalizationGroups:true,setLocalizationData:true,createLocale:true,getLocaleLanguages:true,getLocaleRegions:true,getCurrentUser:true,getProjectInfo:true,setSelection:true,getCanvasRoot:true,getPublishInfo:true,cloneNode:true,getNode:true,getParent:true,getChildren:true,setAttributes:true,getNodesWithType:true,getNodesWithAttribute:true,getNodesWithAttributeSet:true,addImages:true,getImage:true,addImage:true,setImage:true,uploadImage:true,uploadImages:true,uploadFile:true,uploadFiles:true,setParent:true,addComponentInstance:true,addDetachedComponentLayers:true,getManagedCollection:true,getManagedCollections:true,getCollection:true,getCollections:true,getColorStyle:true,getColorStyles:true,createColorStyle:true,getTextStyle:true,getTextStyles:true,createTextStyle:true,getFont:true,getFonts:true,createCodeFile:true,getCodeFiles:true,getCodeFile:true,lintCode:true,typecheckCode:true,addRedirects:true,getRedirects:true,setRedirectOrder:true,removeRedirects:true,addComponentInstancePlaceholder:true,createCollection:true,getVectorSets:true,createDesignPage:true,createWebPage:true,createTextNode:true,createComponentNode:true,mode:true,isAllowedTo:false,createFrameNode:true,createManagedCollection:true};function Ti(n){return n in mo?mo[n]===true:false}r(Ti,"isAllowedMethod");var _t=class n{static{r(this,"FramerAPI");}requestId;sessionId;#e;#t;#n;#i=new Map;#r=new Map;#p=0;#a;#s;#l;#d;constructor(e){this.#t=e.pluginAPI,this.#n=e.transport,this.#e=e.cleanup,this.#a=e.projectId,this.#s=e.apiKey,this.#l=e.serverUrl,this.requestId=e.requestId,this.sessionId=e.sessionId,this.#d=e.clientId,this.#n.onMessage(t=>{this.#g(t);}),this.#n.setOnError(t=>{this.#u(t);});}#u(e){for(let t of this.#i.values())t.reject(e);this.#i.clear();for(let t of this.#r.values())t.reject(e);this.#r.clear(),this.#t[b.rejectAllPending](e);}#c(){return `req-${++this.#p}-${Date.now()}`}#g=r(e=>{switch(e.type){case "screenshotResult":{let t=this.#i.get(e.id);if(t){this.#i.delete(e.id);let i=Buffer.from(e.data,"base64");t.resolve({data:i,mimeType:e.mimeType});}return true}case "screenshotError":{let t=this.#i.get(e.id);if(t){this.#i.delete(e.id);let i=e.code??"INTERNAL";t.reject(new D(e.error,i));}return true}case "exportSVGResult":{let t=this.#r.get(e.id);return t&&(this.#r.delete(e.id),t.resolve(e.data)),true}case "exportSVGError":{let t=this.#r.get(e.id);if(t){this.#r.delete(e.id);let i=e.code??"INTERNAL";t.reject(new D(e.error,i));}return true}default:return false}},"#handleServerApiResponse");static create(e){let t=new n(e);return new Proxy(t,{get(i,o){if(o in i)return Reflect.get(i,o);if(ti(o)){let s=b[o],d=Reflect.get(i.#t,s);return typeof d=="function"?d.bind(i.#t):d}if(!Ti(o))return;let a=Reflect.get(i.#t,o);return typeof a=="function"?a.bind(i.#t):a},has(i,o){return o in i||ti(o)?true:Ti(o)?o in i.#t:false}})}async#o(){this.#u(new D("Connection closed","PROJECT_CLOSED")),await this.#e();}disconnect=r(()=>this.#o(),"disconnect");reconnect=r(async()=>{await this.#o();let e=await Ht(this.#a,this.#s,this.#d,this.#l);this.#n.replaceSocket(e.ws),this.#e=e.cleanup,this.requestId=e.requestId,this.sessionId=e.sessionId;},"reconnect");screenshot=r((e,t)=>{let i=this.#c(),{format:o,quality:a,scale:s,clip:d}=t??{};return new Promise((u,T)=>{this.#i.set(i,{resolve:u,reject:T}),this.#n.send({type:"screenshot",id:i,nodeId:e,format:o,quality:a,scale:s,clip:d});})},"screenshot");exportSVG=r(e=>{let t=this.#c();return new Promise((i,o)=>{this.#r.set(t,{resolve:i,reject:o}),this.#n.send({type:"exportSVG",id:t,nodeId:e});})},"exportSVG");[Symbol.dispose]=()=>{this.#o();};[Symbol.asyncDispose]=()=>this.#o()};var ys=/^.+--([A-Za-z0-9]+)/u,fo=/^[A-Za-z0-9]{20}$/u;function yo(n){if(fo.test(n))return n;try{let t=new URL(n,"https://framer.com").pathname.split("/").filter(Boolean),i=t.findIndex(o=>o.toLowerCase()==="projects");if(i>=0){let o=t[i+1];if(o!==void 0){let a=decodeURIComponent(o),d=a.match(ys)?.[1]??a;if(fo.test(d))return d}}return null}catch{return null}}r(yo,"parseProjectId");async function ho(n,e,t){let i=performance.now();if(!n)throw new D("FRAMER_PROJECT_URL environment variable is required","INVALID_REQUEST");let o=yo(n);if(!o)throw new D(`Invalid project URL or ID: ${n}`,"INVALID_REQUEST");let a=e??Ie("FRAMER_API_KEY");if(!a)throw new D("FRAMER_API_KEY environment variable is required","INVALID_REQUEST");let s=t?.clientId?.trim()||`framer-api/${Ut}`,d=await Ht(o,a,s,t?.serverUrl);try{let u=new jt(d.ws),T={transport:u,mode:d.pluginReadyData.mode,permissionMap:d.pluginReadyData.permissionMap,environmentInfo:d.pluginReadyData.environmentInfo,origin:null,theme:null,initialState:d.pluginReadyData.initialState},F=Lr(T),O=r(async()=>{let _=((performance.now()-i)/1e3).toFixed(2);d.logger.debug(`Connection ended after ${_}s`),await d.cleanup();},"cleanup");return _t.create({pluginAPI:F,transport:u,cleanup:O,projectId:o,apiKey:a,serverUrl:t?.serverUrl,clientId:d.clientId,requestId:d.requestId,sessionId:d.sessionId})}catch(u){throw await d.cleanup(),u}}r(ho,"connect");async function hs(n,e,t,i){let o=await ho(n,t,i);try{return await e(o)}finally{await o.disconnect();}}r(hs,"withConnection");
|
|
10
|
+
export{Ra as $framerApiInternal,bt as BooleanField,ve as BooleanVariable,We as BorderVariable,kt as CollectionReferenceField,xt as ColorField,Ee as ColorVariable,Xe as ComponentInstanceNode,ae as ComponentNode,je as ConicGradient,St as DateField,Le as DateVariable,$ as DesignPageNode,Y as EnumCase,Dt as EnumField,Ae as EnumVariable,le as ErrorCode,Ft as FieldDivider,vt as FileField,we as FileVariable,Tt as FormattedTextField,Ne as FormattedTextVariable,U as FrameNode,D as FramerAPIError,J as FramerPluginClosedError,tt as FramerPluginError,Be as ImageField,Me as ImageVariable,Ke as LinearGradient,Pt as LinkField,Ve as LinkVariable,Nt as MultiCollectionReferenceField,Ct as NumberField,De as NumberVariable,$e as RadialGradient,qe as SVGNode,It as StringField,ke as StringVariable,oe as TextNode,Ge as UnsupportedComputedValue,Ue as UnsupportedField,Re as UnsupportedVariable,et as VectorSet,Vt as VectorSetItem,Ye as VectorSetItemNode,Ze as VectorSetNode,K as WebPageNode,Va as configure,ho as connect,se as framer,id as hasGridLayout,nd as hasStackLayout,xr as isBreakpoint,va as isCodeFileComponentExport,Da as isCodeFileOverrideExport,ye as isColorStyle,br as isComponentGestureVariant,be as isComponentInstanceNode,Pr as isComponentNode,Yo as isComponentVariable,Pn as isComponentVariant,ra as isComputedValue,Sr as isDesignPageNode,Xo as isField,Jo as isFileAsset,wt as isFrameNode,ea as isImageAsset,La as isRetryableError,Ir as isSVGNode,Cr as isTextNode,Tn as isTextStyle,vi as isVariable,vr as isVectorSetItemNode,Fr as isVectorSetNode,Tr as isWebPageNode,El as supportsAspectRatio,Ll as supportsBackgroundColor,Wl as supportsBackgroundColorData,Ul as supportsBackgroundGradient,Ol as supportsBackgroundGradientData,Rl as supportsBackgroundImage,Bl as supportsBackgroundImageData,$l as supportsBorder,Kl as supportsBorderRadius,xa as supportsBreakpoint,Yl as supportsComponentInfo,hr as supportsComponentVariant,Xl as supportsFont,Zl as supportsFontData,td as supportsImageRendering,Jl as supportsInlineTextStyle,Ql as supportsInlineTextStyleData,yr as supportsLayout,ed as supportsLink,Vl as supportsLocked,Ml as supportsName,Gl as supportsOpacity,ql as supportsOverflow,kl as supportsPins,Dl as supportsPosition,zl as supportsRotation,jl as supportsSVG,Nl as supportsSize,Al as supportsSizeConstraints,Hl as supportsTextTruncation,wl as supportsVisible,_l as supportsZIndex,hs as withConnection};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "framer-api",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@swc/jest": "^0.2.37",
|
|
44
44
|
"@types/node": "24.10.15",
|
|
45
45
|
"eslint-plugin-framer-studio": "1.0.0",
|
|
46
|
-
"framer-plugin": "3.11.0-
|
|
46
|
+
"framer-plugin": "3.11.0-alpha.14",
|
|
47
47
|
"tsup": "^8.5.1",
|
|
48
48
|
"tsx": "^4.19.2",
|
|
49
49
|
"typescript": "^5.9.2",
|