@camunda/task-testing 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -386,8 +386,14 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
386
386
  /** @type {TaskExecutionApi} */
387
387
  this._api = api;
388
388
  this._interval = null;
389
+
390
+ /** @type {TaskExecutionStatus} */
391
+ this._status = 'idle';
389
392
  const eventBus = injector.get('eventBus');
390
393
  eventBus.on(['selection.changed', 'commandStack.changed'], () => {
394
+ if (this._status !== 'idle') {
395
+ this.emit('taskExecution.interrupted');
396
+ }
391
397
  this.cancelTaskExecution();
392
398
  });
393
399
  }
@@ -401,9 +407,12 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
401
407
  * @returns {Promise<void>}
402
408
  */
403
409
  async executeTask(elementId, variables) {
404
- await this.cancelTaskExecution();
405
- this.emit('taskExecution.status.changed', 'deploying');
410
+ this._changeStatus('deploying');
406
411
  const deploymentResult = await this._api.deploy();
412
+ if (this._status === 'idle') {
413
+ // Execution was canceled in the meantime
414
+ return;
415
+ }
407
416
  if (!deploymentResult.success) {
408
417
  this._emitError('Failed to deploy process definition', deploymentResult.error);
409
418
  this.cancelTaskExecution();
@@ -415,8 +424,12 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
415
424
  this.cancelTaskExecution();
416
425
  return;
417
426
  }
418
- this.emit('taskExecution.status.changed', 'starting-instance');
427
+ this._changeStatus('starting-instance');
419
428
  const startInstanceResult = await this._api.startInstance(processId, elementId, variables);
429
+ if (/** @type {TaskExecutionStatus} */this._status === 'idle') {
430
+ // Execution was canceled in the meantime
431
+ return;
432
+ }
420
433
  if (!startInstanceResult.success) {
421
434
  this._emitError('Failed to start process instance', startInstanceResult.error);
422
435
  this.cancelTaskExecution();
@@ -428,9 +441,14 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
428
441
  this.cancelTaskExecution();
429
442
  return;
430
443
  }
431
- this.emit('taskExecution.status.changed', 'executing', processInstanceKey);
444
+ this._changeStatus('executing', processInstanceKey);
432
445
  const intervalCallback = async () => {
433
446
  const getProcessInstanceResult = await this._api.getProcessInstance(processInstanceKey);
447
+ if (this._status === 'idle') {
448
+ // Execution was canceled in the meantime
449
+ this.cancelTaskExecution();
450
+ return;
451
+ }
434
452
  if (!getProcessInstanceResult.success) {
435
453
  this._emitError('Failed to get process instance', getProcessInstanceResult.error);
436
454
  return;
@@ -445,6 +463,11 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
445
463
  let incident = null;
446
464
  if (hasIncident) {
447
465
  const getProcessInstanceIncidentResult = await this._api.getProcessInstanceIncident(processInstanceKey);
466
+ if (/** @type {TaskExecutionStatus} */this._status === 'idle') {
467
+ // Execution was canceled in the meantime
468
+ this.cancelTaskExecution();
469
+ return;
470
+ }
448
471
  if (!getProcessInstanceIncidentResult.success) {
449
472
  this._emitError('Failed to get process instance incident', getProcessInstanceIncidentResult.error);
450
473
  return;
@@ -454,6 +477,11 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
454
477
  const isCompleted = ['COMPLETED', 'TERMINATED', 'CANCELED'].includes(state);
455
478
  if (isCompleted || hasIncident) {
456
479
  const getProcessInstanceVariablesResult = await this._api.getProcessInstanceVariables(processInstanceKey);
480
+ if (/** @type {TaskExecutionStatus} */this._status === 'idle') {
481
+ // Execution was canceled in the meantime
482
+ this.cancelTaskExecution();
483
+ return;
484
+ }
457
485
  if (!getProcessInstanceVariablesResult.success) {
458
486
  this._emitError('Failed to get process instance variables', getProcessInstanceVariablesResult.error);
459
487
  return;
@@ -471,9 +499,7 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
471
499
  }
472
500
 
473
501
  /**
474
- * Cancel current task execution, clean up and emit events:
475
- * - `taskExecution.status.changed` with status `idle`
476
- * - `taskExecution.canceled`
502
+ * Cancel current task execution, clean up and change status to `idle`.
477
503
  */
478
504
  async cancelTaskExecution() {
479
505
  // TODO: Proper clean up:
@@ -484,8 +510,7 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
484
510
  if (this._interval) {
485
511
  clearInterval(this._interval);
486
512
  }
487
- this.emit('taskExecution.status.changed', 'idle');
488
- this.emit('taskExecution.canceled');
513
+ this._changeStatus('idle');
489
514
  }
490
515
 
491
516
  /**
@@ -502,6 +527,15 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
502
527
  };
503
528
  this.emit('taskExecution.error', error);
504
529
  }
530
+
531
+ /** @param {TaskExecutionStatus} status */
532
+ _changeStatus(status, ...args) {
533
+ if (this._status === status) {
534
+ return;
535
+ }
536
+ this._status = status;
537
+ this.emit('taskExecution.status.changed', status, ...args);
538
+ }
505
539
  }
506
540
 
507
541
  /**
@@ -1120,25 +1154,23 @@ function ErrorBanner({
1120
1154
  }) {
1121
1155
  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", {
1122
1156
  className: "output__error",
1123
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
1124
- className: "output__error--icon",
1125
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_2__.ErrorFilled, {})
1126
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", {
1127
- className: "output__error--content",
1128
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", {
1129
- className: "output__error--title",
1130
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", {
1131
- children: title
1132
- }), actionLabel && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Link, {
1157
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", {
1158
+ className: "output__error--title",
1159
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", {
1160
+ children: title
1161
+ }), actionLabel && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
1162
+ className: "output__error--action",
1163
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Link, {
1133
1164
  href: actionUrl,
1134
1165
  onClick: () => onActionClick(),
1135
1166
  children: actionLabel
1136
- })]
1137
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
1138
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", {
1139
- children: description
1140
1167
  })
1141
1168
  })]
1169
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
1170
+ className: "output__error--content",
1171
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", {
1172
+ children: description
1173
+ })
1142
1174
  })]
1143
1175
  });
1144
1176
  }
@@ -1316,8 +1348,9 @@ const NO_ELEMENT_TEXT = 'Select a task to start testing';
1316
1348
  * @param {import('../../types').Config|undefined} [props.config]
1317
1349
  * @param {Function} [props.onConfigChanged=() => {}]
1318
1350
  * @param {string} [props.operateBaseUrl]
1319
- * @param {Function} [props.onTaskExecution=() => {}]
1320
- * @param {Function} [props.onTaskExecutionCanceled=() => {}]
1351
+ * @param {Function} [props.onTaskExecutionStarted=() => {}]
1352
+ * @param {Function} [props.onTaskExecutionFinished=() => {}]
1353
+ * @param {Function} [props.onTaskExecutionInterrupted=() => {}]
1321
1354
  */
1322
1355
  function TaskTesting({
1323
1356
  injector,
@@ -1330,8 +1363,9 @@ function TaskTesting({
1330
1363
  config,
1331
1364
  onConfigChanged = () => {},
1332
1365
  operateBaseUrl,
1333
- onTaskExecution = () => {},
1334
- onTaskExecutionCanceled = () => {}
1366
+ onTaskExecutionStarted = () => {},
1367
+ onTaskExecutionFinished = () => {},
1368
+ onTaskExecutionInterrupted = () => {}
1335
1369
  }) {
1336
1370
  /**
1337
1371
  * @type {React.RefObject<ElementVariables?>}
@@ -1467,17 +1501,18 @@ function TaskTesting({
1467
1501
  ...output,
1468
1502
  operateUrl
1469
1503
  });
1504
+ onTaskExecutionFinished(element, output);
1470
1505
  };
1471
1506
  taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur = taskExecutionRef.current) === null || _taskExecutionRef$cur === void 0 || _taskExecutionRef$cur.on('taskExecution.finished', handleFinished);
1472
1507
  taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur2 = taskExecutionRef.current) === null || _taskExecutionRef$cur2 === void 0 || _taskExecutionRef$cur2.on('taskExecution.status.changed', handleStatusChange);
1473
1508
  taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur3 = taskExecutionRef.current) === null || _taskExecutionRef$cur3 === void 0 || _taskExecutionRef$cur3.on('taskExecution.error', handleError);
1474
- taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur4 = taskExecutionRef.current) === null || _taskExecutionRef$cur4 === void 0 || _taskExecutionRef$cur4.on('taskExecution.canceled', () => onTaskExecutionCanceled());
1509
+ taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur4 = taskExecutionRef.current) === null || _taskExecutionRef$cur4 === void 0 || _taskExecutionRef$cur4.on('taskExecution.interrupted', () => onTaskExecutionInterrupted());
1475
1510
  return () => {
1476
1511
  if (taskExecutionRef.current) {
1477
1512
  taskExecutionRef.current.off('taskExecution.finished', handleFinished);
1478
1513
  taskExecutionRef.current.off('taskExecution.status.changed', handleStatusChange);
1479
1514
  taskExecutionRef.current.off('taskExecution.error', handleError);
1480
- taskExecutionRef.current.off('taskExecution.canceled', () => onTaskExecutionCanceled());
1515
+ taskExecutionRef.current.off('taskExecution.interrupted', () => onTaskExecutionInterrupted());
1481
1516
  }
1482
1517
  };
1483
1518
  }, [element]);
@@ -1514,11 +1549,14 @@ function TaskTesting({
1514
1549
  const inputConfig = await elementConfigRef.current.getInputConfigForElement(element);
1515
1550
  elementConfigRef.current.setOutputConfigForElement(element, null);
1516
1551
  taskExecutionRef.current.executeTask(element.id, JSON.parse(inputConfig));
1517
- onTaskExecution();
1552
+ onTaskExecutionStarted(element);
1518
1553
  };
1519
1554
  const handleCancelTaskExecution = () => {
1520
- if (taskExecutionRef.current) {
1521
- taskExecutionRef.current.cancelTaskExecution();
1555
+ var _taskExecutionRef$cur5;
1556
+ taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur5 = taskExecutionRef.current) === null || _taskExecutionRef$cur5 === void 0 || _taskExecutionRef$cur5.cancelTaskExecution();
1557
+ if (output !== null && output !== void 0 && output.operateUrl && Object.keys(output).length === 1) {
1558
+ var _elementConfigRef$cur7;
1559
+ elementConfigRef === null || elementConfigRef === void 0 || (_elementConfigRef$cur7 = elementConfigRef.current) === null || _elementConfigRef$cur7 === void 0 || _elementConfigRef$cur7.setOutputConfigForElement(element, null);
1522
1560
  }
1523
1561
  };
1524
1562
  const handleResetOutput = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
@@ -1558,8 +1596,11 @@ function TaskTesting({
1558
1596
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", {
1559
1597
  className: "task-testing__container--header",
1560
1598
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", {
1561
- className: "task-name",
1562
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_2__.Chemistry, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
1599
+ className: "task-header",
1600
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
1601
+ className: "task-type",
1602
+ children: (0,_utils_element__WEBPACK_IMPORTED_MODULE_10__.getType)(element)
1603
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
1563
1604
  children: (0,_utils_element__WEBPACK_IMPORTED_MODULE_10__.getName)(element)
1564
1605
  })]
1565
1606
  }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Tooltip, {
@@ -2003,7 +2044,8 @@ function hasPropertyAfter(state, pos) {
2003
2044
 
2004
2045
  __webpack_require__.r(__webpack_exports__);
2005
2046
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2006
- /* harmony export */ getName: () => (/* binding */ getName)
2047
+ /* harmony export */ getName: () => (/* binding */ getName),
2048
+ /* harmony export */ getType: () => (/* binding */ getType)
2007
2049
  /* harmony export */ });
2008
2050
  /* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ "./node_modules/bpmn-js/lib/util/ModelUtil.js");
2009
2051
 
@@ -2024,6 +2066,40 @@ function getName(element) {
2024
2066
  return name;
2025
2067
  }
2026
2068
 
2069
+ /**
2070
+ * Get the name of a BPMN element.
2071
+ *
2072
+ * @param {import('../types').Element} element
2073
+ *
2074
+ * @returns {string}
2075
+ */
2076
+ function getType(element) {
2077
+ const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element);
2078
+ const {
2079
+ $type: type
2080
+ } = businessObject;
2081
+ switch (type) {
2082
+ case 'bpmn:Task':
2083
+ return 'Task';
2084
+ case 'bpmn:UserTask':
2085
+ return 'User Task';
2086
+ case 'bpmn:ScriptTask':
2087
+ return 'Script Task';
2088
+ case 'bpmn:ServiceTask':
2089
+ return 'Service Task';
2090
+ case 'bpmn:BusinessRuleTask':
2091
+ return 'Business Rule Task';
2092
+ case 'bpmn:SendTask':
2093
+ return 'Send Task';
2094
+ case 'bpmn:ManualTask':
2095
+ return 'Manual Task';
2096
+ case 'bpmn:ReceiveTask':
2097
+ return 'Receive Task';
2098
+ default:
2099
+ return 'Task';
2100
+ }
2101
+ }
2102
+
2027
2103
  /***/ }),
2028
2104
 
2029
2105
  /***/ "./node_modules/@bpmn-io/extract-process-variables/zeebe/index.mjs":
@@ -2757,8 +2833,6 @@ __webpack_require__.r(__webpack_exports__);
2757
2833
  /* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ "./node_modules/bpmn-js/lib/util/ModelUtil.js");
2758
2834
  /* harmony import */ var _util_CachedValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/CachedValue */ "./node_modules/@bpmn-io/variable-resolver/lib/base/util/CachedValue.js");
2759
2835
  /* harmony import */ var _util_scopeUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/scopeUtil */ "./node_modules/@bpmn-io/variable-resolver/lib/base/util/scopeUtil.js");
2760
- /* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! min-dash */ "./node_modules/min-dash/dist/index.esm.js");
2761
-
2762
2836
 
