@camunda/task-testing 0.2.0 → 0.2.1

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
@@ -362,18 +362,30 @@ __webpack_require__.r(__webpack_exports__);
362
362
  * except in compliance with the MIT License.
363
363
  */
364
364
 
365
-
366
- const INTERVAL_MS = 1000;
365
+ /**
366
+ * @import {
367
+ * TaskExecutionApi,
368
+ * TaskExecutionResult,
369
+ * TaskExecutionError,
370
+ * TaskExecutionStatus } from './types';
371
+ */
367
372
 
368
373
  /**
369
- * @import { TaskExecutionApi, TaskExecutionResult, TaskExecutionError, TaskExecutionStatus } from './types';
374
+ * @import {
375
+ * CreateProcessInstanceResponse,
376
+ * DeployResourceResponse
377
+ * } from '@camunda8/sdk/dist/c8/lib/C8Dto';
370
378
  */
371
379
 
380
+
381
+ const INTERVAL_MS = 1000;
382
+
372
383
  /**
373
384
  * Emits:
374
385
  * - `taskExecution.status.changed` with one of {@link TaskExecutionStatus}
375
386
  * - `taskExecution.finished` with {@link TaskExecutionResult}
376
387
  * - `taskExecution.error` with {@link TaskExecutionError}
388
+ * - `taskExecution.interrupted` when execution is interrupted by switching focus
377
389
  */
378
390
  class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
379
391
  /**
@@ -386,9 +398,13 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
386
398
  /** @type {TaskExecutionApi} */
387
399
  this._api = api;
388
400
  this._interval = null;
401
+
402
+ /** @type {TaskExecutionStatus} */
403
+ this._status = 'idle';
389
404
  const eventBus = injector.get('eventBus');
390
405
  eventBus.on(['selection.changed', 'commandStack.changed'], () => {
391
406
  this.cancelTaskExecution();
407
+ this.emit('taskExecution.interrupted');
392
408
  });
393
409
  }
394
410
 
@@ -401,9 +417,12 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
401
417
  * @returns {Promise<void>}
402
418
  */
