@elyra/canvas 12.21.0 → 12.23.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 (159) hide show
  1. package/dist/canvas-constants-09ffa4d4.js +2 -0
  2. package/dist/canvas-constants-09ffa4d4.js.map +1 -0
  3. package/dist/canvas-constants-ab55d0fd.js +2 -0
  4. package/dist/canvas-constants-ab55d0fd.js.map +1 -0
  5. package/dist/canvas-controller-017926a9.js +2 -0
  6. package/dist/canvas-controller-017926a9.js.map +1 -0
  7. package/dist/canvas-controller-51626884.js +2 -0
  8. package/dist/canvas-controller-51626884.js.map +1 -0
  9. package/dist/{canvas-logger-a0f1beaa.js → canvas-logger-3459dfc2.js} +2 -2
  10. package/dist/{canvas-logger-a0f1beaa.js.map → canvas-logger-3459dfc2.js.map} +1 -1
  11. package/dist/{canvas-logger-815781bb.js → canvas-logger-fa8cef5b.js} +2 -2
  12. package/dist/{canvas-logger-815781bb.js.map → canvas-logger-fa8cef5b.js.map} +1 -1
  13. package/dist/common-canvas-3330e83f.js +2 -0
  14. package/dist/common-canvas-3330e83f.js.map +1 -0
  15. package/dist/common-canvas-b2956514.js +2 -0
  16. package/dist/common-canvas-b2956514.js.map +1 -0
  17. package/dist/common-canvas.es.js +1 -1
  18. package/dist/common-canvas.es.js.map +1 -1
  19. package/dist/common-canvas.js +1 -1
  20. package/dist/common-canvas.js.map +1 -1
  21. package/dist/common-properties-9d77f8e1.js +2 -0
  22. package/dist/common-properties-9d77f8e1.js.map +1 -0
  23. package/dist/common-properties-a31de521.js +2 -0
  24. package/dist/common-properties-a31de521.js.map +1 -0
  25. package/dist/{createClass-6db89a23.js → createClass-72b049bc.js} +1 -1
  26. package/dist/createClass-72b049bc.js.map +1 -0
  27. package/dist/{createClass-32a0cf0f.js → createClass-d5cac0b7.js} +1 -1
  28. package/dist/createClass-d5cac0b7.js.map +1 -0
  29. package/dist/{datarecord-metadata-v3-schema-6b6384ff.js → datarecord-metadata-v3-schema-03db5d5d.js} +2 -2
  30. package/dist/{datarecord-metadata-v3-schema-6b6384ff.js.map → datarecord-metadata-v3-schema-03db5d5d.js.map} +1 -1
  31. package/dist/{datarecord-metadata-v3-schema-81228a9a.js → datarecord-metadata-v3-schema-07d7682c.js} +2 -2
  32. package/dist/{datarecord-metadata-v3-schema-81228a9a.js.map → datarecord-metadata-v3-schema-07d7682c.js.map} +1 -1
  33. package/dist/extends-87da7df3.js +7 -0
  34. package/dist/extends-87da7df3.js.map +1 -0
  35. package/dist/{extends-12382a72.js → extends-dc95dba8.js} +2 -2
  36. package/dist/extends-dc95dba8.js.map +1 -0
  37. package/dist/flexible-table-59ad2c83.js +2 -0
  38. package/dist/flexible-table-59ad2c83.js.map +1 -0
  39. package/dist/flexible-table-5c4fbb7b.js +2 -0
  40. package/dist/flexible-table-5c4fbb7b.js.map +1 -0
  41. package/dist/{getPrototypeOf-bf88242f.js → getPrototypeOf-4e282dd3.js} +1 -1
  42. package/dist/getPrototypeOf-4e282dd3.js.map +1 -0
  43. package/dist/{getPrototypeOf-a1c3fe64.js → getPrototypeOf-b3806813.js} +1 -1
  44. package/dist/getPrototypeOf-b3806813.js.map +1 -0
  45. package/dist/{icon-1ef0f3b9.js → icon-2c16236a.js} +2 -2
  46. package/dist/{icon-162ec1ee.js.map → icon-2c16236a.js.map} +1 -1
  47. package/dist/{icon-162ec1ee.js → icon-816af0e7.js} +2 -2
  48. package/dist/{icon-1ef0f3b9.js.map → icon-816af0e7.js.map} +1 -1
  49. package/dist/index-2f6be19d.js +2 -0
  50. package/dist/index-2f6be19d.js.map +1 -0
  51. package/dist/index-6f739fa1.js +2 -0
  52. package/dist/index-6f739fa1.js.map +1 -0
  53. package/dist/lib/canvas-controller.es.js +1 -1
  54. package/dist/lib/canvas-controller.js +1 -1
  55. package/dist/lib/canvas.es.js +1 -1
  56. package/dist/lib/canvas.js +1 -1
  57. package/dist/lib/command-stack.es.js +1 -1
  58. package/dist/lib/command-stack.es.js.map +1 -1
  59. package/dist/lib/command-stack.js +1 -1
  60. package/dist/lib/command-stack.js.map +1 -1
  61. package/dist/lib/context-menu.es.js +1 -1
  62. package/dist/lib/context-menu.es.js.map +1 -1
  63. package/dist/lib/context-menu.js +1 -1
  64. package/dist/lib/context-menu.js.map +1 -1
  65. package/dist/lib/properties/field-picker.es.js +1 -1
  66. package/dist/lib/properties/field-picker.js +1 -1
  67. package/dist/lib/properties/flexible-table.es.js +1 -1
  68. package/dist/lib/properties/flexible-table.js +1 -1
  69. package/dist/lib/properties.es.js +1 -1
  70. package/dist/lib/properties.js +1 -1
  71. package/dist/lib/tooltip.es.js +1 -1
  72. package/dist/lib/tooltip.es.js.map +1 -1
  73. package/dist/lib/tooltip.js +1 -1
  74. package/dist/lib/tooltip.js.map +1 -1
  75. package/dist/styles/common-canvas.min.css +1 -1
  76. package/dist/styles/common-canvas.min.css.map +1 -1
  77. package/dist/{toolbar-bb5bee87.js → toolbar-2ef99bd8.js} +2 -2
  78. package/dist/{toolbar-59ce5251.js.map → toolbar-2ef99bd8.js.map} +1 -1
  79. package/dist/{toolbar-59ce5251.js → toolbar-cb967e26.js} +2 -2
  80. package/dist/{toolbar-bb5bee87.js.map → toolbar-cb967e26.js.map} +1 -1
  81. package/locales/common-properties/locales/en.json +2 -0
  82. package/package.json +1 -1
  83. package/src/common-canvas/cc-contents.jsx +14 -2
  84. package/src/common-canvas/constants/canvas-constants.js +1 -0
  85. package/src/common-canvas/svg-canvas-d3.js +8 -0
  86. package/src/common-canvas/svg-canvas-d3.scss +1 -1
  87. package/src/common-canvas/svg-canvas-renderer.js +165 -130
  88. package/src/common-canvas/svg-canvas-utils-decs.js +3 -2
  89. package/src/common-canvas/svg-canvas-utils-textarea.js +19 -5
  90. package/src/common-properties/components/editor-form/editor-form.jsx +52 -21
  91. package/src/common-properties/components/flexible-table/flexible-table.scss +3 -2
  92. package/src/common-properties/components/virtualized-table/virtualized-table.jsx +38 -34
  93. package/src/common-properties/components/virtualized-table/virtualized-table.scss +17 -0
  94. package/src/common-properties/constants/constants.js +3 -0
  95. package/src/common-properties/controls/datefield/datefield.jsx +1 -1
  96. package/src/common-properties/controls/dropdown/dropdown.jsx +3 -3
  97. package/src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx +25 -18
  98. package/src/common-properties/controls/expression/expression.jsx +1 -1
  99. package/src/common-properties/controls/expression/expressionInfo-parser.js +11 -0
  100. package/src/common-properties/controls/list/list.jsx +1 -1
  101. package/src/common-properties/controls/multiselect/multiselect.jsx +2 -2
  102. package/src/common-properties/controls/numberfield/numberfield.jsx +1 -1
  103. package/src/common-properties/controls/passwordfield/passwordfield.jsx +3 -3
  104. package/src/common-properties/controls/selectcolumns/selectcolumns.jsx +1 -1
  105. package/src/common-properties/controls/someofselect/someofselect.jsx +1 -1
  106. package/src/common-properties/controls/textarea/textarea.jsx +2 -2
  107. package/src/common-properties/controls/textfield/textfield.jsx +1 -1
  108. package/src/common-properties/controls/timefield/timefield.jsx +1 -1
  109. package/src/common-properties/controls/toggle/toggle.jsx +1 -3
  110. package/src/common-properties/controls/toggle/toggle.scss +7 -4
  111. package/src/common-properties/form/ControlInfo.js +1 -0
  112. package/src/common-properties/form/EditorForm.js +18 -11
  113. package/src/common-properties/index.scss +5 -0
  114. package/src/common-properties/panels/tearsheet/tearsheet.jsx +9 -22
  115. package/src/common-properties/panels/tearsheet/tearsheet.scss +7 -1
  116. package/src/common-properties/properties-controller.js +6 -2
  117. package/src/common-properties/ui-conditions/ui-conditions-parser.js +1 -0
  118. package/src/common-properties/ui-conditions/ui-groups-parser.js +1 -0
  119. package/src/common-properties/util/property-utils.js +3 -0
  120. package/src/context-menu/common-context-menu.jsx +7 -0
  121. package/src/context-menu/context-menu-wrapper.jsx +30 -15
  122. package/src/object-model/api-pipeline.js +6 -9
  123. package/src/object-model/layout-dimensions.js +2 -2
  124. package/src/object-model/pipeline-out-handler.js +1 -1
  125. package/src/object-model/redux/reducers/canvasinfo.js +0 -1
  126. package/src/object-model/redux/reducers/nodes.js +0 -9
  127. package/src/palette/palette.scss +1 -1
  128. package/stats.html +1 -1
  129. package/dist/canvas-constants-34cdb7df.js +0 -2
  130. package/dist/canvas-constants-34cdb7df.js.map +0 -1
  131. package/dist/canvas-constants-3c09c7f6.js +0 -2
  132. package/dist/canvas-constants-3c09c7f6.js.map +0 -1
  133. package/dist/canvas-controller-ccb05f9f.js +0 -2
  134. package/dist/canvas-controller-ccb05f9f.js.map +0 -1
  135. package/dist/canvas-controller-feabad26.js +0 -2
  136. package/dist/canvas-controller-feabad26.js.map +0 -1
  137. package/dist/common-canvas-bcfe04ef.js +0 -2
  138. package/dist/common-canvas-bcfe04ef.js.map +0 -1
  139. package/dist/common-canvas-c4f77878.js +0 -2
  140. package/dist/common-canvas-c4f77878.js.map +0 -1
  141. package/dist/common-properties-267a9a6c.js +0 -2
  142. package/dist/common-properties-267a9a6c.js.map +0 -1
  143. package/dist/common-properties-6520f90b.js +0 -2
  144. package/dist/common-properties-6520f90b.js.map +0 -1
  145. package/dist/createClass-32a0cf0f.js.map +0 -1
  146. package/dist/createClass-6db89a23.js.map +0 -1
  147. package/dist/extends-12382a72.js.map +0 -1
  148. package/dist/extends-195c6b49.js +0 -7
  149. package/dist/extends-195c6b49.js.map +0 -1
  150. package/dist/flexible-table-056c538e.js +0 -2
  151. package/dist/flexible-table-056c538e.js.map +0 -1
  152. package/dist/flexible-table-7fb8a62e.js +0 -2
  153. package/dist/flexible-table-7fb8a62e.js.map +0 -1
  154. package/dist/getPrototypeOf-a1c3fe64.js.map +0 -1
  155. package/dist/getPrototypeOf-bf88242f.js.map +0 -1
  156. package/dist/index-61be3509.js +0 -2
  157. package/dist/index-61be3509.js.map +0 -1
  158. package/dist/index-8076376e.js +0 -2
  159. package/dist/index-8076376e.js.map +0 -1
