@pega/cosmos-react-build 2.0.0-dev.17.0 → 2.0.0-dev.21.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.
Files changed (133) hide show
  1. package/lib/components/AppHeader/AppHeader.js +3 -3
  2. package/lib/components/AppHeader/AppHeader.js.map +1 -1
  3. package/lib/components/AppShell/AppShell.d.ts.map +1 -1
  4. package/lib/components/AppShell/AppShell.js +44 -47
  5. package/lib/components/AppShell/AppShell.js.map +1 -1
  6. package/lib/components/AppShell/AppShell.styles.d.ts.map +1 -1
  7. package/lib/components/AppShell/AppShell.styles.js +22 -18
  8. package/lib/components/AppShell/AppShell.styles.js.map +1 -1
  9. package/lib/components/AppShell/AppShell.types.d.ts +14 -9
  10. package/lib/components/AppShell/AppShell.types.d.ts.map +1 -1
  11. package/lib/components/AppShell/AppShell.types.js.map +1 -1
  12. package/lib/components/AppShell/AppShellContext.d.ts.map +1 -1
  13. package/lib/components/AppShell/AppShellContext.js +5 -3
  14. package/lib/components/AppShell/AppShellContext.js.map +1 -1
  15. package/lib/components/FlowModeller/FlowModeller.d.ts +6 -5
  16. package/lib/components/FlowModeller/FlowModeller.d.ts.map +1 -1
  17. package/lib/components/FlowModeller/FlowModeller.js +184 -61
  18. package/lib/components/FlowModeller/FlowModeller.js.map +1 -1
  19. package/lib/components/FlowModeller/Node/Node.types.d.ts +26 -16
  20. package/lib/components/FlowModeller/Node/Node.types.d.ts.map +1 -1
  21. package/lib/components/FlowModeller/Node/Node.types.js +27 -1
  22. package/lib/components/FlowModeller/Node/Node.types.js.map +1 -1
  23. package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts +10 -5
  24. package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts.map +1 -1
  25. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js +38 -31
  26. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js.map +1 -1
  27. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts +1 -4
  28. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts.map +1 -1
  29. package/lib/components/FlowModeller/Node/NodeTemplates.js +25 -19
  30. package/lib/components/FlowModeller/Node/NodeTemplates.js.map +1 -1
  31. package/lib/components/FlowModeller/NodeLibrary.d.ts +12 -0
  32. package/lib/components/FlowModeller/NodeLibrary.d.ts.map +1 -0
  33. package/lib/components/FlowModeller/NodeLibrary.js +49 -0
  34. package/lib/components/FlowModeller/NodeLibrary.js.map +1 -0
  35. package/lib/components/FlowModeller/Renderer/AddNode.d.ts +10 -0
  36. package/lib/components/FlowModeller/Renderer/AddNode.d.ts.map +1 -0
  37. package/lib/components/FlowModeller/Renderer/AddNode.js +42 -0
  38. package/lib/components/FlowModeller/Renderer/AddNode.js.map +1 -0
  39. package/lib/components/FlowModeller/Renderer/Connector.d.ts +5 -0
  40. package/lib/components/FlowModeller/Renderer/Connector.d.ts.map +1 -0
  41. package/lib/components/FlowModeller/Renderer/Connector.js +50 -0
  42. package/lib/components/FlowModeller/Renderer/Connector.js.map +1 -0
  43. package/lib/components/FlowModeller/Renderer/ConnectorsContainer.d.ts +12 -0
  44. package/lib/components/FlowModeller/Renderer/ConnectorsContainer.d.ts.map +1 -0
  45. package/lib/components/FlowModeller/Renderer/ConnectorsContainer.js +15 -0
  46. package/lib/components/FlowModeller/Renderer/ConnectorsContainer.js.map +1 -0
  47. package/lib/components/FlowModeller/Renderer/Node.d.ts +5 -0
  48. package/lib/components/FlowModeller/Renderer/Node.d.ts.map +1 -0
  49. package/lib/components/FlowModeller/Renderer/Node.js +18 -0
  50. package/lib/components/FlowModeller/Renderer/Node.js.map +1 -0
  51. package/lib/components/FlowModeller/Renderer/NodesContainer.d.ts +8 -0
  52. package/lib/components/FlowModeller/Renderer/NodesContainer.d.ts.map +1 -0
  53. package/lib/components/FlowModeller/Renderer/NodesContainer.js +15 -0
  54. package/lib/components/FlowModeller/Renderer/NodesContainer.js.map +1 -0
  55. package/lib/components/FlowModeller/Renderer/Renderer.d.ts +5 -0
  56. package/lib/components/FlowModeller/Renderer/Renderer.d.ts.map +1 -0
  57. package/lib/components/FlowModeller/Renderer/Renderer.js +17 -0
  58. package/lib/components/FlowModeller/Renderer/Renderer.js.map +1 -0
  59. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts +18 -0
  60. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts.map +1 -0
  61. package/lib/components/FlowModeller/Renderer/Renderer.types.js +2 -0
  62. package/lib/components/FlowModeller/Renderer/Renderer.types.js.map +1 -0
  63. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts +51 -0
  64. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts.map +1 -0
  65. package/lib/components/FlowModeller/Renderer/Utils/Graph.js +247 -0
  66. package/lib/components/FlowModeller/Renderer/Utils/Graph.js.map +1 -0
  67. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts +35 -0
  68. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts.map +1 -0
  69. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js +104 -0
  70. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js.map +1 -0
  71. package/lib/components/FlowModeller/helper.d.ts +22 -0
  72. package/lib/components/FlowModeller/helper.d.ts.map +1 -0
  73. package/lib/components/FlowModeller/helper.js +97 -0
  74. package/lib/components/FlowModeller/helper.js.map +1 -0
  75. package/lib/components/LifeCycle/Category.js +5 -5
  76. package/lib/components/LifeCycle/Category.js.map +1 -1
  77. package/lib/components/LifeCycle/LifeCycle.js +5 -5
  78. package/lib/components/LifeCycle/LifeCycle.js.map +1 -1
  79. package/lib/components/LifeCycle/LifeCycleList.js +2 -2
  80. package/lib/components/LifeCycle/LifeCycleList.js.map +1 -1
  81. package/lib/components/LifeCycle/Stage.d.ts +3 -1
  82. package/lib/components/LifeCycle/Stage.d.ts.map +1 -1
  83. package/lib/components/LifeCycle/Stage.js +9 -2
  84. package/lib/components/LifeCycle/Stage.js.map +1 -1
  85. package/lib/components/LifeCycle/Step.d.ts +4 -1
  86. package/lib/components/LifeCycle/Step.d.ts.map +1 -1
  87. package/lib/components/LifeCycle/Step.js +12 -2
  88. package/lib/components/LifeCycle/Step.js.map +1 -1
  89. package/lib/components/LifeCycle/Task.d.ts +3 -1
  90. package/lib/components/LifeCycle/Task.d.ts.map +1 -1
  91. package/lib/components/LifeCycle/Task.js +14 -5
  92. package/lib/components/LifeCycle/Task.js.map +1 -1
  93. package/lib/components/PageTemplates/GalleryPage.d.ts +23 -0
  94. package/lib/components/PageTemplates/GalleryPage.d.ts.map +1 -0
  95. package/lib/components/PageTemplates/GalleryPage.js +23 -0
  96. package/lib/components/PageTemplates/GalleryPage.js.map +1 -0
  97. package/lib/components/PageTemplates/GalleryPage.styles.d.ts +9 -0
  98. package/lib/components/PageTemplates/GalleryPage.styles.d.ts.map +1 -0
  99. package/lib/components/PageTemplates/GalleryPage.styles.js +70 -0
  100. package/lib/components/PageTemplates/GalleryPage.styles.js.map +1 -0
  101. package/lib/components/PageTemplates/PageTemplates.d.ts +10 -3
  102. package/lib/components/PageTemplates/PageTemplates.d.ts.map +1 -1
  103. package/lib/components/PageTemplates/PageTemplates.js +48 -8
  104. package/lib/components/PageTemplates/PageTemplates.js.map +1 -1
  105. package/lib/components/PageTemplates/index.d.ts +2 -0
  106. package/lib/components/PageTemplates/index.d.ts.map +1 -1
  107. package/lib/components/PageTemplates/index.js +1 -0
  108. package/lib/components/PageTemplates/index.js.map +1 -1
  109. package/lib/components/SummaryCard/SummaryCard.d.ts +16 -0
  110. package/lib/components/SummaryCard/SummaryCard.d.ts.map +1 -0
  111. package/lib/components/SummaryCard/SummaryCard.js +31 -0
  112. package/lib/components/SummaryCard/SummaryCard.js.map +1 -0
  113. package/lib/components/SummaryCard/index.d.ts +3 -0
  114. package/lib/components/SummaryCard/index.d.ts.map +1 -0
  115. package/lib/components/SummaryCard/index.js +3 -0
  116. package/lib/components/SummaryCard/index.js.map +1 -0
  117. package/lib/components/Visual/Visual.d.ts +17 -0
  118. package/lib/components/Visual/Visual.d.ts.map +1 -0
  119. package/lib/components/Visual/Visual.js +28 -0
  120. package/lib/components/Visual/Visual.js.map +1 -0
  121. package/lib/components/Visual/index.d.ts +3 -0
  122. package/lib/components/Visual/index.d.ts.map +1 -0
  123. package/lib/components/Visual/index.js +3 -0
  124. package/lib/components/Visual/index.js.map +1 -0
  125. package/lib/index.d.ts +2 -0
  126. package/lib/index.d.ts.map +1 -1
  127. package/lib/index.js +2 -0
  128. package/lib/index.js.map +1 -1
  129. package/package.json +5 -4
  130. package/lib/components/FlowModeller/Connector.d.ts +0 -30
  131. package/lib/components/FlowModeller/Connector.d.ts.map +0 -1
  132. package/lib/components/FlowModeller/Connector.js +0 -89
  133. package/lib/components/FlowModeller/Connector.js.map +0 -1