403
419
  async executeTask(elementId, variables) {
404
- await this.cancelTaskExecution();
405
- this.emit('taskExecution.status.changed', 'deploying');
420
+ this._changeStatus('deploying');
406
421
  const deploymentResult = await this._api.deploy();
422
+ if (this._status === 'idle') {
423
+ // Execution was canceled in the meantime
424
+ return;
425
+ }
407
426
  if (!deploymentResult.success) {
408
427
  this._emitError('Failed to deploy process definition', deploymentResult.error);
409
428
  this.cancelTaskExecution();
@@ -415,8 +434,12 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
415
434
  this.cancelTaskExecution();
416
435
  return;
417
436
  }
418
- this.emit('taskExecution.status.changed', 'starting-instance');
437
+ this._changeStatus('starting-instance');
419
438
  const startInstanceResult = await this._api.startInstance(processId, elementId, variables);
439
+ if (/** @type {TaskExecutionStatus} */this._status === 'idle') {
440
+ // Execution was canceled in the meantime
441
+ return;
442
+ }
420
443
  if (!startInstanceResult.success) {
421
444
  this._emitError('Failed to start process instance', startInstanceResult.error);
422
445
  this.cancelTaskExecution();
@@ -428,9 +451,14 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
428
451
  this.cancelTaskExecution();
429
452
  return;
430
453
  }
431
- this.emit('taskExecution.status.changed', 'executing', processInstanceKey);
454
+ this._changeStatus('executing', processInstanceKey);
432
455
  const intervalCallback = async () => {
433
456
  const getProcessInstanceResult = await this._api.getProcessInstance(processInstanceKey);
457
+ if (this._status === 'idle') {
458
+ // Execution was canceled in the meantime
459
+ this.cancelTaskExecution();
460
+ return;
461
+ }
434
462
  if (!getProcessInstanceResult.success) {
435
463
  this._emitError('Failed to get process instance', getProcessInstanceResult.error);
436
464
  return;
@@ -445,6 +473,11 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
445
473
  let incident = null;
446
474
  if (hasIncident) {
447
475
  const getProcessInstanceIncidentResult = await this._api.getProcessInstanceIncident(processInstanceKey);
476
+ if (/** @type {TaskExecutionStatus} */this._status === 'idle') {
477
+ // Execution was canceled in the meantime
478
+ this.cancelTaskExecution();
479
+ return;
480
+ }
448
481
  if (!getProcessInstanceIncidentResult.success) {
449
482
  this._emitError('Failed to get process instance incident', getProcessInstanceIncidentResult.error);
450
483
  return;
@@ -454,6 +487,11 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
454
487
  const isCompleted = ['COMPLETED', 'TERMINATED', 'CANCELED'].includes(state);
455
488
  if (isCompleted || hasIncident) {
456
489
  const getProcessInstanceVariablesResult = await this._api.getProcessInstanceVariables(processInstanceKey);
490
+ if (/** @type {TaskExecutionStatus} */this._status === 'idle') {
491
+ // Execution was canceled in the meantime
492
+ this.cancelTaskExecution();
493
+ return;
494
+ }
457
495
  if (!getProcessInstanceVariablesResult.success) {
458
496
  this._emitError('Failed to get process instance variables', getProcessInstanceVariablesResult.error);
459
497
  return;
@@ -471,9 +509,7 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
471
509
  }
472
510
 
473
511
  /**
474
- * Cancel current task execution, clean up and emit events:
475
- * - `taskExecution.status.changed` with status `idle`
476
- * - `taskExecution.canceled`
512
+ * Cancel current task execution, clean up and change status to `idle`.
477
513
  */
478
514
  async cancelTaskExecution() {
479
515
  // TODO: Proper clean up:
@@ -484,8 +520,7 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
484
520
  if (this._interval) {
485
521
  clearInterval(this._interval);
486
522
  }
487
- this.emit('taskExecution.status.changed', 'idle');
488
- this.emit('taskExecution.canceled');
523
+ this._changeStatus('idle');
489
524
  }
490
525
 
491
526
  /**
@@ -502,19 +537,25 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
502
537
  };
503
538
  this.emit('taskExecution.error', error);
504
539
  }
540
+
541
+ /** @param {TaskExecutionStatus} status */
542
+ _changeStatus(status, ...args) {
543
+ if (this._status === status) {
544
+ return;
545
+ }
546
+ this._status = status;
547
+ this.emit('taskExecution.status.changed', status, ...args);
548
+ }
505
549
  }
506
550
 
507
551
  /**
508
552
  * Get the process ID from the deployment response.
509
553
  *
510
- * @param {import('./types').DeploymentResponse} [response]
554
+ * @param {DeployResourceResponse} response
511
555
  *
512
556
  * @returns {string|null} The process ID or null if not found.
513
557
  */
514
558
  function getProcessId(response) {
515
- if (!response) {
516
- return null;
517
- }
518
559
  const {
519
560
  processes = []
520
561
  } = response;
@@ -529,14 +570,11 @@ function getProcessId(response) {
529
570
  /**
530
571
  * Get the process instance key from the response.
531
572
  *
532
- * @param {import('./types').StartInstanceResponse} [response]
573
+ * @param {CreateProcessInstanceResponse} response
533
574
  *
534
575
  * @returns {string|null} The process instance key or null if not found.
535
576
  */
536
577
  function getProcessInstanceKey(response) {
537
- if (!response) {
538
- return null;
539
- }
540
578
  const {
541
579
  processInstanceKey
542
580
  } = response;
@@ -1120,25 +1158,23 @@ function ErrorBanner({
1120
1158
  }) {
1121
1159
  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", {
1122
1160
  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, {
1161
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", {
1162
+ className: "output__error--title",
1163
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", {
1164
+ children: title
1165
+ }), actionLabel && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
1166
+ className: "output__error--action",
1167
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Link, {
1133
1168
  href: actionUrl,
1134
1169
  onClick: () => onActionClick(),
1135
1170
  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
1171
  })
1141
1172
  })]
1173
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
1174
+ className: "output__error--content",
1175
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", {
1176
+ children: description
1177
+ })
1142
1178
  })]
1143
1179
  });
1144
1180
  }
@@ -1317,7 +1353,7 @@ const NO_ELEMENT_TEXT = 'Select a task to start testing';
1317
1353
  * @param {Function} [props.onConfigChanged=() => {}]
1318
1354
  * @param {string} [props.operateBaseUrl]
1319
1355
  * @param {Function} [props.onTaskExecution=() => {}]
1320
- * @param {Function} [props.onTaskExecutionCanceled=() => {}]
1356
+ * @param {Function} [props.onTaskExecutionInterrupted=() => {}]
1321
1357
  */
