@kumologica/sdk 3.3.0-beta9 → 3.4.0-beta2

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 (60) hide show
  1. package/cli/commands/open.js +6 -7
  2. package/cli/commands/test-commands/TestSuiteRunner.js +75 -0
  3. package/cli/commands/test-commands/lib/TestCaseRunner.js +105 -0
  4. package/cli/commands/test-commands/lib/index.js +12 -0
  5. package/cli/commands/test-commands/lib/reporters/index.js +120 -0
  6. package/cli/commands/test.js +92 -120
  7. package/package.json +4 -5
  8. package/src/app/lib/stores/store.js +15 -1
  9. package/src/app/lib/stores/user-preference-store.js +2 -0
  10. package/src/app/lib/stores/workspace-preference-store.js +42 -0
  11. package/src/app/main-process/editor-manager.js +11 -51
  12. package/src/app/main-process/main-window.js +10 -0
  13. package/src/app/main-process/menu.js +4 -2
  14. package/src/app/main-process/modal-home.js +5 -7
  15. package/src/app/main-process/modal-newproject.js +4 -6
  16. package/src/app/main-process/modal-newtab.js +4 -6
  17. package/src/app/main-process/modal-nodelibrary.js +4 -6
  18. package/src/app/main-process/modal-welcome.js +5 -8
  19. package/src/app/main.js +3 -1
  20. package/src/app/preload.js +28 -4
  21. package/src/app/ui/editor-api/lib/index.js +6 -9
  22. package/src/app/ui/editor-client/public/red/red.js +434 -176
  23. package/src/app/ui/editor-client/public/red/red.min.js +3 -3
  24. package/src/app/ui/editor-client/public/red/style.min.css +1 -1
  25. package/src/app/ui/editor-client/public/vendor/vendor.css +21 -1
  26. package/src/app/ui/editor-client/src/js/red.js +1 -1
  27. package/src/app/ui/editor-client/src/js/ui/clipboard.js +8 -0
  28. package/src/app/ui/editor-client/src/js/ui/header.js +2 -40
  29. package/src/app/ui/editor-client/src/js/ui/palette-explorer.js +328 -0
  30. package/src/app/ui/editor-client/src/js/ui/palette.js +10 -8
  31. package/src/app/ui/editor-client/src/js/ui/project-info.js +10 -8
  32. package/src/app/ui/editor-client/src/js/ui/search.js +147 -44
  33. package/src/app/ui/editor-client/src/js/ui/ui-settings.js +1 -1
  34. package/src/app/ui/editor-client/src/js/ui/view.js +2 -5
  35. package/src/app/ui/editor-client/src/js/validators.js +2 -2
  36. package/src/app/ui/editor-client/src/sass/dropdownMenu.scss +1 -1
  37. package/src/app/ui/editor-client/src/sass/editor.scss +1 -0
  38. package/src/app/ui/editor-client/src/sass/header.scss +16 -7
  39. package/src/app/ui/editor-client/src/sass/palette.scss +46 -5
  40. package/src/app/ui/editor-client/src/sass/project-info.scss +4 -3
  41. package/src/app/ui/editor-client/src/sass/search.scss +49 -21
  42. package/src/app/ui/editor-client/src/sass/style.scss +1 -0
  43. package/src/app/ui/editor-client/src/sass/ui/common/editableList.scss +3 -3
  44. package/src/app/ui/editor-client/src/sass/ui/common/searchBox.scss +1 -2
  45. package/src/app/ui/editor-client/src/sass/ui-settings.scss +5 -3
  46. package/src/app/ui/editor-client/src/vendor/jqtree/jqtree.css +21 -1
  47. package/src/app/ui/editor-client/templates/index.mst +89 -79
  48. package/src/server/DesignerServer.js +161 -0
  49. package/src/server/certificate.pem +23 -0
  50. package/src/server/private-key.pem +28 -0
  51. package/cli/commands/test-utils/TestSuiteController.js +0 -363
  52. package/cli/commands/test-utils/TestSuiteController.test.js +0 -171
  53. package/cli/commands/test-utils/util/output.js +0 -14
  54. package/cli/commands/test-utils/util/updates/index.js +0 -17
  55. package/cli/commands/test-utils/util/updates/pkg.js +0 -13
  56. package/cli/commands/test-utils/util/updates/templates/default-settings.js +0 -209
  57. package/src/app/ui/editor-client/src/js/ui/palette-navigator.js +0 -144
  58. /package/cli/commands/{test-utils → test-commands/lib}/fixtures/example3-flow.json +0 -0
  59. /package/cli/commands/{test-utils → test-commands/lib}/fixtures/package.json +0 -0
  60. /package/cli/commands/{test-utils → test-commands/lib}/fixtures/s3-event.js +0 -0