@@ -1,13 +1,14 @@
1
1
  import { PropsWithoutRef, MouseEvent } from 'react';
2
2
  import { Action } from '@pega/cosmos-react-core';
3
- import { ActionParams, NodeProps, SelectedNodeParam, NodeLibraryItem } from './Node/Node.types';
3
+ import { GraphData, ConnectorProps } from './Renderer/Utils/Graph';
4
+ import { AddNodeHandlerParams } from './Renderer/Renderer.types';
5
+ import { ActionParams, NodeProps, NodeLibraryItem, NodeType } from './Node/Node.types';
4
6
  export interface FlowModellerProps {
5
- /** List of nodes */
6
- nodes: NodeProps[];
7
+ graphData: GraphData<NodeProps, ConnectorProps>;
7
8
  /** Node actions */
8
9
  actions?: Action[];
9
10
  /** Callback to add node from connector */
10
- onNodeAdd: (selectedNode: SelectedNodeParam) => void;
11
+ onNodeAdd: (nodeType: NodeType, params: AddNodeHandlerParams) => void;
11
12
  /** Callback for handling the click on the node */
12
13
  onNodeClick?: (nodeId: string) => void;
13
14
  /** Callback for actions on Node */
@@ -15,6 +16,6 @@ export interface FlowModellerProps {
15
16
  /** Types of nodes */
16
17
  nodeLibrary: NodeLibraryItem[];
17
18
  }
18
- declare const FlowModeller: ({ nodes, nodeLibrary, actions, onNodeAdd, onNodeClick, onNodeActionClick, ...restProps }: PropsWithoutRef<FlowModellerProps>) => JSX.Element;
19
+ declare const FlowModeller: ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, nodeLibrary, actions }: PropsWithoutRef<FlowModellerProps>) => JSX.Element;
19
20
  export default FlowModeller;
20
21
  //# sourceMappingURL=FlowModeller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowModeller.d.ts","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAOf,UAAU,EACX,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,MAAM,EAYP,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhG,MAAM,WAAW,iBAAiB;IAChC,oBAAoB;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,CAAC,YAAY,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjE,qBAAqB;IACrB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAMD,QAAA,MAAM,YAAY,6FAQf,gBAAgB,iBAAiB,CAAC,gBAiJpC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"FlowModeller.d.ts","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,UAAU,EAAoC,MAAM,OAAO,CAAC;AAEjG,OAAO,EAAE,MAAM,EAA6B,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EAAiB,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EACL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,YAAY,EACZ,SAAS,EACT,eAAe,EAGf,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACtE,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjE,qBAAqB;IACrB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AA0ID,QAAA,MAAM,YAAY,mFAOf,gBAAgB,iBAAiB,CAAC,gBAgJpC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,78 +1,201 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Fragment, useState, useCallback, useRef, useEffect, useMemo } from 'react';
