+interface CardMenuItemInstanceApi extends CommonMenuItemInstanceApi {
+}
+interface CardMenuItemSpec extends Omit<CommonMenuItemSpec, 'text' | 'shortcut'> {
+ type: 'cardmenuitem';
+ label?: string;
+ items: CardItemSpec[];
+ onSetup?: (api: CardMenuItemInstanceApi) => (api: CardMenuItemInstanceApi) => void;
+ onAction?: (api: CardMenuItemInstanceApi) => void;
+}
+interface ChoiceMenuItemSpec extends CommonMenuItemSpec {
+ type?: 'choiceitem';
+ icon?: string;
+}
+interface ChoiceMenuItemInstanceApi extends CommonMenuItemInstanceApi {
+ isActive: () => boolean;
+ setActive: (state: boolean) => void;
+}
+interface ContextMenuItem extends CommonMenuItemSpec {
+ text: string;
+ icon?: string;
+ type?: 'item';
+ onAction: () => void;
+}
+interface ContextSubMenu extends CommonMenuItemSpec {
+ type: 'submenu';
+ text: string;
+ icon?: string;
+ getSubmenuItems: () => string | Array<ContextMenuContents>;
+}
+type ContextMenuContents = string | ContextMenuItem | SeparatorMenuItemSpec | ContextSubMenu;
+interface ContextMenuApi {
+ update: (element: Element) => string | Array<ContextMenuContents>;
+}
+interface FancyActionArgsMap {
+ 'inserttable': {
+ numRows: number;
+ numColumns: number;
+ };
+ 'colorswatch': {
+ value: string;
+ };
+}
+interface BaseFancyMenuItemSpec<T extends keyof FancyActionArgsMap> {
+ type: 'fancymenuitem';
+ fancytype: T;
+ initData?: Record<string, unknown>;
+ onAction?: (data: FancyActionArgsMap[T]) => void;
+}
+interface InsertTableMenuItemSpec extends BaseFancyMenuItemSpec<'inserttable'> {
+ fancytype: 'inserttable';
+ initData?: {};
+}
+interface ColorSwatchMenuItemSpec extends BaseFancyMenuItemSpec<'colorswatch'> {
+ fancytype: 'colorswatch';
+ select?: (value: string) => boolean;
+ initData?: {
+ allowCustomColors?: boolean;
+ colors?: ChoiceMenuItemSpec[];
+ storageKey?: string;
+ };
+}
+type FancyMenuItemSpec = InsertTableMenuItemSpec | ColorSwatchMenuItemSpec;
+interface MenuItemSpec extends CommonMenuItemSpec {
+ type?: 'menuitem';
+ icon?: string;
+ onSetup?: (api: MenuItemInstanceApi) => (api: MenuItemInstanceApi) => void;
+ onAction?: (api: MenuItemInstanceApi) => void;
+}
+interface MenuItemInstanceApi extends CommonMenuItemInstanceApi {
+}
+interface SeparatorMenuItemSpec {
+ type?: 'separator';
+ text?: string;
+}
+interface ToggleMenuItemSpec extends CommonMenuItemSpec {
+ type?: 'togglemenuitem';
+ icon?: string;
+ active?: boolean;
+ onSetup?: (api: ToggleMenuItemInstanceApi) => void;
+ onAction: (api: ToggleMenuItemInstanceApi) => void;
+}
+interface ToggleMenuItemInstanceApi extends CommonMenuItemInstanceApi {
+ isActive: () => boolean;
+ setActive: (state: boolean) => void;
+}
+type NestedMenuItemContents = string | MenuItemSpec | NestedMenuItemSpec | ToggleMenuItemSpec | SeparatorMenuItemSpec | FancyMenuItemSpec;
+interface NestedMenuItemSpec extends CommonMenuItemSpec {
+ type?: 'nestedmenuitem';
+ icon?: string;
+ getSubmenuItems: () => string | Array<NestedMenuItemContents>;
+ onSetup?: (api: NestedMenuItemInstanceApi) => (api: NestedMenuItemInstanceApi) => void;
+}
+interface NestedMenuItemInstanceApi extends CommonMenuItemInstanceApi {
+ setTooltip: (tooltip: string) => void;
+ setIconFill: (id: string, value: string) => void;
+}
+type MenuButtonItemTypes = NestedMenuItemContents;
+type SuccessCallback$1 = (menu: string | MenuButtonItemTypes[]) => void;
+interface MenuButtonFetchContext {
+ pattern: string;
+}
+interface BaseMenuButtonSpec {
+ text?: string;
+ tooltip?: string;
+ icon?: string;
+ search?: boolean | {
+ placeholder?: string;
+ };
+ fetch: (success: SuccessCallback$1, fetchContext: MenuButtonFetchContext, api: BaseMenuButtonInstanceApi) => void;
+ onSetup?: (api: BaseMenuButtonInstanceApi) => (api: BaseMenuButtonInstanceApi) => void;
+}
+interface BaseMenuButtonInstanceApi {
+ isEnabled: () => boolean;
+ setEnabled: (state: boolean) => void;
+ isActive: () => boolean;
+ setActive: (state: boolean) => void;
+ setText: (text: string) => void;
+ setIcon: (icon: string) => void;
+}
+interface ToolbarMenuButtonSpec extends BaseMenuButtonSpec {
+ type?: 'menubutton';
+ onSetup?: (api: ToolbarMenuButtonInstanceApi) => (api: ToolbarMenuButtonInstanceApi) => void;
+}
+interface ToolbarMenuButtonInstanceApi extends BaseMenuButtonInstanceApi {
+}
+type ToolbarSplitButtonItemTypes = ChoiceMenuItemSpec | SeparatorMenuItemSpec;
+type SuccessCallback = (menu: ToolbarSplitButtonItemTypes[]) => void;
+type SelectPredicate = (value: string) => boolean;
+type PresetTypes = 'color' | 'normal' | 'listpreview';
+type ColumnTypes$1 = number | 'auto';
+interface ToolbarSplitButtonSpec {
+ type?: 'splitbutton';
+ tooltip?: string;
+ icon?: string;
+ text?: string;
+ select?: SelectPredicate;
+ presets?: PresetTypes;
+ columns?: ColumnTypes$1;
+ fetch: (success: SuccessCallback) => void;
+ onSetup?: (api: ToolbarSplitButtonInstanceApi) => (api: ToolbarSplitButtonInstanceApi) => void;
+ onAction: (api: ToolbarSplitButtonInstanceApi) => void;
+ onItemAction: (api: ToolbarSplitButtonInstanceApi, value: string) => void;
+}
+interface ToolbarSplitButtonInstanceApi {
+ isEnabled: () => boolean;
+ setEnabled: (state: boolean) => void;
+ setIconFill: (id: string, value: string) => void;
+ isActive: () => boolean;
+ setActive: (state: boolean) => void;
+ setTooltip: (tooltip: string) => void;
+ setText: (text: string) => void;
+ setIcon: (icon: string) => void;
+}
+interface BaseToolbarToggleButtonSpec<I extends BaseToolbarButtonInstanceApi> extends BaseToolbarButtonSpec<I> {
+ active?: boolean;
+}
+interface BaseToolbarToggleButtonInstanceApi extends BaseToolbarButtonInstanceApi {
+ isActive: () => boolean;
+ setActive: (state: boolean) => void;
+}
+interface ToolbarToggleButtonSpec extends BaseToolbarToggleButtonSpec<ToolbarToggleButtonInstanceApi> {
+ type?: 'togglebutton';
+ onAction: (api: ToolbarToggleButtonInstanceApi) => void;
+}
+interface ToolbarToggleButtonInstanceApi extends BaseToolbarToggleButtonInstanceApi {
+}
+type Id = string;
+interface TreeSpec {
+ type: 'tree';
+ items: TreeItemSpec[];
+ onLeafAction?: (id: Id) => void;
+ defaultExpandedIds?: Id[];
+ onToggleExpand?: (expandedIds: Id[], { expanded, node }: {
+ expanded: boolean;
+ node: Id;
+ }) => void;
+ defaultSelectedId?: Id;
+}
+interface BaseTreeItemSpec {
+ title: string;
+ id: Id;
+ menu?: ToolbarMenuButtonSpec;
+}
+interface DirectorySpec extends BaseTreeItemSpec {
+ type: 'directory';
+ children: TreeItemSpec[];
+}
+interface LeafSpec extends BaseTreeItemSpec {
+ type: 'leaf';
+}
+type TreeItemSpec = DirectorySpec | LeafSpec;
+interface UrlInputSpec extends FormComponentWithLabelSpec {
+ type: 'urlinput';
+ filetype?: 'image' | 'media' | 'file';
+ enabled?: boolean;
+ picker_text?: string;
+}
+interface UrlInputData {
+ value: string;
+ meta: {
+ text?: string;
+ };
+}
+type BodyComponentSpec = BarSpec | ButtonSpec | CheckboxSpec | TextAreaSpec | InputSpec | ListBoxSpec | SelectBoxSpec | SizeInputSpec | SliderSpec | IframeSpec | HtmlPanelSpec | UrlInputSpec | DropZoneSpec | ColorInputSpec | GridSpec | ColorPickerSpec | ImagePreviewSpec | AlertBannerSpec | CollectionSpec | LabelSpec | TableSpec | TreeSpec | PanelSpec | CustomEditorSpec;
+interface BarSpec {
+ type: 'bar';
+ items: BodyComponentSpec[];
+}