@grapesjs/studio-sdk-plugins 1.0.34 → 1.0.35

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.
Files changed (47) hide show
  1. package/dist/aiChat/clientTools.d.ts +3 -3
  2. package/dist/aiChat/clientToolsProcessors.d.ts +5 -2
  3. package/dist/aiChat/components/AiChatHeader.d.ts +22 -2
  4. package/dist/aiChat/components/AiChatToolGenerateImage.d.ts +7 -0
  5. package/dist/aiChat/components/utils.d.ts +2 -0
  6. package/dist/aiChat/index.cjs.js +88 -99
  7. package/dist/aiChat/index.es.js +12677 -11001
  8. package/dist/aiChat/index.js +88 -99
  9. package/dist/aiChat/index.umd.js +97 -108
  10. package/dist/aiChat/locales/en.d.ts +38 -0
  11. package/dist/aiChat/server/index.cjs.js +91 -237
  12. package/dist/aiChat/server/index.es.js +721 -631
  13. package/dist/aiChat/server/index.js +91 -237
  14. package/dist/aiChat/server/index.umd.js +91 -237
  15. package/dist/aiChat/server/prompts.d.ts +15 -11
  16. package/dist/aiChat/server/tools.d.ts +74 -122
  17. package/dist/aiChat/server/types.d.ts +61 -3
  18. package/dist/aiChat/types.d.ts +69 -11
  19. package/dist/aiChat/typesSchema.d.ts +27 -0
  20. package/dist/googleFontsAssetProvider/index.cjs.js +1 -1
  21. package/dist/googleFontsAssetProvider/index.es.js +11 -11
  22. package/dist/googleFontsAssetProvider/index.umd.js +1 -1
  23. package/dist/iconifyComponent/index.cjs.js +2 -2
  24. package/dist/iconifyComponent/index.es.js +11 -11
  25. package/dist/iconifyComponent/index.umd.js +2 -2
  26. package/dist/index.cjs.js +20 -20
  27. package/dist/index.es.js +208 -208
  28. package/dist/index.umd.js +1 -1
  29. package/dist/layoutSidebarButtons/index.cjs.js +1 -1
  30. package/dist/layoutSidebarButtons/index.es.js +7 -7
  31. package/dist/layoutSidebarButtons/index.umd.js +1 -1
  32. package/dist/presetPrintable/index.cjs.js +2 -2
  33. package/dist/presetPrintable/index.es.js +5 -5
  34. package/dist/presetPrintable/index.umd.js +3 -3
  35. package/dist/prosemirror/index.cjs.js +1 -1
  36. package/dist/prosemirror/index.es.js +1 -1
  37. package/dist/prosemirror/index.umd.js +1 -1
  38. package/dist/rteTinyMce/index.cjs.js +2 -2
  39. package/dist/rteTinyMce/index.es.js +12 -12
  40. package/dist/rteTinyMce/index.umd.js +2 -2
  41. package/dist/tableComponent/index.cjs.js +1 -1
  42. package/dist/tableComponent/index.es.js +83 -83
  43. package/dist/tableComponent/index.umd.js +1 -1
  44. package/dist/youtubeAssetProvider/index.cjs.js +1 -1
  45. package/dist/youtubeAssetProvider/index.es.js +15 -15
  46. package/dist/youtubeAssetProvider/index.umd.js +1 -1
  47. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { LanguageModelV3 } from '@ai-sdk/provider';
