@elyra/canvas 12.23.1 → 12.24.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 (195) hide show
  1. package/dist/canvas-constants-07dbe4b7.js +2 -0
  2. package/dist/{canvas-constants-ab55d0fd.js.map → canvas-constants-07dbe4b7.js.map} +1 -1
  3. package/dist/canvas-constants-ba465147.js +2 -0
  4. package/dist/canvas-constants-ba465147.js.map +1 -0
  5. package/dist/canvas-controller-60ed1f25.js +2 -0
  6. package/dist/canvas-controller-60ed1f25.js.map +1 -0
  7. package/dist/canvas-controller-6239cacc.js +2 -0
  8. package/dist/canvas-controller-6239cacc.js.map +1 -0
  9. package/dist/{canvas-logger-fa8cef5b.js → canvas-logger-27d3180d.js} +2 -2
  10. package/dist/{canvas-logger-fa8cef5b.js.map → canvas-logger-27d3180d.js.map} +1 -1
  11. package/dist/{canvas-logger-3459dfc2.js → canvas-logger-bb537fb3.js} +2 -2
  12. package/dist/{canvas-logger-3459dfc2.js.map → canvas-logger-bb537fb3.js.map} +1 -1
  13. package/dist/common-canvas-4ae99af6.js +2 -0
  14. package/dist/common-canvas-4ae99af6.js.map +1 -0
  15. package/dist/common-canvas-86633e44.js +2 -0
  16. package/dist/common-canvas-86633e44.js.map +1 -0
  17. package/dist/common-canvas.es.js +1 -1
  18. package/dist/common-canvas.js +1 -1
  19. package/dist/common-properties-2bc0b14a.js +2 -0
  20. package/dist/common-properties-2bc0b14a.js.map +1 -0
  21. package/dist/common-properties-56bf68a6.js +2 -0
  22. package/dist/common-properties-56bf68a6.js.map +1 -0
  23. package/dist/createClass-826941b3.js +2 -0
  24. package/dist/createClass-826941b3.js.map +1 -0
  25. package/dist/createClass-be661622.js +2 -0
  26. package/dist/createClass-be661622.js.map +1 -0
  27. package/dist/{datarecord-metadata-v3-schema-03db5d5d.js → datarecord-metadata-v3-schema-3323a91e.js} +2 -2
  28. package/dist/{datarecord-metadata-v3-schema-03db5d5d.js.map → datarecord-metadata-v3-schema-3323a91e.js.map} +1 -1
  29. package/dist/{datarecord-metadata-v3-schema-07d7682c.js → datarecord-metadata-v3-schema-93ec5562.js} +2 -2
  30. package/dist/{datarecord-metadata-v3-schema-07d7682c.js.map → datarecord-metadata-v3-schema-93ec5562.js.map} +1 -1
  31. package/dist/en-7201b548.js +2 -0
  32. package/dist/{en-8647c347.js.map → en-7201b548.js.map} +1 -1
  33. package/dist/en-a08356c8.js +2 -0
  34. package/dist/{en-7a0f1db1.js.map → en-a08356c8.js.map} +1 -1
  35. package/dist/extends-11efb86b.js +7 -0
  36. package/dist/extends-11efb86b.js.map +1 -0
  37. package/dist/extends-bb395e42.js +7 -0
  38. package/dist/extends-bb395e42.js.map +1 -0
  39. package/dist/flexible-table-989859ec.js +2 -0
  40. package/dist/flexible-table-989859ec.js.map +1 -0
  41. package/dist/flexible-table-d51a7d72.js +2 -0
  42. package/dist/flexible-table-d51a7d72.js.map +1 -0
  43. package/dist/getPrototypeOf-1e698126.js +2 -0
  44. package/dist/getPrototypeOf-1e698126.js.map +1 -0
  45. package/dist/getPrototypeOf-3751add9.js +2 -0
  46. package/dist/getPrototypeOf-3751add9.js.map +1 -0
  47. package/dist/icon-037ad6d1.js +2 -0
  48. package/dist/{icon-816af0e7.js.map → icon-037ad6d1.js.map} +1 -1
  49. package/dist/icon-b619470c.js +2 -0
  50. package/dist/{icon-2c16236a.js.map → icon-b619470c.js.map} +1 -1
  51. package/dist/{index-2f6be19d.js → index-46a80c08.js} +2 -2
  52. package/dist/{index-2f6be19d.js.map → index-46a80c08.js.map} +1 -1
  53. package/dist/index-b527a82d.js +2 -0
  54. package/dist/{index-6f739fa1.js.map → index-b527a82d.js.map} +1 -1
  55. package/dist/isArrayLikeObject-a9c7973b.js +1 -1
  56. package/dist/isArrayLikeObject-a9c7973b.js.map +1 -1
  57. package/dist/isArrayLikeObject-f3b27f64.js +1 -1
  58. package/dist/isArrayLikeObject-f3b27f64.js.map +1 -1
  59. package/dist/lib/canvas-controller.es.js +1 -1
  60. package/dist/lib/canvas-controller.js +1 -1
  61. package/dist/lib/canvas.es.js +1 -1
  62. package/dist/lib/canvas.js +1 -1
  63. package/dist/lib/command-stack.es.js +1 -1
  64. package/dist/lib/command-stack.js +1 -1
  65. package/dist/lib/context-menu.es.js +1 -1
  66. package/dist/lib/context-menu.js +1 -1
  67. package/dist/lib/properties/field-picker.es.js +1 -1
  68. package/dist/lib/properties/field-picker.js +1 -1
  69. package/dist/lib/properties/flexible-table.es.js +1 -1
  70. package/dist/lib/properties/flexible-table.js +1 -1
  71. package/dist/lib/properties.es.js +1 -1
  72. package/dist/lib/properties.js +1 -1
  73. package/dist/lib/tooltip.es.js +1 -1
  74. package/dist/lib/tooltip.js +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-3f93ec4b.js +2 -0
  78. package/dist/toolbar-3f93ec4b.js.map +1 -0
  79. package/dist/toolbar-e4c551ae.js +2 -0
  80. package/dist/toolbar-e4c551ae.js.map +1 -0
  81. package/locales/command-actions/locales/en.json +1 -1
  82. package/locales/command-actions/locales/eo.json +41 -41
  83. package/locales/common-canvas/locales/en.json +1 -0
  84. package/locales/common-canvas/locales/eo.json +1 -0
  85. package/locales/common-properties/locales/de.json +10 -1
  86. package/locales/common-properties/locales/en.json +4 -1
  87. package/locales/common-properties/locales/eo.json +23 -18
  88. package/locales/common-properties/locales/es.json +10 -1
  89. package/locales/common-properties/locales/fr.json +10 -1
  90. package/locales/common-properties/locales/it.json +10 -1
  91. package/locales/common-properties/locales/ja.json +10 -1
  92. package/locales/common-properties/locales/ko.json +10 -1
  93. package/locales/common-properties/locales/pt-br.json +10 -1
  94. package/locales/common-properties/locales/sv.json +10 -1
  95. package/locales/common-properties/locales/zh-CN.json +10 -1
  96. package/locales/common-properties/locales/zh-TW.json +10 -1
  97. package/package.json +1 -1
  98. package/src/common-canvas/canvas-controller.js +38 -4
  99. package/src/common-canvas/svg-canvas-d3.js +12 -0
  100. package/src/common-canvas/svg-canvas-renderer.js +244 -66
  101. package/src/common-canvas/svg-canvas-utils-links.js +37 -7
  102. package/src/common-canvas/svg-canvas-utils-markdown.js +0 -2
  103. package/src/common-canvas/svg-canvas-utils-textarea.js +56 -43
  104. package/src/common-properties/components/editor-form/editor-form.jsx +19 -5
  105. package/src/common-properties/components/editor-form/editor-form.scss +30 -3
  106. package/src/common-properties/components/field-picker/field-picker.jsx +18 -59
  107. package/src/common-properties/components/field-picker/field-picker.scss +15 -24
  108. package/src/common-properties/components/flexible-table/flexible-table.jsx +32 -16
  109. package/src/common-properties/components/flexible-table/flexible-table.scss +6 -12
  110. package/src/common-properties/components/properties-modal/properties-modal.jsx +3 -1
  111. package/src/common-properties/components/properties-modal/properties-modal.scss +1 -0
  112. package/src/common-properties/components/table-buttons/table-buttons.jsx +1 -0
  113. package/src/common-properties/components/table-buttons/table-buttons.scss +4 -26
  114. package/src/common-properties/components/virtualized-table/virtualized-table.jsx +6 -5
  115. package/src/common-properties/constants/constants.js +11 -2
  116. package/src/common-properties/controls/abstract-table.jsx +12 -4
  117. package/src/common-properties/controls/datefield/datefield.jsx +1 -1
  118. package/src/common-properties/controls/dropdown/dropdown.jsx +3 -3
  119. package/src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx +11 -2
  120. package/src/common-properties/controls/expression/expression-toggle/expression-toggle.jsx +5 -6
  121. package/src/common-properties/controls/expression/expression.jsx +3 -1
  122. package/src/common-properties/controls/expression/expression.scss +1 -2
  123. package/src/common-properties/controls/list/list.jsx +1 -1
  124. package/src/common-properties/controls/multiselect/multiselect.jsx +2 -2
  125. package/src/common-properties/controls/numberfield/numberfield.jsx +30 -6
  126. package/src/common-properties/controls/passwordfield/passwordfield.jsx +13 -2
  127. package/src/common-properties/controls/radioset/radioset.scss +1 -5
  128. package/src/common-properties/controls/selectcolumns/selectcolumns.jsx +1 -1
  129. package/src/common-properties/controls/someofselect/someofselect.jsx +1 -1
  130. package/src/common-properties/controls/textarea/textarea.jsx +2 -2
  131. package/src/common-properties/controls/textfield/textfield.jsx +1 -1
  132. package/src/common-properties/controls/timefield/timefield.jsx +1 -1
  133. package/src/common-properties/form/ControlInfo.js +3 -1
  134. package/src/common-properties/form/EditorForm.js +11 -11
  135. package/src/common-properties/index.scss +2 -4
  136. package/src/common-properties/panels/control/control.jsx +1 -0
  137. package/src/common-properties/panels/control/control.scss +12 -0
  138. package/src/common-properties/panels/sub-panel/invoker.jsx +2 -0
  139. package/src/common-properties/panels/sub-panel/sub-panel.scss +6 -0
  140. package/src/common-properties/panels/subtabs/subtabs.jsx +13 -3
  141. package/src/common-properties/panels/subtabs/subtabs.scss +62 -0
  142. package/src/common-properties/panels/tearsheet/tearsheet.jsx +64 -7
  143. package/src/common-properties/panels/tearsheet/tearsheet.scss +84 -18
  144. package/src/common-properties/properties-controller.js +4 -0
  145. package/src/common-properties/properties-main/properties-main.jsx +17 -1
  146. package/src/object-model/api-pipeline.js +1 -6
  147. package/src/object-model/canvas-in-handler.js +6 -3
  148. package/src/object-model/layout-dimensions.js +12 -0
  149. package/src/object-model/object-model.js +7 -39
  150. package/src/object-model/redux/canvas-store.js +55 -0
  151. package/src/toolbar/toolbar-action-item.jsx +3 -1
  152. package/src/toolbar/toolbar-overflow-item.jsx +3 -1
  153. package/src/toolbar/toolbar.jsx +6 -2
  154. package/src/toolbar/toolbar.scss +21 -0
  155. package/stats.html +1 -1
  156. package/dist/canvas-constants-09ffa4d4.js +0 -2
  157. package/dist/canvas-constants-09ffa4d4.js.map +0 -1
  158. package/dist/canvas-constants-ab55d0fd.js +0 -2
  159. package/dist/canvas-controller-3a399ae6.js +0 -2
  160. package/dist/canvas-controller-3a399ae6.js.map +0 -1
  161. package/dist/canvas-controller-c046093c.js +0 -2
  162. package/dist/canvas-controller-c046093c.js.map +0 -1
  163. package/dist/common-canvas-088c1a4b.js +0 -2
  164. package/dist/common-canvas-088c1a4b.js.map +0 -1
  165. package/dist/common-canvas-7676cc1b.js +0 -2
  166. package/dist/common-canvas-7676cc1b.js.map +0 -1
  167. package/dist/common-properties-9d77f8e1.js +0 -2
  168. package/dist/common-properties-9d77f8e1.js.map +0 -1
  169. package/dist/common-properties-a31de521.js +0 -2
  170. package/dist/common-properties-a31de521.js.map +0 -1
  171. package/dist/createClass-72b049bc.js +0 -2
  172. package/dist/createClass-72b049bc.js.map +0 -1
  173. package/dist/createClass-d5cac0b7.js +0 -2
  174. package/dist/createClass-d5cac0b7.js.map +0 -1
  175. package/dist/en-7a0f1db1.js +0 -2
  176. package/dist/en-8647c347.js +0 -2
  177. package/dist/extends-87da7df3.js +0 -7
  178. package/dist/extends-87da7df3.js.map +0 -1
  179. package/dist/extends-dc95dba8.js +0 -7
  180. package/dist/extends-dc95dba8.js.map +0 -1
  181. package/dist/flexible-table-59ad2c83.js +0 -2
  182. package/dist/flexible-table-59ad2c83.js.map +0 -1
  183. package/dist/flexible-table-5c4fbb7b.js +0 -2
  184. package/dist/flexible-table-5c4fbb7b.js.map +0 -1
  185. package/dist/getPrototypeOf-4e282dd3.js +0 -2
  186. package/dist/getPrototypeOf-4e282dd3.js.map +0 -1
  187. package/dist/getPrototypeOf-b3806813.js +0 -2
  188. package/dist/getPrototypeOf-b3806813.js.map +0 -1
  189. package/dist/icon-2c16236a.js +0 -2
  190. package/dist/icon-816af0e7.js +0 -2
  191. package/dist/index-6f739fa1.js +0 -2
  192. package/dist/toolbar-2ef99bd8.js +0 -2
  193. package/dist/toolbar-2ef99bd8.js.map +0 -1
  194. package/dist/toolbar-cb967e26.js +0 -2
  195. package/dist/toolbar-cb967e26.js.map +0 -1