@@ -1,5 +1,11 @@
1
1
  .properties-tearsheet-panel.bx--modal {
2
2
  align-items: flex-end;
3
+ &.is-visible {
4
+ .bx--modal-container {
5
+ transform: translate3d(0, 0, 0);
6
+ transition: transform 240ms cubic-bezier(0, 0, 0.3, 1);
7
+ }
8
+ }
3
9
  .bx--modal-container {
4
10
  max-height: calc(100% - 88px);
5
11
  height: 100%;
@@ -22,7 +28,7 @@
22
28
  padding: $spacing-06 $spacing-07;
23
29
  background-color: $ui-background;
24
30
  margin-bottom: 0;
25
- .react-codemirror2, .react-codemirror2 .CodeMirror {
31
+ .bx--multi-select, .bx--dropdown, .bx--number input[type=number], .bx--text-input, .bx--text-area { // override carbon's modal
26
32
  background-color: $ui-01;
27
33
  }
28
34
  }
@@ -31,7 +31,7 @@ import { Type, ParamRole, ControlType } from "./constants/form-constants";
31
31
  import { has, cloneDeep, assign, isEmpty, isEqual, isUndefined, get } from "lodash";
32
32
  import Form from "./form/Form";
33
33
  import { getConditionOps } from "./ui-conditions/condition-ops/condition-ops";
34
-
34
+ import { ItemType } from "./constants/form-constants";
35
35
  export default class PropertiesController {
36
36
 
37
37
  constructor() {
@@ -180,7 +180,11 @@ export default class PropertiesController {
180
180
  this.uiItems = this.form.uiItems; // set last so properties dialog doesn't render too early
181
181
  // set initial tab to first tab
182
182
  if (!isEmpty(this.uiItems) && !isEmpty(this.uiItems[0].tabs)) {
183
- this.propertiesStore.setActiveTab(this.uiItems[0].tabs[0].group);
183
+ // active tab is the first non-tearsheet
184
+ const filteredTearsheets = this.uiItems[0].tabs.filter((tab) => tab.content.itemType !== ItemType.TEARSHEET);
185
+ if (filteredTearsheets.length) {
186
+ this.propertiesStore.setActiveTab(filteredTearsheets[0].group);
187
+ }
184
188
  }
185
189
 
186
190
  // set title
@@ -144,6 +144,7 @@ function parseUiItem(controls, actions, uiItem, panelId, parentCategoryId) {
144
144
  }
145
145
  case ItemType.ADDITIONAL_LINK:
146
146
  case ItemType.CHECKBOX_SELECTOR:
147
+ case ItemType.TEARSHEET:
147
148
  case ItemType.PANEL: {
148
149
  if (uiItem.panel && uiItem.panel.uiItems) {
149
150
  let locPanelId = panelId;
@@ -44,6 +44,7 @@ function parseUiItem(panelTree, uiItem, currentPanel) {
44
44
  case ItemType.PANEL:
45
45
  case ItemType.CUSTOM_PANEL:
46
46
  case ItemType.ADDITIONAL_LINK:
47
+ case ItemType.TEARSHEET:
47
48
  case ItemType.CHECKBOX_SELECTOR: {
48
49
  if (uiItem.panel && uiItem.panel.id) {
49
50
  panelTree[currentPanel].panels.push(uiItem.panel.id);
@@ -54,6 +54,9 @@ function formatMessage(intl, key, substituteObj) {
54
54
  const defaultMessages = { ...defaultMessages1, ...defaultMessages2 };
55
55
  let formattedMessage;
56
56
  if (typeof intl !== "undefined" && intl !== null) {
57
+ if (intl.messages[key] === "") {
58
+ return ""; // Allow empty strings
59
+ }
57
60
  formattedMessage = intl.formatMessage({ id: key, defaultMessage: defaultMessages[key] }, substituteObj);
58
61
  } else {
59
62
  formattedMessage = defaultMessages[key];
@@ -92,6 +92,13 @@ class CommonContextMenu extends React.Component {
92
92
  menuPos.x -= menuSize.width;
93
93
  }
94
94
 
95
+ // Add a pixel to x and y because on Chrome without this the context menu
96
+ // appears with the top corner of the first menu item under the mouse
97
+ // cursor. This highlights the first menu item (which looks weird) and, if
98
+ // the first item is a cascade menu, automatically opens the sub-menu.
99
+ menuPos.x += 1;
100
+ menuPos.y += 1;
101
+
95
102
  return menuPos;
96
103
  }
97
104
 
@@ -18,8 +18,6 @@ import React from "react";
18
18
  import PropTypes from "prop-types";
19
19
  import CommonContextMenu from "./common-context-menu.jsx";
20
20
 
21
- const CONTEXT_MENU_BUTTON = 2;
22
-
23
21
  export default class ContextMenuWrapper extends React.Component {
24
22
  constructor(props) {
25
23
  super(props);
@@ -57,23 +55,19 @@ export default class ContextMenuWrapper extends React.Component {
57
55
  }
58
56
 
59
57
  handleClickOutside(e) {
60
- // On Firefox, the context menu gesture emits both a 'context menu' event
61
- // and a 'click' event. If the click is processed it causes the
62
- // context menu to disappear imediately after it has displayed.
63
- // Consequently, when this method is called with the context menu button set
64
- // (which indicates one of the additional clicks from Firefox) we just
65
- // stop propogation and return. On other browsers we don't get this extra
66
- // events.
67
- // Also, on Safari, when a user is displaying the context menu with a ctrl-click,
68
- // the click is received with a ctrlKey field enabled. So we also ignore that.
69
- if (e.button === CONTEXT_MENU_BUTTON || e.ctrlKey) {
58
+ // On Safari, when a user is displaying the context menu with a ctrl-click
59
+ // (which is a supported context menu gesture on the Mac) a secondary click
60
+ // event is emmitted which is received here with the ctrlKey field enabled.
61
+ // So we ignore that event otherwse, if we continue, the context menu will
62
+ // be closed.
63
+ if (e.ctrlKey) {
70
64
  e.stopPropagation();
71
65
  return;
72
66
  }
73
67
 
74
- // If the click was anywhere outside the context menu we just close the menu.
75
- const domNode = document.getElementById("context-menu-popover");
76
- if (domNode && !domNode.contains(e.target)) {
68
+ // If the click was anywhere outside the context menu and
69
+ // the ellipsis button we just close the menu.
70
+ if (!this.isOverContextMenu(e) && !this.isOverEllipsisButton(e)) {
77
71
  // This stop propagation is needed in common canvas so that selected nodes will
78
72
  // remain selected even after clicking outside the context menu to close the menu.
79
73
  if (this.props.stopPropagation) {
@@ -83,6 +77,27 @@ export default class ContextMenuWrapper extends React.Component {
83
77
  }
84
78
  }
85
79
 
80
+ // Retruns true if the event occurred over the context menu.
81
+ isOverContextMenu(e) {
82
+ const domNode = document.getElementById("context-menu-popover");
83
+ return !domNode || domNode.contains(e.target);
84
+ }
85
+
86
+ // Returns true if the event occurred over the ellipsis button. Typically
87
+ // there will be only one ellipsis button on the canvas, since they are only
88
+ // displayed on hover, but in some test cicumstances there might be more
89
+ // than one.
90
+ isOverEllipsisButton(e) {
91
+ const ellipsisNodes = document.getElementsByClassName("d3-node-ellipsis-group");
92
+ let state = false;
93
+ for (let i = 0; i < ellipsisNodes.length; i++) {
94
+ if (state === false && ellipsisNodes[i].contains(e.target)) {
95
+ state = true;
96
+ }
97
+ }
98
+ return state;
99
+ }
100
+
86
101
  contextMenuClicked(action, param) {
87
102
  this.props.contextMenuActionHandler(action, param);
88
103
  }
@@ -716,7 +716,10 @@ export default class APIPipeline {
716
716
  }
717
717
 
718
718
  setNodeProperties(nodeId, properties) {
719
- this.store.dispatch({ type: "SET_NODE_PROPERTIES", data: { nodeId: nodeId, properties: properties }, pipelineId: this.pipelineId });
719
+ let newNode = cloneDeep(this.getNode(nodeId));
720
+ newNode = Object.assign(newNode, properties);
721
+ newNode = this.objectModel.setNodeAttributes(newNode);
722
+ this.store.dispatch({ type: "REPLACE_NODE", data: { node: newNode }, pipelineId: this.pipelineId });
720
723
  }
721
724
 
722
725
  setNodeMessage(nodeId, message) {
@@ -736,17 +739,11 @@ export default class APIPipeline {
736
739
  }
737
740
 
738
741
  setNodeInputPorts(nodeId, inputs) {
739
- const node = this.getNode(nodeId);
740
- node.inputs = inputs;
741
- const newNode = this.objectModel.setNodeAttributes(node);
742
- this.store.dispatch({ type: "REPLACE_NODE", data: { node: newNode }, pipelineId: this.pipelineId });
742
+ this.setNodeProperties(nodeId, { inputs });
743
743
  }
744
744
 
745
745
  setNodeOutputPorts(nodeId, outputs) {
746
- const node = this.getNode(nodeId);
747
- node.outputs = outputs;
748
- const newNode = this.objectModel.setNodeAttributes(node);
749
- this.store.dispatch({ type: "REPLACE_NODE", data: { node: newNode }, pipelineId: this.pipelineId });
746
+ this.setNodeProperties(nodeId, { outputs });
750
747
  }
751
748
 
752
749
  addCustomAttrToNodes(nodeIds, attrName, attrValue) {
@@ -57,7 +57,7 @@ const portsHorizontalDefaultLayout = {
57
57
  labelSingleLine: true, // false allow multi-line labels
58
58
  labelOutline: false,
59
59
  labelMaxCharacters: null, // null allows unlimited characters
60
- labelAllowReturnKey: false, // true allows line feed to be inserted into label
60
+ labelAllowReturnKey: false, // true allows line feed to be inserted into label, "save" to make the return key save the label.
61
61
 
62
62
  // An array of decorations to be applied to the node. For details see:
63
63
  // https://github.com/elyra-ai/canvas/wiki/2.4.2-Decoration-Specification
@@ -448,7 +448,7 @@ const portsVerticalDefaultLayout = {
448
448
  labelSingleLine: true, // false allow multi-line labels
449
449
  labelOutline: false,
450
450
  labelMaxCharacters: null, // null allows unlimited characters
451
- labelAllowReturnKey: false, // true allows line feed to be inserted into label
451
+ labelAllowReturnKey: false, // true allows line feed to be inserted into label, "save" to make the return key save the label.
452
452
 
453
453
  // An array of decorations to be applied to the node. For details see:
454
454
  // https://github.com/elyra-ai/canvas/wiki/2.4.2-Decoration-Specification
@@ -365,7 +365,7 @@ export default class PipelineOutHandler {
365
365
  canvasInfoLinks.forEach((link) => {
366
366
  if (link.type === "commentLink" &&
367
367
  link.srcNodeId === commentId) {
368
- const newLink = { node_ref: link.trgNodeId };
368
+ const newLink = { id: link.id, node_ref: link.trgNodeId };
369
369
  if (link.class_name) {
370
370
  newLink.class_name = link.class_name;
371
371
  }
@@ -155,7 +155,6 @@ export default (state = {}, action) => {
155
155
  case "REPLACE_NODES":
156
156
  case "REPLACE_NODE":
157
157
  case "SIZE_AND_POSITION_OBJECTS":
158
- case "SET_NODE_PROPERTIES":
159
158
  case "SET_NODE_PARAMETERS":
160
159
  case "SET_NODE_UI_PARAMETERS":
161
160
  case "SET_NODE_MESSAGE":
@@ -123,15 +123,6 @@ export default (state = [], action) => {
123
123
  return !nodeFound;
124
124
  });
125
125
 
126
- case "SET_NODE_PROPERTIES":
127
- return state.map((node, index) => {
128
- if (action.data.nodeId === node.id) {
129
- const newNode = Object.assign({}, node, action.data.properties);
130
- return newNode;
131
- }
132
- return node;
133
- });
134
-
135
126
  case "SET_NODE_PARAMETERS":
136
127
  return state.map((node, index) => {
137
128
  if (action.data.nodeId === node.id) {
@@ -182,7 +182,7 @@ $palette-search-container-height: 41px;
182
182
  }
183
183
 
184
184
  .palette-flyout-categories {
185
- height: calc(100% - $palette-search-container-height);
185
+ height: calc(100% - #{$palette-search-container-height});
186
186
  width: 100%;
187
187
  position: absolute;
188
188
  overflow-x: hidden;