2
- import { createUIMessageStream, Tool, UIMessageStreamWriter } from 'ai';
3
- import { AvailablePanels, ProjectContext } from '../types';
4
- import { AgentCodeOptions, CreateStreamResponseOptions, CreateToolStatusWriterOptions, OnEndCallback, ToolStatusWriter } from './types';
2
+ import { createUIMessageStream, generateImage, Tool, GeneratedFile, ImageModel, UIMessageStreamWriter } from 'ai';
3
+ import { ToolBuiltInCommands, ProjectContext, ToolGenerateImageInput } from '../types';
4
+ import { AgentCodeOptions, CreateServerCommandToolOptions, CreateStreamResponseOptions, CreateToolStatusWriterOptions, CreateToolStatusWriterOptionsFactory, OnEndCallback, ToolStatusWriter } from './types';
5
5
  interface BuildDefaultToolsOptions extends CreateStreamResponseOptions {
6
6
  writer: Parameters<Parameters<typeof createUIMessageStream>[0]['execute']>[0]['writer'];
7
7
  chatModel: LanguageModelV3;
@@ -10,25 +10,85 @@ interface BuildDefaultToolsOptions extends CreateStreamResponseOptions {
10
10
  * Create a tool status writer for sending progress updates from custom tools.
11
11
  */
12
12
  export declare function createToolStatusWriter(options: CreateToolStatusWriterOptions): ToolStatusWriter;
13
+ export declare function stripGeneratedWrapper(code: string): string;
13
14
  export declare function createTool<INPUT, OUTPUT>(options: Tool<INPUT, OUTPUT>): Tool<INPUT, OUTPUT>;
14
15
  export declare function createTool<INPUT>(options: Tool<INPUT, never>): Tool<INPUT, never>;
15
- export declare const toolAddNewComponent: Tool<{
16
- name: string;
17
- plan: string;
18
- componentId: string;
19
- position: "before" | "beforeInside" | "afterInside" | "after";
20
- imageUrls: string[];
21
- }, never>;
16
+ type GenerateImageCallOptions = Parameters<typeof generateImage>[0];
17
+ type GenerateImageCallResult = Awaited<ReturnType<typeof generateImage>>;
18
+ type GenerateImageUsage = GenerateImageCallResult['usage'];
19
+ type GenerateImageAdditionalOptions = Partial<Omit<GenerateImageCallOptions, 'model' | 'prompt'>>;
20
+ export interface ToolGenerateImageUploadProps {
21
+ files: File[];
22
+ images: GeneratedFile[];
23
+ input: ToolGenerateImageInput;
24
+ toolCallId: string;
25
+ }
26
+ export interface ToolGenerateImageUploadResult {
27
+ urls: string[];
28
+ [key: string]: unknown;
29
+ }
30
+ export interface ToolGenerateImageOnStartProps {
31
+ statusWriter?: ToolStatusWriter;
32
+ input: ToolGenerateImageInput;
33
+ toolCallId: string;
34
+ options: GenerateImageCallOptions;
35
+ }
36
+ export interface ToolGenerateImageOnEndGenerationProps extends ToolGenerateImageOnStartProps {
37
+ result: GenerateImageCallResult;
38
+ usage: GenerateImageUsage;
39
+ }
40
+ export interface ToolGenerateImageOnEndProps extends ToolGenerateImageOnEndGenerationProps {
41
+ uploadResult: string[] | ToolGenerateImageUploadResult;
42
+ uploadedUrls: string[];
43
+ }
44
+ export interface CreateToolGenerateImageOptions {
45
+ model: ImageModel;
46
+ uploadImages: (props: ToolGenerateImageUploadProps) => Promise<string[]>;
47
+ createToolStatusWriter?: (options: CreateToolStatusWriterOptionsFactory) => ToolStatusWriter;
48
+ onStart?: (props: ToolGenerateImageOnStartProps) => Promise<GenerateImageAdditionalOptions | void> | GenerateImageAdditionalOptions | void;
49
+ onEndGeneration?: (props: ToolGenerateImageOnEndGenerationProps) => Promise<void> | void;
50
+ onEnd?: (props: ToolGenerateImageOnEndProps) => Promise<void> | void;
51
+ generateImageOptions?: GenerateImageAdditionalOptions;
52
+ abortSignal?: AbortSignal;
53
+ defaultN?: number;
54
+ sizes?: string[];
55
+ ratios?: string[];
56
+ maxImages?: number;
57
+ description?: string;
58
+ }
59
+ export declare function createToolGenerateImage(options: CreateToolGenerateImageOptions): Tool<ToolGenerateImageInput, {
60
+ urls: string[];
61
+ }>;
22
62
  export interface CreateToolAgentCodeProps {
23
63
  writer: UIMessageStreamWriter;
24
64
  projectContext: ProjectContext;
25
65
  model: LanguageModelV3;
26
66
  abortSignal?: AbortSignal;
27
67
  streamOptions?: AgentCodeOptions['streamOptions'];
68
+ postStream?: AgentCodeOptions['postStream'];
28
69
  onEnd?: OnEndCallback;
29
70
  }
71
+ export declare const toolRemoveComponent: Tool<{
72
+ componentId: string;
73
+ }, never>;
74
+ export declare const toolMoveComponent: Tool<{
75
+ sourceId: string;
76
+ targetId: string;
77
+ targetIndex: number;
78
+ }, never>;
79
+ export declare const toolGetPageContent: Tool<{
80
+ pageId: string;
81
+ }, never>;
82
+ export declare const toolListPages: Tool<Record<string, never>, never>;
83
+ export declare const toolAddComponent: Tool<{
84
+ name: string;
85
+ plan: string;
86
+ componentId: string;
87
+ position: "before" | "beforeInside" | "afterInside" | "after";
88
+ imageUrls: string[];
89
+ }, never>;
30
90
  /**
31
- * Returns addNewComponent tool that runs on the server and uses the stream writer
91
+ * Returns addComponent tool that runs on the server and uses the stream writer
32
92
  * to send data-tool-status (in-progress, streaming, done) for real-time UI updates.
33
93
  * @see https://ai-sdk.dev/docs/reference/ai-sdk-ui/create-ui-message-stream
34
94
  */
@@ -52,22 +112,6 @@ export declare function createToolEditComponent(props: CreateToolAgentCodeProps)
52
112
  plan: string;
53
113
  imageUrls: string[];
54
114
  }, Record<string, unknown>>;
55
- export declare const toolRemoveComponent: Tool<{
56
- componentId: string;
57
- }, never>;
58
- export declare const toolMoveComponent: Tool<{
59
- sourceId: string;
60
- targetId: string;
61
- targetIndex: number;
62
- }, never>;
63
- export declare const toolGetPageContent: Tool<{
64
- pageId: string;
65
- }, never>;
66
- export declare const toolListPages: Tool<Record<string, never>, never>;
67
- export declare const toolFetchWebsite: Tool<{
68
- url: string;
69
- name: string;
70
- }, never>;
71
115
  export declare const toolAddNewPage: Tool<{
72
116
  name: string;
73
117
  plan: string;
@@ -86,7 +130,6 @@ export declare function createToolAddPage(props: CreateToolAgentCodeProps): Tool
86
130
  export declare const toolAddNewProjectPage: Tool<{
87
131
  name: string;
88
132
  plan: string;
89
- imageUrls: string[];
90
133
  }, never>;
91
134
  /**
92
135
  * Returns addNewProjectPage tool that runs on the server and uses the stream writer
@@ -96,101 +139,10 @@ export declare const toolAddNewProjectPage: Tool<{
96
139
  export declare function createToolAddProjectPage(props: CreateToolAgentCodeProps): Tool<{
97
140
  name: string;
98
141
  plan: string;
99
- imageUrls: string[];
100
142
  }, Record<string, unknown>>;
101
- export declare const toolShowPanel: Tool<{
102
- panelId: AvailablePanels;
143
+ export declare const defaultCommandDescriptions: Partial<Record<ToolBuiltInCommands, string>>;
144
+ export declare function createCommandTool(options?: CreateServerCommandToolOptions): Tool<{
145
+ commandId: ToolBuiltInCommands;
103
146
  }, never>;
104
- export declare const toolsNewProject: {
105
- addNewProjectPage: Tool<{
106
- name: string;
107
- plan: string;
108
- imageUrls: string[];
109
- }, never>;
110
- };
111
- export declare const toolsWeb: {
112
- addNewPage: Tool<{
113
- name: string;
114
- plan: string;
115
- imageUrls: string[];
116
- }, never>;
117
- addNewComponent: Tool<{
118
- name: string;
119
- plan: string;
120
- componentId: string;
121
- position: "before" | "beforeInside" | "afterInside" | "after";
122
- imageUrls: string[];
123
- }, never>;
124
- removeComponent: Tool<{
125
- componentId: string;
126
- }, never>;
127
- moveComponent: Tool<{
128
- sourceId: string;
129
- targetId: string;
130
- targetIndex: number;
131
- }, never>;
132
- editComponent: Tool<{
133
- plan: string;
134
- imageUrls: string[];
135
- }, never>;
136
- getPageContent: Tool<{
137
- pageId: string;
138
- }, never>;
139
- listPages: Tool<Record<string, never>, never>;
140
- };
141
- export declare const toolsEmail: {
142
- addNewComponent: Tool<{
143
- name: string;
144
- plan: string;
145
- componentId: string;
146
- position: "before" | "beforeInside" | "afterInside" | "after";
147
- imageUrls: string[];
148
- }, never>;
149
- editComponent: Tool<{
150
- plan: string;
151
- imageUrls: string[];
152
- }, never>;
153
- removeComponent: Tool<{
154
- componentId: string;
155
- }, never>;
156
- moveComponent: Tool<{
157
- sourceId: string;
158
- targetId: string;
159
- targetIndex: number;
160
- }, never>;
161
- getPageContent: Tool<{
162
- pageId: string;
163
- }, never>;
164
- };
165
- export declare function getDefaultProjectTools({ isEmail, isNewProject }?: Partial<ProjectContext>): {
166
- addNewProjectPage: Tool<{
167
- name: string;
168
- plan: string;
169
- imageUrls: string[];
170
- }, never>;
171
- } | {
172
- addNewComponent: Tool<{
173
- name: string;
174
- plan: string;
175
- componentId: string;
176
- position: "before" | "beforeInside" | "afterInside" | "after";
177
- imageUrls: string[];
178
- }, never>;
179
- editComponent: Tool<{
180
- plan: string;
181
- imageUrls: string[];
182
- }, never>;
183
- removeComponent: Tool<{
184
- componentId: string;
185
- }, never>;
186
- moveComponent: Tool<{
187
- sourceId: string;
188
- targetId: string;
189
- targetIndex: number;
190
- }, never>;
191
- getPageContent: Tool<{
192
- pageId: string;
193
- }, never>;
194
- };
195
147
  export declare function buildDefaultTools(options: BuildDefaultToolsOptions): Record<string, Tool>;
196
148
  export {};
@@ -1,7 +1,48 @@
1
1
  import { LanguageModelV3 } from '@ai-sdk/provider';
2
- import { FinishReason, LanguageModelUsage, Tool, UIMessage, UIMessageStreamOptions, UIMessageStreamWriter, streamText } from 'ai';
3
- import { ProjectContext } from '../types';
2
+ import { FinishReason, LanguageModelUsage, ModelMessage, Tool, UIMessage, UIMessageStreamOptions, UIMessageStreamWriter, streamText } from 'ai';
3
+ import { ChatToolAgentCode, ProjectContext, ToolBuiltInCommands } from '../types';
4
+ export declare enum ChatPromptKeys {
5
+ SELECTED_PAGE_ID = "SELECTED_PAGE_ID",
6
+ SELECTED_PAGE_NAME = "SELECTED_PAGE_NAME",
7
+ SELECTED_COMPONENT_IDS = "SELECTED_COMPONENT_IDS",
8
+ IS_PROJECT_EMPTY = "IS_PROJECT_EMPTY"
9
+ }
4
10
  export type StreamTextOptions = Parameters<typeof streamText>[0];
11
+ export interface AgentCodePromptOptions {
12
+ preamble?: string;
13
+ postamble?: string;
14
+ currentCode?: string;
15
+ mainPage?: string;
16
+ design?: string;
17
+ imageRefs?: string;
18
+ media?: string;
19
+ icons?: string;
20
+ pageLinking?: string;
21
+ css?: string;
22
+ responsiveStyles?: string;
23
+ globalStyles?: string;
24
+ plugins?: string;
25
+ scripts?: string;
26
+ output?: string;
27
+ }
28
+ export type AgentCodeStreamOptions = Partial<Omit<StreamTextOptions, 'model' | 'prompt' | 'abortSignal' | 'toolChoice' | 'messages' | 'tools' | 'onToolCall'>>;
29
+ export interface AgentCodeStreamOptionsFnProps<TInput = unknown> {
30
+ options: AgentCodeStreamOptions & Pick<StreamTextOptions, 'model' | 'prompt' | 'abortSignal'>;
31
+ toolName: ChatToolAgentCode;
32
+ projectContext: ProjectContext;
33
+ input: TInput;
34
+ prompt: string | ModelMessage[];
35
+ getSystemPrompt: (projectContext: ProjectContext, options?: AgentCodePromptOptions) => string;
36
+ }
37
+ export type AgentCodeStreamOptionsFn<TInput = unknown> = (props: AgentCodeStreamOptionsFnProps<TInput>) => AgentCodeStreamOptions | void;
38
+ export interface AgentCodePostStreamProps<TInput = unknown> {
39
+ content: string;
40
+ statusWriter: ToolStatusWriter;
41
+ toolName: ChatToolAgentCode;
42
+ projectContext: ProjectContext;
43
+ input: TInput;
44
+ }
45
+ export type AgentCodePostStream<TInput = unknown> = (props: AgentCodePostStreamProps<TInput>) => void | Promise<void>;
5
46
  /**
6
47
  * Callback invoked when a streamText call finishes, useful for tracking LLM usage.
7
48
  */
@@ -28,7 +69,11 @@ export interface AgentCodeOptions {
28
69
  /**
29
70
  * Additional stream text options passed to the agent's internal streamText calls
30
71
  */
31
- streamOptions?: Partial<Omit<StreamTextOptions, 'model' | 'system' | 'prompt' | 'abortSignal' | 'toolChoice' | 'messages' | 'tools' | 'onToolCall'>>;
72
+ streamOptions?: AgentCodeStreamOptions | AgentCodeStreamOptionsFn;
73
+ /**
74
+ * Hook executed after the sub-agent stream ends and before the final done status is emitted.
75
+ */
76
+ postStream?: AgentCodePostStream;
32
77
  }
33
78
  /**
34
79
  * Return type of createToolStatusWriter function
@@ -64,6 +109,15 @@ export interface CreateToolStatusWriterOptions {
64
109
  */
65
110
  export interface CreateToolStatusWriterOptionsFactory extends Omit<CreateToolStatusWriterOptions, 'writer'> {
66
111
  }
112
+ export interface CommandToolServerDefinition {
113
+ description?: string;
114
+ }
115
+ export type CommandToolServerDefinitions = Partial<Record<ToolBuiltInCommands | string, CommandToolServerDefinition>>;
116
+ export interface CreateServerCommandToolOptions {
117
+ skipDefault?: boolean;
118
+ commands?: CommandToolServerDefinitions;
119
+ projectContext?: Partial<ProjectContext>;
120
+ }
67
121
  /**
68
122
  * Options passed to the tools callback function
69
123
  */
@@ -101,6 +155,10 @@ export interface ToolsCallbackOptions {
101
155
  * ```
102
156
  */
103
157
  createToolStatusWriter: (options: CreateToolStatusWriterOptionsFactory) => ToolStatusWriter;
158
+ /**
159
+ * Create a server-side runCommand tool using built-in command definitions.
160
+ */
161
+ createCommandTool: (options?: CreateServerCommandToolOptions) => Tool;
104
162
  }
105
163
  export interface ChatSystemPrompt {
106
164
  /**
@@ -1,10 +1,10 @@
1
1
  import { Chat, UIMessage, useChat, UseChatHelpers } from '@ai-sdk/react';
2
2
  import { ChatInit, DynamicToolUIPart, HttpChatTransportInitOptions, ToolUIPart } from 'ai';
3
3
  import { Component, Editor } from 'grapesjs';
4
- import { LicenseCheckResult } from '../utils';
5
4
  import { StudioLayoutComponentsConfig } from '../types';
6
- import { AiChatLayoutComponentsRegistryEntries } from './components/index';
5
+ import { LicenseCheckResult } from '../utils';
7
6
  import { ToolStatusProgressMap } from './clientToolsProcessors';
7
+ import { AiChatLayoutComponentsRegistryEntries } from './components/index';
8
8
  import { AiChatOptions as AiChatOptionsSchema, CommonComponentPropsSchema } from './typesSchema';
9
9
  /**
10
10
  * ChatMessage is a direct alias of AI SDK's UIMessage
@@ -23,7 +23,8 @@ export declare enum AiChatToolName {
23
23
  GET_PAGE_CONTENT = "getPageContent",
24
24
  LIST_PAGES = "listPages",
25
25
  FETCH_WEBSITE = "fetchWebsite",
26
- SHOW_PANEL = "showPanel"
26
+ GENERATE_IMAGE = "generateImage",
27
+ RUN_COMMAND = "runCommand"
27
28
  }
28
29
  export declare enum ChatToolAgentCode {
29
30
  ADD_COMPONENT_CODE = "addComponentCode",
@@ -31,18 +32,25 @@ export declare enum ChatToolAgentCode {
31
32
  ADD_PAGE_CODE = "addPageCode",
32
33
  ADD_PROJECT_PAGE_CODE = "addProjectPageCode"
33
34
  }
34
- export declare enum AvailablePanels {
35
- EDIT_EXPORT_CODE = "editExportCode",
36
- PUBLISH = "publish",
35
+ export declare enum ToolBuiltInCommands {
36
+ SHOW_CODE = "showCode",
37
+ IMPORT_CODE = "importCode",
37
38
  PAGE_SETTINGS = "pageSettings",
38
- IMPORT_HTML = "importHTML",
39
- PREVIEW = "preview"
39
+ PREVIEW = "preview",
40
+ PUBLISH = "publish"
40
41
  }
41
42
  export declare enum AiChatCommands {
42
43
  getChatManager = "aiChat:getChatManager",
43
44
  getChatState = "aiChat:getChatState",
44
45
  getChatApi = "aiChat:getChatApi"
45
46
  }
47
+ export interface ToolGenerateImageInput extends Record<string, unknown> {
48
+ prompt: string;
49
+ images?: string[];
50
+ n?: number;
51
+ size?: string;
52
+ aspectRatio?: string;
53
+ }
46
54
  export interface AiChatToolsArguments {
47
55
  [AiChatToolName.ADD_NEW_COMPONENT]: {
48
56
  name: string;
@@ -76,14 +84,15 @@ export interface AiChatToolsArguments {
76
84
  plan: string;
77
85
  imageUrls: string[];
78
86
  };
79
- [AiChatToolName.SHOW_PANEL]: {
80
- panelId: AvailablePanels;
87
+ [AiChatToolName.RUN_COMMAND]: {
88
+ commandId: ToolBuiltInCommands;
81
89
  };
82
90
  [AiChatToolName.LIST_PAGES]: Record<string, never>;
83
91
  [AiChatToolName.FETCH_WEBSITE]: {
84
92
  url: string;
85
93
  name: string;
86
94
  };
95
+ [AiChatToolName.GENERATE_IMAGE]: ToolGenerateImageInput;
87
96
  }
88
97
  export interface ProjectContext {
89
98
  /**
@@ -176,6 +185,45 @@ export interface AiChatMessagePartLayoutProps extends AiChatMessageLayoutProps {
176
185
  export interface AiChatMessageToolDetailLayoutProps extends AiChatMessagePartLayoutProps {
177
186
  part: ToolUIPart | DynamicToolUIPart;
178
187
  toolName: string;
188
+ isProcessing: boolean;
189
+ isCompleted?: boolean;
190
+ input?: unknown;
191
+ output?: unknown;
192
+ }
193
+ export interface AiChatToolData<TInput extends Record<string, unknown> = Record<string, unknown>> {
194
+ type: 'data-tool-status';
195
+ id: string;
196
+ data: {
197
+ name: string;
198
+ input: TInput;
199
+ status: 'in-progress' | 'streaming' | 'done' | 'complete' | 'error';
200
+ content?: string;
201
+ error?: string;
202
+ metadata?: Record<string, unknown>;
203
+ };
204
+ }
205
+ export interface AiChatClientToolOnDataProps<TInput extends Record<string, unknown> = Record<string, unknown>> {
206
+ editor: Editor;
207
+ chatApi: ChatApi;
208
+ toolStatus: AiChatToolData<TInput>;
209
+ toolStatusProgress: ToolStatusProgressMap;
210
+ }
211
+ export interface CommandLabelProps {
212
+ isExecuted: boolean;
213
+ }
214
+ type CommandToolResult = string | Record<string, unknown> | void;
215
+ export interface CommandToolClientDefinition {
216
+ label?: (props: CommandLabelProps) => StudioLayoutComponentsConfig | undefined | void;
217
+ execute?: (props: {
218
+ editor: Editor;
219
+ input: AiChatToolsArguments[AiChatToolName.RUN_COMMAND];
220
+ context: AiChatToolContext;
221
+ }) => Promise<CommandToolResult> | CommandToolResult;
222
+ }
223
+ export type CommandToolClientDefinitions = Partial<Record<ToolBuiltInCommands | string, CommandToolClientDefinition>>;
224
+ export interface CreateCommandToolOptions {
225
+ skipDefault?: boolean;
226
+ commands?: CommandToolClientDefinitions;
179
227
  }
180
228
  /**
181
229
  * Client-side tool definition
@@ -185,6 +233,14 @@ export interface AiChatClientTool<TInput extends Record<string, unknown> = any>
185
233
  * Execute the tool on the client side
186
234
  */
187
235
  execute?: (input: TInput, context: AiChatToolContext) => Promise<string | Record<string, unknown>>;
236
+ /**
237
+ * Custom label for tool in the message.
238
+ */
239
+ layoutToolLabel?: (props: AiChatMessageToolDetailLayoutProps) => StudioLayoutComponentsConfig | undefined | void;
240
+ /**
241
+ * Callback on incoming status data for this tool.
242
+ */
243
+ onData?: (props: AiChatClientToolOnDataProps<TInput>) => void;
188
244
  /**
189
245
  * Custom layout for tool in the message.
190
246
  */
@@ -203,7 +259,8 @@ export interface AiChatToolContext {
203
259
  /**
204
260
  * Default tools type
205
261
  */
206
- export type AiChatDefaultTools = Record<AiChatToolName, AiChatClientTool>;
262
+ export type AiChatDefaultToolName = AiChatToolName.REMOVE_COMPONENT | AiChatToolName.MOVE_COMPONENT | AiChatToolName.GET_PAGE_CONTENT | AiChatToolName.LIST_PAGES | AiChatToolName.GENERATE_IMAGE | AiChatToolName.RUN_COMMAND;
263
+ export type AiChatDefaultTools = Record<AiChatDefaultToolName, AiChatClientTool>;
207
264
  /**
208
265
  * Custom tools type
209
266
  */
@@ -214,6 +271,7 @@ export type AiChatTools = Record<string, AiChatClientTool>;
214
271
  export type AiChatToolsFn = (props: {
215
272
  defaultTools: AiChatDefaultTools;
216
273
  editor: Editor;
274
+ createCommandTool: (options?: CreateCommandToolOptions) => AiChatClientTool<AiChatToolsArguments[AiChatToolName.RUN_COMMAND]>;
217
275
  }) => AiChatTools;
218
276
  /**
219
277
  * Props for custom message component
@@ -112,6 +112,28 @@ export interface AiChatPanelPropsSchema extends CommonComponentPropsSchema {
112
112
  pluginOptions: object;
113
113
  }
114
114
  export interface AiChatHeaderPropsSchema {
115
+ /**
116
+ * Custom title for the header.
117
+ */
118
+ title?: string;
119
+ /**
120
+ * Custom layout rendered before the header content.
121
+ */
122
+ layoutBefore?: '__fn__';
123
+ /**
124
+ * Custom layout rendered after the header content.
125
+ */
126
+ layoutAfter?: '__fn__';
127
+ /**
128
+ * Props forwarded to the clear button.
129
+ * Use `onClear` to customize clear behavior.
130
+ */
131
+ clearButtonProps?: object;
132
+ /**
133
+ * Custom clear handler.
134
+ * Receives `chatApi`, `clear`, and click `event`.
135
+ */
136
+ onClear?: '__fn__';
115
137
  }
116
138
  export interface AiChatErrorPropsSchema {
117
139
  }
@@ -197,6 +219,11 @@ export interface AiChatMessagePropsSchema {
197
219
  * Indicates if the message is currently streaming
198
220
  */
199
221
  isStreaming?: boolean;
222
+ /**
223
+ * Render source parts (source-url/source-document) when available.
224
+ * @default false
225
+ */
226
+ showSources?: boolean;
200
227
  /**
201
228
  * Custom layout before the message
202
229
  */
@@ -1 +1 @@
1
- "use strict";var p=(t=>(t.free="free",t.startup="startup",t.business="business",t.enterprise="enterprise",t))(p||{}),v=(t=>(t.toastAdd="studio:toastAdd",t.toastRemove="studio:toastRemove",t.dialogOpen="studio:dialogOpen",t.dialogClose="studio:dialogClose",t.dialogExportCode="studio:dialogExportCode",t.sidebarLeftSet="studio:sidebarLeft:set",t.sidebarLeftGet="studio:sidebarLeft:get",t.sidebarLeftToggle="studio:sidebarLeft:toggle",t.sidebarRightSet="studio:sidebarRight:set",t.sidebarRightGet="studio:sidebarRight:get",t.sidebarRightToggle="studio:sidebarRight:toggle",t.sidebarTopSet="studio:sidebarTop:set",t.sidebarTopGet="studio:sidebarTop:get",t.sidebarTopToggle="studio:sidebarTop:toggle",t.sidebarBottomSet="studio:sidebarBottom:set",t.sidebarBottomGet="studio:sidebarBottom:get",t.sidebarBottomToggle="studio:sidebarBottom:toggle",t.symbolAdd="studio:symbolAdd",t.symbolDetach="studio:symbolDetach",t.symbolOverride="studio:symbolOverride",t.symbolPropagateStyles="studio:propagateStyles",t.getPagesConfig="studio:getPagesConfig",t.setPagesConfig="studio:setPagesConfig",t.getPageSettings="studio:getPageSettings",t.setPageSettings="studio:setPageSettings",t.clearPage="studio:clearPage",t.projectFiles="studio:projectFiles",t.validateCode="studio:validateCode",t.canvasReload="studio:canvasReload",t.getBlocksPanel="studio:getBlocksPanel",t.setBlocksPanel="studio:setBlocksPanel",t.getStateContextMenu="studio:getStateContextMenu",t.setStateContextMenu="studio:setStateContextMenu",t.contextMenuComponent="studio:contextMenuComponent",t.layoutAdd="studio:layoutAdd",t.layoutRemove="studio:layoutRemove",t.layoutToggle="studio:layoutToggle",t.layoutUpdate="studio:layoutUpdate",t.layoutGet="studio:layoutGet",t.layoutConfigGet="studio:layoutConfigGet",t.layoutConfigSet="studio:layoutConfigSet",t.layoutComponentAdd="studio:layoutComponentAdd",t.layoutComponentGet="studio:layoutComponentGet",t.layoutComponentRemove="studio:layoutComponentRemove",t.layoutComponentRender="studio:layoutComponentRender",t.getStateTheme="studio:getStateTheme",t.setStateTheme="studio:setStateTheme",t.assetProviderGet="studio:assetProviderGet",t.assetProviderAdd="studio:assetProviderAdd",t.assetProviderRemove="studio:assetProviderRemove",t.fontGet="studio:fontGet",t.fontAdd="studio:fontAdd",t.fontRemove="studio:fontRemove",t.fontManagerOpen="studio:fontManagerOpen",t.menuFontLoad="studio:menuFontLoad",t.toggleStateDataSource="studio:toggleStateDataSource",t.getStateDataSource="studio:getStateDataSource",t.dataSourceSetGlobalData="studio:dataSourceSetGlobalData",t.dataSourceSetImporter="studio:dataSourceSetImporter",t.dataSourceSetExporter="studio:dataSourceSetExporter",t.setDragAbsolute="studio:setDragAbsolute",t))(v||{});const D="app.grapesjs.com",G="app-stage.grapesjs.com",I="app2.grapesjs.com",$="app-stage2.grapesjs.com",w=[D,I,G,$,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],E="license:check:start",M="license:check:end",U=()=>typeof window<"u",j=({isDev:t,isStage:e,isPlatform:s})=>`${t?"":`https://${e?G:D}`}/${s?"platform-api":"api"}`,N=()=>{const t=U()&&window.location.hostname;return!!t&&(w.includes(t)||w.some(e=>t.endsWith(e)))};async function B({path:t,baseApiUrl:e,method:s="GET",headers:n={},params:o,body:r}){const l=`${e||j({isDev:!1,isStage:!1})}${t}`,c={method:s,headers:{"Content-Type":"application/json",...n}};r&&(c.body=JSON.stringify(r));const u=o?new URLSearchParams(o).toString():"",g=u?`?${u}`:"",a=await fetch(`${l}${g}`,c);if(!a.ok)throw new Error(`HTTP error! status: ${a.status}`);return a.json()}const F={[p.free]:0,[p.startup]:10,[p.business]:20,[p.enterprise]:30};function k(t){const e=t;return e.init=s=>n=>t(n,s),e}const W=t=>k(t);async function _({editor:t,plan:e,pluginName:s,licenseKey:n,onLicenseCheckResponse:o,cleanup:r}){let i="",l=!1;const c=N(),u=a=>{console.warn("Cleanup plugin:",s,"Reason:",a),r()},g=(a={})=>{var A;const{error:d,sdkLicense:f}=a,b=(A=a.plan)==null?void 0:A.category;if(!(f||a.license)||d)u(d||"Invalid license");else if(b){const O=F[e],R=F[b];O>R&&u({pluginRequiredPlan:e,licensePlan:b})}};t.on(E,a=>{i=a==null?void 0:a.baseApiUrl,l=!0}),t.on(M,a=>{o==null||o(a),g(a)}),setTimeout(async()=>{if(!l){if(c)return;if(n){const a=await K({licenseKey:n,pluginName:s,baseApiUrl:i});o==null||o(a),a&&g(a)}else u("The `licenseKey` option not provided")}},2e3)}async function K(t){const{licenseKey:e,pluginName:s,baseApiUrl:n}=t;try{return(await B({baseApiUrl:n,path:`/sdk/${e||"na"}`,method:"POST",params:{d:window.location.hostname,pn:s}})).result||{}}catch(o){return console.error("Error during SDK license check:",o),!1}}const y=t=>t.replaceAll('"',"").replaceAll("'",""),P=t=>t.includes(",")?t:/\s/.test(t)?`'${y(t)}'`:y(t),T=(t,e,s)=>({family:t,variant:e,...s}),L=(t,e)=>{t=P(t);const{menuVariant:s,variants:n}=e;return{family:t,familyLabel:y(t),menuVariant:s&&T(P(`menuFont-${y(t)}`),"regular",s),variants:Object.assign({},...Object.entries(n).map(([o,r])=>({[o]:T(t,o,r)})))}},x=(t,e)=>{var l;const s=L(t.family,t),n=s.menuVariant??((l=Object.values(s.variants))==null?void 0:l[0]);if(!n)return"Arial, Helvetica, sans-serif";const{source:o,descriptors:r}=n,i=y(n.family);if(!e){const c=new FontFace(i,`url("${o}")`,r),u=Array.from(document.fonts.values()).filter(g=>g.family===i);for(const g of u)document.fonts.delete(g);document.fonts.add(c),c.load().catch(()=>{})}return P(i)},V=t=>{const{family:e,menu:s,axes:n}=t,o=!!n,r=Object.assign({},...t.variants.map(i=>{var g,a;let l,c;if(o){const d=n.find(f=>f.tag==="wght");if(d){const{start:f,end:b}=d;l=`${f} ${b}`}}return l||(l=((g=i.match(/\d+/))==null?void 0:g[0])??"400"),c=((a=i.match(/[a-zA-Z]+/))==null?void 0:a[0])==="italic"?"italic":void 0,{[i]:{source:t.files[i],descriptors:{style:c,weight:l}}}}));return L(e,{menuVariant:{source:s},variants:r})},H=t=>({id:`${t.family}/${t.version}`,type:"font",src:t.menu,name:t.family,customData:{font:V(t),needsLoading:!0}}),z=t=>{const{font:e}=t.customData;return t.customData.needsLoading?(t.customData.needsLoading=!1,x(e)):x(e,!0)};let h;const q=t=>{const e=[];for(const s of Object.keys(t)){let n=t[s];n&&(Array.isArray(n)?e.push(...n.map(o=>[s,o.toString()])):(n=n.toString(),e.push([s,n])))}return new URLSearchParams(e)},S=t=>{const{apiKey:e,searchParams:s}=t,n=(o={})=>{const r="https://www.googleapis.com/webfonts/v1/webfonts",i=q(o);return`${r}?${i}`};return{id:"google-fonts",types:["font"],label:({editor:o})=>o.I18n.t("googleFontsAssetProvider.providerLabel"),search:{reloadOnInput:!1},async onLoad(){var u;if(h)return h;const o={key:e,sort:"alpha",subset:"latin",capability:["WOFF2","VF"]},r=s==null?void 0:s(),i={...o,...r},c=await(await fetch(n(i))).json();return(u=c.items)!=null&&u.length?(h=c.items.map(H),h):[]},itemLayout:o=>{const r=h.find(l=>l.id===o.assetProps.id),i=z(r);return{type:"column",onClick:()=>o.onSelect(r),htmlAttrs:{title:r.name},style:{borderWidth:"1px",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"text",content:r.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:i,fontSize:"24px",paddingLeft:"8px",paddingRight:"8px"}},{type:"text",content:r.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"16px",paddingLeft:"8px",paddingRight:"8px"}}]}}}},J={googleFontsAssetProvider:{searchBtn:"Search on Google Fonts",modalTitle:"Select Font",providerLabel:"Google Fonts"}},Q="googleFontsAssetProvider",Z=p.startup,X=function(t,e){const{i18n:s={}}=e,n=S(e);t.runCommand(v.assetProviderAdd,{provider:n}),t.I18n.addMessages({en:J,...s}),_({editor:t,licenseKey:e.licenseKey,plan:Z,pluginName:Q,cleanup:()=>{t.runCommand(v.assetProviderRemove,{id:n.id})}})},Y=W(X);module.exports=Y;
1
+ "use strict";var p=(t=>(t.free="free",t.startup="startup",t.business="business",t.enterprise="enterprise",t))(p||{}),v=(t=>(t.toastAdd="studio:toastAdd",t.toastRemove="studio:toastRemove",t.dialogOpen="studio:dialogOpen",t.dialogClose="studio:dialogClose",t.dialogExportCode="studio:dialogExportCode",t.dialogImportCode="studio:dialogImportCode",t.sidebarLeftSet="studio:sidebarLeft:set",t.sidebarLeftGet="studio:sidebarLeft:get",t.sidebarLeftToggle="studio:sidebarLeft:toggle",t.sidebarRightSet="studio:sidebarRight:set",t.sidebarRightGet="studio:sidebarRight:get",t.sidebarRightToggle="studio:sidebarRight:toggle",t.sidebarTopSet="studio:sidebarTop:set",t.sidebarTopGet="studio:sidebarTop:get",t.sidebarTopToggle="studio:sidebarTop:toggle",t.sidebarBottomSet="studio:sidebarBottom:set",t.sidebarBottomGet="studio:sidebarBottom:get",t.sidebarBottomToggle="studio:sidebarBottom:toggle",t.symbolAdd="studio:symbolAdd",t.symbolDetach="studio:symbolDetach",t.symbolOverride="studio:symbolOverride",t.symbolPropagateStyles="studio:propagateStyles",t.getPagesConfig="studio:getPagesConfig",t.setPagesConfig="studio:setPagesConfig",t.getPageSettings="studio:getPageSettings",t.setPageSettings="studio:setPageSettings",t.clearPage="studio:clearPage",t.projectFiles="studio:projectFiles",t.validateCode="studio:validateCode",t.canvasReload="studio:canvasReload",t.getBlocksPanel="studio:getBlocksPanel",t.setBlocksPanel="studio:setBlocksPanel",t.getStateContextMenu="studio:getStateContextMenu",t.setStateContextMenu="studio:setStateContextMenu",t.contextMenuComponent="studio:contextMenuComponent",t.layoutAdd="studio:layoutAdd",t.layoutRemove="studio:layoutRemove",t.layoutToggle="studio:layoutToggle",t.layoutUpdate="studio:layoutUpdate",t.layoutGet="studio:layoutGet",t.layoutConfigGet="studio:layoutConfigGet",t.layoutConfigSet="studio:layoutConfigSet",t.layoutComponentAdd="studio:layoutComponentAdd",t.layoutComponentGet="studio:layoutComponentGet",t.layoutComponentRemove="studio:layoutComponentRemove",t.layoutComponentRender="studio:layoutComponentRender",t.getStateTheme="studio:getStateTheme",t.setStateTheme="studio:setStateTheme",t.assetProviderGet="studio:assetProviderGet",t.assetProviderAdd="studio:assetProviderAdd",t.assetProviderRemove="studio:assetProviderRemove",t.fontGet="studio:fontGet",t.fontAdd="studio:fontAdd",t.fontRemove="studio:fontRemove",t.fontManagerOpen="studio:fontManagerOpen",t.menuFontLoad="studio:menuFontLoad",t.toggleStateDataSource="studio:toggleStateDataSource",t.getStateDataSource="studio:getStateDataSource",t.dataSourceSetGlobalData="studio:dataSourceSetGlobalData",t.dataSourceSetImporter="studio:dataSourceSetImporter",t.dataSourceSetExporter="studio:dataSourceSetExporter",t.setDragAbsolute="studio:setDragAbsolute",t))(v||{});const D="app.grapesjs.com",G="app-stage.grapesjs.com",R="app2.grapesjs.com",$="app-stage2.grapesjs.com",w=[D,R,G,$,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],E="license:check:start",M="license:check:end",U=()=>typeof window<"u",j=({isDev:t,isStage:e,isPlatform:s})=>`${t?"":`https://${e?G:D}`}/${s?"platform-api":"api"}`,N=()=>{const t=U()&&window.location.hostname;return!!t&&(w.includes(t)||w.some(e=>t.endsWith(e)))};async function B({path:t,baseApiUrl:e,method:s="GET",headers:a={},params:o,body:r}){const l=`${e||j({isDev:!1,isStage:!1})}${t}`,c={method:s,headers:{"Content-Type":"application/json",...a}};r&&(c.body=JSON.stringify(r));const u=o?new URLSearchParams(o).toString():"",g=u?`?${u}`:"",n=await fetch(`${l}${g}`,c);if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return n.json()}const F={[p.free]:0,[p.startup]:10,[p.business]:20,[p.enterprise]:30};function k(t){const e=t;return e.init=s=>a=>t(a,s),e}const W=t=>k(t);async function _({editor:t,plan:e,pluginName:s,licenseKey:a,onLicenseCheckResponse:o,cleanup:r}){let i="",l=!1;const c=N(),u=n=>{console.warn("Cleanup plugin:",s,"Reason:",n),r()},g=(n={})=>{var A;const{error:d,sdkLicense:f}=n,b=(A=n.plan)==null?void 0:A.category;if(!(f||n.license)||d)u(d||"Invalid license");else if(b){const O=F[e],I=F[b];O>I&&u({pluginRequiredPlan:e,licensePlan:b})}};t.on(E,n=>{i=n==null?void 0:n.baseApiUrl,l=!0}),t.on(M,n=>{o==null||o(n),g(n)}),setTimeout(async()=>{if(!l){if(c)return;if(a){const n=await K({licenseKey:a,pluginName:s,baseApiUrl:i});o==null||o(n),n&&g(n)}else u("The `licenseKey` option not provided")}},2e3)}async function K(t){const{licenseKey:e,pluginName:s,baseApiUrl:a}=t;try{return(await B({baseApiUrl:a,path:`/sdk/${e||"na"}`,method:"POST",params:{d:window.location.hostname,pn:s}})).result||{}}catch(o){return console.error("Error during SDK license check:",o),!1}}const y=t=>t.replaceAll('"',"").replaceAll("'",""),P=t=>t.includes(",")?t:/\s/.test(t)?`'${y(t)}'`:y(t),T=(t,e,s)=>({family:t,variant:e,...s}),L=(t,e)=>{t=P(t);const{menuVariant:s,variants:a}=e;return{family:t,familyLabel:y(t),menuVariant:s&&T(P(`menuFont-${y(t)}`),"regular",s),variants:Object.assign({},...Object.entries(a).map(([o,r])=>({[o]:T(t,o,r)})))}},x=(t,e)=>{var l;const s=L(t.family,t),a=s.menuVariant??((l=Object.values(s.variants))==null?void 0:l[0]);if(!a)return"Arial, Helvetica, sans-serif";const{source:o,descriptors:r}=a,i=y(a.family);if(!e){const c=new FontFace(i,`url("${o}")`,r),u=Array.from(document.fonts.values()).filter(g=>g.family===i);for(const g of u)document.fonts.delete(g);document.fonts.add(c),c.load().catch(()=>{})}return P(i)},V=t=>{const{family:e,menu:s,axes:a}=t,o=!!a,r=Object.assign({},...t.variants.map(i=>{var g,n;let l,c;if(o){const d=a.find(f=>f.tag==="wght");if(d){const{start:f,end:b}=d;l=`${f} ${b}`}}return l||(l=((g=i.match(/\d+/))==null?void 0:g[0])??"400"),c=((n=i.match(/[a-zA-Z]+/))==null?void 0:n[0])==="italic"?"italic":void 0,{[i]:{source:t.files[i],descriptors:{style:c,weight:l}}}}));return L(e,{menuVariant:{source:s},variants:r})},H=t=>({id:`${t.family}/${t.version}`,type:"font",src:t.menu,name:t.family,customData:{font:V(t),needsLoading:!0}}),z=t=>{const{font:e}=t.customData;return t.customData.needsLoading?(t.customData.needsLoading=!1,x(e)):x(e,!0)};let h;const q=t=>{const e=[];for(const s of Object.keys(t)){let a=t[s];a&&(Array.isArray(a)?e.push(...a.map(o=>[s,o.toString()])):(a=a.toString(),e.push([s,a])))}return new URLSearchParams(e)},J=t=>{const{apiKey:e,searchParams:s}=t,a=(o={})=>{const r="https://www.googleapis.com/webfonts/v1/webfonts",i=q(o);return`${r}?${i}`};return{id:"google-fonts",types:["font"],label:({editor:o})=>o.I18n.t("googleFontsAssetProvider.providerLabel"),search:{reloadOnInput:!1},async onLoad(){var u;if(h)return h;const o={key:e,sort:"alpha",subset:"latin",capability:["WOFF2","VF"]},r=s==null?void 0:s(),i={...o,...r},c=await(await fetch(a(i))).json();return(u=c.items)!=null&&u.length?(h=c.items.map(H),h):[]},itemLayout:o=>{const r=h.find(l=>l.id===o.assetProps.id),i=z(r);return{type:"column",onClick:()=>o.onSelect(r),htmlAttrs:{title:r.name},style:{borderWidth:"1px",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"text",content:r.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:i,fontSize:"24px",paddingLeft:"8px",paddingRight:"8px"}},{type:"text",content:r.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"16px",paddingLeft:"8px",paddingRight:"8px"}}]}}}},Q={googleFontsAssetProvider:{searchBtn:"Search on Google Fonts",modalTitle:"Select Font",providerLabel:"Google Fonts"}},S="googleFontsAssetProvider",Z=p.startup,X=function(t,e){const{i18n:s={}}=e,a=J(e);t.runCommand(v.assetProviderAdd,{provider:a}),t.I18n.addMessages({en:Q,...s}),_({editor:t,licenseKey:e.licenseKey,plan:Z,pluginName:S,cleanup:()=>{t.runCommand(v.assetProviderRemove,{id:a.id})}})},Y=W(X);module.exports=Y;
@@ -1,7 +1,7 @@
1
- var p = /* @__PURE__ */ ((t) => (t.free = "free", t.startup = "startup", t.business = "business", t.enterprise = "enterprise", t))(p || {}), v = /* @__PURE__ */ ((t) => (t.toastAdd = "studio:toastAdd", t.toastRemove = "studio:toastRemove", t.dialogOpen = "studio:dialogOpen", t.dialogClose = "studio:dialogClose", t.dialogExportCode = "studio:dialogExportCode", t.sidebarLeftSet = "studio:sidebarLeft:set", t.sidebarLeftGet = "studio:sidebarLeft:get", t.sidebarLeftToggle = "studio:sidebarLeft:toggle", t.sidebarRightSet = "studio:sidebarRight:set", t.sidebarRightGet = "studio:sidebarRight:get", t.sidebarRightToggle = "studio:sidebarRight:toggle", t.sidebarTopSet = "studio:sidebarTop:set", t.sidebarTopGet = "studio:sidebarTop:get", t.sidebarTopToggle = "studio:sidebarTop:toggle", t.sidebarBottomSet = "studio:sidebarBottom:set", t.sidebarBottomGet = "studio:sidebarBottom:get", t.sidebarBottomToggle = "studio:sidebarBottom:toggle", t.symbolAdd = "studio:symbolAdd", t.symbolDetach = "studio:symbolDetach", t.symbolOverride = "studio:symbolOverride", t.symbolPropagateStyles = "studio:propagateStyles", t.getPagesConfig = "studio:getPagesConfig", t.setPagesConfig = "studio:setPagesConfig", t.getPageSettings = "studio:getPageSettings", t.setPageSettings = "studio:setPageSettings", t.clearPage = "studio:clearPage", t.projectFiles = "studio:projectFiles", t.validateCode = "studio:validateCode", t.canvasReload = "studio:canvasReload", t.getBlocksPanel = "studio:getBlocksPanel", t.setBlocksPanel = "studio:setBlocksPanel", t.getStateContextMenu = "studio:getStateContextMenu", t.setStateContextMenu = "studio:setStateContextMenu", t.contextMenuComponent = "studio:contextMenuComponent", t.layoutAdd = "studio:layoutAdd", t.layoutRemove = "studio:layoutRemove", t.layoutToggle = "studio:layoutToggle", t.layoutUpdate = "studio:layoutUpdate", t.layoutGet = "studio:layoutGet", t.layoutConfigGet = "studio:layoutConfigGet", t.layoutConfigSet = "studio:layoutConfigSet", t.layoutComponentAdd = "studio:layoutComponentAdd", t.layoutComponentGet = "studio:layoutComponentGet", t.layoutComponentRemove = "studio:layoutComponentRemove", t.layoutComponentRender = "studio:layoutComponentRender", t.getStateTheme = "studio:getStateTheme", t.setStateTheme = "studio:setStateTheme", t.assetProviderGet = "studio:assetProviderGet", t.assetProviderAdd = "studio:assetProviderAdd", t.assetProviderRemove = "studio:assetProviderRemove", t.fontGet = "studio:fontGet", t.fontAdd = "studio:fontAdd", t.fontRemove = "studio:fontRemove", t.fontManagerOpen = "studio:fontManagerOpen", t.menuFontLoad = "studio:menuFontLoad", t.toggleStateDataSource = "studio:toggleStateDataSource", t.getStateDataSource = "studio:getStateDataSource", t.dataSourceSetGlobalData = "studio:dataSourceSetGlobalData", t.dataSourceSetImporter = "studio:dataSourceSetImporter", t.dataSourceSetExporter = "studio:dataSourceSetExporter", t.setDragAbsolute = "studio:setDragAbsolute", t))(v || {});
2
- const D = "app.grapesjs.com", G = "app-stage.grapesjs.com", I = "app2.grapesjs.com", $ = "app-stage2.grapesjs.com", w = [
1
+ var p = /* @__PURE__ */ ((t) => (t.free = "free", t.startup = "startup", t.business = "business", t.enterprise = "enterprise", t))(p || {}), v = /* @__PURE__ */ ((t) => (t.toastAdd = "studio:toastAdd", t.toastRemove = "studio:toastRemove", t.dialogOpen = "studio:dialogOpen", t.dialogClose = "studio:dialogClose", t.dialogExportCode = "studio:dialogExportCode", t.dialogImportCode = "studio:dialogImportCode", t.sidebarLeftSet = "studio:sidebarLeft:set", t.sidebarLeftGet = "studio:sidebarLeft:get", t.sidebarLeftToggle = "studio:sidebarLeft:toggle", t.sidebarRightSet = "studio:sidebarRight:set", t.sidebarRightGet = "studio:sidebarRight:get", t.sidebarRightToggle = "studio:sidebarRight:toggle", t.sidebarTopSet = "studio:sidebarTop:set", t.sidebarTopGet = "studio:sidebarTop:get", t.sidebarTopToggle = "studio:sidebarTop:toggle", t.sidebarBottomSet = "studio:sidebarBottom:set", t.sidebarBottomGet = "studio:sidebarBottom:get", t.sidebarBottomToggle = "studio:sidebarBottom:toggle", t.symbolAdd = "studio:symbolAdd", t.symbolDetach = "studio:symbolDetach", t.symbolOverride = "studio:symbolOverride", t.symbolPropagateStyles = "studio:propagateStyles", t.getPagesConfig = "studio:getPagesConfig", t.setPagesConfig = "studio:setPagesConfig", t.getPageSettings = "studio:getPageSettings", t.setPageSettings = "studio:setPageSettings", t.clearPage = "studio:clearPage", t.projectFiles = "studio:projectFiles", t.validateCode = "studio:validateCode", t.canvasReload = "studio:canvasReload", t.getBlocksPanel = "studio:getBlocksPanel", t.setBlocksPanel = "studio:setBlocksPanel", t.getStateContextMenu = "studio:getStateContextMenu", t.setStateContextMenu = "studio:setStateContextMenu", t.contextMenuComponent = "studio:contextMenuComponent", t.layoutAdd = "studio:layoutAdd", t.layoutRemove = "studio:layoutRemove", t.layoutToggle = "studio:layoutToggle", t.layoutUpdate = "studio:layoutUpdate", t.layoutGet = "studio:layoutGet", t.layoutConfigGet = "studio:layoutConfigGet", t.layoutConfigSet = "studio:layoutConfigSet", t.layoutComponentAdd = "studio:layoutComponentAdd", t.layoutComponentGet = "studio:layoutComponentGet", t.layoutComponentRemove = "studio:layoutComponentRemove", t.layoutComponentRender = "studio:layoutComponentRender", t.getStateTheme = "studio:getStateTheme", t.setStateTheme = "studio:setStateTheme", t.assetProviderGet = "studio:assetProviderGet", t.assetProviderAdd = "studio:assetProviderAdd", t.assetProviderRemove = "studio:assetProviderRemove", t.fontGet = "studio:fontGet", t.fontAdd = "studio:fontAdd", t.fontRemove = "studio:fontRemove", t.fontManagerOpen = "studio:fontManagerOpen", t.menuFontLoad = "studio:menuFontLoad", t.toggleStateDataSource = "studio:toggleStateDataSource", t.getStateDataSource = "studio:getStateDataSource", t.dataSourceSetGlobalData = "studio:dataSourceSetGlobalData", t.dataSourceSetImporter = "studio:dataSourceSetImporter", t.dataSourceSetExporter = "studio:dataSourceSetExporter", t.setDragAbsolute = "studio:setDragAbsolute", t))(v || {});
2
+ const D = "app.grapesjs.com", G = "app-stage.grapesjs.com", R = "app2.grapesjs.com", $ = "app-stage2.grapesjs.com", w = [
3
3
  D,
4
- I,
4
+ R,
5
5
  G,
6
6
  $,
7
7
  "localhost",
@@ -69,8 +69,8 @@ async function _({
69
69
  if (!(f || n.license) || d)
70
70
  u(d || "Invalid license");
71
71
  else if (b) {
72
- const O = F[e], R = F[b];
73
- O > R && u({ pluginRequiredPlan: e, licensePlan: b });
72
+ const O = F[e], I = F[b];
73
+ O > I && u({ pluginRequiredPlan: e, licensePlan: b });
74
74
  }
75
75
  };
76
76
  t.on(E, (n) => {
@@ -184,7 +184,7 @@ const q = (t) => {
184
184
  a && (Array.isArray(a) ? e.push(...a.map((o) => [s, o.toString()])) : (a = a.toString(), e.push([s, a])));
185
185
  }
186
186
  return new URLSearchParams(e);
187
- }, S = (t) => {
187
+ }, J = (t) => {
188
188
  const { apiKey: e, searchParams: s } = t, a = (o = {}) => {
189
189
  const r = "https://www.googleapis.com/webfonts/v1/webfonts", i = q(o);
190
190
  return `${r}?${i}`;
@@ -253,22 +253,22 @@ const q = (t) => {
253
253
  };
254
254
  }
255
255
  };
256
- }, J = {
256
+ }, Q = {
257
257
  googleFontsAssetProvider: {
258
258
  searchBtn: "Search on Google Fonts",
259
259
  modalTitle: "Select Font",
260
260
  providerLabel: "Google Fonts"
261
261
  }
262
- }, Q = "googleFontsAssetProvider", Z = p.startup, X = function(t, e) {
263
- const { i18n: s = {} } = e, a = S(e);
262
+ }, S = "googleFontsAssetProvider", Z = p.startup, X = function(t, e) {
263
+ const { i18n: s = {} } = e, a = J(e);
264
264
  t.runCommand(v.assetProviderAdd, { provider: a }), t.I18n.addMessages({
265
- en: J,
265
+ en: Q,
266
266
  ...s
267
267
  }), _({
268
268
  editor: t,
269
269
  licenseKey: e.licenseKey,
270
270
  plan: Z,
271
- pluginName: Q,
271
+ pluginName: S,
272
272
  cleanup: () => {
273
273
  t.runCommand(v.assetProviderRemove, { id: a.id });
274
274
  }