@@ -62,6 +62,10 @@ RED.search = (function () {
62
62
  });
63
63
  }
64
64
 
65
+ /**
66
+ * User search when typing it the search box...
67
+ * @param {string} val
68
+ */
65
69
  function search(val) {
66
70
  searchResults.editableList('empty');
67
71
  var typeFilter;
@@ -71,11 +75,42 @@ RED.search = (function () {
71
75
  typeFilter = m[1];
72
76
  }
73
77
 
74
- val = val.trim();
75
-
76
78
  selected = -1;
79
+
80
+ if (val && (val.length > 0 || typeFilter)) {
81
+ let results = searchNodes(val, typeFilter);
82
+ if (results.length > 0) {
83
+ // Excluding tabs
84
+ // results = results.filter((r) => r.node.type !== 'tab');
85
+ for (i = 0; i < Math.min(results.length, 25); i++) {
86
+ searchResults.editableList('addItem', results[i]);
87
+ }
88
+ } else {
89
+ searchResults.editableList('addItem', {});
90
+ }
91
+ } else {
92
+ let commands = searchCommands();
93
+ commands.forEach(c=> {
94
+ searchResults.editableList('addItem', c);
95
+ });
96
+
97
+ let results = $('#search-result-list');
98
+ $('<div class="searchSeparator"></div>').appendTo(results);
99
+
100
+
101
+ let allNodes = searchNodes();
102
+
103
+ allNodes.forEach(n => {
104
+ searchResults.editableList('addItem', n);
105
+ })
106
+
107
+ }
108
+ }
109
+
110
+ function searchNodes(val, typeFilter){
77
111
  results = [];
78
- if (val.length > 0 || typeFilter) {
112
+ if (val) {
113
+ val = val.trim();
79
114
  val = val.toLowerCase();
80
115
  var i;
81
116
  var j;
@@ -106,16 +141,47 @@ RED.search = (function () {
106
141
  for (i = 0; i < list.length; i++) {
107
142
  results.push(nodes[list[i]]);
108
143
  }
109
- if (results.length > 0) {
110
- // Excluding tabs
111
- // results = results.filter((r) => r.node.type !== 'tab');
112
- for (i = 0; i < Math.min(results.length, 25); i++) {
113
- searchResults.editableList('addItem', results[i]);
114
- }
115
- } else {
116
- searchResults.editableList('addItem', {});
144
+ } else {
145
+ let setResults = new Set()
146
+ for (const i in index) {
147
+ index[i].forEach(n => {
148
+ if (setResults.has(n.node.id)) return;
149
+ else {
150
+ setResults.add(n.node.id);
151
+ if (n.node.type === 'tab'){
152
+ results.push({ label:n.node.label, node: n.node});
153
+ }else {
154
+ results.push({ label:n.node.name, node: n.node});
155
+ }
156
+ }
157
+ })
117
158
  }
159
+
118
160
  }
161
+ return results;
162
+
163
+ }
164
+ /**
165
+ * Returns a list of commands that will be added to the search window when it is opened
166
+ */
167
+ function searchCommands() {
168
+ return [
169
+ { type: 'command', title: 'Open Settings', action: 'core:settings:open', shortcut: `${CtrlOrCmd()} ,` },
170
+ { type: 'command', title: 'Show Project Info', action: 'core:project-info' },
171
+ { type: 'command', title: 'Run Test...', cb: () => {
172
+ if (!$('.sidebar-test').is(':visible')){
173
+ $('#red-ui-tab-test-link-button').click();
174
+ }
175
+
176
+ $('#test-sidebar-run-btn').click();
177
+ } },
178
+ { type: 'command', title: 'Import Flow', action: 'core:show-import-dialog', shortcut: `${CtrlOrCmd()} I` },
179
+ { type: 'command', title: 'Export Flow', action: 'core:show-export-dialog', shortcut: `${CtrlOrCmd()} E` },
180
+ ]
181
+ }
182
+
183
+ function CtrlOrCmd() {
184
+ return window.__kumologica.settings.platform.isMac? "⌘": "Ctrl";
119
185
  }
120
186
 
121
187
  function ensureSelectedIsVisible() {
@@ -146,7 +212,7 @@ RED.search = (function () {
146
212
  dialog
147
213
  );
148
214
  searchInput = $(
149
- '<input type="text" placeholder="Find (Nodes and Tabs)">'
215
+ '<input type="text" placeholder="Search nodes and tabs by name or type">'
150
216
  )
151
217
  .appendTo(searchDiv)
152
218
  .searchBox({
@@ -206,14 +272,55 @@ RED.search = (function () {
206
272
  addButton: false,
207
273
  addItem: function (container, i, object) {
208
274
  var node = object.node;
209
- console.log(`[search] node = `, node);
210
275
 
211
- if (node === undefined) {
276
+ // If node === undefined and object is object => object is the command
277
+ // If node === undefiend and object is empty => user search yield no results
278
+ // otherwise is a normal search ...
279
+
280
+ if (node === undefined && !object ) {
281
+ // case of user search yield no results
212
282
  $('<div>', { class: 'red-ui-search-empty' })
213
283
  .text('No matches found')
214
284
  .appendTo(container);
215
- // } else if (node.type === 'tab') {
216
- // }
285
+ } else if (node === undefined && object) {
286
+ // case of initial display of options (commands & tabs ) ... (object is a command)
287
+ if (object.type === 'command') {
288
+
289
+ // Main result container
290
+ var div = $('<a>', {
291
+ href: '#',
292
+ class: 'red-ui-search-result',
293
+ }).appendTo(container);
294
+
295
+ // Command title here
296
+ var contentDescription = $('<div>', {
297
+ class: 'red-ui-search-result-description',
298
+ }).appendTo(div);
299
+
300
+ $('<div>', { class: 'red-ui-search-result-command-label', style: 'width:95%' })
301
+ .text(object.title)
302
+ .appendTo(contentDescription);
303
+
304
+ // Type of object (command)
305
+ $('<div>', { class: 'red-ui-search-result-command-shortcut' })
306
+ .text(object.shortcut)
307
+ .appendTo(div);
308
+
309
+ div.click(function (evt) {
310
+ evt.preventDefault();
311
+ if (object.action){
312
+ hide();
313
+ window.setTimeout( ()=> {
314
+ RED.actions.invoke(object.action)}, 10)
315
+ } else {
316
+ hide();
317
+ window.setTimeout( ()=> {
318
+ object.cb() }, 10)
319
+ }
320
+
321
+ });
322
+ }
323
+
217
324
  } else {
218
325
  var def = node._def;
219
326
  var div = $('<a>', {
@@ -221,54 +328,53 @@ RED.search = (function () {
221
328
  class: 'red-ui-search-result',
222
329
  }).appendTo(container);
223
330
 
224
- var nodeDiv = $('<div>', {
225
- class: 'red-ui-search-result-node',
331
+ // ::: Part of the description
332
+ var contentDescription = $('<div>', {
333
+ class: 'red-ui-search-result-description',
226
334
  }).appendTo(div);
335
+
336
+ // ::: Part of the icon here...
337
+ var nodeDiv = $('<div>', {
338
+ class: 'ui-search-result-node',
339
+ }).appendTo(contentDescription);
340
+
227
341
  var colour = RED.utils.getNodeColor(node.type, def);
228
342
  var icon_url = RED.utils.getNodeIcon(def, node);
343
+
229
344
  if (node.type === 'tab') {
230
- // colour = '#C0DEED';
231
345
  var iconContainer = $('<div/>', {
232
346
  class: 'palette_icon_container',
233
347
  }).appendTo(nodeDiv);
234
348
  RED.utils.createIconElement('icons/kumologica-core/kumologica-tab.png', iconContainer, true);
235
- }else{
236
- // Disable the background color, we want it transparent now
237
- //nodeDiv.css('backgroundColor', colour);
349
+ } else {
238
350
  var iconContainer = $('<div/>', {
239
351
  class: 'palette_icon_container',
240
352
  }).appendTo(nodeDiv);
241
353
  RED.utils.createIconElement(icon_url, iconContainer, true);
242
354
  }
243
-
244
-
245
-
246
355
 
247
- var contentDiv = $('<div>', {
248
- class: 'red-ui-search-result-description',
249
- }).appendTo(div);
250
356
  if (node.z) {
251
357
  var workspace = RED.nodes.workspace(node.z);
252
358
  if (!workspace) {
253
359
  workspace = RED.nodes.subflow(node.z);
254
360
  workspace = 'subflow:' + workspace.name;
255
361
  } else {
256
- workspace = 'tab:' + workspace.label; //'flow:' + workspace.label
362
+ workspace = workspace.label; //'flow:' + workspace.label
257
363
  }
258
364
  $('<div>', { class: 'red-ui-search-result-node-flow' })
259
365
  .text(workspace)
260
- .appendTo(contentDiv);
366
+ .appendTo(div);
261
367
  }
262
368
 
263
369
  $('<div>', { class: 'red-ui-search-result-node-label' })
264
370
  .text(object.label || node.id)
265
- .appendTo(contentDiv);
371
+ .appendTo(contentDescription);
266
372
  $('<div>', { class: 'red-ui-search-result-node-type' })
267
373
  .text(node.type)
268
- .appendTo(contentDiv);
374
+ .appendTo(contentDescription);
269
375
  $('<div>', { class: 'red-ui-search-result-node-id' })
270
376
  .text(node.id)
271
- .appendTo(contentDiv);
377
+ .appendTo(contentDescription);
272
378
 
273
379
  div.click(function (evt) {
274
380
  evt.preventDefault();
@@ -278,11 +384,6 @@ RED.search = (function () {
278
384
  },
279
385
  scrollOnAdd: false,
280
386
  });
281
-
282
- // Hint to how to close the search panel
283
- $(`
284
- <div style="text-align:center; padding: 3px 0 5px 0">Press <span class="escape-key">Esc</span> to close</div>
285
- `).appendTo(dialog);
286
387
  }
287
388
 
288
389
  function reveal(node) {
@@ -301,11 +402,6 @@ RED.search = (function () {
301
402
  RED.actions.invoke('core:project-info:close');
302
403
  RED.actions.invoke('core:settings:close');
303
404
 
304
- console.log('[search] disabled=', disabled);
305
- if (disabled) {
306
- return;
307
- }
308
- console.log('[search] visible=', visible);
309
405
  if (!visible) {
310
406
  RED.keyboard.add('*', 'escape', function () {
311
407
  hide();
@@ -324,8 +420,15 @@ RED.search = (function () {
324
420
  searchInput.searchBox('value', v);
325
421
  RED.events.emit('search:open');
326
422
  visible = true;
423
+ window.setTimeout(()=> {
424
+ searchInput.focus()
425
+ }, 50);
426
+
427
+ // Populate search results with commands and tabs at least
428
+ search();
327
429
  }
328
- searchInput.focus();
430
+
431
+
329
432
  }
330
433
 
331
434
  function hide() {
@@ -398,7 +398,7 @@ RED.uiSettings = (function(){
398
398
  //console.log(`lineCount: ${cmInstance.lineCount()}`)
399
399
  // Set the cursor at the end of existing content
400
400
  cmInstance.setCursor(cmInstance.lineCount(), 0);
401
- let codeMirrorHeight = totalHeightAvailable - 300;
401
+ let codeMirrorHeight = totalHeightAvailable - 400;
402
402
 
403
403
  cmInstance.setSize(null, codeMirrorHeight);
404
404
  // cmInstance.refresh();
@@ -1872,7 +1872,6 @@ RED.view = (function () {
1872
1872
  var lastSelection = null;
1873
1873
 
1874
1874
  function updateSelection(ignoreEdit) {
1875
- console.log(`[view::updateSelection] invoked - ignoreEdit=${ignoreEdit}`)
1876
1875
  var selection = {};
1877
1876
 
1878
1877
  var workspaceSelection = RED.workspaces.selection();
@@ -1998,13 +1997,11 @@ RED.view = (function () {
1998
1997
  }else{
1999
1998
  if (selectionJSON !== lastSelection) {
2000
1999
  lastSelection = selectionJSON;
2001
- console.log('[view::updateSelection] Selection has changed from lastSelection:\n', lastSelection);
2002
- console.log('[view::updateSelection] Selection has changed to selectionJSON:\n', selectionJSON);
2003
-
2004
2000
  RED.editor.edit(selection);
2005
2001
  }else{
2006
2002
  // User has clicked on the canvas or link
2007
- console.log('[view::updateSelection] Selection has not changed. Ignore');
2003
+ // console.log('[view::updateSelection] Selection has not changed. Ignore');
2004
+
2008
2005
  // Just close the sidebar
2009
2006
  RED.editor.resetEditor();
2010
2007
  }
@@ -14,13 +14,13 @@ RED.validators = {
14
14
  } else if (ptype === 'msg' || ptype === 'flow' || ptype === 'global' ) {
15
15
  return RED.utils.validatePropertyExpression(v);
16
16
  } else if (ptype === 'num') {
17
- console.log('[validators] pType=num. v=', v);
17
+ // console.log('[validators] pType=num. v=', v);
18
18
  return /^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/.test(v);
19
19
  }
20
20
  return true;
21
21
  }},
22
22
  typedInputRules: function(ptypeName) { return function(v) {
23
- console.log('[validators] TypedInput. v=', v);
23
+ // console.log('[validators] TypedInput. v=', v);
24
24
  let valid = true;
25
25
  if (Array.isArray(v)){
26
26
  v.forEach( rule => {
@@ -54,7 +54,7 @@
54
54
  /** Fix for unreachable dropdown menu **/
55
55
  .dropdown-menu {
56
56
  border-radius: 0;
57
- width: 200px !important;
57
+ width: 220px !important;
58
58
  margin-left: 0px !important;
59
59
  }
60
60
  .dropdown-menu > li > a > i {
@@ -576,6 +576,7 @@
576
576
  }
577
577
 
578
578
  #clipboard-hidden {
579
+ display:none;
579
580
  position: absolute;
580
581
  top: -3000px;
581
582
  }
@@ -106,7 +106,7 @@ span.logo {
106
106
  #header {
107
107
  #left {
108
108
  display: flex;
109
- width: 220px;
109
+ min-width: 220px;
110
110
  justify-content: center;
111
111
  align-items: center;
112
112
  background: $kumologica-sidebar;
@@ -120,7 +120,8 @@ span.logo {
120
120
  }
121
121
  #right {
122
122
  display: flex;
123
- justify-content: flex-end;
123
+ width: 100%;
124
+ justify-content: center;
124
125
  align-items: center;
125
126
  .btn-aux {
126
127
  display: flex;
@@ -157,17 +158,23 @@ span.logo {
157
158
  // Switch projectIndicator information depending on the state of the server: deploying or running
158
159
  #header #projectIndicator {
159
160
  display: flex;
160
- flex-direction: column;
161
+ flex-direction: row;
161
162
  background: #ecebeb;
162
163
  // box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1);
163
- width: 320px;
164
- border-radius: 4px;
165
- height: 25px;
164
+ width: 500px;
165
+ border-radius: 6px;
166
+ height: 26px;
167
+ &:hover{
168
+ // style for cursor to change to hand
169
+ cursor: pointer;
170
+
171
+ }
166
172
 
167
173
  #projectInformation {
168
174
  display: flex;
169
- flex-direction: column;
175
+ flex-direction: row;
170
176
  height: 100%;
177
+ width: 100%;
171
178
  align-items: center;
172
179
  justify-content: center;
173
180
  }
@@ -182,6 +189,7 @@ span.logo {
182
189
  }
183
190
  #projectDeployingInformation {
184
191
  display: flex;
192
+ width: 100%;
185
193
  }
186
194
  }
187
195
 
@@ -207,6 +215,7 @@ span.logo {
207
215
  #header #project-title {
208
216
  font-size: 13px;
209
217
  margin-top: 1px;
218
+ margin-left: 6px;
210
219
  text-align: center;
211
220
  color: #313030;
212
221
  font-weight: 500;
@@ -285,7 +285,7 @@
285
285
  bottom: 0;
286
286
  left: 0;
287
287
  width: 30px;
288
- border: 1px solid rgba(0, 0, 0, 0.1);
288
+ // border: 1px solid rgba(0, 0, 0, 0.1);
289
289
  }
290
290
  .palette_icon_container_right {
291
291
  left: auto;
@@ -372,12 +372,53 @@
372
372
  width: 25px;
373
373
  }
374
374
 
375
- #createTab{
376
- padding-top: 4px;
375
+
376
+
377
+ /*
378
+ * ----------------
379
+ * Explorer tab
380
+ * ----------------
381
+ */
382
+
383
+ #palette-explorer {
384
+ display: flex;
385
+ flex-direction: column;
386
+ }
387
+
388
+ #palette-explorer-top {
389
+ display: flex;
390
+ margin-top: 6px;
391
+ }
392
+
393
+ #palette-explorer-bottom {
377
394
  display: flex;
378
- width: 22px;
395
+ margin-top: 5px;
396
+ padding-top: 6px;
397
+ border-top: 1px solid #cccbcb;
398
+ }
399
+
400
+ #exp-workspace,
401
+ #exp-open-project{
402
+ display: flex;
403
+ width: 100%;
404
+ }
405
+
406
+ #exp-workspace-addFolder,
407
+ #exp-open-project-createTab {
408
+ display: flex;
409
+ }
410
+
411
+
412
+
413
+ #addProjectToWorkspace,
414
+ #createTab{
415
+ display: flex;
416
+ margin: 0px 5px 0 0;
417
+ padding: 6px;
418
+ height: 9px;
379
419
  justify-content: center;
380
- padding-left: 7px;
420
+ font-size: smaller;
381
421
  }
382
422
 
383
423
 
424
+
@@ -17,7 +17,7 @@
17
17
  background: #ddd;
18
18
  padding: 2px 10px 3px 10px;
19
19
  border-radius: 4px;
20
- font-weight: 500;
20
+ font-weight: 400;
21
21
  --saf-0: rgba(var(--sk_foreground_high,29,28,29),0.5);
22
22
  box-shadow: 0 1px 0 var(--saf-0);
23
23
  }
@@ -29,9 +29,10 @@
29
29
  width: 500px;
30
30
  background: #ecebeb;
31
31
  left: 50%;
32
- margin-left: -250px;
33
- top: 0px;
32
+ margin-left: -140px;
33
+ top: -36px;
34
34
  border: 1px solid $primary-border-color;
35
+ border-radius: 6px;
35
36
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
36
37
  }
37
38
 
@@ -18,13 +18,14 @@
18
18
  z-index: 1000;
19
19
  display: none;
20
20
  position: absolute;
21
- width: 500px;
22
- background: white;
21
+ width: 700px;
22
+ background: #f9f9f9;
23
23
  left: 50%;
24
24
  margin-left: -250px;
25
- top: 0px;
25
+ top: -36px;
26
26
  border: 1px solid $primary-border-color;
27
27
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
28
+ border-radius: 6px;
28
29
 
29
30
  ol {
30
31
  }
@@ -71,12 +72,7 @@
71
72
  .red-ui-search-result-separator {
72
73
  border-bottom: 3px solid #ddd;
73
74
  }
74
- .red-ui-search-result-node {
75
- position: relative;
76
- width: 24px;
77
- height: 24px;
78
- margin-top: 1px;
79
- }
75
+
80
76
  .red-ui-search-result-node-port {
81
77
  position: absolute;
82
78
  border-radius: 2px;
@@ -98,8 +94,8 @@
98
94
  width: 15px;
99
95
  }
100
96
  .red-ui-search-result-description {
101
- margin-top: 2px;
102
- margin-left: 34px;
97
+ display: flex;
98
+ margin: 0 5px;
103
99
  }
104
100
  .red-ui-search-result-node-label {
105
101
  color: #999;
@@ -112,9 +108,10 @@
112
108
  }
113
109
  .red-ui-search-results-container {
114
110
  position: relative;
115
- height: 300px;
116
- padding: 5px;
111
+ height: 450px;
112
+ padding: 5px 10px;
117
113
  background: #f9f9f9;
114
+ border-radius: 6px;
118
115
 
119
116
  .red-ui-editableList-container {
120
117
  background: white;
@@ -122,6 +119,7 @@
122
119
  background: #f9f9f9;
123
120
  li {
124
121
  padding: 0;
122
+ line-height: 15px;
125
123
  &.selected {
126
124
  background: #efefef;
127
125
  .red-ui-search-result {
@@ -132,13 +130,24 @@
132
130
  }
133
131
  }
134
132
  }
133
+ .searchSeparator {
134
+ border-top: 1px solid #ddd;
135
+ margin: 7px 5px;
136
+ }
137
+
138
+ .red-ui-search-result-command-shortcut {
139
+ display: flex;
140
+ width: 5%;
141
+ font-size: 0.9em;
142
+ color: darkgrey;
143
+ }
144
+
135
145
  .red-ui-search-result {
136
146
  padding: 8px 2px 8px 5px;
137
- display: block;
147
+ display: flex;
138
148
  cursor: pointer;
139
149
  color: $form-text-color;
140
- border-left: 3px solid #fff;
141
- border-right: 3px solid #fff;
150
+
142
151
  &:hover {
143
152
  text-decoration: none;
144
153
  color: $form-text-color;
@@ -175,19 +184,30 @@
175
184
  }
176
185
  }
177
186
  .red-ui-search-result-description {
178
- margin-left: 40px;
179
- margin-right: 5px;
187
+ display: flex;
188
+ width: 90%;
189
+ margin: 0 5px;
180
190
  }
181
191
  .red-ui-search-result-node-label {
182
192
  color: #222;
193
+ font-weight: 400;
194
+ font-size: 1em;
183
195
  }
196
+ .red-ui-search-result-command-label {
197
+ color: #222;
198
+ font-size: 1.1em;
199
+ }
200
+
184
201
  .red-ui-search-result-node-type {
185
- font-style: italic;
202
+ margin-left: 6px;
186
203
  font-size: 0.9em;
204
+ color: darkgrey;
187
205
  }
188
206
  .red-ui-search-result-node-flow {
189
- float: right;
190
- font-size: 0.8em;
207
+ display: flex;
208
+ width: 5%;
209
+ font-size: 0.9em;
210
+ color: #2979ff;
191
211
  }
192
212
  .red-ui-search-result-node-id {
193
213
  display: none;
@@ -199,3 +219,11 @@
199
219
  font-style: italic;
200
220
  color: $form-placeholder-color;
201
221
  }
222
+
223
+ .ui-search-result-node {
224
+ position: relative;
225
+ width: 24px;
226
+ height: 14px;
227
+ margin-top: 1px;
228
+ left: -8px;
229
+ }
@@ -90,6 +90,7 @@ body {
90
90
  }
91
91
 
92
92
  #main-container {
93
+ display: flex;
93
94
  position: absolute;
94
95
  top: 38px;
95
96
  left: 0;
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  **/
16
16
  .red-ui-editableList-border {
17
- border: 1px solid $form-input-border-color;
17
+ // border: 1px solid $form-input-border-color;
18
18
  //border-radius: 4px;
19
19
  .red-ui-editableList-header {
20
20
  border-bottom: 1px solid $form-input-border-color;
@@ -27,7 +27,7 @@
27
27
  margin: 0;
28
28
  vertical-align: middle;
29
29
  box-sizing: border-box;
30
- background-color: white;
30
+ // background-color: white;
31
31
  overflow-y: auto !important;
32
32
  .red-ui-editableList-list {
33
33
  list-style-type: none;
@@ -39,7 +39,7 @@
39
39
  li {
40
40
  box-sizing: border-box;
41
41
  position: relative;
42
- background: #fff;
42
+ // background: #fff;
43
43
  margin: 0;
44
44
  padding: 2px 0px;
45
45
  //border-bottom: 1px solid $secondary-border-color;