import { GuidValue } from "@omnia/fx-models/internal-do-not-import-from-here/shared/models"; import { IMessageBusTopicSubscription } from "./Messaging"; import { Block, IReactiveLayoutItemsSettingsStore, LoadedLayout } from "./Layout"; interface ILayoutCanvasItemDefinition { id: GuidValue; createInstance: (layout: LoadedLayout) => Promise; /** *This influence the order of the items, be nice, use ordering with gap -100, 0, 100, 200 So other extensions etc can inject between */ weight?: number; } interface ILayoutCanvasItemInstance { definitionId: GuidValue; slots: ILayoutCanvasItemSlot; } interface ILayoutCanvasItemSlot { header: () => JSX.Element; content: () => JSX.Element | JSX.Element[]; } export interface ILayoutCanvasExpansionItemInstance extends ILayoutCanvasItemInstance { slots: ILayoutCanvasItemSlot; } export interface ILayoutCanvasTabInstance extends ILayoutCanvasItemInstance { slots: ILayoutCanvasItemSlot; items: ILayoutCanvasExpansionItemInstance[]; active?: boolean; disabled?: boolean; /** *Will force the components content to render on mounted. This is useful if you have content that will not be rendered in the DOM that you want crawled for SEO. */ eager?: boolean; onClick?: () => void; } export interface ILayoutCanvasSectionSettingsPanelDefinition extends ILayoutCanvasSettingsPanelDefinition { } export interface ILayoutCanvasBlockSettingsPanelDefinition extends ILayoutCanvasSettingsPanelDefinition { } export interface ILayoutCanvasLayoutSettingsPanelDefinition extends ILayoutCanvasSettingsPanelDefinition { } export interface ILayoutCanvasSettingsPanelDefinitionSlots { body: (items: ILayoutCanvasTabInstance[]) => JSX.Element; } export interface ILayoutCanvasExpansionItemDefinitionSlots { beforeContent: () => JSX.Element; afterContent: () => JSX.Element; } export interface ILayoutCanvasTabDefinitionBuilder { /** *@param weight This influence the order of the items, be nice, use ordering with gap -100, 0, 100, 200 So other extensions etc can inject between */ add: (tab: ILayoutCanvasTabDefinition) => ILayoutCanvasTabDefinitionBuilder; remove: (tab: GuidValue) => ILayoutCanvasTabDefinitionBuilder; update: (tabId: GuidValue) => ILayoutCanvasTabItemsDefinitionBuilder; sort: (compareFn: (a: ILayoutCanvasTabDefinition, b: ILayoutCanvasTabDefinition) => number) => ILayoutCanvasTabDefinitionBuilder; done: () => T; } export interface ILayoutCanvasTabItemsDefinitionBuilder { reset: () => ILayoutCanvasTabItemsDefinitionBuilder; add: (item: ILayoutCanvasExpansionItemDefinition) => ILayoutCanvasTabItemsDefinitionBuilder; remove: (itemId: GuidValue) => ILayoutCanvasTabItemsDefinitionBuilder; sort: (compareFn: (a: ILayoutCanvasExpansionItemDefinition, b: ILayoutCanvasExpansionItemDefinition) => number) => ILayoutCanvasTabItemsDefinitionBuilder; done: () => T; update: (itemId: GuidValue) => ILayoutCanvasExpansionItemDefinitionBuilder>; } export interface ILayoutCanvasExpansionItemDefinitionBuilder { slots: (slots: ILayoutCanvasExpansionItemDefinitionSlots) => ILayoutCanvasExpansionItemDefinitionBuilder; done: () => T; } export interface ILayoutCanvasSettingsPanelDefinition { reset: () => ILayoutCanvasSettingsPanelDefinition; slots: (slots: ILayoutCanvasSettingsPanelDefinitionSlots) => ILayoutCanvasSettingsPanelDefinition; tabs: () => ILayoutCanvasTabDefinitionBuilder; result: () => { tabs: ILayoutCanvasTabDefinition[]; slots: Partial; }; done: () => ILayoutCanvasSettingsPanel; } export interface ILayoutCanvasExpansionItemDefinition extends ILayoutCanvasItemDefinition { slots: ILayoutCanvasExpansionItemDefinitionSlots; } export interface ILayoutCanvasTabDefinition extends ILayoutCanvasItemDefinition { items: ILayoutCanvasExpansionItemDefinition[]; createInstance: (layout: LoadedLayout, block?: Block, blockSettingsStore?: IReactiveLayoutItemsSettingsStore) => Promise; hooks: { beforeCreate: IMessageBusTopicSubscription; created: IMessageBusTopicSubscription; }; } export interface ILayoutCanvasDefinitionBuilder { panels: () => ILayoutCanvasSettingsPanel; } export interface ILayoutCanvasSettingsPanel { section: () => ILayoutCanvasSettingsPanelDefinition; layout: () => ILayoutCanvasLayoutSettingsPanelDefinition; block: () => ILayoutCanvasSettingsPanelDefinition; done: () => ILayoutCanvasDefinitionBuilder; } export {};