@pega/cosmos-react-build 9.0.0-build.9.8 → 9.0.0
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.
- package/lib/components/AppShell/AppShell.styles.d.ts +13 -11
- package/lib/components/AppShell/AppShell.styles.d.ts.map +1 -1
- package/lib/components/AppShell/Header/AppHeader.styles.d.ts +11 -7
- package/lib/components/AppShell/Header/AppHeader.styles.d.ts.map +1 -1
- package/lib/components/AppShell/Header/BranchButton.d.ts +6 -4
- package/lib/components/AppShell/Header/BranchButton.d.ts.map +1 -1
- package/lib/components/AppShell/Header/BranchButton.js.map +1 -1
- package/lib/components/AuthoringPanel/AuthoringPanel.styles.d.ts +753 -15
- package/lib/components/AuthoringPanel/AuthoringPanel.styles.d.ts.map +1 -1
- package/lib/components/AuthoringPanel/AuthoringPanel.styles.js +5 -4
- package/lib/components/AuthoringPanel/AuthoringPanel.styles.js.map +1 -1
- package/lib/components/Automation/Automation.js.map +1 -1
- package/lib/components/Automation/Automation.styles.d.ts +33 -10
- package/lib/components/Automation/Automation.styles.d.ts.map +1 -1
- package/lib/components/Automation/Automation.styles.js +1 -1
- package/lib/components/Automation/Automation.styles.js.map +1 -1
- package/lib/components/BackgroundPicker/BackgroundPicker.styles.d.ts +375 -11
- package/lib/components/BackgroundPicker/BackgroundPicker.styles.d.ts.map +1 -1
- package/lib/components/BackgroundPicker/BackgroundPicker.styles.js.map +1 -1
- package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts +8 -4
- package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts.map +1 -1
- package/lib/components/DynamicContentEditor/DynamicContentEditor.js +88 -68
- package/lib/components/DynamicContentEditor/DynamicContentEditor.js.map +1 -1
- package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts +2 -0
- package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts.map +1 -0
- package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.js +9 -0
- package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.js.map +1 -0
- package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts +12 -3
- package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts.map +1 -1
- package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js +2 -1
- package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js.map +1 -1
- package/lib/components/DynamicInput/DynamicInput.d.ts.map +1 -1
- package/lib/components/DynamicInput/DynamicInput.js +11 -5
- package/lib/components/DynamicInput/DynamicInput.js.map +1 -1
- package/lib/components/DynamicInput/DynamicInput.styles.d.ts +187 -2
- package/lib/components/DynamicInput/DynamicInput.styles.d.ts.map +1 -1
- package/lib/components/DynamicInput/DynamicInput.styles.js +29 -2
- package/lib/components/DynamicInput/DynamicInput.styles.js.map +1 -1
- package/lib/components/DynamicInput/DynamicInput.types.d.ts +4 -2
- package/lib/components/DynamicInput/DynamicInput.types.d.ts.map +1 -1
- package/lib/components/DynamicInput/DynamicInput.types.js.map +1 -1
- package/lib/components/DynamicInput/SourceButton.d.ts +1 -1
- package/lib/components/DynamicInput/SourceButton.d.ts.map +1 -1
- package/lib/components/DynamicInput/SourceButton.js.map +1 -1
- package/lib/components/DynamicInput/utils.d.ts.map +1 -1
- package/lib/components/DynamicInput/utils.js +5 -1
- package/lib/components/DynamicInput/utils.js.map +1 -1
- package/lib/components/EmptyRuleTemplate/EmptyRuleTemplate.d.ts +5 -5
- package/lib/components/EmptyRuleTemplate/EmptyRuleTemplate.d.ts.map +1 -1
- package/lib/components/EmptyRuleTemplate/EmptyRuleTemplate.js.map +1 -1
- package/lib/components/Expression/Expression.styles.d.ts +376 -8
- package/lib/components/Expression/Expression.styles.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js +138 -41
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.d.ts +190 -8
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js +53 -32
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts +2 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.js.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.d.ts +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.js +7 -7
- package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.js.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionBuilder.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionBuilder.js +7 -6
- package/lib/components/ExpressionBuilder/ExpressionBuilder.js.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.d.ts +211 -22
- package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.js +6 -0
- package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.js.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionBuilder.types.d.ts +5 -3
- package/lib/components/ExpressionBuilder/ExpressionBuilder.types.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionBuilder.types.js.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionItem.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionItem.js +17 -13
- package/lib/components/ExpressionBuilder/ExpressionItem.js.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionList.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/ExpressionList.js +18 -13
- package/lib/components/ExpressionBuilder/ExpressionList.js.map +1 -1
- package/lib/components/ExpressionBuilder/index.d.ts +1 -1
- package/lib/components/ExpressionBuilder/index.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/index.js.map +1 -1
- package/lib/components/FieldReference/FieldReference.styles.d.ts +20 -11
- package/lib/components/FieldReference/FieldReference.styles.d.ts.map +1 -1
- package/lib/components/FieldReference/FieldReference.styles.js +10 -1
- package/lib/components/FieldReference/FieldReference.styles.js.map +1 -1
- package/lib/components/FieldReference/FieldReferenceDisplay.d.ts.map +1 -1
- package/lib/components/FieldReference/FieldReferenceDisplay.js +3 -3
- package/lib/components/FieldReference/FieldReferenceDisplay.js.map +1 -1
- package/lib/components/FieldReference/FieldReferenceInput.d.ts.map +1 -1
- package/lib/components/FieldReference/FieldReferenceInput.js +13 -5
- package/lib/components/FieldReference/FieldReferenceInput.js.map +1 -1
- package/lib/components/FlowModeller/AddNode.d.ts +22 -0
- package/lib/components/FlowModeller/AddNode.d.ts.map +1 -0
- package/lib/components/FlowModeller/AddNode.js +95 -0
- package/lib/components/FlowModeller/AddNode.js.map +1 -0
- package/lib/components/FlowModeller/Connector.d.ts +12 -0
- package/lib/components/FlowModeller/Connector.d.ts.map +1 -0
- package/lib/components/FlowModeller/Connector.js +84 -0
- package/lib/components/FlowModeller/Connector.js.map +1 -0
- package/lib/components/FlowModeller/DeleteDialog.d.ts +39 -0
- package/lib/components/FlowModeller/DeleteDialog.d.ts.map +1 -0
- package/lib/components/FlowModeller/DeleteDialog.js +158 -0
- package/lib/components/FlowModeller/DeleteDialog.js.map +1 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.d.ts +4 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.d.ts.map +1 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.js +37 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.js.map +1 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.d.ts +8 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.d.ts.map +1 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.js +80 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.js.map +1 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.d.ts +36 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.d.ts.map +1 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.js +2 -0
- package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.js.map +1 -0
- package/lib/components/FlowModeller/FlowModeller.d.ts +5 -0
- package/lib/components/FlowModeller/FlowModeller.d.ts.map +1 -0
- package/lib/components/FlowModeller/FlowModeller.js +359 -0
- package/lib/components/FlowModeller/FlowModeller.js.map +1 -0
- package/lib/components/FlowModeller/FlowModeller.test-ids.d.ts +3 -0
- package/lib/components/FlowModeller/FlowModeller.test-ids.d.ts.map +1 -0
- package/lib/components/FlowModeller/FlowModeller.test-ids.js +5 -0
- package/lib/components/FlowModeller/FlowModeller.test-ids.js.map +1 -0
- package/lib/components/FlowModeller/FlowModeller.types.d.ts +84 -0
- package/lib/components/FlowModeller/FlowModeller.types.d.ts.map +1 -0
- package/lib/components/FlowModeller/FlowModeller.types.js +2 -0
- package/lib/components/FlowModeller/FlowModeller.types.js.map +1 -0
- package/lib/components/FlowModeller/FlowModellerContext.d.ts +10 -0
- package/lib/components/FlowModeller/FlowModellerContext.d.ts.map +1 -0
- package/lib/components/FlowModeller/FlowModellerContext.js +8 -0
- package/lib/components/FlowModeller/FlowModellerContext.js.map +1 -0
- package/lib/components/FlowModeller/Node/Node.types.d.ts +93 -0
- package/lib/components/FlowModeller/Node/Node.types.d.ts.map +1 -0
- package/lib/components/FlowModeller/Node/Node.types.js +27 -0
- package/lib/components/FlowModeller/Node/Node.types.js.map +1 -0
- package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts +212 -0
- package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts.map +1 -0
- package/lib/components/FlowModeller/Node/NodeTemplate.styles.js +144 -0
- package/lib/components/FlowModeller/Node/NodeTemplate.styles.js.map +1 -0
- package/lib/components/FlowModeller/Node/NodeTemplates.d.ts +5 -0
- package/lib/components/FlowModeller/Node/NodeTemplates.d.ts.map +1 -0
- package/lib/components/FlowModeller/Node/NodeTemplates.js +130 -0
- package/lib/components/FlowModeller/Node/NodeTemplates.js.map +1 -0
- package/lib/components/FlowModeller/Node.d.ts +10 -0
- package/lib/components/FlowModeller/Node.d.ts.map +1 -0
- package/lib/components/FlowModeller/Node.js +43 -0
- package/lib/components/FlowModeller/Node.js.map +1 -0
- package/lib/components/FlowModeller/Renderer/Renderer.d.ts +4 -0
- package/lib/components/FlowModeller/Renderer/Renderer.d.ts.map +1 -0
- package/lib/components/FlowModeller/Renderer/Renderer.js +198 -0
- package/lib/components/FlowModeller/Renderer/Renderer.js.map +1 -0
- package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts +20 -0
- package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts.map +1 -0
- package/lib/components/FlowModeller/Renderer/Renderer.types.js +2 -0
- package/lib/components/FlowModeller/Renderer/Renderer.types.js.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts +63 -0
- package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/Graph.js +291 -0
- package/lib/components/FlowModeller/Renderer/Utils/Graph.js.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts +37 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js +114 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts +29 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.js +191 -0
- package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.js.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.d.ts +38 -0
- package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.d.ts.map +1 -0
- package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.js +363 -0
- package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.js.map +1 -0
- package/lib/components/FlowModeller/Utils/addNodeUtils.d.ts +18 -0
- package/lib/components/FlowModeller/Utils/addNodeUtils.d.ts.map +1 -0
- package/lib/components/FlowModeller/Utils/addNodeUtils.js +148 -0
- package/lib/components/FlowModeller/Utils/addNodeUtils.js.map +1 -0
- package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts +33 -0
- package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts.map +1 -0
- package/lib/components/FlowModeller/Utils/deleteNodeUtils.js +89 -0
- package/lib/components/FlowModeller/Utils/deleteNodeUtils.js.map +1 -0
- package/lib/components/FlowModeller/constants.d.ts +10 -0
- package/lib/components/FlowModeller/constants.d.ts.map +1 -0
- package/lib/components/FlowModeller/constants.js +9 -0
- package/lib/components/FlowModeller/constants.js.map +1 -0
- package/lib/components/FlowModeller/helper.d.ts +39 -0
- package/lib/components/FlowModeller/helper.d.ts.map +1 -0
- package/lib/components/FlowModeller/helper.js +230 -0
- package/lib/components/FlowModeller/helper.js.map +1 -0
- package/lib/components/FlowModeller/index.d.ts +18 -0
- package/lib/components/FlowModeller/index.d.ts.map +1 -0
- package/lib/components/FlowModeller/index.js +11 -0
- package/lib/components/FlowModeller/index.js.map +1 -0
- package/lib/components/IconTile/IconTile.d.ts +2 -2
- package/lib/components/IconTile/IconTile.d.ts.map +1 -1
- package/lib/components/ItemLibrary/ItemLibrary.d.ts +2 -2
- package/lib/components/ItemLibrary/ItemLibrary.d.ts.map +1 -1
- package/lib/components/ItemLibrary/ItemLibrary.js +5 -1
- package/lib/components/ItemLibrary/ItemLibrary.js.map +1 -1
- package/lib/components/LifeCycle/Category.d.ts +6 -6
- package/lib/components/LifeCycle/Category.d.ts.map +1 -1
- package/lib/components/LifeCycle/LifeCycle.d.ts +184 -2
- package/lib/components/LifeCycle/LifeCycle.d.ts.map +1 -1
- package/lib/components/LifeCycle/LifeCycle.types.d.ts +70 -0
- package/lib/components/LifeCycle/LifeCycle.types.d.ts.map +1 -1
- package/lib/components/LifeCycle/Stage.d.ts +6 -6
- package/lib/components/LifeCycle/Stage.d.ts.map +1 -1
- package/lib/components/LifeCycle/Step.d.ts +8 -8
- package/lib/components/LifeCycle/Step.d.ts.map +1 -1
- package/lib/components/LifeCycle/Step.js +1 -1
- package/lib/components/LifeCycle/Step.js.map +1 -1
- package/lib/components/LifeCycle/Task.d.ts +14 -10
- package/lib/components/LifeCycle/Task.d.ts.map +1 -1
- package/lib/components/LifeCycle/TaskGroup.d.ts +3 -1
- package/lib/components/LifeCycle/TaskGroup.d.ts.map +1 -1
- package/lib/components/MobileBuildSummary/MobileBuildSummary.d.ts +2 -2
- package/lib/components/MobileBuildSummary/MobileBuildSummary.d.ts.map +1 -1
- package/lib/components/ObjectSelect/InputTree/InputTree.styles.d.ts +10 -8
- package/lib/components/ObjectSelect/InputTree/InputTree.styles.d.ts.map +1 -1
- package/lib/components/ObjectSelect/InputTree/InputTree.styles.js +1 -1
- package/lib/components/ObjectSelect/InputTree/InputTree.styles.js.map +1 -1
- package/lib/components/PageBanner/PageBanner.d.ts +3 -3
- package/lib/components/PageBanner/PageBanner.d.ts.map +1 -1
- package/lib/components/PageBanner/PageBanner.js +6 -2
- package/lib/components/PageBanner/PageBanner.js.map +1 -1
- package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.d.ts +4 -2
- package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.d.ts.map +1 -1
- package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.js +23 -12
- package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.js.map +1 -1
- package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageTemplate.d.ts.map +1 -1
- package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageTemplate.js +14 -5
- package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageTemplate.js.map +1 -1
- package/lib/components/PageTemplates/GalleryPage.d.ts +2 -2
- package/lib/components/PageTemplates/GalleryPage.d.ts.map +1 -1
- package/lib/components/PageTemplates/HeaderActionButtons.d.ts.map +1 -1
- package/lib/components/PageTemplates/HeaderActionButtons.js +11 -3
- package/lib/components/PageTemplates/HeaderActionButtons.js.map +1 -1
- package/lib/components/PageTemplates/PageTemplate.styles.d.ts +375 -8
- package/lib/components/PageTemplates/PageTemplate.styles.d.ts.map +1 -1
- package/lib/components/PageTemplates/PageTemplate.styles.js +18 -10
- package/lib/components/PageTemplates/PageTemplate.styles.js.map +1 -1
- package/lib/components/PageTemplates/PageTemplate.types.d.ts +18 -13
- package/lib/components/PageTemplates/PageTemplate.types.d.ts.map +1 -1
- package/lib/components/PageTemplates/PageTemplate.types.js.map +1 -1
- package/lib/components/PageTemplates/PageTemplates.d.ts +4 -1
- package/lib/components/PageTemplates/PageTemplates.d.ts.map +1 -1
- package/lib/components/PageTemplates/PageTemplates.js +9 -5
- package/lib/components/PageTemplates/PageTemplates.js.map +1 -1
- package/lib/components/PageTemplates/ShowcasePage.d.ts +2 -2
- package/lib/components/PageTemplates/ShowcasePage.d.ts.map +1 -1
- package/lib/components/RulePicker/RulePicker.d.ts +1 -1
- package/lib/components/SummaryCard/SummaryCard.d.ts.map +1 -1
- package/lib/components/SummaryCard/SummaryCard.js +13 -1
- package/lib/components/SummaryCard/SummaryCard.js.map +1 -1
- package/lib/components/Workbench/Workbench.styles.d.ts +12 -8
- package/lib/components/Workbench/Workbench.styles.d.ts.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/utils/typeIconMapping.d.ts.map +1 -1
- package/lib/utils/typeIconMapping.js +2 -0
- package/lib/utils/typeIconMapping.js.map +1 -1
- package/lib/utils/utils.d.ts +5 -0
- package/lib/utils/utils.d.ts.map +1 -0
- package/lib/utils/utils.js +19 -0
- package/lib/utils/utils.js.map +1 -0
- package/package.json +7 -10
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components';
|
|
2
|
+
import { defaultThemeProp, Card, Text, CardFooter, Icon, Flex } from '@pega/cosmos-react-core';
|
|
3
|
+
const borderRadius = 'border-radius';
|
|
4
|
+
export const StyledCircle = styled.div(({ theme, bgColor }) => {
|
|
5
|
+
return css `
|
|
6
|
+
height: calc(4 * ${theme.base.spacing});
|
|
7
|
+
width: calc(4 * ${theme.base.spacing});
|
|
8
|
+
background: ${bgColor};
|
|
9
|
+
border-radius: 50%;
|
|
10
|
+
align-self: center;
|
|
11
|
+
&:focus {
|
|
12
|
+
outline: none;
|
|
13
|
+
box-shadow: ${theme.base.shadow.focus};
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
});
|
|
17
|
+
StyledCircle.defaultProps = defaultThemeProp;
|
|
18
|
+
export const StyledStartNode = styled(Flex) `
|
|
19
|
+
height: inherit;
|
|
20
|
+
`;
|
|
21
|
+
export const StyledIcon = styled.div(({ theme, bgColor, color }) => {
|
|
22
|
+
const { base: { 'border-radius': baseRadius }, components: { icon: { 'border-radius-multiplier': borderRadiusMultiplier } } } = theme;
|
|
23
|
+
return css `
|
|
24
|
+
min-height: calc(4 * ${theme.base.spacing});
|
|
25
|
+
min-width: calc(4 * ${theme.base.spacing});
|
|
26
|
+
margin-inline-end: ${theme.base.spacing};
|
|
27
|
+
${bgColor && `background-color: ${bgColor};`}
|
|
28
|
+
${color && `color: ${color};`}
|
|
29
|
+
border-radius: calc(0.5 * ${borderRadiusMultiplier} * ${baseRadius});
|
|
30
|
+
`;
|
|
31
|
+
});
|
|
32
|
+
StyledIcon.defaultProps = defaultThemeProp;
|
|
33
|
+
export const StyledNodeTemplateHeader = styled.header(({ theme }) => {
|
|
34
|
+
return css `
|
|
35
|
+
white-space: nowrap;
|
|
36
|
+
button {
|
|
37
|
+
border-radius: ${theme.base[borderRadius]};
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
});
|
|
41
|
+
StyledNodeTemplateHeader.defaultProps = defaultThemeProp;
|
|
42
|
+
export const StyledText = styled(Text)(({ error, theme }) => {
|
|
43
|
+
return css `
|
|
44
|
+
padding-inline-end: ${theme.base.spacing};
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
text-overflow: ellipsis;
|
|
47
|
+
max-width: ${error
|
|
48
|
+
? `calc(0.9 * ${theme.base['content-width'].xs})`
|
|
49
|
+
: theme.base['content-width'].xs};
|
|
50
|
+
`;
|
|
51
|
+
});
|
|
52
|
+
StyledText.defaultProps = defaultThemeProp;
|
|
53
|
+
export const StyledNodeTemplate = styled(Card)(({ highlight, theme }) => {
|
|
54
|
+
return css `
|
|
55
|
+
width: calc(35 * ${theme.base.spacing});
|
|
56
|
+
height: calc(15 * ${theme.base.spacing});
|
|
57
|
+
align-self: center;
|
|
58
|
+
overflow: hidden;
|
|
59
|
+
background-color: ${theme.base.palette['primary-background']};
|
|
60
|
+
border: calc(0.25 * ${theme.base.spacing}) solid transparent;
|
|
61
|
+
|
|
62
|
+
${highlight &&
|
|
63
|
+
css `
|
|
64
|
+
&&& {
|
|
65
|
+
color: ${theme.base.colors.black};
|
|
66
|
+
background-color: ${theme.base.colors.red['extra-light']};
|
|
67
|
+
border-radius: calc(0.25 * ${theme.base.spacing});
|
|
68
|
+
box-shadow: 0 0 0 calc(0.25 * ${theme.base.spacing}) ${theme.base.colors.red.medium};
|
|
69
|
+
}
|
|
70
|
+
`}
|
|
71
|
+
|
|
72
|
+
&&& {
|
|
73
|
+
border-radius: ${theme.base[borderRadius]};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&:hover {
|
|
77
|
+
cursor: pointer;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:focus-visible {
|
|
81
|
+
box-shadow: ${theme.base.shadow.focus};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
&[aria-current='location'] {
|
|
85
|
+
box-shadow: none;
|
|
86
|
+
border: calc(0.25 * ${theme.base.spacing}) solid ${theme.base.palette.interactive};
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
90
|
+
});
|
|
91
|
+
StyledNodeTemplate.defaultProps = defaultThemeProp;
|
|
92
|
+
export const StyledNodeTemplateFooter = styled(CardFooter)(({ theme }) => {
|
|
93
|
+
return css `
|
|
94
|
+
margin-top: auto;
|
|
95
|
+
&:not(${StyledNodeTemplate} ${StyledNodeTemplate} > &) {
|
|
96
|
+
padding: ${theme.base.spacing};
|
|
97
|
+
}
|
|
98
|
+
`;
|
|
99
|
+
});
|
|
100
|
+
StyledNodeTemplateFooter.defaultProps = defaultThemeProp;
|
|
101
|
+
export const StyledNodeTemplateContent = styled.div(({ theme }) => {
|
|
102
|
+
return css `
|
|
103
|
+
padding: ${theme.base.spacing};
|
|
104
|
+
padding-block-start: 0;
|
|
105
|
+
max-height: calc(5 * ${theme.base.spacing});
|
|
106
|
+
display: -webkit-box;
|
|
107
|
+
-webkit-line-clamp: 2;
|
|
108
|
+
-webkit-box-orient: vertical;
|
|
109
|
+
overflow: hidden;
|
|
110
|
+
text-overflow: ellipsis;
|
|
111
|
+
white-space: pre-wrap;
|
|
112
|
+
word-wrap: break-word;
|
|
113
|
+
`;
|
|
114
|
+
});
|
|
115
|
+
StyledNodeTemplateContent.defaultProps = defaultThemeProp;
|
|
116
|
+
export const StyledAdditionalData = styled.dl `
|
|
117
|
+
overflow: hidden;
|
|
118
|
+
`;
|
|
119
|
+
export const StyledAdditionalDataItem = styled.div(({ theme }) => {
|
|
120
|
+
return css `
|
|
121
|
+
padding: 0 calc(0.5 * ${theme.base.spacing});
|
|
122
|
+
background-color: ${theme.base.palette['secondary-background']};
|
|
123
|
+
border-radius: ${theme.base[borderRadius]};
|
|
124
|
+
`;
|
|
125
|
+
});
|
|
126
|
+
StyledAdditionalDataItem.defaultProps = defaultThemeProp;
|
|
127
|
+
export const StyledTextWithEllipsis = styled(Text)(() => {
|
|
128
|
+
return css `
|
|
129
|
+
overflow: hidden;
|
|
130
|
+
width: auto;
|
|
131
|
+
display: inline-block;
|
|
132
|
+
white-space: nowrap;
|
|
133
|
+
text-overflow: ellipsis;
|
|
134
|
+
`;
|
|
135
|
+
});
|
|
136
|
+
StyledTextWithEllipsis.defaultProps = defaultThemeProp;
|
|
137
|
+
export const StyledErrorIcon = styled(Icon)(({ theme }) => {
|
|
138
|
+
return css `
|
|
139
|
+
color: ${theme.base.palette.urgent};
|
|
140
|
+
margin-inline-end: ${theme.base.spacing};
|
|
141
|
+
`;
|
|
142
|
+
});
|
|
143
|
+
StyledErrorIcon.defaultProps = defaultThemeProp;
|
|
144
|
+
//# sourceMappingURL=NodeTemplate.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeTemplate.styles.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/NodeTemplate.styles.ts"],"names":[],"mappings":"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","sourcesContent":["import styled, { css } from 'styled-components';\n\nimport { defaultThemeProp, Card, Text, CardFooter, Icon, Flex } from '@pega/cosmos-react-core';\n\nconst borderRadius = 'border-radius';\nexport const StyledCircle = styled.div<{ bgColor: string }>(({ theme, bgColor }) => {\n return css`\n height: calc(4 * ${theme.base.spacing});\n width: calc(4 * ${theme.base.spacing});\n background: ${bgColor};\n border-radius: 50%;\n align-self: center;\n &:focus {\n outline: none;\n box-shadow: ${theme.base.shadow.focus};\n }\n `;\n});\n\nStyledCircle.defaultProps = defaultThemeProp;\n\nexport const StyledStartNode = styled(Flex)`\n height: inherit;\n`;\n\ninterface StyledIconProps {\n bgColor?: string;\n color?: string;\n}\n\nexport const StyledIcon = styled.div<StyledIconProps>(({ theme, bgColor, color }) => {\n const {\n base: { 'border-radius': baseRadius },\n components: {\n icon: { 'border-radius-multiplier': borderRadiusMultiplier }\n }\n } = theme;\n return css`\n min-height: calc(4 * ${theme.base.spacing});\n min-width: calc(4 * ${theme.base.spacing});\n margin-inline-end: ${theme.base.spacing};\n ${bgColor && `background-color: ${bgColor};`}\n ${color && `color: ${color};`}\n border-radius: calc(0.5 * ${borderRadiusMultiplier} * ${baseRadius});\n `;\n});\n\nStyledIcon.defaultProps = defaultThemeProp;\n\nexport const StyledNodeTemplateHeader = styled.header(({ theme }) => {\n return css`\n white-space: nowrap;\n button {\n border-radius: ${theme.base[borderRadius]};\n }\n `;\n});\n\nStyledNodeTemplateHeader.defaultProps = defaultThemeProp;\n\nexport const StyledText = styled(Text)<{ error?: string | undefined }>(({ error, theme }) => {\n return css`\n padding-inline-end: ${theme.base.spacing};\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: ${error\n ? `calc(0.9 * ${theme.base['content-width'].xs})`\n : theme.base['content-width'].xs};\n `;\n});\n\nStyledText.defaultProps = defaultThemeProp;\n\nexport const StyledNodeTemplate = styled(Card)<{ highlight: boolean }>(({ highlight, theme }) => {\n return css`\n width: calc(35 * ${theme.base.spacing});\n height: calc(15 * ${theme.base.spacing});\n align-self: center;\n overflow: hidden;\n background-color: ${theme.base.palette['primary-background']};\n border: calc(0.25 * ${theme.base.spacing}) solid transparent;\n\n ${highlight &&\n css`\n &&& {\n color: ${theme.base.colors.black};\n background-color: ${theme.base.colors.red['extra-light']};\n border-radius: calc(0.25 * ${theme.base.spacing});\n box-shadow: 0 0 0 calc(0.25 * ${theme.base.spacing}) ${theme.base.colors.red.medium};\n }\n `}\n\n &&& {\n border-radius: ${theme.base[borderRadius]};\n }\n\n &:hover {\n cursor: pointer;\n }\n\n :focus-visible {\n box-shadow: ${theme.base.shadow.focus};\n }\n\n &[aria-current='location'] {\n box-shadow: none;\n border: calc(0.25 * ${theme.base.spacing}) solid ${theme.base.palette.interactive};\n cursor: pointer;\n }\n `;\n});\n\nStyledNodeTemplate.defaultProps = defaultThemeProp;\n\nexport const StyledNodeTemplateFooter = styled(CardFooter)(({ theme }) => {\n return css`\n margin-top: auto;\n &:not(${StyledNodeTemplate} ${StyledNodeTemplate} > &) {\n padding: ${theme.base.spacing};\n }\n `;\n});\n\nStyledNodeTemplateFooter.defaultProps = defaultThemeProp;\n\nexport const StyledNodeTemplateContent = styled.div(({ theme }) => {\n return css`\n padding: ${theme.base.spacing};\n padding-block-start: 0;\n max-height: calc(5 * ${theme.base.spacing});\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: pre-wrap;\n word-wrap: break-word;\n `;\n});\n\nStyledNodeTemplateContent.defaultProps = defaultThemeProp;\n\nexport const StyledAdditionalData = styled.dl`\n overflow: hidden;\n`;\n\nexport const StyledAdditionalDataItem = styled.div(({ theme }) => {\n return css`\n padding: 0 calc(0.5 * ${theme.base.spacing});\n background-color: ${theme.base.palette['secondary-background']};\n border-radius: ${theme.base[borderRadius]};\n `;\n});\n\nStyledAdditionalDataItem.defaultProps = defaultThemeProp;\n\nexport const StyledTextWithEllipsis = styled(Text)(() => {\n return css`\n overflow: hidden;\n width: auto;\n display: inline-block;\n white-space: nowrap;\n text-overflow: ellipsis;\n `;\n});\n\nStyledTextWithEllipsis.defaultProps = defaultThemeProp;\n\nexport const StyledErrorIcon = styled(Icon)(({ theme }) => {\n return css`\n color: ${theme.base.palette.urgent};\n margin-inline-end: ${theme.base.spacing};\n `;\n});\n\nStyledErrorIcon.defaultProps = defaultThemeProp;\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { NodeProps, NodeComponentProps, NodeEvents } from './Node.types';
|
|
2
|
+
export declare const DefaultNode: ({ id, label, type, description, additionalData, actions, onActionClick, onClick, onDelete, reference, error, selected, referencedNode, active, onKeyDown, ...restProps }: NodeComponentProps & NodeEvents) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare const StartNode: ({ type, label, active, ...restProps }: NodeProps & NodeEvents) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare const EndNode: ({ type, label, active, ...restProps }: NodeProps & NodeEvents) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
//# sourceMappingURL=NodeTemplates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeTemplates.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/NodeTemplates.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAElB,UAAU,EACX,MAAM,cAAc,CAAC;AAmCtB,eAAO,MAAM,WAAW,GAAI,0KAiBzB,kBAAkB,GAAG,UAAU,4CAsJjC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,uCAKvB,SAAS,GAAG,UAAU,4CAoCxB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,uCAA+C,SAAS,GAAG,UAAU,4CAmC5F,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useRef, useEffect, useState } from 'react';
|
|
3
|
+
import { MenuButton, Flex, useI18n, Text, VisuallyHiddenText, useUID, useTheme } from '@pega/cosmos-react-core';
|
|
4
|
+
import { generateDynamicTestId } from '../../../utils/utils';
|
|
5
|
+
import FlowModellerContext from '../FlowModellerContext';
|
|
6
|
+
import IconTile from '../../IconTile';
|
|
7
|
+
import { flowModellerConstants } from '../constants';
|
|
8
|
+
import { StyledCircle, StyledIcon, StyledNodeTemplateHeader, StyledNodeTemplateContent, StyledNodeTemplate, StyledText, StyledTextWithEllipsis, StyledAdditionalData, StyledNodeTemplateFooter, StyledAdditionalDataItem, StyledErrorIcon, StyledStartNode } from './NodeTemplate.styles';
|
|
9
|
+
const focusable = 0;
|
|
10
|
+
const notFocusable = -1;
|
|
11
|
+
const MetaListItem = ({ label, value }) => {
|
|
12
|
+
return (_jsxs(Flex, { as: StyledAdditionalDataItem, container: { wrap: 'nowrap', pad: 0.25, gap: 0.25 }, item: { grow: 1 }, children: [_jsx(StyledTextWithEllipsis, { as: 'dd', children: label }), _jsx(Text, { role: 'separator', variant: 'secondary', "aria-hidden": 'true', children: ":\u00A0" }), _jsx(StyledTextWithEllipsis, { as: 'dt', children: value })] }));
|
|
13
|
+
};
|
|
14
|
+
const MetaList = ({ metadata }) => {
|
|
15
|
+
return (_jsxs(Flex, { as: StyledAdditionalData, container: { wrap: 'nowrap', colGap: 1, rowGap: 0.25 }, children: [metadata?.map((data, index) => index >= 2 ? undefined : _jsx(MetaListItem, { ...data }, data.id)), metadata && metadata.length > 2 && (_jsx(Flex, { as: StyledAdditionalDataItem, container: { pad: 0.25 }, item: { grow: 1, shrink: 0 }, children: _jsx(StyledTextWithEllipsis, { as: 'dt', children: `+${metadata.length - 2}` }) }))] }));
|
|
16
|
+
};
|
|
17
|
+
export const DefaultNode = ({ id, label, type, description, additionalData, actions, onActionClick, onClick, onDelete, reference, error, selected, referencedNode, active = false, onKeyDown, ...restProps }) => {
|
|
18
|
+
const t = useI18n();
|
|
19
|
+
const nodeRef = useRef(null);
|
|
20
|
+
const actionMenuRef = useRef(null);
|
|
21
|
+
const [nodeFocusable, setNodeFocusable] = useState(notFocusable);
|
|
22
|
+
const [menuButtonFocusable, setMenuButtonFocusable] = useState(notFocusable);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (active) {
|
|
25
|
+
nodeRef.current?.focus();
|
|
26
|
+
}
|
|
27
|
+
}, [active]);
|
|
28
|
+
const actionItems = actions?.map(actionItem => {
|
|
29
|
+
return {
|
|
30
|
+
id: actionItem.id,
|
|
31
|
+
primary: actionItem.text,
|
|
32
|
+
onClick: (actionId, e) => {
|
|
33
|
+
e.stopPropagation();
|
|
34
|
+
onActionClick?.({ actionId, nodeId: id }, e);
|
|
35
|
+
},
|
|
36
|
+
onKeyDown: (e) => e.stopPropagation()
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
const references = referencedNode && [
|
|
40
|
+
{ id: referencedNode?.id, label: t('go_to_noun'), value: referencedNode?.label }
|
|
41
|
+
];
|
|
42
|
+
if (onDelete !== undefined) {
|
|
43
|
+
actionItems?.push({
|
|
44
|
+
id: 'flowmodeller-delete-node',
|
|
45
|
+
primary: t('delete'),
|
|
46
|
+
onClick: (actionId, e) => {
|
|
47
|
+
e.stopPropagation();
|
|
48
|
+
onDelete?.({ actionId, nodeId: id }, e);
|
|
49
|
+
},
|
|
50
|
+
onKeyDown: (e) => e.stopPropagation()
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const handleEnterKeyDown = (e) => {
|
|
54
|
+
if ((e.key === 'Enter' && !e.shiftKey) || e.key === ' ') {
|
|
55
|
+
onClick?.(id, e);
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
}
|
|
58
|
+
else if (e.key === 'A' && e.shiftKey) {
|
|
59
|
+
actionMenuRef.current?.focus();
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
onKeyDown(e);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const { readOnly, highlights } = useContext(FlowModellerContext);
|
|
66
|
+
const menuTestId = generateDynamicTestId([label]);
|
|
67
|
+
return (_jsxs(StyledNodeTemplate, { ...restProps, ref: nodeRef, "aria-label": error ? t('step_name_error', [label]) : label, "aria-current": selected ? 'location' : undefined, onClick: (e) => {
|
|
68
|
+
if (!e.detail) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
onClick?.(id, e);
|
|
72
|
+
nodeRef.current?.scrollIntoView({
|
|
73
|
+
block: 'center',
|
|
74
|
+
behavior: 'smooth'
|
|
75
|
+
});
|
|
76
|
+
}, onFocus: () => {
|
|
77
|
+
setNodeFocusable(focusable);
|
|
78
|
+
}, onBlur: () => {
|
|
79
|
+
setNodeFocusable(notFocusable);
|
|
80
|
+
}, onKeyDown: handleEnterKeyDown, id: `modeller-node-${id}`, highlight: !!highlights?.nodes?.[id], tabIndex: nodeFocusable, children: [_jsxs(Flex, { as: StyledNodeTemplateHeader, container: { alignItems: 'center', pad: 1, justify: 'between' }, children: [_jsxs(Flex, { container: { alignItems: 'center' }, children: [error && _jsx(StyledErrorIcon, { name: 'warn-solid' }), _jsx(Flex, { as: StyledIcon, container: { inline: true, alignItems: 'center', justify: 'center' }, id: id, children: _jsx(IconTile, { name: type?.icon.name, category: type?.icon.category, label: type?.icon.label, inverted: type?.icon.inverted, size: 'l' }) }), _jsx(StyledText, { variant: 'h4', error: error, children: label })] }), !readOnly && actionItems && (_jsx(MenuButton, { testId: menuTestId, ref: actionMenuRef, tabIndex: menuButtonFocusable, portal: true, variant: 'simple', text: t('actions'), icon: 'more', iconOnly: true, onFocus: (e) => {
|
|
81
|
+
setMenuButtonFocusable(focusable);
|
|
82
|
+
e.stopPropagation();
|
|
83
|
+
}, onBlur: (e) => {
|
|
84
|
+
setMenuButtonFocusable(notFocusable);
|
|
85
|
+
e.stopPropagation();
|
|
86
|
+
}, onClick: (e) => {
|
|
87
|
+
e.stopPropagation();
|
|
88
|
+
}, onKeyDown: (e) => {
|
|
89
|
+
if (nodeFocusable === notFocusable && e.key === 'Escape') {
|
|
90
|
+
nodeRef.current?.focus();
|
|
91
|
+
}
|
|
92
|
+
e.stopPropagation();
|
|
93
|
+
}, menu: menuButtonFocusable === focusable ? { items: actionItems } : undefined }))] }), description && _jsx(StyledNodeTemplateContent, { children: description }), additionalData && type.minConnectors > 0 && (_jsx(StyledNodeTemplateFooter, { children: _jsx(MetaList, { metadata: additionalData }) })), references && type.minConnectors < 1 && (_jsx(StyledNodeTemplateFooter, { children: _jsx(MetaList, { metadata: references }) }))] }));
|
|
94
|
+
};
|
|
95
|
+
export const StartNode = ({ type, label, active = false, ...restProps }) => {
|
|
96
|
+
const nodeRef = useRef(null);
|
|
97
|
+
const descriptionId = useUID();
|
|
98
|
+
const t = useI18n();
|
|
99
|
+
const { base: { palette } } = useTheme();
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
if (active) {
|
|
102
|
+
nodeRef.current?.focus();
|
|
103
|
+
nodeRef.current?.scrollIntoView({
|
|
104
|
+
block: 'center',
|
|
105
|
+
behavior: 'auto'
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}, [active]);
|
|
109
|
+
return (_jsxs(StyledStartNode, { container: { direction: 'column', alignItems: 'center', justify: 'end', rowGap: 1 }, children: [label && _jsx(Text, { variant: 'h4', children: label }), _jsx(StyledCircle, { ...restProps, ref: nodeRef, bgColor: palette.success, tabIndex: 0, "aria-label": label || flowModellerConstants.START_NODE, "aria-describedby": descriptionId, role: 'button', children: _jsx(VisuallyHiddenText, { id: descriptionId, children: t('use_arrow_keys') }) })] }));
|
|
110
|
+
};
|
|
111
|
+
export const EndNode = ({ type, label, active = false, ...restProps }) => {
|
|
112
|
+
const nodeRef = useRef(null);
|
|
113
|
+
const [endNodeFocusable, setEndNodeFocusable] = useState(notFocusable);
|
|
114
|
+
const { base: { palette } } = useTheme();
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
if (active) {
|
|
117
|
+
nodeRef.current?.focus();
|
|
118
|
+
nodeRef.current?.scrollIntoView({
|
|
119
|
+
block: 'center',
|
|
120
|
+
behavior: 'auto'
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}, [active]);
|
|
124
|
+
return (_jsxs(Flex, { container: { direction: 'column', alignItems: 'center', justify: 'start', rowGap: 1 }, children: [_jsx(StyledCircle, { ...restProps, ref: nodeRef, bgColor: palette.urgent, tabIndex: endNodeFocusable, "aria-label": label || flowModellerConstants.END_NODE, role: 'button', onFocus: () => {
|
|
125
|
+
setEndNodeFocusable(focusable);
|
|
126
|
+
}, onBlur: () => {
|
|
127
|
+
setEndNodeFocusable(notFocusable);
|
|
128
|
+
} }), label && _jsx(Text, { variant: 'h4', children: label })] }));
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=NodeTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeTemplates.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/NodeTemplates.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useRef, useEffect, useState } from 'react';\nimport type { MouseEvent, KeyboardEvent } from 'react';\n\nimport {\n MenuButton,\n Flex,\n useI18n,\n Text,\n VisuallyHiddenText,\n useUID,\n useTheme\n} from '@pega/cosmos-react-core';\n\nimport { generateDynamicTestId } from '../../../utils/utils';\nimport FlowModellerContext from '../FlowModellerContext';\nimport IconTile from '../../IconTile';\nimport { flowModellerConstants } from '../constants';\n\nimport {\n StyledCircle,\n StyledIcon,\n StyledNodeTemplateHeader,\n StyledNodeTemplateContent,\n StyledNodeTemplate,\n StyledText,\n StyledTextWithEllipsis,\n StyledAdditionalData,\n StyledNodeTemplateFooter,\n StyledAdditionalDataItem,\n StyledErrorIcon,\n StyledStartNode\n} from './NodeTemplate.styles';\nimport type {\n NodeProps,\n NodeComponentProps,\n AdditionalDataItemProps,\n NodeEvents\n} from './Node.types';\n\nconst focusable = 0;\nconst notFocusable = -1;\n\nconst MetaListItem = ({ label, value }: AdditionalDataItemProps) => {\n return (\n <Flex\n as={StyledAdditionalDataItem}\n container={{ wrap: 'nowrap', pad: 0.25, gap: 0.25 }}\n item={{ grow: 1 }}\n >\n <StyledTextWithEllipsis as='dd'>{label}</StyledTextWithEllipsis>\n <Text role='separator' variant='secondary' aria-hidden='true'>\n : \n </Text>\n <StyledTextWithEllipsis as='dt'>{value}</StyledTextWithEllipsis>\n </Flex>\n );\n};\n\nconst MetaList = ({ metadata }: { metadata: NodeProps['additionalData'] }) => {\n return (\n <Flex as={StyledAdditionalData} container={{ wrap: 'nowrap', colGap: 1, rowGap: 0.25 }}>\n {metadata?.map((data: AdditionalDataItemProps, index: number) =>\n index >= 2 ? undefined : <MetaListItem key={data.id} {...data} />\n )}\n {metadata && metadata.length > 2 && (\n <Flex as={StyledAdditionalDataItem} container={{ pad: 0.25 }} item={{ grow: 1, shrink: 0 }}>\n <StyledTextWithEllipsis as='dt'>{`+${metadata.length - 2}`}</StyledTextWithEllipsis>\n </Flex>\n )}\n </Flex>\n );\n};\nexport const DefaultNode = ({\n id,\n label,\n type,\n description,\n additionalData,\n actions,\n onActionClick,\n onClick,\n onDelete,\n reference,\n error,\n selected,\n referencedNode,\n active = false,\n onKeyDown,\n ...restProps\n}: NodeComponentProps & NodeEvents) => {\n const t = useI18n();\n\n const nodeRef = useRef<HTMLDivElement>(null);\n const actionMenuRef = useRef<HTMLButtonElement>(null);\n const [nodeFocusable, setNodeFocusable] = useState(notFocusable);\n const [menuButtonFocusable, setMenuButtonFocusable] = useState(notFocusable);\n\n useEffect(() => {\n if (active) {\n nodeRef.current?.focus();\n }\n }, [active]);\n\n const actionItems = actions?.map(actionItem => {\n return {\n id: actionItem.id,\n primary: actionItem.text,\n onClick: (actionId: string, e: MouseEvent) => {\n e.stopPropagation();\n onActionClick?.({ actionId, nodeId: id }, e);\n },\n onKeyDown: (e: MouseEvent) => e.stopPropagation()\n };\n });\n\n const references = referencedNode && [\n { id: referencedNode?.id, label: t('go_to_noun'), value: referencedNode?.label }\n ];\n\n if (onDelete !== undefined) {\n actionItems?.push({\n id: 'flowmodeller-delete-node',\n primary: t('delete'),\n onClick: (actionId: string, e: MouseEvent) => {\n e.stopPropagation();\n onDelete?.({ actionId, nodeId: id }, e);\n },\n onKeyDown: (e: MouseEvent) => e.stopPropagation()\n });\n }\n\n const handleEnterKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if ((e.key === 'Enter' && !e.shiftKey) || e.key === ' ') {\n onClick?.(id, e);\n e.preventDefault();\n } else if (e.key === 'A' && e.shiftKey) {\n actionMenuRef.current?.focus();\n } else {\n onKeyDown(e);\n }\n };\n\n const { readOnly, highlights } = useContext(FlowModellerContext);\n const menuTestId = generateDynamicTestId([label]);\n\n return (\n <StyledNodeTemplate\n {...restProps}\n ref={nodeRef}\n aria-label={error ? t('step_name_error', [label]) : label}\n aria-current={selected ? 'location' : undefined}\n onClick={(e: MouseEvent) => {\n if (!e.detail) {\n return;\n }\n onClick?.(id, e);\n nodeRef.current?.scrollIntoView({\n block: 'center',\n behavior: 'smooth'\n });\n }}\n onFocus={() => {\n setNodeFocusable(focusable);\n }}\n onBlur={() => {\n setNodeFocusable(notFocusable);\n }}\n onKeyDown={handleEnterKeyDown}\n id={`modeller-node-${id}`}\n highlight={!!highlights?.nodes?.[id]}\n tabIndex={nodeFocusable}\n >\n <Flex\n as={StyledNodeTemplateHeader}\n container={{ alignItems: 'center', pad: 1, justify: 'between' }}\n >\n <Flex container={{ alignItems: 'center' }}>\n {error && <StyledErrorIcon name='warn-solid' />}\n <Flex\n as={StyledIcon}\n container={{ inline: true, alignItems: 'center', justify: 'center' }}\n id={id}\n >\n <IconTile\n name={type?.icon.name}\n category={type?.icon.category}\n label={type?.icon.label}\n inverted={type?.icon.inverted}\n size='l'\n />\n </Flex>\n <StyledText variant='h4' error={error}>\n {label}\n </StyledText>\n </Flex>\n {!readOnly && actionItems && (\n <MenuButton\n testId={menuTestId}\n ref={actionMenuRef}\n tabIndex={menuButtonFocusable}\n portal\n variant='simple'\n text={t('actions')}\n icon='more'\n iconOnly\n onFocus={(e: KeyboardEvent) => {\n setMenuButtonFocusable(focusable);\n e.stopPropagation();\n }}\n onBlur={(e: KeyboardEvent) => {\n setMenuButtonFocusable(notFocusable);\n e.stopPropagation();\n }}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n }}\n onKeyDown={(e: KeyboardEvent) => {\n if (nodeFocusable === notFocusable && e.key === 'Escape') {\n nodeRef.current?.focus();\n }\n e.stopPropagation();\n }}\n menu={menuButtonFocusable === focusable ? { items: actionItems } : undefined}\n />\n )}\n </Flex>\n {description && <StyledNodeTemplateContent>{description}</StyledNodeTemplateContent>}\n {additionalData && type.minConnectors > 0 && (\n <StyledNodeTemplateFooter>\n <MetaList metadata={additionalData} />\n </StyledNodeTemplateFooter>\n )}\n {references && type.minConnectors < 1 && (\n <StyledNodeTemplateFooter>\n <MetaList metadata={references} />\n </StyledNodeTemplateFooter>\n )}\n </StyledNodeTemplate>\n );\n};\n\nexport const StartNode = ({\n type,\n label,\n active = false,\n ...restProps\n}: NodeProps & NodeEvents) => {\n const nodeRef = useRef<HTMLDivElement>(null);\n const descriptionId = useUID();\n const t = useI18n();\n const {\n base: { palette }\n } = useTheme();\n\n useEffect(() => {\n if (active) {\n nodeRef.current?.focus();\n nodeRef.current?.scrollIntoView({\n block: 'center',\n behavior: 'auto'\n });\n }\n }, [active]);\n\n return (\n <StyledStartNode\n container={{ direction: 'column', alignItems: 'center', justify: 'end', rowGap: 1 }}\n >\n {label && <Text variant='h4'>{label}</Text>}\n <StyledCircle\n {...restProps}\n ref={nodeRef}\n bgColor={palette.success}\n tabIndex={0}\n aria-label={label || flowModellerConstants.START_NODE}\n aria-describedby={descriptionId}\n role='button'\n >\n <VisuallyHiddenText id={descriptionId}>{t('use_arrow_keys')}</VisuallyHiddenText>\n </StyledCircle>\n </StyledStartNode>\n );\n};\n\nexport const EndNode = ({ type, label, active = false, ...restProps }: NodeProps & NodeEvents) => {\n const nodeRef = useRef<HTMLDivElement>(null);\n const [endNodeFocusable, setEndNodeFocusable] = useState(notFocusable);\n const {\n base: { palette }\n } = useTheme();\n useEffect(() => {\n if (active) {\n nodeRef.current?.focus();\n nodeRef.current?.scrollIntoView({\n block: 'center',\n behavior: 'auto'\n });\n }\n }, [active]);\n\n return (\n <Flex container={{ direction: 'column', alignItems: 'center', justify: 'start', rowGap: 1 }}>\n <StyledCircle\n {...restProps}\n ref={nodeRef}\n bgColor={palette.urgent}\n tabIndex={endNodeFocusable}\n aria-label={label || flowModellerConstants.END_NODE}\n role='button'\n onFocus={() => {\n setEndNodeFocusable(focusable);\n }}\n onBlur={() => {\n setEndNodeFocusable(notFocusable);\n }}\n />\n {label && <Text variant='h4'>{label}</Text>}\n </Flex>\n );\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { NodeEvents, NodeLabels } from './Node/Node.types';
|
|
2
|
+
import type { PlottedGraphNode } from './Renderer/Utils/GraphLayout';
|
|
3
|
+
type NodeProps = PlottedGraphNode & NodeEvents & NodeLabels;
|
|
4
|
+
declare const _default: import("react").NamedExoticComponent<PlottedGraphNode<unknown> & NodeEvents & NodeLabels> & {
|
|
5
|
+
readonly type: (props: NodeProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
6
|
+
} & {
|
|
7
|
+
getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly string[]>;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
10
|
+
//# sourceMappingURL=Node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../../src/components/FlowModeller/Node.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,UAAU,EACV,UAAU,EAGX,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,KAAK,SAAS,GAAG,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC;;2BAWlC,SAAS;;;;AA8EnC,wBAAiD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useCallback } from 'react';
|
|
3
|
+
import { useTestIds, withTestIds } from '@pega/cosmos-react-core';
|
|
4
|
+
import { generateDynamicTestId } from '../../utils/utils';
|
|
5
|
+
import { START_NODETYPE, END_NODETYPE } from './Node/Node.types';
|
|
6
|
+
import { DefaultNode, EndNode, StartNode } from './Node/NodeTemplates';
|
|
7
|
+
import { getNodeTestIds } from './FlowModeller.test-ids';
|
|
8
|
+
const isNodeComponentData = (d) => typeof d === 'object' && d !== null;
|
|
9
|
+
const isFlowNodeType = (t) => t !== undefined && 'id' in t && 'icon' in t && 'defaults' in t;
|
|
10
|
+
const isFullNodeProps = (n) => typeof n === 'object' && n !== null && 'id' in n && 'label' in n;
|
|
11
|
+
const Node = memo((props) => {
|
|
12
|
+
const { id, type: rawType, label = '', fromNodeLabel, toNodeLabel, data: rawData, referencedNode: rawReferencedNode, ...restProps } = props;
|
|
13
|
+
const data = isNodeComponentData(rawData) ? rawData : undefined;
|
|
14
|
+
const type = isFlowNodeType(rawType) ? rawType : undefined;
|
|
15
|
+
const referencedNode = isFullNodeProps(rawReferencedNode) ? rawReferencedNode : undefined;
|
|
16
|
+
let stepTestID = '';
|
|
17
|
+
if (type?.id === START_NODETYPE.id || type?.id === END_NODETYPE.id) {
|
|
18
|
+
stepTestID = generateDynamicTestId([label]);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
stepTestID = generateDynamicTestId([
|
|
22
|
+
fromNodeLabel ? `from-${fromNodeLabel}` : 'from-merge',
|
|
23
|
+
toNodeLabel ? `to-${toNodeLabel}` : 'to-branch-end',
|
|
24
|
+
label
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
const testIds = useTestIds(stepTestID, getNodeTestIds);
|
|
28
|
+
const clickHandler = useCallback((nodeId, e) => {
|
|
29
|
+
data?.onClick?.(nodeId, e);
|
|
30
|
+
}, [data?.onClick]);
|
|
31
|
+
if (!type) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (type.id === START_NODETYPE.id) {
|
|
35
|
+
return (_jsx(StartNode, { "data-testid": testIds.root, ...restProps, id: id, type: type, label: label.toUpperCase() }));
|
|
36
|
+
}
|
|
37
|
+
if (type.id === END_NODETYPE.id) {
|
|
38
|
+
return (_jsx(EndNode, { "data-testid": testIds.root, ...restProps, id: id, type: type, label: label.toUpperCase() }));
|
|
39
|
+
}
|
|
40
|
+
return (_jsx(DefaultNode, { "data-testid": testIds.root, ...restProps, id: id, label: label, type: type, referencedNode: referencedNode, onClick: clickHandler, onDelete: data?.onDelete, onActionClick: data?.onActionClick, actions: data?.actions, selected: data?.selected }));
|
|
41
|
+
});
|
|
42
|
+
export default withTestIds(Node, getNodeTestIds);
|
|
43
|
+
//# sourceMappingURL=Node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Node.js","sourceRoot":"","sources":["../../../src/components/FlowModeller/Node.tsx"],"names":[],"mappings":"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","sourcesContent":["import { memo, useCallback } from 'react';\nimport type { MouseEvent, KeyboardEvent } from 'react';\n\nimport { useTestIds, withTestIds } from '@pega/cosmos-react-core';\n\nimport { generateDynamicTestId } from '../../utils/utils';\n\nimport type {\n NodeComponentData,\n NodeEvents,\n NodeLabels,\n NodeProps as FullNodeProps,\n NodeType as FlowNodeType\n} from './Node/Node.types';\nimport { START_NODETYPE, END_NODETYPE } from './Node/Node.types';\nimport { DefaultNode, EndNode, StartNode } from './Node/NodeTemplates';\nimport type { PlottedGraphNode } from './Renderer/Utils/GraphLayout';\nimport { getNodeTestIds } from './FlowModeller.test-ids';\n\ntype NodeProps = PlottedGraphNode & NodeEvents & NodeLabels;\n\nconst isNodeComponentData = (d: unknown): d is NodeComponentData =>\n typeof d === 'object' && d !== null;\n\nconst isFlowNodeType = (t: PlottedGraphNode['type']): t is FlowNodeType =>\n t !== undefined && 'id' in t && 'icon' in t && 'defaults' in t;\n\nconst isFullNodeProps = (n: unknown): n is FullNodeProps =>\n typeof n === 'object' && n !== null && 'id' in n && 'label' in n;\n\nconst Node = memo((props: NodeProps) => {\n const {\n id,\n type: rawType,\n label = '',\n fromNodeLabel,\n toNodeLabel,\n data: rawData,\n referencedNode: rawReferencedNode,\n ...restProps\n } = props;\n\n const data = isNodeComponentData(rawData) ? rawData : undefined;\n const type = isFlowNodeType(rawType) ? rawType : undefined;\n const referencedNode = isFullNodeProps(rawReferencedNode) ? rawReferencedNode : undefined;\n\n let stepTestID = '';\n if (type?.id === START_NODETYPE.id || type?.id === END_NODETYPE.id) {\n stepTestID = generateDynamicTestId([label]);\n } else {\n stepTestID = generateDynamicTestId([\n fromNodeLabel ? `from-${fromNodeLabel}` : 'from-merge',\n toNodeLabel ? `to-${toNodeLabel}` : 'to-branch-end',\n label\n ]);\n }\n const testIds = useTestIds(stepTestID, getNodeTestIds);\n\n const clickHandler = useCallback(\n (nodeId: string, e: MouseEvent<Element> | KeyboardEvent<Element>) => {\n data?.onClick?.(nodeId, e);\n },\n [data?.onClick]\n );\n\n if (!type) {\n return null;\n }\n\n if (type.id === START_NODETYPE.id) {\n return (\n <StartNode\n data-testid={testIds.root}\n {...restProps}\n id={id}\n type={type}\n label={label.toUpperCase()}\n />\n );\n }\n if (type.id === END_NODETYPE.id) {\n return (\n <EndNode\n data-testid={testIds.root}\n {...restProps}\n id={id}\n type={type}\n label={label.toUpperCase()}\n />\n );\n }\n return (\n <DefaultNode\n data-testid={testIds.root}\n {...restProps}\n id={id}\n label={label}\n type={type}\n referencedNode={referencedNode}\n onClick={clickHandler}\n onDelete={data?.onDelete}\n onActionClick={data?.onActionClick}\n actions={data?.actions}\n selected={data?.selected}\n />\n );\n});\n\nexport default withTestIds(Node, getNodeTestIds);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Renderer/Renderer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA8CtD,QAAA,MAAM,QAAQ,GAAI,iEAKf,aAAa,4CAuPf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { createElement as _createElement } from "react";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import styled, { css } from 'styled-components';
|
|
5
|
+
import { Flex, defaultThemeProp } from '@pega/cosmos-react-core';
|
|
6
|
+
import FlowModellerContext from '../FlowModellerContext';
|
|
7
|
+
import GraphLayout from './Utils/GraphLayout';
|
|
8
|
+
import { DirectedGraph } from './Utils/Graph';
|
|
9
|
+
import GraphTraversal from './Utils/GraphTraversal';
|
|
10
|
+
import { getParentConvergence, groupByPosition, arrowUpKey, arrowDownKey, horizontalNavigation } from './Utils/RendererUtils';
|
|
11
|
+
const StyledWrapper = styled.div `
|
|
12
|
+
position: relative;
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: 100%;
|
|
15
|
+
`;
|
|
16
|
+
const StyledContentWrapper = styled.div(({ theme }) => {
|
|
17
|
+
return css `
|
|
18
|
+
position: absolute;
|
|
19
|
+
top: 0;
|
|
20
|
+
left: 0;
|
|
21
|
+
width: 100%;
|
|
22
|
+
background-color: ${theme.base.palette['app-background']};
|
|
23
|
+
> svg {
|
|
24
|
+
background-color: ${theme.base.palette['app-background']};
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
});
|
|
28
|
+
StyledContentWrapper.defaultProps = defaultThemeProp;
|
|
29
|
+
const StyledNodeWrapper = styled(StyledContentWrapper)(() => {
|
|
30
|
+
return css `
|
|
31
|
+
width: var(--width);
|
|
32
|
+
height: var(--height);
|
|
33
|
+
transform: translate(var(--xPos), var(--yPos));
|
|
34
|
+
`;
|
|
35
|
+
});
|
|
36
|
+
const StyledRootNodeWrapper = styled.foreignObject `
|
|
37
|
+
overflow: visible;
|
|
38
|
+
`;
|
|
39
|
+
const Renderer = ({ graphData, connector: Connector, node: Node, selectedNodeId }) => {
|
|
40
|
+
// apply the plotted positions
|
|
41
|
+
const { readOnly } = useContext(FlowModellerContext);
|
|
42
|
+
const graph = new DirectedGraph(graphData);
|
|
43
|
+
const rootNode = useMemo(() => {
|
|
44
|
+
const rootNodeId = GraphTraversal.findRootNode(graph);
|
|
45
|
+
return rootNodeId ? graph.getNode(rootNodeId) : undefined;
|
|
46
|
+
}, [graph]);
|
|
47
|
+
const graphDimensions = GraphLayout.plot(graphData, readOnly);
|
|
48
|
+
const positions = useMemo(() => groupByPosition(graph), [graph]);
|
|
49
|
+
const [activeGraphItemId, setActiveGraphItemId] = useState();
|
|
50
|
+
const rendererRef = useRef(null);
|
|
51
|
+
const prevItem = useRef();
|
|
52
|
+
const prevSelectedNodeId = useRef();
|
|
53
|
+
const activeGraphItem = useMemo(() => [...graph.getNodes(), ...graph.getConnectors()].find(data => {
|
|
54
|
+
return data.id === activeGraphItemId;
|
|
55
|
+
}), [activeGraphItemId, graph]);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
// Set PREVIOUS Connector - If current focused item is a node, we are saving the previous connector id.
|
|
58
|
+
let inConnectors = activeGraphItem ? graph.getInConnectors(activeGraphItem.id) : [];
|
|
59
|
+
if (activeGraphItem &&
|
|
60
|
+
'dimensions' in activeGraphItem &&
|
|
61
|
+
activeGraphItem.dimensions?.height &&
|
|
62
|
+
inConnectors.length) {
|
|
63
|
+
const prevNode = graph.getNode(inConnectors[0].fromNodeId);
|
|
64
|
+
inConnectors = !prevNode.dimensions.height
|
|
65
|
+
? graph.getInConnectors(prevNode.id)
|
|
66
|
+
: inConnectors;
|
|
67
|
+
const parentConvergence = getParentConvergence(prevNode, graph);
|
|
68
|
+
if (inConnectors.length) {
|
|
69
|
+
prevItem.current =
|
|
70
|
+
!prevNode.dimensions.height && inConnectors.length > 1 && parentConvergence
|
|
71
|
+
? parentConvergence.parent.id
|
|
72
|
+
: inConnectors[0].id;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** DELETE NODE - If no item is found and prevItem has a value then we assume that a node has been deleted
|
|
76
|
+
* set activeGraphItemId to prevItem and reset it
|
|
77
|
+
*/
|
|
78
|
+
if (!activeGraphItem && prevItem.current && !selectedNodeId) {
|
|
79
|
+
const convergence = GraphTraversal.getConvergenceData(graphData, prevItem.current);
|
|
80
|
+
setActiveGraphItemId(convergence ? graph.getOutConnectors(convergence.nodeId)[0].id : prevItem.current);
|
|
81
|
+
prevItem.current = undefined;
|
|
82
|
+
}
|
|
83
|
+
}, [activeGraphItemId, graph]);
|
|
84
|
+
const elementScrollIntoView = (focusElementId) => {
|
|
85
|
+
const isConnector = graphData?.connectors?.find(item => item.id === focusElementId);
|
|
86
|
+
const elementRef = isConnector
|
|
87
|
+
? rendererRef.current?.querySelector(`[id='${focusElementId}']`)?.nextElementSibling
|
|
88
|
+
: rendererRef.current?.querySelector(`[id='modeller-node-${focusElementId}']`);
|
|
89
|
+
if (elementRef) {
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
elementRef.scrollIntoView({
|
|
92
|
+
block: 'center',
|
|
93
|
+
behavior: 'smooth'
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const onKeyDown = (e) => {
|
|
99
|
+
if (activeGraphItemId &&
|
|
100
|
+
activeGraphItem &&
|
|
101
|
+
['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key) &&
|
|
102
|
+
!selectedNodeId) {
|
|
103
|
+
let focusElementId;
|
|
104
|
+
switch (e.key) {
|
|
105
|
+
case 'ArrowUp':
|
|
106
|
+
focusElementId = arrowUpKey({
|
|
107
|
+
activeGraphItemId,
|
|
108
|
+
graph,
|
|
109
|
+
activeGraphItem,
|
|
110
|
+
readOnly: readOnly ?? false
|
|
111
|
+
});
|
|
112
|
+
break;
|
|
113
|
+
case 'ArrowDown':
|
|
114
|
+
focusElementId = arrowDownKey({
|
|
115
|
+
activeGraphItemId,
|
|
116
|
+
graph,
|
|
117
|
+
activeGraphItem,
|
|
118
|
+
readOnly: readOnly ?? false
|
|
119
|
+
});
|
|
120
|
+
break;
|
|
121
|
+
case 'ArrowLeft':
|
|
122
|
+
focusElementId = horizontalNavigation({
|
|
123
|
+
keyEvent: 'ArrowLeft',
|
|
124
|
+
positions,
|
|
125
|
+
activeGraphItem,
|
|
126
|
+
graph,
|
|
127
|
+
readOnly
|
|
128
|
+
});
|
|
129
|
+
break;
|
|
130
|
+
case 'ArrowRight':
|
|
131
|
+
focusElementId = horizontalNavigation({
|
|
132
|
+
keyEvent: 'ArrowRight',
|
|
133
|
+
positions,
|
|
134
|
+
activeGraphItem,
|
|
135
|
+
graph,
|
|
136
|
+
readOnly
|
|
137
|
+
});
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
if (focusElementId) {
|
|
143
|
+
setActiveGraphItemId(focusElementId);
|
|
144
|
+
elementScrollIntoView(focusElementId);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
/** Saving the last selectedNodeId in a variable
|
|
149
|
+
* so on close of workbench the focus can return to the node
|
|
150
|
+
* might be removed in future when workbench handles re-focusing the target element on close
|
|
151
|
+
*/
|
|
152
|
+
useEffect(() => {
|
|
153
|
+
if (selectedNodeId) {
|
|
154
|
+
prevSelectedNodeId.current = selectedNodeId;
|
|
155
|
+
}
|
|
156
|
+
else if (!selectedNodeId && prevSelectedNodeId.current) {
|
|
157
|
+
setActiveGraphItemId(prevSelectedNodeId.current);
|
|
158
|
+
prevSelectedNodeId.current = undefined;
|
|
159
|
+
}
|
|
160
|
+
}, [selectedNodeId]);
|
|
161
|
+
const getNodeLabel = (target) => {
|
|
162
|
+
if (target) {
|
|
163
|
+
const targetNode = graphData.nodes.find(nodeItem => nodeItem.id === target);
|
|
164
|
+
return targetNode && 'label' in targetNode ? String(targetNode.label) : undefined;
|
|
165
|
+
}
|
|
166
|
+
return target;
|
|
167
|
+
};
|
|
168
|
+
return (_jsxs(StyledWrapper, { ref: rendererRef, children: [_jsx(StyledContentWrapper, { children: _jsxs("svg", { width: graphDimensions.width, height: graphDimensions.height, viewBox: `0 0 ${graphDimensions.width} ${graphDimensions.height}`, children: [rootNode && (_jsx(StyledRootNodeWrapper, { width: rootNode.dimensions.width, height: rootNode.dimensions.height, x: rootNode.position.x, y: rootNode.position.y, children: _jsx(Node, { ...rootNode, active: rootNode.id === activeGraphItemId, onFocus: () => {
|
|
169
|
+
setActiveGraphItemId(rootNode.id);
|
|
170
|
+
}, onKeyDown: onKeyDown }) })), graphData.connectors.map(item => {
|
|
171
|
+
const fromNodeLabel = getNodeLabel(item.fromNodeId);
|
|
172
|
+
const toNodeLabel = getNodeLabel(item.toNodeId);
|
|
173
|
+
return (_createElement(Connector, { ...item, fromNodeLabel: fromNodeLabel, toNodeLabel: toNodeLabel, key: item.id, active: item.id === activeGraphItemId, onFocus: () => {
|
|
174
|
+
setActiveGraphItemId(item.id);
|
|
175
|
+
}, onKeyDown: onKeyDown }));
|
|
176
|
+
})] }) }), _jsx(StyledContentWrapper, { children: graphData.nodes
|
|
177
|
+
.filter(node => node.id !== rootNode?.id)
|
|
178
|
+
.map(item => {
|
|
179
|
+
let referencedNode;
|
|
180
|
+
if (item.type?.minConnectors === 0 && item.reference) {
|
|
181
|
+
referencedNode = graph.getNode(item.reference);
|
|
182
|
+
}
|
|
183
|
+
const prevNodeId = graphData.connectors.find(connector => connector.toNodeId === item.id)?.fromNodeId;
|
|
184
|
+
const fromNodeLabel = getNodeLabel(prevNodeId);
|
|
185
|
+
const nextNodeId = graphData.connectors.find(connector => connector.fromNodeId === item.id)?.toNodeId;
|
|
186
|
+
const toNodeLabel = getNodeLabel(nextNodeId);
|
|
187
|
+
return (_jsx(Flex, { as: StyledNodeWrapper, id: item.id, style: {
|
|
188
|
+
'--width': `${item.dimensions.width}px`,
|
|
189
|
+
'--height': `${item.dimensions.height}px`,
|
|
190
|
+
'--xPos': `${item.position.x}px`,
|
|
191
|
+
'--yPos': `${item.position.y}px`
|
|
192
|
+
}, container: { justify: 'center' }, children: _jsx(Node, { ...item, fromNodeLabel: fromNodeLabel, toNodeLabel: toNodeLabel, referencedNode: referencedNode, active: item.id === activeGraphItemId, onFocus: () => {
|
|
193
|
+
setActiveGraphItemId(item.id);
|
|
194
|
+
}, onKeyDown: onKeyDown }) }, item.id));
|
|
195
|
+
}) })] }));
|
|
196
|
+
};
|
|
197
|
+
export default Renderer;
|
|
198
|
+
//# sourceMappingURL=Renderer.js.map
|