3
- import styled from 'styled-components';
4
- import { escapeRegExp, Flex, Icon, Menu, menuHelpers, Popover, SearchInput, useAfterInitialEffect, useElement, useI18n, useOuterEvent } from '@pega/cosmos-react-core';
5
- import { assignmentVisual, StartNode, EndNode, DefaultNode } from './Node/NodeTemplates';
6
- import { StyledIcon } from './Node/NodeTemplate.styles';
7
- import Connector from './Connector';
8
- const StyledPopover = styled(Popover) `
9
- min-width: 40ch;
10
- `;
11
- const FlowModeller = ({ nodes, nodeLibrary, actions, onNodeAdd, onNodeClick, onNodeActionClick, ...restProps }) => {
12
- const [open, setOpen] = useState(false);
13
- const buttonRefs = useRef({});
14
- const nodeRef = useRef(null);
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useReducer, useCallback } from 'react';
3
+ import { useElement, useOuterEvent } from '@pega/cosmos-react-core';
4
+ import { DirectedGraph } from './Renderer/Utils/Graph';
5
+ import { AddButton } from './Renderer/AddNode';
6
+ import FlowRenderer from './Renderer/Renderer';
7
+ import { StartNode, EndNode, DefaultNode } from './Node/NodeTemplates';
8
+ import { START_NODETYPE, STOP_NODETYPE } from './Node/Node.types';
9
+ import NodeLibrary from './NodeLibrary';
10
+ const initState = {
11
+ showLib: false,
12
+ activeAddBtnMeta: {
13
+ target: null,
14
+ meta: {
15
+ refType: 'node',
16
+ refId: ''
17
+ }
18
+ },
19
+ graphData: { nodes: [], connectors: [] }
20
+ };
21
+ const reducer = (state, action) => {
22
+ switch (action.type) {
23
+ case 'showLibrary':
24
+ // minor optimization, not to update state.. if no change in the value
25
+ return action.payload.show === state.showLib
26
+ ? state
27
+ : { ...state, showLib: action.payload.show };
28
+ case 'setActiveAddButton':
29
+ state.activeAddBtnMeta = {
30
+ ...action.payload
31
+ };
32
+ return {
33
+ ...state
34
+ };
35
+ case 'setGraphData':
36
+ return {
37
+ ...state,
38
+ graphData: action.payload
39
+ };
40
+ default:
41
+ return state;
42
+ }
43
+ };
44
+ const injectPlaceholderNodes = (graphData, onAddNode) => {
45
+ const targetGraph = new DirectedGraph(graphData);
46
+ // iterate all nodes with more than one in-connectors and insert addNode.
47
+ targetGraph.getNodes().forEach(node => {
48
+ if (targetGraph.getPrevNodesCount(node.id) > 1) {
49
+ const metaData = {
50
+ refType: 'node',
51
+ refId: node.id
52
+ };
53
+ // create a new placeholder node
54
+ const addShapeNode = {
55
+ id: `temp-${node.id}`,
56
+ children: (_jsx(AddButton, { addNodeHandler: (e) => {
57
+ onAddNode(e.target, metaData);
58
+ } }, void 0)),
59
+ position: { x: 0, y: 0 },
60
+ dimensions: { width: 20, height: 16 }
61
+ };
62
+ targetGraph.addNode(addShapeNode);
63
+ // connect all in-connectors to a new node and create a new connector that connects from new node to the actual toNodeId.
64
+ targetGraph.getInConnectors(node.id).forEach(con => {
65
+ con.toNodeId = addShapeNode.id;
66
+ });
67
+ const newConnector = {
68
+ id: `placeholder-${addShapeNode.id}-${node.id}`,
69
+ fromNodeId: addShapeNode.id,
70
+ toNodeId: node.id,
71
+ points: []
72
+ };
73
+ targetGraph.addConnector(newConnector);
74
+ }
75
+ });
76
+ // iterate all connectors and inject addNodes.
77
+ targetGraph.getConnectors().forEach((con) => {
78
+ // Condition to skip processing placeholder connectors created in the previous step
79
+ if (con.id.startsWith('placeholder-')) {
80
+ return;
81
+ }
82
+ const metaData = {
83
+ refType: 'connector',
84
+ refId: con.id
85
+ };
86
+ const addShapeNode = {
87
+ id: `temp-con-${con.id}`,
88
+ children: (_jsx(AddButton, { addNodeHandler: (e) => {
89
+ onAddNode(e.target, metaData);
90
+ } }, void 0)),
91
+ position: { x: 0, y: 0 },
92
+ dimensions: { width: 20, height: 16 }
93
+ };
94
+ targetGraph.addNode(addShapeNode);
95
+ const newConnector = {
96
+ id: `con-${con.id}`,
97
+ fromNodeId: addShapeNode.id,
98
+ toNodeId: con.toNodeId,
99
+ points: []
100
+ };
101
+ targetGraph.addConnector(newConnector);
102
+ con.toNodeId = addShapeNode.id;
103
+ });
104
+ return targetGraph.getGraphData();
105
+ };
106
+ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, nodeLibrary, actions }) => {
107
+ const [state, dispatch] = useReducer(reducer, initState);
15
108
  const [popoverEl, setPopoverEl] = useElement(null);
16
- const [previousNodeId, setPreviousNodeId] = useState('');
17
- const [search, setSearch] = useState('');
18
- const searchElRef = useRef(null);
19
- const t = useI18n();
20
- const searchRegex = useMemo(() => {
21
- return new RegExp(escapeRegExp(search));
22
- }, [search]);
23
- const closeMenu = useCallback(() => {
24
- setOpen(false);
25
- }, []);
26
- const onItemSelect = useCallback(id => {
27
- const selectedNode = menuHelpers.getItem(nodeLibrary, id);
28
- onNodeAdd({ nodeId: previousNodeId, node: selectedNode });
109
+ useEffect(() => {
110
+ const flowNodes = graphData.nodes.map(node => {
111
+ const flowNode = {
112
+ ...node,
113
+ children: _jsx(_Fragment, {}, void 0),
114
+ dimensions: {
115
+ width: 280,
116
+ height: 120
117
+ },
118
+ position: {
119
+ x: 0,
120
+ y: 0
121
+ }
122
+ };
123
+ if (node.type.id === START_NODETYPE.id) {
124
+ flowNode.dimensions.width = 50;
125
+ flowNode.dimensions.height = 50;
126
+ flowNode.children = (_jsx(StartNode, { id: node.id, type: node.type, label: node.label.toUpperCase() }, void 0));
127
+ }
128
+ else if (node.type.id === STOP_NODETYPE.id) {
129
+ flowNode.dimensions.width = 50;
130
+ flowNode.dimensions.height = 50;
131
+ flowNode.children = (_jsx(EndNode, { id: node.id, type: node.type, label: node.label.toUpperCase() }, void 0));
132
+ }
133
+ else {
134
+ flowNode.children = (_jsx(DefaultNode, { id: node.id, label: node.label, type: node.type, description: node.description, onActionClick: onNodeActionClick, onClick: onNodeClick, actions: actions, additionalData: node.additionalData }, void 0));
135
+ }
136
+ return flowNode;
137
+ });
138
+ const connectors = graphData.connectors.map(connector => {
139
+ return {
140
+ ...connector,
141
+ points: [],
142
+ data: {
143
+ label: connector.label
144
+ }
145
+ };
146
+ });
147
+ dispatch({
148
+ type: 'setGraphData',
149
+ payload: { nodes: flowNodes, connectors }
150
+ });
151
+ }, [graphData]);
152
+ /**
153
+ * Library popover functionality
154
+ */
155
+ const closeMenu = () => {
156
+ dispatch({
157
+ type: 'showLibrary',
158
+ payload: {
159
+ show: false
160
+ }
161
+ });
162
+ };
163
+ const onLibraryItemSelect = useCallback((libItem) => {
164
+ onNodeAdd(libItem.type, state.activeAddBtnMeta.meta);
29
165
  closeMenu();
30
- }, [previousNodeId]);
166
+ }, [state.activeAddBtnMeta] // TODO VERIFY whether this parameter helps or not
167
+ );
31
168
  const onKeydown = useCallback((e) => {
32
169
  if (e.key === 'Escape') {
33
170
  closeMenu();
34
171
  }
35
172
  }, [closeMenu]);
36
- useOuterEvent('mousedown', [popoverEl, buttonRefs.current[previousNodeId]], closeMenu);
37
- useEffect(() => {
38
- if (open) {
39
- searchElRef?.current?.focus();
40
- }
41
- }, [open, searchElRef.current]);
173
+ useOuterEvent('mousedown', [popoverEl], closeMenu);
42
174
  useEffect(() => {
43
175
  document.addEventListener('keydown', onKeydown);
44
176
  return () => {
45
177
  document.removeEventListener('keydown', onKeydown);
46
178
  };
47
- }, [onKeydown]);
48
- useAfterInitialEffect(() => {
49
- nodeRef?.current?.focus();
50
- }, [nodes]);
179
+ }, []);
51
180
  const items = nodeLibrary !== undefined ? nodeLibrary : [];