@@ -50,7 +50,7 @@
50
50
  .properties-radioset-tooltip {
51
51
  display: flex;
52
52
  align-items: center;
53
- margin: 2.5px 0 1.5px 1.5px;
53
+ margin: 2.5px 0 1.5px 0;
54
54
  }
55
55
  .properties-control-nested-panel{
56
56
  flex-basis: 100%;
@@ -59,10 +59,6 @@
59
59
  &:last-of-type {
60
60
  margin-bottom: 0; // don't want margin when last radio button in group
61
61
  }
62
- .bx--radio-button-wrapper > label {
63
- justify-content: left; // override carbon style to center justify radio-button labels
64
- align-items: center;
65
- }
66
62
  }
67
63
  &.error:not([disabled]) {
68
64
  padding-bottom: $spacing-02;
@@ -137,7 +137,7 @@ class SelectColumnsControl extends AbstractTable {
137
137
  selectedRows={this.props.selectedRows}
138
138
  rowSelection={this.props.control.rowSelection}
139
139
  updateRowSelections={this.updateRowSelections}
140
- light={this.props.controller.getLight() && !this.props.control.light}
140
+ light={this.props.controller.getLight() && this.props.control.light && !this.props.controller.isTearsheetContainer()}
141
141
  emptyTablePlaceholder={this.props.control.additionalText}
142
142
  />);
143
143
 
@@ -109,7 +109,7 @@ class SomeofselectControl extends React.Component {
109
109
  updateRowSelections={this.updateSelections}
110
110
  selectable
111
111
  showHeader={false}
112
- light={this.props.controller.getLight() && !this.props.control.light}
112
+ light={this.props.controller.getLight() && this.props.control.light && !this.props.controller.isTearsheetContainer()}
113
113
  emptyTablePlaceholder={this.props.control.additionalText}
114
114
  />
115
115
  <ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} inTable={this.props.tableControl} />
@@ -78,7 +78,7 @@ class TextareaControl extends React.Component {
78
78
  value={value}
79
79
  labelText={this.props.controlItem}
80
80
  hideLabel={this.props.tableControl}
81
- light={this.props.controller.getLight() && !this.props.control.light}
81
+ light={this.props.controller.getLight() && this.props.control.light}
82
82
  />
83
83
  <ValidationMessage inTable={this.props.tableControl} tableOnly={!showValidationMessage} state={""} messageInfo={errorMessage} />
84
84
  </div>);
@@ -92,7 +92,7 @@ class TextareaControl extends React.Component {
92
92
  value={value}
93
93
  labelText={this.props.controlItem}
94
94
  hideLabel={this.props.tableControl}
95
- light={this.props.controller.getLight() && !this.props.control.light}
95
+ light={this.props.controller.getLight() && this.props.control.light}
96
96
  />);
97
97
  }
