import type { Editor, ObjectAny } from 'grapesjs'; import type { CSSProperties } from 'react'; import { StudioLayoutButtonConfigProps } from './StudioButton'; import { StudioLayoutButtonGroupFieldConfigProps } from './StudioButtonGroupField'; import { StudioLayoutButtonMenuConfigProps } from './StudioButtonMenu'; import { StudioLayoutCanvasConfigProps } from './StudioCanvas'; import { StudioLayoutCanvasSidebarTopConfigProps } from './StudioCanvasSidebarTop'; import { StudioLayoutCodeFieldConfigProps } from './StudioCodeField'; import { StudioLayoutColorFieldConfigProps } from './StudioColorField'; import { StudioLayoutColorPickerConfigProps } from './StudioColorPicker'; import { StudioLayoutColumnConfigProps } from './StudioColumn'; import { StudioCustomLayoutProps, StudioLayoutCustomConfigProps } from './StudioCustomLayout'; import { StudioLayoutDataCollectionPickerConfigProps } from './StudioDataCollectionPicker'; import { StudioLayoutDataConditionPickerConfigProps } from './StudioDataConditionPicker'; import { StudioLayoutDataPathFieldConfigProps } from './StudioDataPathField'; import { StudioLayoutDataValuePickerConfigProps } from './StudioDataValuePicker'; import { StudioLayoutDataVariablePickerConfigProps } from './StudioDataVariablePicker'; import { StudioLayoutDevicesConfigProps } from './StudioDevices'; import { StudioLayoutIconConfigProps } from './StudioIcon'; import { StudioLayoutInputFieldConfigProps } from './StudioInputField'; import { StudioLayoutMenuListConfigProps } from './StudioMenuList'; import { StudioLayoutPanelAssetsConfigProps } from './StudioPanelAssets'; import { StudioLayoutPanelEditCodeConfigProps } from './StudioPanelEditCode'; import { StudioLayoutPanelBlocksConfigProps } from './StudioPanelBlocks'; import { StudioLayoutPanelGlobalStylesConfigProps } from './StudioPanelGlobalStyles'; import { StudioLayoutPanelLayersConfigProps } from './StudioPanelLayers'; import { StudioLayoutPanelPageSettingsConfigProps } from './StudioPanelPageSettings'; import { StudioLayoutPanelPagesConfigProps } from './StudioPanelPages'; import { StudioLayoutPanelPagesLayersConfigProps } from './StudioPanelPagesLayers'; import { StudioLayoutPanelPropertiesConfigProps } from './StudioPanelProperties'; import { StudioLayoutPanelSelectorsConfigProps } from './StudioPanelSelectors'; import { StudioLayoutPanelSidebarTabsConfigProps } from './StudioPanelSidebarTabs'; import { StudioLayoutPanelStylesConfigProps } from './StudioPanelStyles'; import { StudioLayoutPanelTemplatesConfigProps } from './StudioPanelTemplates'; import { StudioLayoutRowConfigProps } from './StudioRow'; import { StudioLayoutSelectFieldConfigProps } from './StudioSelectField'; import { StudioLayoutSelectFontFieldConfigProps } from './StudioSelectFontField'; import { StudioLayoutSidebarBottomConfigProps } from './StudioSidebarBottom'; import { StudioLayoutSidebarLeftConfigProps } from './StudioSidebarLeft'; import { StudioLayoutSidebarRightConfigProps } from './StudioSidebarRight'; import { StudioLayoutSidebarTopConfigProps } from './StudioSidebarTop'; import { StudioLayoutTabsConfigProps } from './StudioTabs'; import { StudioLayoutTextConfigProps } from './StudioText'; import { StudioLayoutVirtualListConfigProps } from './StudioVirtualList'; import { StudioLayoutWithEditorConfigProps } from './StudioWithEditor'; import { StudioLayoutPanelPropsConfig } from './types/StudioPanelSchema'; import { StudioLayouts } from './types/index'; export interface WithEditorState { editor: Editor; state: T; setState: (props: Partial) => void; } export interface WithEditorProps { editor: Editor; } export interface WithEditorEvents { editorEvents?: Record) => void>; } export interface StudioBaseReactProps { style?: CSSProperties; children?: React.ReactNode; htmlAttrs?: React.HTMLProps; } export type CommonStudioLayoutProps = Omit & StudioBaseReactProps; export type CommonStudioLayoutFieldStateKeys = 'className' | 'style' | 'label' | 'name' | 'value' | 'size' | 'disabled' | 'required' | 'readOnly'; export type CommonStudioLayoutFieldProps = Omit, 'label' | 'onChange' | 'editorEvents' | 'children'> & { label?: React.ReactNode; onChange?(props: CH): void; }; export type CommonStudioLayoutPanelProps = CommonStudioLayoutProps & StudioLayoutPanelPropsConfig, K>; export type CommonStudioLayoutConfigProps = Omit & Pick; export type CustomLayoutComponent = Required['component']; export interface StudioLayoutWithChildrenConfigProps { children?: StudioLayoutChildrenConfigProps; } /** * Registry interface for custom layout components. * Consumers can extend this interface using module augmentation to add their own component types. * * @example * // In your project's type declarations (e.g., global.d.ts or a .d.ts file) * * * declare module '@grapesjs/studio-sdk' { * interface CustomLayoutComponentsRegistry { * 'my-component': { * type: 'my-component'; * className?: string; * myCustomProp?: string; * }; * } * } * * // Now you can use it in your layout config without TS errors: * const layout = { * type: 'row', * children: [ * { type: 'my-component', myCustomProp: 'value' } * ] * }; */ export interface CustomLayoutComponentsRegistry { } export type StudioLayoutChildrenConfigProps = StudioLayoutComponentsConfig | (StudioLayoutComponentsConfig | undefined | null | false)[]; export type StudioLayoutComponentsConfigProps = StudioLayoutCustomConfigProps | StudioLayoutIconConfigProps | StudioLayoutRowConfigProps | StudioLayoutColumnConfigProps | StudioLayoutTextConfigProps | StudioLayoutButtonConfigProps | StudioLayoutButtonMenuConfigProps | StudioLayoutButtonGroupFieldConfigProps | StudioLayoutColorFieldConfigProps | StudioLayoutColorPickerConfigProps | StudioLayoutMenuListConfigProps | StudioLayoutInputFieldConfigProps | StudioLayoutCodeFieldConfigProps | StudioLayoutSelectFieldConfigProps | StudioLayoutSelectFontFieldConfigProps | StudioLayoutTabsConfigProps | StudioLayoutCanvasConfigProps | StudioLayoutDevicesConfigProps | StudioLayoutPanelLayersConfigProps | StudioLayoutPanelPagesConfigProps | StudioLayoutPanelSelectorsConfigProps | StudioLayoutPanelStylesConfigProps | StudioLayoutPanelPropertiesConfigProps | StudioLayoutPanelSidebarTabsConfigProps | StudioLayoutPanelPagesLayersConfigProps | StudioLayoutSidebarTopConfigProps | StudioLayoutSidebarBottomConfigProps | StudioLayoutCanvasSidebarTopConfigProps | StudioLayoutPanelBlocksConfigProps | StudioLayoutPanelAssetsConfigProps | StudioLayoutPanelEditCodeConfigProps | StudioLayoutPanelTemplatesConfigProps | StudioLayoutPanelPageSettingsConfigProps | StudioLayoutPanelGlobalStylesConfigProps | StudioLayoutSidebarLeftConfigProps | StudioLayoutSidebarRightConfigProps | StudioLayoutVirtualListConfigProps | StudioLayoutWithEditorConfigProps | StudioLayoutDataPathFieldConfigProps | StudioLayoutDataVariablePickerConfigProps | StudioLayoutDataConditionPickerConfigProps | StudioLayoutDataCollectionPickerConfigProps | StudioLayoutDataValuePickerConfigProps | CustomLayoutComponentsRegistry[keyof CustomLayoutComponentsRegistry]; export type StudioLayoutComponentsConfig = string | StudioLayoutComponentsConfigProps;