2763
2837
 
2764
2838
 
@@ -2777,6 +2851,7 @@ __webpack_require__.r(__webpack_exports__);
2777
2851
  * @typedef {AdditionalVariable} ProcessVariable
2778
2852
  * @property {Array<ModdleElement>} origin
2779
2853
  * @property {ModdleElement} scope
2854
+ * @property {Array<Object>} provider
2780
2855
  */
2781
2856
 
2782
2857
  /**
@@ -2809,7 +2884,7 @@ class BaseVariableResolver {
2809
2884
  }
2810
2885
 
2811
2886
  /**
2812
- * To be implemented by super class. This should be an instance of `getProcessVariables` from `@bpmn-io/extract-process-variables`,
2887
+ * To be implemented by a subclass. This should be an instance of `getProcessVariables` from `@bpmn-io/extract-process-variables`,
2813
2888
  * either C7 or C8.
2814
2889
  *
2815
2890
  * @returns {Promise<Array<ProcessVariable>>}
@@ -3018,24 +3093,40 @@ class BaseVariableResolver {
3018
3093
  const root = getRootElement(bo);
3019
3094
  const allVariables = await this.getProcessVariables(root);
3020
3095
 
3021
- // keep only unique variables based on name property
3022
- const uniqueVariables = (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.uniqueBy)('name', allVariables.reverse());
3023
-
3024
3096
  // (1) get variables for given scope
3025
- var scopeVariables = uniqueVariables.filter(function(variable) {
3097
+ var scopeVariables = allVariables.filter(function(variable) {
3026
3098
  return variable.scope.id === bo.id;
3027
3099
  });
3028
3100
 
3029
3101
  // (2) get variables for parent scopes
3030
3102
  var parents = (0,_util_scopeUtil__WEBPACK_IMPORTED_MODULE_1__.getParents)(bo);
3031
3103
 
3032
- var parentsScopeVariables = uniqueVariables.filter(function(variable) {
3104
+ var parentsScopeVariables = allVariables.filter(function(variable) {
3033
3105
  return parents.find(function(parent) {
3034
3106
  return parent.id === variable.scope.id;
3035
3107
  });
3036
3108
  });
3037
3109
 
3038
- return [ ...scopeVariables, ...parentsScopeVariables ];
3110
+ const reversedVariables = [ ...scopeVariables, ...parentsScopeVariables ].reverse();
3111
+
3112
+ const seenNames = new Set();
3113
+
3114
+ return reversedVariables.filter(variable => {
3115
+
3116
+ // if external variable, keep
3117
+ if (variable.provider.find(extractor => extractor !== this._baseExtractor)) {
3118
+ return true;
3119
+ }
3120
+
3121
+ // if not external, keep only the first occurrence of each name
3122
+ if (!seenNames.has(variable.name)) {
3123
+ seenNames.add(variable.name);
3124
+
3125
+ return true;
3126
+ }
3127
+
3128
+ return false;
3129
+ });
3039
3130
  }
3040
3131
  }
3041
3132
 
@@ -32526,11 +32617,13 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32526
32617
  gap: 12px;
32527
32618
  width: 100%;
32528
32619
  }
32529
- .task-testing__container .task-testing__container--header .task-name {
32620
+ .task-testing__container .task-testing__container--header .task-header {
32530
32621
  display: flex;
32531
- font-weight: bold;
32532
32622
  gap: 6px;
32533
32623
  }
32624
+ .task-testing__container .task-testing__container--header .task-header .task-type {
32625
+ font-weight: bold;
32626
+ }
32534
32627
  .task-testing__container .task-testing__container--header .btn-execute {
32535
32628
  width: 138px;
32536
32629
  }
@@ -32613,7 +32706,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32613
32706
  }
32614
32707
  .task-testing__container .output .output__error {
32615
32708
  display: flex;
32616
- flex-direction: row;
32709
+ flex-direction: column;
32617
32710
  gap: 12px;
32618
32711
  padding: 12px;
32619
32712
  margin-bottom: 12px;
@@ -32621,24 +32714,18 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32621
32714
  border-left-width: 3px;
32622
32715
  background-color: #fff1f1;
32623
32716
  }
32624
- .task-testing__container .output .output__error .output__error--content {
32717
+ .task-testing__container .output .output__error .output__error--title {
32625
32718
  display: flex;
32626
- flex-direction: column;
32627
- gap: 6px;
32628
- flex-grow: 1;
32629
- margin-top: 1px;
32630
- }
32631
- .task-testing__container .output .output__error .output__error--content .output__error--title {
32632
- display: flex;
32633
- justify-content: space-between;
32719
+ flex-direction: row;
32720
+ align-items: center;
32634
32721
  font-weight: bold;
32635
32722
  }
32636
- .task-testing__container .output .output__error .output__error--content .output__error--title .cds--link {
32637
- cursor: pointer;
32638
- }
32639
- .task-testing__container .output .output__error .output__error--icon svg {
32723
+ .task-testing__container .output .output__error .output__error--title svg {
32640
32724
  fill: #da1e28;
32641
32725
  }
32726
+ .task-testing__container .output .output__error .output__error--title .output__error--action {
32727
+ margin-left: auto;
32728
+ }
32642
32729
  .task-testing__container .output .output__variables--empty {
32643
32730
  height: 32px;
32644
32731
  display: flex;
@@ -32722,7 +32809,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32722
32809
  }
32723
32810
  .code__editor .code__editor-copy-button svg {
32724
32811
  fill: #525252;
32725
- }`, "",{"version":3,"sources":["webpack://./lib/style/style.scss"],"names":[],"mappings":"AAAA;EACE,aAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;EACA,aAAA;EACA,eAAA;AACF;AAEI;;EAEE,aAAA;EACA,mBAAA;EACA,QAAA;EACA,YAAA;AAAN;AAEM;;EACE,oBAAA;EACA,uBAAA;AACR;AAIE;EACE,UAAA;EACA,aAAA;EACA,sBAAA;EACA,+BAAA;EACA,kBAAA;AAFJ;AAKE;EACE,UAAA;EACA,aAAA;EACA,sBAAA;EACA,iBAAA;AAHJ;AAME;EACE,aAAA;EACA,mBAAA;EACA,mBAAA;EACA,8BAAA;EACA,SAAA;EACA,WAAA;AAJJ;AAMI;EACE,aAAA;EACA,iBAAA;EACA,QAAA;AAJN;AAOI;EACE,YAAA;AALN;AAQI;EACE,aAAA;AANN;AASI;EACE,aAAA;AAPN;AAUI;EACE,oBAAA;EACA,uBAAA;AARN;AAYE;EACE,YAAA;EACA,aAAA;EACA,sBAAA;EACA,QAAA;AAVJ;AAYI;EACE,aAAA;EACA,mBAAA;EACA,QAAA;AAVN;AAaI;EACE,cAAA;AAXN;AAeE;EACE,YAAA;EACA,aAAA;EACA,sBAAA;EACA,QAAA;AAbJ;AAeI;EACE,aAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;AAbN;AAgBI;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,QAAA;AAdN;AAgBM;EACE,aAAA;AAdR;AAiBM;EACE,aAAA;AAfR;AAkBM;EACE,aAAA;AAhBR;AAmBM;EACE,iBAAA;EACA,uBAAA;AAjBR;AAqBI;EACE,iBAAA;AAnBN;AAsBI;EACE,aAAA;EACA,sBAAA;EACA,YAAA;EACA,kBAAA;AApBN;AAsBM;EACE,oCAAA;AApBR;AAuBM;EACE,UAAA;EACA,yBAAA;AArBR;AAwBM;EACE,aAAA;AAtBR;AA0BM;EACE,aAAA;AAxBR;AA4BI;EACE,aAAA;EACA,mBAAA;EACA,SAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,sBAAA;EACA,yBAAA;AA1BN;AA4BM;EACE,aAAA;EACA,sBAAA;EACA,QAAA;EACA,YAAA;EACA,eAAA;AA1BR;AA4BQ;EACE,aAAA;EACA,8BAAA;EACA,iBAAA;AA1BV;AA4BU;EACE,eAAA;AA1BZ;AA+BM;EACE,aAAA;AA7BR;AAiCI;EACE,YAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;AA/BN;AAkCI;EACE,iBAAA;AAhCN;AAmCI;EACE,WAAA;AAjCN;AAoCI;EACE,qBAAA;EACA,YAAA;AAlCN;AAqCI;EACE,eAAA;AAnCN;;AAwCA;EACE,kBAAA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;AArCF;AAuCE;EACE,0BAAA;EACA,oBAAA;AArCJ;AAwCE;EACE,kBAAA;EACA,YAAA;AAtCJ;AAwCI;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;AAtCN;AAwCM;EACE,YAAA;EACA,2CAAA;AAtCR;AAyCM;EACE,2BAAA;AAvCR;AA0CM;EACE,aAAA;AAxCR;AA2CM;EACE,aAAA;AAzCR;AA4CM;EACE,eAAA;AA1CR;AA6CM;EACE,YAAA;EACA,sBAAA;EACA,eAAA;EACA,gBAAA;EACA,qBAAA;AA3CR;AA6CQ;EACE,kBAAA;AA3CV;AA8CQ;EACE,eAAA;AA5CV;AAkDE;EACE,cAAA;EACA,eAAA;EACA,eAAA;AAhDJ;AAmDE;EACE,kBAAA;EACA,SAAA;EACA,WAAA;EACA,WAAA;AAjDJ;AAmDI;EACE,aAAA;AAjDN","sourcesContent":[".task-testing__container {\n display: flex;\n flex-direction: row;\n height: 100%;\n width: 100%;\n padding: 10px;\n font-size: 14px;\n\n &.task-testing__container--empty {\n .task-testing__container-no-config,\n .task-testing__container-no-element {\n display: flex;\n align-items: center;\n gap: 5px;\n height: 32px;\n\n .cds--inline-loading {\n inline-size: initial;\n min-block-size: initial;\n }\n }\n }\n\n .task-testing__container--left {\n width: 50%;\n display: flex;\n flex-direction: column;\n border-right: 1px solid #E0E0E0;\n padding-right: 6px;\n }\n\n .task-testing__container--right {\n width: 50%;\n display: flex;\n flex-direction: column;\n padding-left: 6px;\n }\n\n .task-testing__container--header {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n\n .task-name {\n display: flex;\n font-weight: bold;\n gap: 6px;\n }\n\n .btn-execute {\n width: 138px;\n }\n\n .cds--popover-container:not(.has-error) .cds--popover {\n display: none;\n }\n\n .cds--tooltip-content {\n padding: 12px;\n }\n\n .cds--btn .cds--inline-loading {\n inline-size: initial;\n min-block-size: initial;\n }\n }\n\n .input {\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n gap: 5px;\n\n .input__header {\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n .input__header--title {\n color: #525252;\n }\n }\n\n .output {\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n gap: 5px;\n\n .output__header {\n display: flex;\n align-items: center;\n height: 32px;\n width: 100%;\n }\n\n .output__header--title {\n color: #525252;\n display: flex;\n align-items: center;\n gap: 6px;\n\n svg.output__status-icon--ready {\n fill: #0043ce;\n }\n\n svg.output__status-icon--success {\n fill: #24a148;\n }\n\n svg.output__status-icon--error {\n fill: #da1e28;\n }\n\n .cds--inline-loading {\n inline-size: 16px;\n min-block-size: initial;\n }\n }\n\n .output__header--button-operate {\n margin-left: auto;\n }\n\n .output__body {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n position: relative;\n\n .cds--tabs {\n --cds-layout-size-height-local: 32px;\n }\n \n .cds--tab-content {\n padding: 0;\n height: calc(100% - 20px);\n }\n\n .cds--tab-content:not([hidden]) {\n display: flex;\n }\n\n // Tooltip on Carbon Button with absolute position is broken.\n .cds--popover {\n display: none;\n }\n }\n\n .output__error {\n display: flex;\n flex-direction: row;\n gap: 12px;\n padding: 12px;\n margin-bottom: 12px;\n border: 1px solid #da1e28;\n border-left-width: 3px;\n background-color: #fff1f1;\n\n .output__error--content {\n display: flex;\n flex-direction: column;\n gap: 6px;\n flex-grow: 1;\n margin-top: 1px;\n\n .output__error--title {\n display: flex;\n justify-content: space-between;\n font-weight: bold;\n\n .cds--link {\n cursor: pointer;\n }\n }\n }\n\n .output__error--icon svg {\n fill: #da1e28;\n }\n }\n\n .output__variables--empty {\n height: 32px;\n display: flex;\n align-items: center;\n color: #525252;\n }\n\n .output__variables--empty-action {\n font-weight: bold;\n }\n\n .cds--snippet-container {\n width: 100%;\n }\n\n .cds--snippet {\n max-inline-size: 100%;\n height: 100%;\n }\n\n code {\n font-size: 14px;\n }\n }\n}\n\n.code__editor {\n position: relative;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n\n &.code__editor--error .code__editor-codemirror .code__editor-codemirror-inner .cm-editor {\n outline: 1px solid #da1e28;\n outline-offset: -1px;\n }\n\n .code__editor-codemirror {\n position: relative;\n flex-grow: 1;\n\n .code__editor-codemirror-inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n .cm-editor {\n height: 100%;\n background-color: var(--cds-layer, #f4f4f4);\n }\n\n .cm-scroller {\n overflow-y: auto !important;\n }\n\n .cm-content {\n padding: 15px;\n }\n\n .cm-focused {\n outline: none;\n }\n\n .cm-tooltip {\n font-size: 14px;\n }\n\n .info {\n padding: 5px;\n font-family: monospace;\n font-size: 12px;\n max-width: 300px;\n word-wrap: break-word;\n\n span {\n font-style: italic;\n }\n\n pre {\n margin-top: 5px;\n }\n }\n }\n }\n\n .code__editor-error {\n color: #da1e28;\n font-size: 13px;\n margin-top: 5px;\n }\n\n .code__editor-copy-button {\n position: absolute;\n top: 10px;\n right: 10px;\n z-index: 10;\n\n svg {\n fill: #525252;\n }\n }\n}"],"sourceRoot":""}]);
32812
+ }`, "",{"version":3,"sources":["webpack://./lib/style/style.scss"],"names":[],"mappings":"AAAA;EACE,aAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;EACA,aAAA;EACA,eAAA;AACF;AAEI;;EAEE,aAAA;EACA,mBAAA;EACA,QAAA;EACA,YAAA;AAAN;AAEM;;EACE,oBAAA;EACA,uBAAA;AACR;AAIE;EACE,UAAA;EACA,aAAA;EACA,sBAAA;EACA,+BAAA;EACA,kBAAA;AAFJ;AAKE;EACE,UAAA;EACA,aAAA;EACA,sBAAA;EACA,iBAAA;AAHJ;AAME;EACE,aAAA;EACA,mBAAA;EACA,mBAAA;EACA,8BAAA;EACA,SAAA;EACA,WAAA;AAJJ;AAMI;EACE,aAAA;EACA,QAAA;AAJN;AAMM;EACE,iBAAA;AAJR;AAQI;EACE,YAAA;AANN;AASI;EACE,aAAA;AAPN;AAUI;EACE,aAAA;AARN;AAWI;EACE,oBAAA;EACA,uBAAA;AATN;AAaE;EACE,YAAA;EACA,aAAA;EACA,sBAAA;EACA,QAAA;AAXJ;AAaI;EACE,aAAA;EACA,mBAAA;EACA,QAAA;AAXN;AAcI;EACE,cAAA;AAZN;AAgBE;EACE,YAAA;EACA,aAAA;EACA,sBAAA;EACA,QAAA;AAdJ;AAgBI;EACE,aAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;AAdN;AAiBI;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,QAAA;AAfN;AAiBM;EACE,aAAA;AAfR;AAkBM;EACE,aAAA;AAhBR;AAmBM;EACE,aAAA;AAjBR;AAoBM;EACE,iBAAA;EACA,uBAAA;AAlBR;AAsBI;EACE,iBAAA;AApBN;AAuBI;EACE,aAAA;EACA,sBAAA;EACA,YAAA;EACA,kBAAA;AArBN;AAuBM;EACE,oCAAA;AArBR;AAwBM;EACE,UAAA;EACA,yBAAA;AAtBR;AAyBM;EACE,aAAA;AAvBR;AA2BM;EACE,aAAA;AAzBR;AA6BI;EACE,aAAA;EACA,sBAAA;EACA,SAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,sBAAA;EACA,yBAAA;AA3BN;AA6BM;EACE,aAAA;EACA,mBAAA;EACA,mBAAA;EACA,iBAAA;AA3BR;AA6BQ;EACE,aAAA;AA3BV;AA8BQ;EACE,iBAAA;AA5BV;AAiCI;EACE,YAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;AA/BN;AAkCI;EACE,iBAAA;AAhCN;AAmCI;EACE,WAAA;AAjCN;AAoCI;EACE,qBAAA;EACA,YAAA;AAlCN;AAqCI;EACE,eAAA;AAnCN;;AAwCA;EACE,kBAAA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;AArCF;AAuCE;EACE,0BAAA;EACA,oBAAA;AArCJ;AAwCE;EACE,kBAAA;EACA,YAAA;AAtCJ;AAwCI;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;AAtCN;AAwCM;EACE,YAAA;EACA,2CAAA;AAtCR;AAyCM;EACE,2BAAA;AAvCR;AA0CM;EACE,aAAA;AAxCR;AA2CM;EACE,aAAA;AAzCR;AA4CM;EACE,eAAA;AA1CR;AA6CM;EACE,YAAA;EACA,sBAAA;EACA,eAAA;EACA,gBAAA;EACA,qBAAA;AA3CR;AA6CQ;EACE,kBAAA;AA3CV;AA8CQ;EACE,eAAA;AA5CV;AAkDE;EACE,cAAA;EACA,eAAA;EACA,eAAA;AAhDJ;AAmDE;EACE,kBAAA;EACA,SAAA;EACA,WAAA;EACA,WAAA;AAjDJ;AAmDI;EACE,aAAA;AAjDN","sourcesContent":[".task-testing__container {\n display: flex;\n flex-direction: row;\n height: 100%;\n width: 100%;\n padding: 10px;\n font-size: 14px;\n\n &.task-testing__container--empty {\n .task-testing__container-no-config,\n .task-testing__container-no-element {\n display: flex;\n align-items: center;\n gap: 5px;\n height: 32px;\n\n .cds--inline-loading {\n inline-size: initial;\n min-block-size: initial;\n }\n }\n }\n\n .task-testing__container--left {\n width: 50%;\n display: flex;\n flex-direction: column;\n border-right: 1px solid #E0E0E0;\n padding-right: 6px;\n }\n\n .task-testing__container--right {\n width: 50%;\n display: flex;\n flex-direction: column;\n padding-left: 6px;\n }\n\n .task-testing__container--header {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n\n .task-header {\n display: flex;\n gap: 6px;\n \n .task-type {\n font-weight: bold;\n }\n }\n\n .btn-execute {\n width: 138px;\n }\n\n .cds--popover-container:not(.has-error) .cds--popover {\n display: none;\n }\n\n .cds--tooltip-content {\n padding: 12px;\n }\n\n .cds--btn .cds--inline-loading {\n inline-size: initial;\n min-block-size: initial;\n }\n }\n\n .input {\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n gap: 5px;\n\n .input__header {\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n .input__header--title {\n color: #525252;\n }\n }\n\n .output {\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n gap: 5px;\n\n .output__header {\n display: flex;\n align-items: center;\n height: 32px;\n width: 100%;\n }\n\n .output__header--title {\n color: #525252;\n display: flex;\n align-items: center;\n gap: 6px;\n\n svg.output__status-icon--ready {\n fill: #0043ce;\n }\n\n svg.output__status-icon--success {\n fill: #24a148;\n }\n\n svg.output__status-icon--error {\n fill: #da1e28;\n }\n\n .cds--inline-loading {\n inline-size: 16px;\n min-block-size: initial;\n }\n }\n\n .output__header--button-operate {\n margin-left: auto;\n }\n\n .output__body {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n position: relative;\n\n .cds--tabs {\n --cds-layout-size-height-local: 32px;\n }\n \n .cds--tab-content {\n padding: 0;\n height: calc(100% - 20px);\n }\n\n .cds--tab-content:not([hidden]) {\n display: flex;\n }\n\n // Tooltip on Carbon Button with absolute position is broken.\n .cds--popover {\n display: none;\n }\n }\n\n .output__error {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n margin-bottom: 12px;\n border: 1px solid #da1e28;\n border-left-width: 3px;\n background-color: #fff1f1;\n\n .output__error--title {\n display: flex;\n flex-direction: row;\n align-items: center;\n font-weight: bold;\n\n svg {\n fill: #da1e28;\n }\n\n .output__error--action {\n margin-left: auto;\n }\n }\n }\n\n .output__variables--empty {\n height: 32px;\n display: flex;\n align-items: center;\n color: #525252;\n }\n\n .output__variables--empty-action {\n font-weight: bold;\n }\n\n .cds--snippet-container {\n width: 100%;\n }\n\n .cds--snippet {\n max-inline-size: 100%;\n height: 100%;\n }\n\n code {\n font-size: 14px;\n }\n }\n}\n\n.code__editor {\n position: relative;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n\n &.code__editor--error .code__editor-codemirror .code__editor-codemirror-inner .cm-editor {\n outline: 1px solid #da1e28;\n outline-offset: -1px;\n }\n\n .code__editor-codemirror {\n position: relative;\n flex-grow: 1;\n\n .code__editor-codemirror-inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n .cm-editor {\n height: 100%;\n background-color: var(--cds-layer, #f4f4f4);\n }\n\n .cm-scroller {\n overflow-y: auto !important;\n }\n\n .cm-content {\n padding: 15px;\n }\n\n .cm-focused {\n outline: none;\n }\n\n .cm-tooltip {\n font-size: 14px;\n }\n\n .info {\n padding: 5px;\n font-family: monospace;\n font-size: 12px;\n max-width: 300px;\n word-wrap: break-word;\n\n span {\n font-style: italic;\n }\n\n pre {\n margin-top: 5px;\n }\n }\n }\n }\n\n .code__editor-error {\n color: #da1e28;\n font-size: 13px;\n margin-top: 5px;\n }\n\n .code__editor-copy-button {\n position: absolute;\n top: 10px;\n right: 10px;\n z-index: 10;\n\n svg {\n fill: #525252;\n }\n }\n}"],"sourceRoot":""}]);
32726
32813
  // Exports
32727
32814
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
32728
32815