98
98
 
@@ -103,7 +103,7 @@ class TextfieldControl extends React.Component {
103
103
  value={value}
104
104
  labelText={this.props.controlItem}
105
105
  hideLabel={this.props.tableControl}
106
- light={this.props.controller.getLight() && !this.props.control.light}
106
+ light={this.props.controller.getLight() && this.props.control.light}
107
107
  />);
108
108
  }
109
109
 
@@ -81,7 +81,7 @@ class TimefieldControl extends React.Component {
81
81
  value={this.value}
82
82
  labelText={this.props.controlItem}
83
83
  hideLabel={this.props.tableControl}
84
- light={this.props.controller.getLight() && !this.props.control.light}
84
+ light={this.props.controller.getLight() && this.props.control.light}
85
85
  />
86
86
  <ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />
87
87
  </div>
@@ -14,6 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import { get } from "lodash";
18
+
17
19
  import { EditStyle } from "../constants/form-constants";
18
20
 
19
21
 
@@ -184,6 +186,6 @@ export class Control {
184
186
  if (settings.buttons) {
185
187
  this.buttons = settings.buttons;
186
188
  }
187
- this.light = settings.light || false;
189
+ this.light = get(settings, "light", true);
188
190
  }
189
191
  }
@@ -135,7 +135,7 @@ function makePrimaryTab(propertyDef, group, l10nProvider) {
135
135
  return new EditorTab(label, group.name, _makeUIItem(propertyDef.parameterMetadata, propertyDef.actionMetadata, group, propertyDef.structureMetadata, l10nProvider));
136
136
  }