1322
1358
  function TaskTesting({
1323
1359
  injector,
@@ -1331,7 +1367,7 @@ function TaskTesting({
1331
1367
  onConfigChanged = () => {},
1332
1368
  operateBaseUrl,
1333
1369
  onTaskExecution = () => {},
1334
- onTaskExecutionCanceled = () => {}
1370
+ onTaskExecutionInterrupted = () => {}
1335
1371
  }) {
1336
1372
  /**
1337
1373
  * @type {React.RefObject<ElementVariables?>}
@@ -1471,13 +1507,13 @@ function TaskTesting({
1471
1507
  taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur = taskExecutionRef.current) === null || _taskExecutionRef$cur === void 0 || _taskExecutionRef$cur.on('taskExecution.finished', handleFinished);
1472
1508
  taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur2 = taskExecutionRef.current) === null || _taskExecutionRef$cur2 === void 0 || _taskExecutionRef$cur2.on('taskExecution.status.changed', handleStatusChange);
1473
1509
  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());
1510
+ taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur4 = taskExecutionRef.current) === null || _taskExecutionRef$cur4 === void 0 || _taskExecutionRef$cur4.on('taskExecution.interrupted', () => onTaskExecutionInterrupted());
1475
1511
  return () => {
1476
1512
  if (taskExecutionRef.current) {
1477
1513
  taskExecutionRef.current.off('taskExecution.finished', handleFinished);
1478
1514
  taskExecutionRef.current.off('taskExecution.status.changed', handleStatusChange);
1479
1515
  taskExecutionRef.current.off('taskExecution.error', handleError);
1480
- taskExecutionRef.current.off('taskExecution.canceled', () => onTaskExecutionCanceled());
1516
+ taskExecutionRef.current.off('taskExecution.interrupted', () => onTaskExecutionInterrupted());
1481
1517
  }
1482
1518
  };
1483
1519
  }, [element]);
@@ -1558,8 +1594,11 @@ function TaskTesting({
1558
1594
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", {
1559
1595
  className: "task-testing__container--header",
1560
1596
  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", {
1597
+ className: "task-header",
1598
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
1599
+ className: "task-type",
1600
+ children: (0,_utils_element__WEBPACK_IMPORTED_MODULE_10__.getType)(element)
1601
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
1563
1602
  children: (0,_utils_element__WEBPACK_IMPORTED_MODULE_10__.getName)(element)
1564
1603
  })]
1565
1604
  }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Tooltip, {
@@ -2003,7 +2042,8 @@ function hasPropertyAfter(state, pos) {
2003
2042
 
2004
2043
  __webpack_require__.r(__webpack_exports__);
2005
2044
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2006
- /* harmony export */ getName: () => (/* binding */ getName)
2045
+ /* harmony export */ getName: () => (/* binding */ getName),
2046
+ /* harmony export */ getType: () => (/* binding */ getType)
2007
2047
  /* harmony export */ });
2008
2048
  /* 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
2049
 
@@ -2024,6 +2064,40 @@ function getName(element) {
2024
2064
  return name;
2025
2065
  }
2026
2066
 
2067
+ /**
2068
+ * Get the name of a BPMN element.
2069
+ *
2070
+ * @param {import('../types').Element} element
2071
+ *
2072
+ * @returns {string}
2073
+ */
2074
+ function getType(element) {
2075
+ const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element);
2076
+ const {
2077
+ $type: type
2078
+ } = businessObject;
2079
+ switch (type) {
2080
+ case 'bpmn:Task':
2081
+ return 'Task';
2082
+ case 'bpmn:UserTask':
2083
+ return 'User Task';
2084
+ case 'bpmn:ScriptTask':
2085
+ return 'Script Task';
2086
+ case 'bpmn:ServiceTask':
2087
+ return 'Service Task';
2088
+ case 'bpmn:BusinessRuleTask':
2089
+ return 'Business Rule Task';
2090
+ case 'bpmn:SendTask':
2091
+ return 'Send Task';
2092
+ case 'bpmn:ManualTask':
2093
+ return 'Manual Task';
2094
+ case 'bpmn:ReceiveTask':
2095
+ return 'Receive Task';
2096
+ default:
2097
+ return 'Task';
2098
+ }
2099
+ }
2100
+
2027
2101
  /***/ }),
2028
2102
 
2029
2103
  /***/ "./node_modules/@bpmn-io/extract-process-variables/zeebe/index.mjs":
@@ -32526,11 +32600,13 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32526
32600
  gap: 12px;
32527
32601
  width: 100%;
32528
32602
  }
32529
- .task-testing__container .task-testing__container--header .task-name {
32603
+ .task-testing__container .task-testing__container--header .task-header {
32530
32604
  display: flex;
32531
- font-weight: bold;
32532
32605
  gap: 6px;
32533
32606
  }
32607
+ .task-testing__container .task-testing__container--header .task-header .task-type {
32608
+ font-weight: bold;
32609
+ }
32534
32610
  .task-testing__container .task-testing__container--header .btn-execute {
32535
32611
  width: 138px;
32536
32612
  }
@@ -32613,7 +32689,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32613
32689
  }
32614
32690
  .task-testing__container .output .output__error {
32615
32691
  display: flex;
32616
- flex-direction: row;
32692
+ flex-direction: column;
32617
32693
  gap: 12px;
32618
32694
  padding: 12px;
32619
32695
  margin-bottom: 12px;
@@ -32621,24 +32697,18 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32621
32697
  border-left-width: 3px;
32622
32698
  background-color: #fff1f1;
32623
32699
  }
32624
- .task-testing__container .output .output__error .output__error--content {
32625
- 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 {
32700
+ .task-testing__container .output .output__error .output__error--title {
32632
32701
  display: flex;
32633
- justify-content: space-between;
32702
+ flex-direction: row;
32703
+ align-items: center;
32634
32704
  font-weight: bold;
32635
32705
  }
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 {
32706
+ .task-testing__container .output .output__error .output__error--title svg {
32640
32707
  fill: #da1e28;
32641
32708
  }
32709
+ .task-testing__container .output .output__error .output__error--title .output__error--action {
32710
+ margin-left: auto;
32711
+ }
32642
32712
  .task-testing__container .output .output__variables--empty {
32643
32713
  height: 32px;
32644
32714
  display: flex;
@@ -32722,7 +32792,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32722
32792
  }
32723
32793
  .code__editor .code__editor-copy-button svg {
32724
32794
  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":""}]);
32795
+ }`, "",{"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
32796
  // Exports
32727
32797
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
32728
32798