diff --git a/src/designer/elsa-workflows-designer/src/components.d.ts b/src/designer/elsa-workflows-designer/src/components.d.ts index ac0e1660f..9fd21f1d5 100644 --- a/src/designer/elsa-workflows-designer/src/components.d.ts +++ b/src/designer/elsa-workflows-designer/src/components.d.ts @@ -160,6 +160,10 @@ export namespace Components { "activityDescriptors": Array; "graph": Graph; } + interface ElsaTooltip { + "tooltipContent": any; + "tooltipPosition": string; + } interface ElsaWorkflowDefinitionBrowser { "hide": () => Promise; "show": () => Promise; @@ -342,6 +346,12 @@ declare global { prototype: HTMLElsaToolboxActivitiesElement; new (): HTMLElsaToolboxActivitiesElement; }; + interface HTMLElsaTooltipElement extends Components.ElsaTooltip, HTMLStencilElement { + } + var HTMLElsaTooltipElement: { + prototype: HTMLElsaTooltipElement; + new (): HTMLElsaTooltipElement; + }; interface HTMLElsaWorkflowDefinitionBrowserElement extends Components.ElsaWorkflowDefinitionBrowser, HTMLStencilElement { } var HTMLElsaWorkflowDefinitionBrowserElement: { @@ -410,6 +420,7 @@ declare global { "elsa-switch-editor": HTMLElsaSwitchEditorElement; "elsa-toolbox": HTMLElsaToolboxElement; "elsa-toolbox-activities": HTMLElsaToolboxActivitiesElement; + "elsa-tooltip": HTMLElsaTooltipElement; "elsa-workflow-definition-browser": HTMLElsaWorkflowDefinitionBrowserElement; "elsa-workflow-editor": HTMLElsaWorkflowEditorElement; "elsa-workflow-instance-browser": HTMLElsaWorkflowInstanceBrowserElement; @@ -558,6 +569,10 @@ declare namespace LocalJSX { "activityDescriptors"?: Array; "graph"?: Graph; } + interface ElsaTooltip { + "tooltipContent"?: any; + "tooltipPosition"?: string; + } interface ElsaWorkflowDefinitionBrowser { "onWorkflowDefinitionSelected"?: (event: CustomEvent) => void; } @@ -611,6 +626,7 @@ declare namespace LocalJSX { "elsa-switch-editor": ElsaSwitchEditor; "elsa-toolbox": ElsaToolbox; "elsa-toolbox-activities": ElsaToolboxActivities; + "elsa-tooltip": ElsaTooltip; "elsa-workflow-definition-browser": ElsaWorkflowDefinitionBrowser; "elsa-workflow-editor": ElsaWorkflowEditor; "elsa-workflow-instance-browser": ElsaWorkflowInstanceBrowser; @@ -649,6 +665,7 @@ declare module "@stencil/core" { "elsa-switch-editor": LocalJSX.ElsaSwitchEditor & JSXBase.HTMLAttributes; "elsa-toolbox": LocalJSX.ElsaToolbox & JSXBase.HTMLAttributes; "elsa-toolbox-activities": LocalJSX.ElsaToolboxActivities & JSXBase.HTMLAttributes; + "elsa-tooltip": LocalJSX.ElsaTooltip & JSXBase.HTMLAttributes; "elsa-workflow-definition-browser": LocalJSX.ElsaWorkflowDefinitionBrowser & JSXBase.HTMLAttributes; "elsa-workflow-editor": LocalJSX.ElsaWorkflowEditor & JSXBase.HTMLAttributes; "elsa-workflow-instance-browser": LocalJSX.ElsaWorkflowInstanceBrowser & JSXBase.HTMLAttributes; diff --git a/src/designer/elsa-workflows-designer/src/components/designer/toolbox/toolbox-activities.tsx b/src/designer/elsa-workflows-designer/src/components/designer/toolbox/toolbox-activities.tsx index 8f428e8e5..723714021 100644 --- a/src/designer/elsa-workflows-designer/src/components/designer/toolbox/toolbox-activities.tsx +++ b/src/designer/elsa-workflows-designer/src/components/designer/toolbox/toolbox-activities.tsx @@ -111,8 +111,10 @@ export class ToolboxActivities { const activityHtml = renderedActivities.get(activityDescriptor.activityType); return (
-
ToolboxActivities.onActivityStartDrag(e, activityDescriptor)}> -
+
ToolboxActivities.onActivityStartDrag(e, activityDescriptor)}> + {activityDescriptor.description}

}> +
+
); diff --git a/src/designer/elsa-workflows-designer/src/components/shared/tooltip/tooltip.scss b/src/designer/elsa-workflows-designer/src/components/shared/tooltip/tooltip.scss new file mode 100644 index 000000000..da016b46b --- /dev/null +++ b/src/designer/elsa-workflows-designer/src/components/shared/tooltip/tooltip.scss @@ -0,0 +1,10 @@ +.tooltip-container { + .tooltip { + opacity: 0; + } + &:hover { + .tooltip { + opacity: 1; + } + } +} \ No newline at end of file diff --git a/src/designer/elsa-workflows-designer/src/components/shared/tooltip/tooltip.tsx b/src/designer/elsa-workflows-designer/src/components/shared/tooltip/tooltip.tsx new file mode 100644 index 000000000..6553c47ec --- /dev/null +++ b/src/designer/elsa-workflows-designer/src/components/shared/tooltip/tooltip.tsx @@ -0,0 +1,60 @@ +import { Component, h, Prop } from '@stencil/core'; + +@Component({ + tag: 'elsa-tooltip', + styleUrl: 'tooltip.scss', +}) +export class Tooltip { + @Prop() tooltipContent: any; + @Prop() tooltipPosition?: string = 'right'; + + getTooltipPositionClasses(tooltipPosition: string) { + const tooltipPositionClasses = { + right: 'top-1/2 -translate-y-1/2 left-full ml-4', + left: 'top-1/2 -translate-y-1/2 right-full mr-4', + top: 'left-1/2 -translate-x-1/2 bottom-full mb-4', + bottom: 'left-1/2 -translate-x-1/2 top-full mt-4', + }; + + const triangleClasses = { + right: 'left-0 -ml-2 bottom-0 top-0 h-full', + left: 'right-0 -mr-2 bottom-0 top-0 h-full rotate-180', + top: 'bottom-0 left-1/2 -mt-1 top-full -translate-x-1/2 -rotate-90', + bottom: 'top-0 left-1/2 -mb-1 bottom-full -translate-x-1/2 h-full rotate-90', + }; + + return { + tooltipClass: tooltipPositionClasses[tooltipPosition], + triangleClass: triangleClasses[tooltipPosition], + }; + } + render() { + const { tooltipClass, triangleClass } = this.getTooltipPositionClasses(this.tooltipPosition); + + return ( +
+ + {this.tooltipContent && ( + + )} +
+ ); + } +} diff --git a/src/designer/elsa-workflows-designer/src/models/api.ts b/src/designer/elsa-workflows-designer/src/models/api.ts index abd2ecac0..9aeb3137f 100644 --- a/src/designer/elsa-workflows-designer/src/models/api.ts +++ b/src/designer/elsa-workflows-designer/src/models/api.ts @@ -9,6 +9,7 @@ export interface ActivityDescriptor { activityType: string; displayName: string; category: string; + description: string; inputProperties: Array kind: ActivityKind; inPorts: Array;