137
137
 
138
- function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, light = false) {
138
+ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, light = true) {
139
139
  const groupName = group.name;
140
140
  let groupItem = null;
141
141
  let groupLabel = null;
@@ -147,10 +147,10 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
147
147
  _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, light)));
148
148
  case GroupType.COLUMN_SELECTION:
149
149
  return UIItem.makePanel(new ControlPanel(groupName, PanelType.COLUMN_SELECTION, groupClassName, nestedPanel,
150
- _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider)));
150
+ _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, light)));
151
151
  case GroupType.ADDITIONAL: {
152
152
  const panel = new ControlPanel(groupName, PanelType.GENERAL, groupClassName, nestedPanel,
153
- _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider));
153
+ _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, light));
154
154
  groupLabel = l10nProvider.l10nLabel(group, group.name);
155
155
  return UIItem.makeAdditionalLink(groupLabel, groupLabel, panel);
156
156
  }
@@ -160,7 +160,7 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
160
160
  if (Array.isArray(group.subGroups)) {
161
161
  group.subGroups.forEach(function(subGroup) {
162
162
  const subGroupName = subGroup.name;
163
- groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider);
163
+ groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, light);
164
164
  groupLabel = l10nProvider.l10nLabel(subGroup, subGroup.name);
165
165
  subTabItems.push(new EditorTab(groupLabel, subGroupName, groupItem));
166
166
  });