52
- const itemsToRender = useMemo(() => {
53
- return menuHelpers.mapTree(search
54
- ? menuHelpers.flatten(items).filter(({ primary }) => {
55
- return searchRegex.test(primary);
56
- })
57
- : items, node => {
58
- const selectable = !node.items;
59
- const nodeItem = node;
60
- return {
61
- ...node,
62
- visual: nodeItem.type ? (_jsx(StyledIcon, Object.assign({ id: node.id, type: nodeItem.type }, { children: _jsx(Icon, { name: assignmentVisual[nodeItem.type] }, void 0) }), void 0)) : undefined,
63
- count: node.items ? node.items.length : undefined,
64
- secondary: node.secondary,
65
- selected: selectable ? !!node.selected : undefined
66
- };
181
+ const onNodeCreate = (el, meta) => {
182
+ dispatch({
183
+ type: 'setActiveAddButton',
184
+ payload: {
185
+ target: el,
186
+ meta
187
+ }
188
+ });
189
+ // TODO try to merge both the above and below dispatches into one
190
+ dispatch({
191
+ type: 'showLibrary',
192
+ payload: {
193
+ show: true
194
+ }
67
195
  });
68
- }, [search, nodeLibrary, searchRegex]);
69
- return (_jsxs(Flex, Object.assign({ container: { justify: 'center', direction: 'column' } }, restProps, { children: [nodes.map(node => (_jsxs(Fragment, { children: [node.type === 'start' && (_jsx(StartNode, { id: node.id, type: node.type, label: t('start').toUpperCase() }, void 0)), node.type !== 'start' && node.type !== 'stop' && (_jsx(DefaultNode, { id: node.id, ref: nodeRef, label: node.label, type: node.type, description: node.description, onActionClick: onNodeActionClick, onClick: onNodeClick, actions: actions, additionalData: node.additionalData }, void 0)), node.type === 'stop' && (_jsx(EndNode, { id: node.id, type: node.type, label: t('end').toUpperCase() }, void 0)), node.connectors &&
70
- node.connectors?.map(({ id, label, targetNodeId }) => (_jsx(Connector, { id: id, label: label, ref: el => {
71
- buttonRefs.current[node.id] = el;
72
- }, targetNodeId: targetNodeId, onAddClick: () => {
73
- setPreviousNodeId(node.id);
74
- setOpen(cur => !cur);
75
- }, active: open && previousNodeId === node.id }, id)))] }, node.id))), _jsx(StyledPopover, Object.assign({ show: open, target: previousNodeId ? buttonRefs.current[previousNodeId] : null, ref: setPopoverEl }, { children: _jsx(Menu, { items: itemsToRender, onItemClick: onItemSelect, header: _jsx(SearchInput, { ref: searchElRef, onSearchChange: setSearch, value: search, searchInputAriaLabel: t('search_nodes'), placeholder: t('search_nodes') }, void 0) }, void 0) }), void 0)] }), void 0));
196
+ };
197
+ const newGraphData = injectPlaceholderNodes(state.graphData, onNodeCreate);
198
+ return (_jsxs("div", { children: [_jsx(FlowRenderer, { graphData: newGraphData }, void 0), _jsx(NodeLibrary, { show: state.showLib, target: state.activeAddBtnMeta.target, items: items, onClick: onLibraryItemSelect, ref: setPopoverEl }, void 0)] }, void 0));
76
199
  };
77
200
  export default FlowModeller;
78
201
  //# sourceMappingURL=FlowModeller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowModeller.js","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,MAAM,EACN,SAAS,EACT,OAAO,EAER,MAAM,OAAO,CAAC;AACf,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAEL,YAAY,EACZ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,UAAU,EACV,OAAO,EACP,aAAa,EACd,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,SAAS,MAAM,aAAa,CAAC;AAkBpC,MAAM,aAAa,GAAmB,MAAM,CAAC,OAAO,CAAC,CAAA;;CAEpD,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,EACpB,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,GAAG,SAAS,EACuB,EAAE,EAAE;IACvC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,CAA8C,EAAE,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,UAAU,CAAc,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAC9B,EAAE,CAAC,EAAE;QACH,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAoB,CAAC;QAC7E,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1D,SAAS,EAAE,CAAC;IACd,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAgB,EAAE,EAAE;QACnB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YACtB,SAAS,EAAE,CAAC;SACb;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAEvF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,EAAE;YACR,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAC/B;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,qBAAqB,CAAC,GAAG,EAAE;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAsB,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,OAAO,WAAW,CAAC,OAAO,CACxB,MAAM;YACJ,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAiB,EAAE,EAAE;gBAC/D,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC;YACJ,CAAC,CAAC,KAAK,EACT,IAAI,CAAC,EAAE;YACL,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAE/B,MAAM,QAAQ,GAAoB,IAAuB,CAAC;YAC1D,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CACtB,KAAC,UAAU,kBAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,gBAC1C,KAAC,IAAI,IAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAI,YACpC,CACd,CAAC,CAAC,CAAC,SAAS;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aACnD,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvC,OAAO,CACL,MAAC,IAAI,kBAAC,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAM,SAAS,eACvE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACjB,MAAC,QAAQ,eACN,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CACxB,KAAC,SAAS,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,WAAI,CAC7E,EACA,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAChD,KAAC,WAAW,IACV,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,IAAI,CAAC,cAAc,WACnC,CACH,EACA,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CACvB,KAAC,OAAO,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,WAAI,CACzE,EACA,IAAI,CAAC,UAAU;wBACd,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CACpD,KAAC,SAAS,IAER,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,EAAE,CAAC,EAAE;gCACR,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;4BACnC,CAAC,EACD,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,GAAG,EAAE;gCACf,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;4BACvB,CAAC,EACD,MAAM,EAAE,IAAI,IAAI,cAAc,KAAK,IAAI,CAAC,EAAE,IAXrC,EAAE,CAYP,CACH,CAAC,KApCS,IAAI,CAAC,EAAE,CAqCX,CACZ,CAAC,EACF,KAAC,aAAa,kBACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAClE,GAAG,EAAE,YAAY,gBAEjB,KAAC,IAAI,IACH,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,YAAY,EACzB,MAAM,EACJ,KAAC,WAAW,IACV,GAAG,EAAE,WAAW,EAChB,cAAc,EAAE,SAAS,EACzB,KAAK,EAAE,MAAM,EACb,oBAAoB,EAAE,CAAC,CAAC,cAAc,CAAC,EACvC,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC,WAC9B,WAEJ,YACY,aACX,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import {\n PropsWithoutRef,\n Fragment,\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n MouseEvent\n} from 'react';\nimport styled from 'styled-components';\n\nimport {\n Action,\n escapeRegExp,\n Flex,\n Icon,\n Menu,\n menuHelpers,\n Popover,\n SearchInput,\n useAfterInitialEffect,\n useElement,\n useI18n,\n useOuterEvent\n} from '@pega/cosmos-react-core';\nimport { MenuItemProps } from '@pega/cosmos-react-core/lib/components/Menu/Menu.types';\n\nimport { assignmentVisual, StartNode, EndNode, DefaultNode } from './Node/NodeTemplates';\nimport { StyledIcon } from './Node/NodeTemplate.styles';\nimport Connector from './Connector';\nimport { ActionParams, NodeProps, SelectedNodeParam, NodeLibraryItem } from './Node/Node.types';\n\nexport interface FlowModellerProps {\n /** List of nodes */\n nodes: NodeProps[];\n /** Node actions */\n actions?: Action[];\n /** Callback to add node from connector */\n onNodeAdd: (selectedNode: SelectedNodeParam) => void;\n /** Callback for handling the click on the node */\n onNodeClick?: (nodeId: string) => void;\n /** Callback for actions on Node */\n onNodeActionClick?: (param: ActionParams, e: MouseEvent) => void;\n /** Types of nodes */\n nodeLibrary: NodeLibraryItem[];\n}\n\nconst StyledPopover: typeof Popover = styled(Popover)`\n min-width: 40ch;\n`;\n\nconst FlowModeller = ({\n nodes,\n nodeLibrary,\n actions,\n onNodeAdd,\n onNodeClick,\n onNodeActionClick,\n ...restProps\n}: PropsWithoutRef<FlowModellerProps>) => {\n const [open, setOpen] = useState(false);\n const buttonRefs = useRef<{ [key: string]: HTMLButtonElement | null }>({});\n const nodeRef = useRef<HTMLElement>(null);\n const [popoverEl, setPopoverEl] = useElement<HTMLElement>(null);\n const [previousNodeId, setPreviousNodeId] = useState('');\n const [search, setSearch] = useState('');\n const searchElRef = useRef<HTMLInputElement>(null);\n const t = useI18n();\n const searchRegex = useMemo(() => {\n return new RegExp(escapeRegExp(search));\n }, [search]);\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n }, []);\n\n const onItemSelect = useCallback(\n id => {\n const selectedNode = menuHelpers.getItem(nodeLibrary, id) as NodeLibraryItem;\n onNodeAdd({ nodeId: previousNodeId, node: selectedNode });\n closeMenu();\n },\n [previousNodeId]\n );\n\n const onKeydown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n closeMenu();\n }\n },\n [closeMenu]\n );\n\n useOuterEvent('mousedown', [popoverEl, buttonRefs.current[previousNodeId]], closeMenu);\n\n useEffect(() => {\n if (open) {\n searchElRef?.current?.focus();\n }\n }, [open, searchElRef.current]);\n\n useEffect(() => {\n document.addEventListener('keydown', onKeydown);\n return () => {\n document.removeEventListener('keydown', onKeydown);\n };\n }, [onKeydown]);\n\n useAfterInitialEffect(() => {\n nodeRef?.current?.focus();\n }, [nodes]);\n\n const items: NodeLibraryItem[] = nodeLibrary !== undefined ? nodeLibrary : [];\n\n const itemsToRender = useMemo(() => {\n return menuHelpers.mapTree(\n search\n ? menuHelpers.flatten(items).filter(({ primary }: MenuItemProps) => {\n return searchRegex.test(primary);\n })\n : items,\n node => {\n const selectable = !node.items;\n\n const nodeItem: NodeLibraryItem = node as NodeLibraryItem;\n return {\n ...node,\n visual: nodeItem.type ? (\n <StyledIcon id={node.id} type={nodeItem.type}>\n <Icon name={assignmentVisual[nodeItem.type]} />\n </StyledIcon>\n ) : undefined,\n count: node.items ? node.items.length : undefined,\n secondary: node.secondary,\n selected: selectable ? !!node.selected : undefined\n };\n }\n );\n }, [search, nodeLibrary, searchRegex]);\n\n return (\n <Flex container={{ justify: 'center', direction: 'column' }} {...restProps}>\n {nodes.map(node => (\n <Fragment key={node.id}>\n {node.type === 'start' && (\n <StartNode id={node.id} type={node.type} label={t('start').toUpperCase()} />\n )}\n {node.type !== 'start' && node.type !== 'stop' && (\n <DefaultNode\n id={node.id}\n ref={nodeRef}\n label={node.label}\n type={node.type}\n description={node.description}\n onActionClick={onNodeActionClick}\n onClick={onNodeClick}\n actions={actions}\n additionalData={node.additionalData}\n />\n )}\n {node.type === 'stop' && (\n <EndNode id={node.id} type={node.type} label={t('end').toUpperCase()} />\n )}\n {node.connectors &&\n node.connectors?.map(({ id, label, targetNodeId }) => (\n <Connector\n key={id}\n id={id}\n label={label}\n ref={el => {\n buttonRefs.current[node.id] = el;\n }}\n targetNodeId={targetNodeId}\n onAddClick={() => {\n setPreviousNodeId(node.id);\n setOpen(cur => !cur);\n }}\n active={open && previousNodeId === node.id}\n />\n ))}\n </Fragment>\n ))}\n <StyledPopover\n show={open}\n target={previousNodeId ? buttonRefs.current[previousNodeId] : null}\n ref={setPopoverEl}\n >\n <Menu\n items={itemsToRender}\n onItemClick={onItemSelect}\n header={\n <SearchInput\n ref={searchElRef}\n onSearchChange={setSearch}\n value={search}\n searchInputAriaLabel={t('search_nodes')}\n placeholder={t('search_nodes')}\n />\n }\n />\n </StyledPopover>\n </Flex>\n );\n};\n\nexport default FlowModeller;\n"]}
1
+ {"version":3,"file":"FlowModeller.js","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":"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","sourcesContent":["import { PropsWithoutRef, useEffect, MouseEvent, useReducer, Reducer, useCallback } from 'react';\n\nimport { Action, useElement, useOuterEvent } from '@pega/cosmos-react-core';\n\nimport { DirectedGraph, GraphData, ConnectorProps } from './Renderer/Utils/Graph';\nimport { AddButton } from './Renderer/AddNode';\nimport {\n AddNodeHandlerParams,\n RendererConnectorProps,\n RendererNodeProps\n} from './Renderer/Renderer.types';\nimport FlowRenderer from './Renderer/Renderer';\nimport { StartNode, EndNode, DefaultNode } from './Node/NodeTemplates';\nimport {\n ActionParams,\n NodeProps,\n NodeLibraryItem,\n START_NODETYPE,\n STOP_NODETYPE,\n NodeType\n} from './Node/Node.types';\nimport NodeLibrary from './NodeLibrary';\n\nexport interface FlowModellerProps {\n graphData: GraphData<NodeProps, ConnectorProps>;\n /** Node actions */\n actions?: Action[];\n /** Callback to add node from connector */\n onNodeAdd: (nodeType: NodeType, params: AddNodeHandlerParams) => void;\n /** Callback for handling the click on the node */\n onNodeClick?: (nodeId: string) => void;\n /** Callback for actions on Node */\n onNodeActionClick?: (param: ActionParams, e: MouseEvent) => void;\n /** Types of nodes */\n nodeLibrary: NodeLibraryItem[];\n}\n\ntype ModellerState = {\n showLib: boolean;\n activeAddBtnMeta: {\n target: null; // we will maintain ref of an Element\n meta: AddNodeHandlerParams;\n };\n graphData: GraphData<RendererNodeProps, RendererConnectorProps>;\n};\n\nconst initState: ModellerState = {\n showLib: false,\n activeAddBtnMeta: {\n target: null,\n meta: {\n refType: 'node',\n refId: ''\n }\n },\n graphData: { nodes: [], connectors: [] }\n};\n\nconst reducer = (state: ModellerState, action: { type: string; payload: any }) => {\n switch (action.type) {\n case 'showLibrary':\n // minor optimization, not to update state.. if no change in the value\n return action.payload.show === state.showLib\n ? state\n : { ...state, showLib: action.payload.show };\n case 'setActiveAddButton':\n state.activeAddBtnMeta = {\n ...action.payload\n };\n return {\n ...state\n };\n case 'setGraphData':\n return {\n ...state,\n graphData: action.payload\n };\n default:\n return state;\n }\n};\n\ninterface AddNodeProps extends RendererNodeProps {\n onClick?: (ev: Event) => void;\n}\n\nconst injectPlaceholderNodes: (\n graphData: GraphData<RendererNodeProps, RendererConnectorProps>,\n onAddNode: (el: HTMLElement, meta: AddNodeHandlerParams) => void\n) => GraphData<RendererNodeProps, RendererConnectorProps> = (graphData, onAddNode) => {\n const targetGraph = new DirectedGraph(graphData);\n\n // iterate all nodes with more than one in-connectors and insert addNode.\n targetGraph.getNodes().forEach(node => {\n if (targetGraph.getPrevNodesCount(node.id) > 1) {\n const metaData: AddNodeHandlerParams = {\n refType: 'node',\n refId: node.id\n };\n\n // create a new placeholder node\n const addShapeNode: AddNodeProps = {\n id: `temp-${node.id}`,\n children: (\n <AddButton\n addNodeHandler={(e: MouseEvent<HTMLButtonElement>) => {\n onAddNode(e.target as HTMLElement, metaData);\n }}\n />\n ),\n position: { x: 0, y: 0 },\n dimensions: { width: 20, height: 16 }\n };\n\n targetGraph.addNode(addShapeNode);\n\n // connect all in-connectors to a new node and create a new connector that connects from new node to the actual toNodeId.\n targetGraph.getInConnectors(node.id).forEach(con => {\n con.toNodeId = addShapeNode.id;\n });\n\n const newConnector: RendererConnectorProps = {\n id: `placeholder-${addShapeNode.id}-${node.id}`,\n fromNodeId: addShapeNode.id,\n toNodeId: node.id,\n points: []\n };\n\n targetGraph.addConnector(newConnector);\n }\n });\n\n // iterate all connectors and inject addNodes.\n targetGraph.getConnectors().forEach((con: RendererConnectorProps) => {\n // Condition to skip processing placeholder connectors created in the previous step\n if (con.id.startsWith('placeholder-')) {\n return;\n }\n\n const metaData: AddNodeHandlerParams = {\n refType: 'connector',\n refId: con.id\n };\n\n const addShapeNode: AddNodeProps = {\n id: `temp-con-${con.id}`,\n children: (\n <AddButton\n addNodeHandler={(e: MouseEvent<HTMLButtonElement>) => {\n onAddNode(e.target as HTMLElement, metaData);\n }}\n />\n ),\n position: { x: 0, y: 0 },\n dimensions: { width: 20, height: 16 }\n };\n\n targetGraph.addNode(addShapeNode);\n\n const newConnector: RendererConnectorProps = {\n id: `con-${con.id}`,\n fromNodeId: addShapeNode.id,\n toNodeId: con.toNodeId,\n points: []\n };\n\n targetGraph.addConnector(newConnector);\n con.toNodeId = addShapeNode.id;\n });\n\n return targetGraph.getGraphData();\n};\n\nconst FlowModeller = ({\n graphData,\n onNodeActionClick,\n onNodeClick,\n onNodeAdd,\n nodeLibrary,\n actions\n}: PropsWithoutRef<FlowModellerProps>) => {\n const [state, dispatch] = useReducer<Reducer<ModellerState, any>>(reducer, initState);\n\n const [popoverEl, setPopoverEl] = useElement<HTMLElement>(null);\n\n useEffect(() => {\n const flowNodes: RendererNodeProps[] = graphData.nodes.map(node => {\n const flowNode: RendererNodeProps = {\n ...node,\n children: <></>,\n dimensions: {\n width: 280,\n height: 120\n },\n position: {\n x: 0,\n y: 0\n }\n };\n\n if (node.type.id === START_NODETYPE.id) {\n flowNode.dimensions.width = 50;\n flowNode.dimensions.height = 50;\n\n flowNode.children = (\n <StartNode id={node.id} type={node.type} label={node.label.toUpperCase()} />\n );\n } else if (node.type.id === STOP_NODETYPE.id) {\n flowNode.dimensions.width = 50;\n flowNode.dimensions.height = 50;\n\n flowNode.children = (\n <EndNode id={node.id} type={node.type} label={node.label.toUpperCase()} />\n );\n } else {\n flowNode.children = (\n <DefaultNode\n id={node.id}\n label={node.label}\n type={node.type}\n description={node.description}\n onActionClick={onNodeActionClick}\n onClick={onNodeClick}\n actions={actions}\n additionalData={node.additionalData}\n />\n );\n }\n\n return flowNode;\n });\n\n const connectors: RendererConnectorProps[] = graphData.connectors.map(connector => {\n return {\n ...connector,\n points: [],\n data: {\n label: connector.label\n }\n };\n });\n\n dispatch({\n type: 'setGraphData',\n payload: { nodes: flowNodes, connectors }\n });\n }, [graphData]);\n\n /**\n * Library popover functionality\n */\n const closeMenu = () => {\n dispatch({\n type: 'showLibrary',\n payload: {\n show: false\n }\n });\n };\n\n const onLibraryItemSelect = useCallback(\n (libItem: NodeLibraryItem) => {\n onNodeAdd(libItem.type, state.activeAddBtnMeta.meta);\n\n closeMenu();\n },\n [state.activeAddBtnMeta] // TODO VERIFY whether this parameter helps or not\n );\n\n const onKeydown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n closeMenu();\n }\n },\n [closeMenu]\n );\n\n useOuterEvent('mousedown', [popoverEl], closeMenu);\n\n useEffect(() => {\n document.addEventListener('keydown', onKeydown);\n return () => {\n document.removeEventListener('keydown', onKeydown);\n };\n }, []);\n\n const items: NodeLibraryItem[] = nodeLibrary !== undefined ? nodeLibrary : [];\n\n const onNodeCreate = (el: HTMLElement, meta: AddNodeHandlerParams) => {\n dispatch({\n type: 'setActiveAddButton',\n payload: {\n target: el,\n meta\n }\n });\n\n // TODO try to merge both the above and below dispatches into one\n dispatch({\n type: 'showLibrary',\n payload: {\n show: true\n }\n });\n };\n\n const newGraphData: GraphData<RendererNodeProps, RendererConnectorProps> = injectPlaceholderNodes(\n state.graphData,\n onNodeCreate\n );\n\n return (\n <div>\n <FlowRenderer graphData={newGraphData} />\n <NodeLibrary\n show={state.showLib}\n target={state.activeAddBtnMeta.target}\n items={items}\n onClick={onLibraryItemSelect}\n ref={setPopoverEl}\n />\n </div>\n );\n};\n\nexport default FlowModeller;\n"]}
@@ -1,7 +1,20 @@
1
1
  import { Ref, MouseEvent } from 'react';
2
- import { Action, MenuItemProps } from '@pega/cosmos-react-core';
3
- import { ConnectorProps } from '../Connector';
4
- export interface NodeProps {
2
+ import { Action, MenuItemProps, OmitStrict } from '@pega/cosmos-react-core';
3
+ import { Node } from '../Renderer/Utils/Graph';
4
+ export interface NodeType {
5
+ id: string;
6
+ name: string;
7
+ color: string;
8
+ icon: string;
9
+ minConnectors: number;
10
+ defaults: {
11
+ node: OmitStrict<NodeProps, 'type' | 'id'>;
12
+ connector: {
13
+ label: string;
14
+ }[];
15
+ };
16
+ }
17
+ export interface NodeProps extends Node {
5
18
  /** Unique id for Node */
6
19
  id: string;
7
20
  /** Label for Node */
@@ -9,14 +22,8 @@ export interface NodeProps {
9
22
  /** Description for Node */
10
23
  description?: string;
11
24
  /** Additional data for Node */
12
- additionalData?: {
13
- label: string;
14
- value: string;
15
- }[];
16
- /** Type of the Node */
17
- type: 'start' | 'stop' | 'assignment' | 'decision' | 'question' | 'message' | 'automation';
18
- /** Connectors for the node */
19
- connectors?: ConnectorProps[];
25
+ additionalData?: AdditionalDataItemProps[];
26
+ type: NodeType;
20
27
  }
21
28
  export interface NodeComponentProps extends NodeProps {
22
29
  /** Callback for the node actions click */
@@ -28,17 +35,20 @@ export interface NodeComponentProps extends NodeProps {
28
35
  /** Ref of the node */
29
36
  ref?: Ref<HTMLElement>;
30
37
  }
38
+ export interface AdditionalDataItemProps {
39
+ id: string;
40
+ label: string;
41
+ value: string;
42
+ }
31
43
  export interface ActionParams {
32
44
  actionId: string;
33
45
  nodeId: NodeProps['id'];
34
46
  }
35
- export interface SelectedNodeParam {
36
- nodeId: NodeProps['id'];
37
- node: NodeLibraryItem;
38
- }
39
47
  export interface NodeLibraryItem extends MenuItemProps {
40
48
  id: string;
41
- type?: NodeProps['type'];
49
+ type: NodeType;
42
50
  items?: NodeLibraryItem[];
43
51
  }
52
+ export declare const START_NODETYPE: NodeType;
53
+ export declare const STOP_NODETYPE: NodeType;
44
54
  //# sourceMappingURL=Node.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Node.types.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,cAAc,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,uBAAuB;IACvB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IAC3F,8BAA8B;IAC9B,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9D,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5C,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B"}
1
+ {"version":3,"file":"Node.types.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,MAAM,WAAW,QAAQ;IAEvB,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IAEb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QAC3C,SAAS,EAAE;YACT,KAAK,EAAE,MAAM,CAAC;SACf,EAAE,CAAC;KACL,CAAC;CACH;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI;IACrC,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAE3C,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9D,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5C,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,QAY3B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,QAY1B,CAAC"}
@@ -1,2 +1,28 @@
1
- export {};
1
+ import { themeDefinition } from '@pega/cosmos-react-core';
2
+ export const START_NODETYPE = Object.freeze({
3
+ id: 'start',
4
+ name: 'start',
5
+ color: themeDefinition.base.colors.green.medium.$value,
6
+ icon: 'circle',
7
+ minConnectors: 1,
8
+ defaults: {
9
+ node: {
10
+ label: 'Start'
11
+ },
12
+ connector: []
13
+ }
14
+ });
15
+ export const STOP_NODETYPE = Object.freeze({
16
+ id: 'stop',
17
+ name: 'stop',
18
+ color: themeDefinition.base.colors.red.light.$value,
19
+ icon: 'circle',
20
+ minConnectors: 0,
21
+ defaults: {
22
+ node: {
23
+ label: 'Stop'
24
+ },
25
+ connector: []
26
+ }
27
+ });
2
28
  //# sourceMappingURL=Node.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Node.types.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref, MouseEvent } from 'react';\n\nimport { Action, MenuItemProps } from '@pega/cosmos-react-core';\n\nimport { ConnectorProps } from '../Connector';\n\nexport interface NodeProps {\n /** Unique id for Node */\n id: string;\n /** Label for Node */\n label: string;\n /** Description for Node */\n description?: string;\n /** Additional data for Node */\n additionalData?: {\n label: string;\n value: string;\n }[];\n /** Type of the Node */\n type: 'start' | 'stop' | 'assignment' | 'decision' | 'question' | 'message' | 'automation';\n /** Connectors for the node */\n connectors?: ConnectorProps[];\n}\n\nexport interface NodeComponentProps extends NodeProps {\n /** Callback for the node actions click */\n onActionClick?: (params: ActionParams, e: MouseEvent) => void;\n /** Callback for the node click */\n onClick?: (nodeId: NodeProps['id']) => void;\n /** Actions for the node click */\n actions?: Action[];\n /** Ref of the node */\n ref?: Ref<HTMLElement>;\n}\n\nexport interface ActionParams {\n actionId: string;\n nodeId: NodeProps['id'];\n}\n\nexport interface SelectedNodeParam {\n nodeId: NodeProps['id'];\n node: NodeLibraryItem;\n}\n\nexport interface NodeLibraryItem extends MenuItemProps {\n id: string;\n type?: NodeProps['type'];\n items?: NodeLibraryItem[];\n}\n"]}
1
+ {"version":3,"file":"Node.types.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,eAAe,EAAE,MAAM,yBAAyB,CAAC;AA+D7F,MAAM,CAAC,MAAM,cAAc,GAAa,MAAM,CAAC,MAAM,CAAC;IACpD,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;IACtD,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,KAAK,EAAE,OAAO;SACf;QACD,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAa,MAAM,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM;IACnD,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM;SACd;QACD,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC","sourcesContent":["import { Ref, MouseEvent } from 'react';\n\nimport { Action, MenuItemProps, OmitStrict, themeDefinition } from '@pega/cosmos-react-core';\n\nimport { Node } from '../Renderer/Utils/Graph';\n\nexport interface NodeType {\n /* node type id. this must be unique */\n id: string;\n /* human readable name of the type */\n name: string;\n /* color that represents the type */\n color: string;\n /* icon that represents the type */\n icon: string;\n /* min no. of connectors */\n minConnectors: number;\n defaults: {\n node: OmitStrict<NodeProps, 'type' | 'id'>;\n connector: {\n label: string;\n }[];\n };\n}\n\nexport interface NodeProps extends Node {\n /** Unique id for Node */\n id: string;\n /** Label for Node */\n label: string;\n /** Description for Node */\n description?: string;\n /** Additional data for Node */\n additionalData?: AdditionalDataItemProps[];\n /* type of the Node */\n type: NodeType;\n}\n\nexport interface NodeComponentProps extends NodeProps {\n /** Callback for the node actions click */\n onActionClick?: (params: ActionParams, e: MouseEvent) => void;\n /** Callback for the node click */\n onClick?: (nodeId: NodeProps['id']) => void;\n /** Actions for the node click */\n actions?: Action[];\n /** Ref of the node */\n ref?: Ref<HTMLElement>;\n}\n\nexport interface AdditionalDataItemProps {\n id: string;\n label: string;\n value: string;\n}\nexport interface ActionParams {\n actionId: string;\n nodeId: NodeProps['id'];\n}\n\nexport interface NodeLibraryItem extends MenuItemProps {\n id: string;\n type: NodeType;\n items?: NodeLibraryItem[];\n}\n\nexport const START_NODETYPE: NodeType = Object.freeze({\n id: 'start',\n name: 'start',\n color: themeDefinition.base.colors.green.medium.$value,\n icon: 'circle',\n minConnectors: 1,\n defaults: {\n node: {\n label: 'Start'\n },\n connector: []\n }\n});\n\nexport const STOP_NODETYPE: NodeType = Object.freeze({\n id: 'stop',\n name: 'stop',\n color: themeDefinition.base.colors.red.light.$value,\n icon: 'circle',\n minConnectors: 0,\n defaults: {\n node: {\n label: 'Stop'\n },\n connector: []\n }\n});\n"]}
@@ -1,14 +1,19 @@
1
- import { NodeProps } from './Node.types';
1
+ import { NodeType } from './Node.types';
2
2
  export declare const StyledCircle: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
3
- type: string;
3
+ color: NodeType['color'];
4
4
  }, never>;
5
5
  export declare const StyledLabel: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").LabelProps & import("@pega/cosmos-react-core").ForwardProps>, import("styled-components").DefaultTheme, {
6
- type: string;
6
+ type: NodeType;
7
+ }, never>;
8
+ export declare const StyledIcon: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
9
+ color: string;
7
10
  }, never>;
8
- export declare const StyledIcon: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, Pick<NodeProps, "type">, never>;
9
11
  export declare const StyledCardHeader: import("styled-components").StyledComponent<"header", import("styled-components").DefaultTheme, {}, never>;
10
12
  export declare const StyledText: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").TextProps & import("@pega/cosmos-react-core").ForwardProps>, import("styled-components").DefaultTheme, {}, never>;
11
13
  export declare const StyledCard: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").CardProps & import("@pega/cosmos-react-core").ForwardProps>, import("styled-components").DefaultTheme, {}, never>;
14
+ export declare const StyledCardFooter: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").CardFooterProps & import("@pega/cosmos-react-core").ForwardProps>, import("styled-components").DefaultTheme, {}, never>;
12
15
  export declare const StyledCardContent: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
13
- export declare const StyledAdditionalData: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
16
+ export declare const StyledAdditionalData: import("styled-components").StyledComponent<"dl", import("styled-components").DefaultTheme, {}, never>;
17
+ export declare const StyledAdditionalDataItem: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
18
+ export declare const StyledTextWithEllipsis: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").TextProps & import("@pega/cosmos-react-core").ForwardProps>, import("styled-components").DefaultTheme, {}, never>;
14
19
  //# sourceMappingURL=NodeTemplate.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeTemplate.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/NodeTemplate.styles.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,YAAY;UAAsB,MAAM;SAanD,CAAC;AAIH,eAAO,MAAM,WAAW;UAAyB,MAAM;SAWrD,CAAC;AAIH,eAAO,MAAM,UAAU,8HAqBrB,CAAC;AAIH,eAAO,MAAM,gBAAgB,4GAO3B,CAAC;AAIH,eAAO,MAAM,UAAU,mOAOrB,CAAC;AAIH,eAAO,MAAM,UAAU,mOAoBrB,CAAC;AAIH,eAAO,MAAM,iBAAiB,yGAY5B,CAAC;AAIH,eAAO,MAAM,oBAAoB,yGAY/B,CAAC"}
1
+ {"version":3,"file":"NodeTemplate.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/NodeTemplate.styles.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,eAAO,MAAM,YAAY;WAAuB,QAAQ,CAAC,OAAO,CAAC;SAY/D,CAAC;AAIH,eAAO,MAAM,WAAW;UAAyB,QAAQ;SAWvD,CAAC;AAIH,eAAO,MAAM,UAAU;WAAuB,MAAM;SAalD,CAAC;AAIH,eAAO,MAAM,gBAAgB,4GAQ3B,CAAC;AAIH,eAAO,MAAM,UAAU,mOAOrB,CAAC;AAIH,eAAO,MAAM,UAAU,mOAoBrB,CAAC;AAEH,eAAO,MAAM,gBAAgB,yOAO3B,CAAC;AAIH,eAAO,MAAM,iBAAiB,yGAW5B,CAAC;AAIH,eAAO,MAAM,oBAAoB,wGAEhC,CAAC;AAEF,eAAO,MAAM,wBAAwB,yGAMnC,CAAC;AAGH,eAAO,MAAM,sBAAsB,mOAQjC,CAAC"}