@@ -176,7 +176,7 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
176
176
  const panSubItems = [];
177
177
  if (Array.isArray(group.subGroups)) {
178
178
  group.subGroups.forEach(function(subGroup) {
179
- groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider);
179
+ groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, light);
180
180
  panSubItems.push(groupItem);
181
181
  });
182
182
  }
@@ -186,7 +186,7 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
186
186
  const panSubItems = [];
187
187
  if (Array.isArray(group.subGroups)) {
188
188
  group.subGroups.forEach(function(subGroup) {
189
- groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider);
189
+ groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, light);
190
190
  panSubItems.push(groupItem);
191
191
  });
192
192
  }
@@ -200,7 +200,7 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
200
200
  const panSubItems = [];
201
201
  if (Array.isArray(group.subGroups)) {
202
202
  group.subGroups.forEach(function(subGroup) {
203
- groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider);
203
+ groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, light);
204
204
  panSubItems.push(groupItem);
205
205
  });
206
206
  }
@@ -232,7 +232,7 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
232
232
  const panSubItems = [];
233
233
  if (Array.isArray(group.subGroups)) {
234
234
  group.subGroups.forEach(function(subGroup) {
235
- groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider);
235
+ groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, light);
236
236
  panSubItems.push(groupItem);
237
237
  });
238
238
  }
@@ -247,7 +247,7 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
247
247
  const panSubItems = [];
248
248
  if (Array.isArray(group.subGroups)) {
249
249
  group.subGroups.forEach(function(subGroup) {
250
- groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, true);
250
+ groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, false);
251
251
  panSubItems.push(groupItem);
252
252
  });
253
253
  }
@@ -262,7 +262,7 @@ function _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata
262
262
  /**
263
263
  * Called on a base property group.
264
264
  */
265
- function _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, light = false) {
265
+ function _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, light = true) {
266
266
  const uiItems = [];
267
267
  const panelInsertedFor = [];
268
268
  if (!Array.isArray(group.parameterNames())) {
@@ -415,7 +415,7 @@ function _makeStringControl(parameter, isSubControl) {
415
415
  /**
416
416
  * Creates a control for the supplied property.
417
417
  */
418
- function _makeControl(parameterMetadata, paramName, group, structureDefinition, l10nProvider, actionMetadata, structureMetadata, subControl, light = false) {
418
+ function _makeControl(parameterMetadata, paramName, group, structureDefinition, l10nProvider, actionMetadata, structureMetadata, subControl, light = true) {
419
419
  const isSubControl = typeof subControl !== "undefined" && subControl;
420
420
 
421
421
  // Assume the property is defined
@@ -38,10 +38,8 @@
38
38
  }
39
39
 
40
40
  .properties-error-content {
41
- padding: 0 10px;
42
- font-size: 14px;
43
- font-weight: 300;
44
- line-height: 16px;
41
+ @include carbon--type-style("label-02");
42
+ padding: 0 $spacing-06;
45
43
  }
46
44
 
47
45
  .properties-modal-container {
@@ -33,6 +33,7 @@ class ControlPanel extends React.Component {
33
33
  "properties-control-panel",
34
34
  { "hide": this.props.panelState === STATES.HIDDEN },
35
35
  { "properties-control-nested-panel": this.props.panel.nestedPanel },
36
+ { "tearsheet-container": this.props.controller.isTearsheetContainer() },
36
37
  className
37
38
  )}
38
39
  disabled={this.props.panelState === STATES.DISABLED} data-id={ControlUtils.getDataId({ name: this.props.panel.id })}
@@ -47,3 +47,15 @@
47
47
  .properties-control-nested-panel .properties-control-nested-panel {
48
48
  border-left: 1px solid $ui-03;
49
49
  }
50
+
51
+ // Set the height of the very first panel to be full width inside a tearsheet
52
+ .properties-control-panel.tearsheet-container {
53
+ display: flex;
54
+ flex-direction: column;
55
+ height: 100%;
56
+ flex-shrink: 10;
57
+
58
+ .properties-control-panel.tearsheet-container {
59
+ height: unset;
60
+ }
61
+ }
@@ -57,12 +57,14 @@ export default class SubPanelInvoker extends React.Component {
57
57
  render() {
58
58
  let propertiesDialog = [];
59
59
  if (this.state.subPanelVisible && !this.props.rightFlyout) {
60
+ const className = this.props.controller.isTearsheetContainer() ? "properties-subpanel-modal-in-tearsheet" : "";
60
61
  propertiesDialog = (<PropertiesModal
61
62
  title={this.state.title}
62
63
  okHandler={this.hideSubDialog.bind(this, true)}
63
64
  cancelHandler={this.hideSubDialog.bind(this, false)}
64
65
  applyLabel={this.props.applyLabel}
65
66
  rejectLabel={this.props.rejectLabel}
67
+ classNames={className}
66
68
  >
67
69
  {this.state.panel}
68
70
  </PropertiesModal>);
@@ -22,3 +22,9 @@ button.properties-subpanel-button {
22
22
  display: flex;
23
23
  justify-content: center;
24
24
  }
25
+
26
+ .properties-subpanel-modal-in-tearsheet {
27
+ .properties-light-disabled {
28
+ background-color: $ui-01;
29
+ }
30
+ }
@@ -52,9 +52,10 @@ class Subtabs extends React.Component {
52
52
  <Tab
53
53
  key={"subtabs.tab." + i}
54
54
  disabled={panelState === STATES.DISABLED}
55
- className="properties-subtab"
55
+ className={classNames("properties-subtab", { "properties-leftnav-subtab-item": this.props.leftnav })}
56
56
  tabIndex={tabIdx}
57
57
  label={tab.text}
58
+ title={tab.text}
58
59
  onClick={this.onClick.bind(this, tab.group)}
59
60
  data-id={getDataId({ name: tab.group })}
60
61
  >
@@ -70,10 +71,14 @@ class Subtabs extends React.Component {
70
71
  "properties-sub-tab-container",
71
72
  { vertical: !this.props.rightFlyout },
72
73
  { "properties-control-nested-panel": this.props.nestedPanel },
74
+ { "properties-leftnav-container": this.props.leftnav },
73
75
  className
74
76
  )}
75
77
  >
76
- <Tabs className="properties-subtabs" selected={activeTab} light={this.props.controller.getLight()}>
78
+ <Tabs className={classNames("properties-subtabs", { "properties-leftnav-subtabs": this.props.leftnav })}
79
+ selected={activeTab}
80
+ light={this.props.controller.getLight()}
81
+ >
77
82
  {subTabs}
78
83
  </Tabs>
79
84
  </div>
@@ -87,7 +92,12 @@ Subtabs.propTypes = {
87
92
  rightFlyout: PropTypes.bool,
88
93
  genUIItem: PropTypes.func.isRequired,
89
94
  className: PropTypes.string,
90
- nestedPanel: PropTypes.bool
95
+ nestedPanel: PropTypes.bool,
96
+ leftnav: PropTypes.bool
97
+ };
98
+
99
+ Subtabs.defaultProps = {
100
+ leftnav: false
91
101
  };
92
102
 
93
103
  export default Subtabs;
@@ -21,3 +21,65 @@
21
21
  padding-right: 0;
22
22
  }
23
23
  }
24
+
25
+ // The below styles are required to override the Carbon "Tab" component to look like a leftnav
26
+ $parent-padding: calc(#{$spacing-05} + #{$spacing-05});
27
+ $selected-tab-width: 3px;
28
+
29
+ .properties-leftnav-container {
30
+ display: flex;
31
+ border-top: px solid $ui-03;
32
+ height: calc(100% + #{$parent-padding}); // Include padding from parent
33
+ margin-top: -$spacing-05;
34
+ margin-left: -$spacing-05;
35
+ margin-bottom: calc(-1 * #{$parent-padding});
36
+
37
+ .properties-leftnav-subtabs {
38
+ width: 282px;
39
+ background-color: $ui-01;
40
+ border-right: 1px solid $ui-03;
41
+ padding-top: $spacing-02;
42
+ height: 100%;
43
+
44
+ ul.bx--tabs--scrollable__nav {
45
+ flex-direction: column;
46
+ width: 282px;
47
+ }
48
+
49
+ li.bx--tabs--scrollable__nav-item--selected {
50
+ border-left: $selected-tab-width solid $interactive-04;
51
+ border-bottom: 0;
52
+ background-color: $selected-ui;
53
+
54
+ &:hover {
55
+ background-color: $hover-row;
56
+ }
57
+
58
+ &.properties-leftnav-subtab-item button {
59
+ border-left: 0;
60
+ }
61
+ }
62
+
63
+ li.properties-leftnav-subtab-item {
64
+ &:hover button {
65
+ border-bottom: 0;
66
+ }
67
+ button {
68
+ border-left: $selected-tab-width solid transparent;
69
+ border-bottom: 0;
70
+ transition: none; // Prevent border/outline from flickering
71
+
72
+ &:focus, &:active {
73
+ outline: 0;
74
+ border-bottom: 0;
75
+ transition: none; // Prevent border/outline from flickering
76
+ }
77
+ }
78
+ }
79
+ }
80
+
81
+ div.bx--tab-content {
82
+ width: 100%;
83
+ padding: $spacing-05; // Override padding set by subtab
84
+ }
85
+ }
@@ -1,13 +1,46 @@
1
+ /*
2
+ * Copyright 2017-2022 Elyra Authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
1
17
  import React, { Component } from "react";
2
18
  import PropTypes from "prop-types";
19
+ import classNames from "classnames";
20
+
3
21
  import { ComposedModal, ModalHeader, ModalBody } from "carbon-components-react";
4
22
  import { Portal } from "react-portal";
5
23
 
24
+ import PropertiesButtons from "../../components/properties-buttons";
25
+
6
26
  class TearSheet extends Component {
7
27
  render() {
8
28
  const title = this.props.tearsheet ? this.props.tearsheet.title : null;
9
29
  const description = this.props.tearsheet ? this.props.tearsheet.description : null;
10
30
  const content = this.props.tearsheet ? this.props.tearsheet.content : null;
31
+ const displayFooterButtons = this.props.showPropertiesButtons && !this.props.applyOnBlur;
32
+ const displayTabs = !Array.isArray(content);
33
+
34
+ const buttons = this.props.applyOnBlur
35
+ ? null
36
+ : (<PropertiesButtons
37
+ okHandler={this.props.okHandler}
38
+ cancelHandler={this.props.cancelHandler}
39
+ applyLabel={this.props.applyLabel}
40
+ rejectLabel={this.props.rejectLabel}
41
+ showPropertiesButtons={this.props.showPropertiesButtons}
42
+ />);
43
+
11
44
  return (
12
45
  <Portal>
13
46
  <ComposedModal
@@ -17,25 +50,49 @@ class TearSheet extends Component {
17
50
  preventCloseOnClickOutside
18
51
  >
19
52
  <ModalHeader
53
+ className={classNames("properties-tearsheet-header",
54
+ { "with-buttons": displayFooterButtons },
55
+ { "with-tabs": displayTabs },
56
+ { "hide-close-button": typeof this.props.onCloseCallback !== "function" })}
20
57
  title={title}
21
- buttonOnClick={() => {
22
- this.props.controller.clearActiveTearsheet();
23
- }}
58
+ buttonOnClick={this.props.onCloseCallback}
24
59
  >
25
60
  {description ? (<p>{description}</p>) : null}
26
61
  </ModalHeader>
27
- <ModalBody>
62
+ <ModalBody className={classNames("properties-tearsheet-body",
63
+ { "with-buttons": displayFooterButtons },
64
+ { "with-tabs": displayTabs })}
65
+ >
28
66
  {content}
29
67
  </ModalBody>
68
+ {buttons}
30
69
  </ComposedModal>
31
70
  </Portal>);
32
71
  }
33
72
  }
34
73
  TearSheet.propTypes = {
35
74
  open: PropTypes.bool,
36
- controller: PropTypes.object.isRequired,
37
- children: PropTypes.array,
38
- tearsheet: PropTypes.object
75
+ onCloseCallback: PropTypes.func,
76
+ tearsheet: PropTypes.shape({
77
+ title: PropTypes.string.isRequired,
78
+ description: PropTypes.string,
79
+ content: PropTypes.oneOfType([
80
+ PropTypes.array,
81
+ PropTypes.object
82
+ ])
83
+ }),
84
+ showPropertiesButtons: PropTypes.bool,
85
+ applyLabel: PropTypes.string, // Required if showPropertiesButtons is true
86
+ rejectLabel: PropTypes.string, // Required if showPropertiesButtons is true
87
+ okHandler: PropTypes.func, // Required if showPropertiesButtons is true
88
+ cancelHandler: PropTypes.func, // Required if showPropertiesButtons is true
89
+ applyOnBlur: PropTypes.bool.isRequired
90
+ };
91
+
92
+ TearSheet.defaultProps = {
93
+ open: false,
94
+ showPropertiesButtons: false,
95
+ applyOnBlur: false
39
96
  };
40
97
 
41
98
  export default TearSheet;
@@ -1,3 +1,21 @@
1
+ /*
2
+ * Copyright 2017-2022 Elyra Authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ $properties-buttons-height: $spacing-10;
18
+
1
19
  .properties-tearsheet-panel.bx--modal {
2
20
  align-items: flex-end;
3
21
  &.is-visible {
@@ -12,26 +30,74 @@
12
30
  width: calc(100% - 128px);
13
31
  transform: translate3d(0, 500px, 0);
14
32
  transition: transform 240ms cubic-bezier(0, 0, 0.3, 1);
15
- .bx--modal-header {
16
- padding: $spacing-06 $spacing-07;
17
- border-bottom: 1px solid $ui-03;
18
- margin-bottom: 0;
19
- h3 {
20
- @include carbon--type-style("productive-heading-04");
21
- }
22
- p {
23
- margin-top: $spacing-03;
24
- @include carbon--type-style("body-short-01");
25
- }
33
+ background-color: $ui-background;
34
+ }
35
+
36
+ // Start:: These styles are to display only parameters in a Tearsheet
37
+ .properties-tearsheet-header {
38
+ padding: $spacing-06 $spacing-07;
39
+ border-bottom: 1px solid $ui-03;
40
+ margin-bottom: 0;
41
+ h3 {
42
+ @include carbon--type-style("productive-heading-04");
26
43
  }
27
- .bx--modal-content {
28
- padding: $spacing-06 $spacing-07;
29
- background-color: $ui-background;
30
- margin-bottom: 0;
31
- .bx--multi-select, .bx--dropdown, .bx--number input[type=number], .bx--text-input, .bx--text-area { // override carbon's modal
44
+ p {
45
+ margin-top: $spacing-03;
46
+ @include carbon--type-style("body-short-01");
47
+ }
48
+ background-color: $ui-01;
49
+ }
50
+
51
+ .properties-tearsheet-body {
52
+ padding: $spacing-06 $spacing-07;
53
+ margin-bottom: 0;
54
+ .bx--multi-select, .bx--dropdown, .bx--number input[type=number], .bx--text-input, .bx--text-area { // override carbon's modal
55
+ background-color: $ui-01;
56
+ }
57
+ }
58
+ // End:: These styles are to display only parameters in a Tearsheet
59
+ }
60
+
61
+ // These styles are to display editor-form in a Tearsheet
62
+ .properties-tearsheet-panel.bx--modal {
63
+ .properties-tearsheet-header.with-tabs {
64
+ border-bottom: 0;
65
+ }
66
+
67
+ .properties-tearsheet-header.hide-close-button {
68
+ button.bx--modal-close {
69
+ display: none;
70
+ }
71
+ }
72
+
73
+ .properties-tearsheet-body {
74
+ // Display the tabs in the Tearsheet header
75
+ .properties-editor-form {
76
+ // styling when there is only 1 tab
77
+ .properties-single-category {
78
+ padding: $spacing-05;
79
+ }
80
+
81
+ .properties-primaryTabs {
32
82
  background-color: $ui-01;
83
+ border-bottom: 1px solid $ui-03;
84
+ margin-bottom: $spacing-05;
33
85
  }
34
- }
86
+ }
87
+ }
88
+
89
+ .properties-tearsheet-body.with-buttons {
90
+ height: calc(100% - #{$properties-buttons-height});
91
+ border-bottom: 1px solid $ui-03;
92
+ }
93
+
94
+ .properties-tearsheet-body.with-tabs {
95
+ padding: 0;
96
+ }
97
+
98
+ .properties-modal-buttons {
99
+ width: 50%;
100
+ right: 0;
101
+ left: unset;
35
102
  }
36
-
37
103
  }
@@ -126,6 +126,10 @@ export default class PropertiesController {
126
126
  return this.propertiesConfig;
127
127
  }
128
128
 
129
+ isTearsheetContainer() {
130
+ return this.propertiesConfig.containerType === "Tearsheet";
131
+ }
132
+
129
133
  setParamDef(paramDef) {
130
134
  const rightFlyout = get(this.getPropertiesConfig(), "rightFlyout", true);
131
135
  const formData = Form.makeForm(paramDef, !rightFlyout);
@@ -18,6 +18,7 @@ import React from "react";
18
18
  import PropTypes from "prop-types";
19
19
  import PropertiesModal from "./../components/properties-modal";
20
20
  import PropertiesEditor from "./../components/properties-editor";
21
+ import TearSheet from "../panels/tearsheet";
21
22
  import MainEditorPropertiesButtons from "./../components/main-editor-properties-buttons";
22
23
  import EditorForm from "./../components/editor-form";
23
24
  import Form from "./../form/Form";
@@ -187,7 +188,7 @@ class PropertiesMain extends React.Component {
187
188
  return label;
188
189
  }
189
190
  }
190
- return PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_ACTION_LABEL);
191
+ return PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_ACTION_LABEL, { node_label: this.propertiesController.getTitle() });
191
192
  }
192
193
 
193
194
  getEditorSize() {
@@ -493,6 +494,21 @@ class PropertiesMain extends React.Component {
493
494
  >
494
495
  {editorForm}
495
496
  </div>);
497
+ } else if (this.props.propertiesConfig.containerType === "Tearsheet") {
498
+ propertiesDialog = (<TearSheet
499
+ open
500
+ onCloseCallback={this.props.propertiesConfig.applyOnBlur ? this.applyPropertiesEditing.bind(this, true) : null}
501
+ tearsheet={{
502
+ title: this.propertiesController.getTitle(),
503
+ content: editorForm
504
+ }}
505
+ applyLabel={applyLabel}
506
+ rejectLabel={rejectLabel}
507
+ okHandler={this.applyPropertiesEditing.bind(this, true)}
508
+ cancelHandler={cancelHandler}
509
+ showPropertiesButtons={this.state.showPropertiesButtons}
510
+ applyOnBlur={this.props.propertiesConfig.applyOnBlur}
511
+ />);
496
512
  } else { // Modal
497
513
  propertiesDialog = (<PropertiesModal
498
514
  onHide={this.props.callbacks.closePropertiesDialog}
@@ -155,12 +155,7 @@ export default class APIPipeline {
155
155
  }
156
156
 
157
157
  isEmpty() {
158
- if (this.getNodes() && this.getNodes().length === 0 &&
159
- this.getComments() && this.getComments().length === 0 &&
160
- this.getLinks() && this.getLinks().length === 0) {
161
- return true;
162
- }
163
- return false;
158
+ return this.store.isEmpty(this.pipelineId);
164
159
  }
165
160
 
166
161
  getObject(objId) {