@camunda/task-testing 0.2.3 → 0.2.5

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
@@ -33,8 +33,8 @@ class ElementConfig extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
33
33
  this._injector = injector;
34
34
  this._elementVariables = elementVariables;
35
35
 
36
- /**
37
- * @type {import('./types').Config}
36
+ /**
37
+ * @type {import('./types').Config}
38
38
  */
39
39
  this._config = {
40
40
  ...DEFAULT_CONFIG,
@@ -108,9 +108,9 @@ class ElementConfig extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
108
108
  return this._config.input[element.id];
109
109
  }
110
110
 
111
- /**
112
- * @param {import('./types').Element} element
113
- * @returns {import('./types').ElementOutput}
111
+ /**
112
+ * @param {import('./types').Element} element
113
+ * @returns {import('./types').ElementOutput}
114
114
  */
115
115
  getOutputConfigForElement(element) {
116
116
  if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.isAny)(element, SUPPORTED_ELEMENT_TYPES)) {
@@ -127,12 +127,12 @@ class ElementConfig extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
127
127
  }
128
128
  }
129
129
 
130
- /**
131
- * Get input parameters from a BPMN element.
132
- *
133
- * @param {import('./types').Element} element
134
- *
135
- * @returns {import('./types').ModdleElement[]}
130
+ /**
131
+ * Get input parameters from a BPMN element.
132
+ *
133
+ * @param {import('./types').Element} element
134
+ *
135
+ * @returns {import('./types').ModdleElement[]}
136
136
  */
137
137
  function getInputParameters(element) {
138
138
  const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);
@@ -151,20 +151,20 @@ function getInputParameters(element) {
151
151
  return ioMapping.get('inputParameters');
152
152
  }
153
153
 
154
- /**
155
- * Unflatten an object with dot notation keys into a nested object.
156
- *
157
- * Example:
158
- *
159
- * ```
160
- * unflatten({
161
- * 'foo.bar': 'baz'
162
- * }) // returns { foo: { bar: 'baz' } }
163
- * ```
164
- *
165
- * @param {Object} obj
166
- *
167
- * @returns {Object}
154
+ /**
155
+ * Unflatten an object with dot notation keys into a nested object.
156
+ *
157
+ * Example:
158
+ *
159
+ * ```
160
+ * unflatten({
161
+ * 'foo.bar': 'baz'
162
+ * }) // returns { foo: { bar: 'baz' } }
163
+ * ```
164
+ *
165
+ * @param {Object} obj
166
+ *
167
+ * @returns {Object}
168
168
  */
169
169
  function unflatten(obj) {
170
170
  const result = {};
@@ -183,16 +183,16 @@ function unflatten(obj) {
183
183
  return result;
184
184
  }
185
185
 
186
- /**
187
- * Create default input config for a BPMN element.
188
- *
189
- * @todo Only simple input parameter sources can be handled until
190
- * https://github.com/bpmn-io/internal-docs/issues/1218 is implemented.
191
- *
192
- * @param {import('./types').Element} element
193
- * @param {import('./types').Variable[]} variablesForElement
194
- *
195
- * @returns {string}
186
+ /**
187
+ * Create default input config for a BPMN element.
188
+ *
189
+ * @todo Only simple input parameter sources can be handled until
190
+ * https://github.com/bpmn-io/internal-docs/issues/1218 is implemented.
191
+ *
192
+ * @param {import('./types').Element} element
193
+ * @param {import('./types').Variable[]} variablesForElement
194
+ *
195
+ * @returns {string}
196
196
  */
197
197
  function createDefaultInputConfig(element, variablesForElement) {
198
198
  const inputParameters = getInputParameters(element);
@@ -234,18 +234,18 @@ function createDefaultInputConfig(element, variablesForElement) {
234
234
  return JSON.stringify(unflatten(foundVariables), null, 2);
235
235
  }
236
236
 
237
- /**
238
- * Get the name from a source string.
239
- *
240
- * @example
241
- *
242
- * getNameFromSource('=foo') // 'foo'
243
- * getNameFromSource('=foo + bar') // null
244
- * getNameFromSource('= 1 + 2') // null
245
- *
246
- * @param {string} source
247
- *
248
- * @returns {string|null}
237
+ /**
238
+ * Get the name from a source string.
239
+ *
240
+ * @example
241
+ *
242
+ * getNameFromSource('=foo') // 'foo'
243
+ * getNameFromSource('=foo + bar') // null
244
+ * getNameFromSource('= 1 + 2') // null
245
+ *
246
+ * @param {string} source
247
+ *
248
+ * @returns {string|null}
249
249
  */
250
250
  function getNameFromSource(source) {
251
251
  if (source && isFeel(source)) {
@@ -257,36 +257,36 @@ function getNameFromSource(source) {
257
257
  return null;
258
258
  }
259
259
 
260
- /**
261
- * Check if a source string is a FEEL expression.
262
- *
263
- * @example
264
- *
265
- * isFeel('=foo') // true
266
- * isFeel('= 1 + 2') // true
267
- * isFeel('foo') // false
268
- *
269
- * @param {string} source
270
- *
271
- * @returns {boolean}
260
+ /**
261
+ * Check if a source string is a FEEL expression.
262
+ *
263
+ * @example
264
+ *
265
+ * isFeel('=foo') // true
266
+ * isFeel('= 1 + 2') // true
267
+ * isFeel('foo') // false
268
+ *
269
+ * @param {string} source
270
+ *
271
+ * @returns {boolean}
272
272
  */
273
273
  function isFeel(source) {
274
274
  return !!source && source.startsWith('=');
275
275
  }
276
276
 
277
- /**
278
- * Check if a source string is a boolean FEEL expression.
279
- *
280
- * @example
281
- *
282
- * isBoolean('=true') // true
283
- * isBoolean('= false') // true
284
- * isBoolean('=foo') // false
285
- * isBoolean('=1 + 2') // false
286
- *
287
- * @param {string} source
288
- *
289
- * @return {boolean}
277
+ /**
278
+ * Check if a source string is a boolean FEEL expression.
279
+ *
280
+ * @example
281
+ *
282
+ * isBoolean('=true') // true
283
+ * isBoolean('= false') // true
284
+ * isBoolean('=foo') // false
285
+ * isBoolean('=1 + 2') // false
286
+ *
287
+ * @param {string} source
288
+ *
289
+ * @return {boolean}
290
290
  */
291
291
  function isBoolean(source) {
292
292
  return !!source && /^=\s*(true|false)\s*$/i.test(source);
@@ -352,33 +352,33 @@ __webpack_require__.r(__webpack_exports__);
352
352
  /* harmony export */ });
353
353
  /* harmony import */ var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! events */ "./node_modules/events/events.js");
354
354
  /* harmony import */ var events__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_0__);
355
- /**
356
- * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
357
- * under one or more contributor license agreements. See the NOTICE file
358
- * distributed with this work for additional information regarding copyright
359
- * ownership.
360
- *
361
- * Camunda licenses this file to you under the MIT; you may not use this file
362
- * except in compliance with the MIT License.
355
+ /**
356
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
357
+ * under one or more contributor license agreements. See the NOTICE file
358
+ * distributed with this work for additional information regarding copyright
359
+ * ownership.
360
+ *
361
+ * Camunda licenses this file to you under the MIT; you may not use this file
362
+ * except in compliance with the MIT License.
363
363
  */
364
364
 
365
365
 
366
366
  const INTERVAL_MS = 1000;
367
367
 
368
- /**
369
- * @import { TaskExecutionApi, TaskExecutionResult, TaskExecutionError, TaskExecutionStatus } from './types';
368
+ /**
369
+ * @import { TaskExecutionApi, TaskExecutionResult, TaskExecutionError, TaskExecutionStatus } from './types';
370
370
  */
371
371
 
372
- /**
373
- * Emits:
374
- * - `taskExecution.status.changed` with one of {@link TaskExecutionStatus}
375
- * - `taskExecution.finished` with {@link TaskExecutionResult}
376
- * - `taskExecution.error` with {@link TaskExecutionError}
372
+ /**
373
+ * Emits:
374
+ * - `taskExecution.status.changed` with one of {@link TaskExecutionStatus}
375
+ * - `taskExecution.finished` with {@link TaskExecutionResult}
376
+ * - `taskExecution.error` with {@link TaskExecutionError}
377
377
  */
378
378
  class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
379
- /**
380
- * @param {Object} injector
381
- * @param {TaskExecutionApi} api
379
+ /**
380
+ * @param {Object} injector
381
+ * @param {TaskExecutionApi} api
382
382
  */
383
383
  constructor(injector, api) {
384
384
  super();
@@ -392,20 +392,19 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
392
392
  const eventBus = injector.get('eventBus');
393
393
  eventBus.on(['selection.changed', 'commandStack.changed'], () => {
394
394
  if (this._status !== 'idle') {
395
- console.log('Interrupting task execution in TaskExecution');
396
395
  this.emit('taskExecution.interrupted');
397
396
  }
398
397
  this.cancelTaskExecution();
399
398
  });
400
399
  }
401
400
 
402
- /**
403
- * Start task execution.
404
- *
405
- * @param {string} elementId
406
- * @param {Object} variables
407
- *
408
- * @returns {Promise<void>}
401
+ /**
402
+ * Start task execution.
403
+ *
404
+ * @param {string} elementId
405
+ * @param {Object} variables
406
+ *
407
+ * @returns {Promise<void>}
409
408
  */
410
409
  async executeTask(elementId, variables) {
411
410
  this._changeStatus('deploying');
@@ -499,8 +498,8 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
499
498
  this._interval = setInterval(intervalCallback, INTERVAL_MS);
500
499
  }
501
500
 
502
- /**
503
- * Cancel current task execution, clean up and change status to `idle`.
501
+ /**
502
+ * Cancel current task execution, clean up and change status to `idle`.
504
503
  */
505
504
  async cancelTaskExecution() {
506
505
  // TODO: Proper clean up:
@@ -514,11 +513,11 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
514
513
  this._changeStatus('idle');
515
514
  }
516
515
 
517
- /**
518
- * Emit `taskExecution.error` event.
519
- *
520
- * @param {string} message
521
- * @param {any} [response]
516
+ /**
517
+ * Emit `taskExecution.error` event.
518
+ *
519
+ * @param {string} message
520
+ * @param {any} [response]
522
521
  */
523
522
  _emitError(message, response) {
524
523
  /** @type {import('./types').TaskExecutionError} */
@@ -539,12 +538,12 @@ class TaskExecution extends (events__WEBPACK_IMPORTED_MODULE_0___default()) {
539
538
  }
540
539
  }
541
540
 
542
- /**
543
- * Get the process ID from the deployment response.
544
- *
545
- * @param {import('./types').DeploymentResponse} [response]
546
- *
547
- * @returns {string|null} The process ID or null if not found.
541
+ /**
542
+ * Get the process ID from the deployment response.
543
+ *
544
+ * @param {import('./types').DeploymentResponse} [response]
545
+ *
546
+ * @returns {string|null} The process ID or null if not found.
548
547
  */
549
548
  function getProcessId(response) {
550
549
  if (!response) {
@@ -561,12 +560,12 @@ function getProcessId(response) {
561
560
  return null;
562
561
  }
563
562
 
564
- /**
565
- * Get the process instance key from the response.
566
- *
567
- * @param {import('./types').StartInstanceResponse} [response]
568
- *
569
- * @returns {string|null} The process instance key or null if not found.
563
+ /**
564
+ * Get the process instance key from the response.
565
+ *
566
+ * @param {import('./types').StartInstanceResponse} [response]
567
+ *
568
+ * @returns {string|null} The process instance key or null if not found.
570
569
  */
571
570
  function getProcessInstanceKey(response) {
572
571
  if (!response) {
@@ -770,21 +769,21 @@ function InputEditor({
770
769
  value
771
770
  }));
772
771
 
773
- /**
774
- * @type {import('@codemirror/autocomplete').Completion[]}
772
+ /**
773
+ * @type {import('@codemirror/autocomplete').Completion[]}
775
774
  */
776
775
  const result = [...variablesForElementAutocompletions, ...outputVariablesAutocompletions];
777
776
  return result;
778
777
  }, [allOutputs, variablesForElement]);
779
778
  const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
780
779
 
781
- /**
782
- * @type {ReturnType<typeof useState<EditorView>>}
780
+ /**
781
+ * @type {ReturnType<typeof useState<EditorView>>}
783
782
  */
784
783
  const [editorView, setEditorView] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
785
784
 
786
- /**
787
- * @type {ReturnType<typeof useState<string?>>}
785
+ /**
786
+ * @type {ReturnType<typeof useState<string?>>}
788
787
  */
789
788
  const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
790
789
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
@@ -892,19 +891,19 @@ function getAllOutputVariables(allOutputs) {
892
891
  return allOutputVariables;
893
892
  }
894
893
 
895
- /**
896
- * Get a string representation of the type of a value.
897
- *
898
- * @example
899
- *
900
- * getDetail('foo') // String
901
- * getDetail(1337) // Number
902
- * getDetail(true) // Boolean
903
- * getDetail({}) // Object
904
- *
905
- * @param {any} value
906
- *
907
- * @return {string}
894
+ /**
895
+ * Get a string representation of the type of a value.
896
+ *
897
+ * @example
898
+ *
899
+ * getDetail('foo') // String
900
+ * getDetail(1337) // Number
901
+ * getDetail(true) // Boolean
902
+ * getDetail({}) // Object
903
+ *
904
+ * @param {any} value
905
+ *
906
+ * @return {string}
908
907
  */
909
908
  function getDetail(value) {
910
909
  const type = typeof value;
@@ -949,17 +948,17 @@ const TASK_EXECUTION_STATUS_LABEL = {
949
948
  executing: 'Waiting for task to be completed...'
950
949
  };
951
950
 
952
- /**
953
- * @param {Object} props
954
- * @param {boolean} props.isConnectionConfigured
955
- * @param {string} [props.configureConnectionBannerTitle]
956
- * @param {string} [props.configureConnectionBannerDescription]
957
- * @param {string} [props.configureConnectionLabel]
958
- * @param {Function} [props.onConfigureConnection]
959
- * @param {boolean} props.isTaskExecuting
960
- * @param {import('../../types').ElementOutput} props.output
961
- * @param {Function} props.onResetOutput
962
- * @param {import('../../types').TaskExecutionStatus} props.taskExecutionStatus
951
+ /**
952
+ * @param {Object} props
953
+ * @param {boolean} props.isConnectionConfigured
954
+ * @param {string} [props.configureConnectionBannerTitle]
955
+ * @param {string} [props.configureConnectionBannerDescription]
956
+ * @param {string} [props.configureConnectionLabel]
957
+ * @param {Function} [props.onConfigureConnection]
958
+ * @param {boolean} props.isTaskExecuting
959
+ * @param {import('../../types').ElementOutput} props.output
960
+ * @param {Function} props.onResetOutput
961
+ * @param {import('../../types').TaskExecutionStatus} props.taskExecutionStatus
963
962
  */
964
963
  function Output({
965
964
  isConnectionConfigured,
@@ -991,6 +990,7 @@ function Output({
991
990
  });
992
991
  }, [output, isTaskExecuting, isConnectionConfigured]);
993
992
  const showResetButton = isConnectionConfigured && ((output === null || output === void 0 ? void 0 : output.success) || (output === null || output === void 0 ? void 0 : output.error) || (output === null || output === void 0 ? void 0 : output.incident));
993
+ const showOperateUrl = isConnectionConfigured && (output === null || output === void 0 ? void 0 : output.operateUrl);
994
994
  const headerText = isTaskExecuting ? TASK_EXECUTION_STATUS_LABEL[taskExecutionStatus] : 'Results';
995
995
  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", {
996
996
  className: "output",
@@ -1010,7 +1010,7 @@ function Output({
1010
1010
  tooltipPosition: "right",
1011
1011
  iconDescription: "Reset output",
1012
1012
  children: "Reset"
1013
- }), (output === null || output === void 0 ? void 0 : output.operateUrl) && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Link, {
1013
+ }), showOperateUrl && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Link, {
1014
1014
  href: output.operateUrl,
1015
1015
  target: "_blank",
1016
1016
  className: "output__header--button-operate",
@@ -1137,14 +1137,14 @@ function OutputVariables({
1137
1137
  });
1138
1138
  }
1139
1139
 
1140
- /**
1141
- *
1142
- * @param {Object} props
1143
- * @param {string} props.title
1144
- * @param {string} props.description
1145
- * @param {string} [props.actionLabel]
1146
- * @param {string} [props.actionUrl]
1147
- * @param {Function} [props.onActionClick]
1140
+ /**
1141
+ *
1142
+ * @param {Object} props
1143
+ * @param {string} props.title
1144
+ * @param {string} props.description
1145
+ * @param {string} [props.actionLabel]
1146
+ * @param {string} [props.actionUrl]
1147
+ * @param {Function} [props.onActionClick]
1148
1148
  */
1149
1149
  function ErrorBanner({
1150
1150
  title,
@@ -1176,12 +1176,12 @@ function ErrorBanner({
1176
1176
  });
1177
1177
  }
1178
1178
 
1179
- /**
1180
- * Print the details of an incident.
1181
- *
1182
- * @param {Object} incident
1183
- *
1184
- * @returns {string}
1179
+ /**
1180
+ * Print the details of an incident.
1181
+ *
1182
+ * @param {Object} incident
1183
+ *
1184
+ * @returns {string}
1185
1185
  */
1186
1186
  function printIncident(incident) {
1187
1187
  let text = '';
@@ -1191,16 +1191,16 @@ function printIncident(incident) {
1191
1191
  return text;
1192
1192
  }
1193
1193
 
1194
- /**
1195
- * Capitalize a string, adding spaces before capital letters.
1196
- *
1197
- * @example
1198
- *
1199
- * capitalize('fooBar'); // Foo Bar
1200
- *
1201
- * @param {string} string
1202
- *
1203
- * @returns {string}
1194
+ /**
1195
+ * Capitalize a string, adding spaces before capital letters.
1196
+ *
1197
+ * @example
1198
+ *
1199
+ * capitalize('fooBar'); // Foo Bar
1200
+ *
1201
+ * @param {string} string
1202
+ *
1203
+ * @returns {string}
1204
1204
  */
1205
1205
  function capitalize(string) {
1206
1206
  return string.replace(/([A-Z])/g, ' $1').replace(/^./, match => match.toUpperCase());
@@ -1239,8 +1239,8 @@ function OutputEditor({
1239
1239
  }) {
1240
1240
  const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1241
1241
 
1242
- /**
1243
- * @type {ReturnType<typeof useState<EditorView>>}
1242
+ /**
1243
+ * @type {ReturnType<typeof useState<EditorView>>}
1244
1244
  */
1245
1245
  const [editorView, setEditorView] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
1246
1246
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
@@ -1335,23 +1335,24 @@ __webpack_require__.r(__webpack_exports__);
1335
1335
 
1336
1336
 
1337
1337
 
1338
- const NO_ELEMENT_TEXT = 'Select a task to start testing';
1338
+ const NO_ELEMENT_TEXT = 'Select a task to start testing.';
1339
1339
 
1340
- /**
1341
- * @param {Object} props
1342
- * @param {Object} props.injector
1343
- * @param {import('../../types').TaskExecutionApi} props.api
1344
- * @param {boolean} props.isConnectionConfigured
1345
- * @param {string} [props.configureConnectionBannerTitle]
1346
- * @param {string} [props.configureConnectionBannerDescription]
1347
- * @param {string} [props.configureConnectionLabel]
1348
- * @param {Function} [props.onConfigureConnection]
1349
- * @param {import('../../types').Config|undefined} [props.config]
1350
- * @param {Function} [props.onConfigChanged=() => {}]
1351
- * @param {string} [props.operateBaseUrl]
1352
- * @param {Function} [props.onTaskExecutionStarted=() => {}]
1353
- * @param {Function} [props.onTaskExecutionFinished=() => {}]
1354
- * @param {Function} [props.onTaskExecutionInterrupted=() => {}]
1340
+ /**
1341
+ * @param {Object} props
1342
+ * @param {Object} props.injector
1343
+ * @param {import('../../types').TaskExecutionApi} props.api
1344
+ * @param {boolean} props.isConnectionConfigured
1345
+ * @param {string} [props.configureConnectionBannerTitle]
1346
+ * @param {string} [props.configureConnectionBannerDescription]
1347
+ * @param {string} [props.configureConnectionLabel]
1348
+ * @param {Function} [props.onConfigureConnection]
1349
+ * @param {import('../../types').Config|undefined} [props.config]
1350
+ * @param {Function} [props.onConfigChanged=() => {}]
1351
+ * @param {string} [props.operateBaseUrl]
1352
+ * @param {string} [props.documentationUrl]
1353
+ * @param {Function} [props.onTaskExecutionStarted=() => {}]
1354
+ * @param {Function} [props.onTaskExecutionFinished=() => {}]
1355
+ * @param {Function} [props.onTaskExecutionInterrupted=() => {}]
1355
1356
  */
1356
1357
  function TaskTesting({
1357
1358
  injector,
@@ -1364,41 +1365,42 @@ function TaskTesting({
1364
1365
  config,
1365
1366
  onConfigChanged = () => {},
1366
1367
  operateBaseUrl,
1368
+ documentationUrl,
1367
1369
  onTaskExecutionStarted = () => {},
1368
1370
  onTaskExecutionFinished = () => {},
1369
1371
  onTaskExecutionInterrupted = () => {}
1370
1372
  }) {
1371
- /**
1372
- * @type {React.RefObject<ElementVariables?>}
1373
+ /**
1374
+ * @type {React.RefObject<ElementVariables?>}
1373
1375
  */
1374
1376
  const elementVariablesRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1375
1377
 
1376
- /**
1377
- * @type {React.RefObject<ElementConfig?>}
1378
+ /**
1379
+ * @type {React.RefObject<ElementConfig?>}
1378
1380
  */
1379
1381
  const elementConfigRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1380
1382
  const [variablesForElement, setVariablesForElement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
1381
1383
 
1382
- /**
1383
- * @type {ReturnType<typeof useState<import('../../types').TaskExecutionStatus>>}
1384
+ /**
1385
+ * @type {ReturnType<typeof useState<import('../../types').TaskExecutionStatus>>}
1384
1386
  */
1385
1387
  const [taskExecutionStatus, setTaskExecutionStatus] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
1386
1388
 
1387
- /**
1388
- * @type {ReturnType<typeof useState<string>>}
1389
+ /**
1390
+ * @type {ReturnType<typeof useState<string>>}
1389
1391
  */
1390
1392
  const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
1391
1393
 
1392
- /**
1393
- * @type {ReturnType<typeof useState<import('../../types').ElementOutput>>}
1394
+ /**
1395
+ * @type {ReturnType<typeof useState<import('../../types').ElementOutput>>}
1394
1396
  */
1395
1397
  const [output, setOutput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
1396
1398
  const [allOutputs, setAllOutputs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
1397
1399
  const [inputError, setInputError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
1398
1400
  const element = (0,_hooks_useSelectedElement__WEBPACK_IMPORTED_MODULE_4__.useSelectedElement)(injector);
1399
1401
 
1400
- /**
1401
- * @type {React.RefObject<TaskExecution?>}
1402
+ /**
1403
+ * @type {React.RefObject<TaskExecution?>}
1402
1404
  */
1403
1405
  const taskExecutionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1404
1406
 
@@ -1477,9 +1479,9 @@ function TaskTesting({
1477
1479
  });
1478
1480
  };
1479
1481
 
1480
- /**
1481
- * @param {import('../../types').TaskExecutionStatus} status
1482
- * @param {string} [processInstanceKey]
1482
+ /**
1483
+ * @param {import('../../types').TaskExecutionStatus} status
1484
+ * @param {string} [processInstanceKey]
1483
1485
  */
1484
1486
  const handleStatusChange = (status, processInstanceKey) => {
1485
1487
  setTaskExecutionStatus(status);
@@ -1505,7 +1507,6 @@ function TaskTesting({
1505
1507
  onTaskExecutionFinished(element, output);
1506
1508
  };
1507
1509
  const handleInterrupted = () => {
1508
- console.log('interrrrrrupted');
1509
1510
  onTaskExecutionInterrupted();
1510
1511
  };
1511
1512
  taskExecutionRef === null || taskExecutionRef === void 0 || (_taskExecutionRef$cur = taskExecutionRef.current) === null || _taskExecutionRef$cur === void 0 || _taskExecutionRef$cur.on('taskExecution.finished', handleFinished);
@@ -1585,8 +1586,12 @@ function TaskTesting({
1585
1586
  className: "task-testing__container task-testing__container--empty",
1586
1587
  children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)("div", {
1587
1588
  className: "task-testing__container-no-element",
1588
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_2__.Cursor_1, {}), " ", /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
1589
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_2__.Cursor_1, {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("span", {
1589
1590
  children: NO_ELEMENT_TEXT
1591
+ }), documentationUrl && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_carbon_react__WEBPACK_IMPORTED_MODULE_1__.Link, {
1592
+ href: documentationUrl,
1593
+ target: "_blank",
1594
+ children: "Learn more."
1590
1595
  })]
1591
1596
  })
1592
1597
  });
@@ -1782,11 +1787,11 @@ __webpack_require__.r(__webpack_exports__);
1782
1787
 
1783
1788
  const SUPPORTED_ELEMENT_TYPES = ['bpmn:Task'];
1784
1789
 
1785
- /**
1786
- * Get currently selected BPMN element, if it is a single `bpmn:Task`.
1787
- *
1788
- * @param {Object} injector
1789
- * @return {Object|null} Selected BPMN element or null
1790
+ /**
1791
+ * Get currently selected BPMN element, if it is a single `bpmn:Task`.
1792
+ *
1793
+ * @param {Object} injector
1794
+ * @return {Object|null} Selected BPMN element or null
1790
1795
  */
1791
1796
  function useSelectedElement(injector) {
1792
1797
  const [selectedElement, setSelectedElement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
@@ -1884,21 +1889,21 @@ __webpack_require__.r(__webpack_exports__);
1884
1889
 
1885
1890
 
1886
1891
 
1887
- /**
1888
- * @typedef {import('@codemirror/autocomplete').Completion} Completion
1889
- * @typedef {import('@codemirror/autocomplete').CompletionContext} CompletionContext
1890
- * @typedef {import('@codemirror/autocomplete').CompletionResult} CompletionResult
1892
+ /**
1893
+ * @typedef {import('@codemirror/autocomplete').Completion} Completion
1894
+ * @typedef {import('@codemirror/autocomplete').CompletionContext} CompletionContext
1895
+ * @typedef {import('@codemirror/autocomplete').CompletionResult} CompletionResult
1891
1896
  */
1892
1897
 
1893
- /**
1894
- * @param {Completion[]} variables
1898
+ /**
1899
+ * @param {Completion[]} variables
1895
1900
  */
1896
1901
  function getAutocompletionExtensions(variables) {
1897
1902
  return [autoCompletionExtension(variables), startCompletionExtension()];
1898
1903
  }
1899
1904
 
1900
- /**
1901
- * @param {Completion[]} variables
1905
+ /**
1906
+ * @param {Completion[]} variables
1902
1907
  */
1903
1908
  function autoCompletionExtension(variables) {
1904
1909
  return (0,_codemirror_autocomplete__WEBPACK_IMPORTED_MODULE_0__.autocompletion)({
@@ -1906,8 +1911,8 @@ function autoCompletionExtension(variables) {
1906
1911
  });
1907
1912
  }
1908
1913
 
1909
- /**
1910
- * Trigger autocompletion when the user goes into a new line.
1914
+ /**
1915
+ * Trigger autocompletion when the user goes into a new line.
1911
1916
  */
1912
1917
  function startCompletionExtension() {
1913
1918
  return _codemirror_view__WEBPACK_IMPORTED_MODULE_1__.EditorView.updateListener.of(update => {
@@ -1931,11 +1936,11 @@ function startCompletionExtension() {
1931
1936
  });
1932
1937
  }
1933
1938
 
1934
- /**
1935
- * @param {CompletionContext} context
1936
- * @param {Array} variables
1937
- *
1938
- * @returns {CompletionResult | null}
1939
+ /**
1940
+ * @param {CompletionContext} context
1941
+ * @param {Array} variables
1942
+ *
1943
+ * @returns {CompletionResult | null}
1939
1944
  */
1940
1945
  function autocomplete(context, variables) {
1941
1946
  const {
@@ -2026,13 +2031,13 @@ function autocomplete(context, variables) {
2026
2031
  };
2027
2032
  }
2028
2033
 
2029
- /**
2030
- * Check if there is a property after the current position by looking for a `"` character.
2031
- *
2032
- * @param {*} state
2033
- * @param {number} pos
2034
- *
2035
- * @returns {boolean}
2034
+ /**
2035
+ * Check if there is a property after the current position by looking for a `"` character.
2036
+ *
2037
+ * @param {*} state
2038
+ * @param {number} pos
2039
+ *
2040
+ * @returns {boolean}
2036
2041
  */
2037
2042
  function hasPropertyAfter(state, pos) {
2038
2043
  const textAfter = state.sliceDoc(pos).trimStart();
@@ -2055,12 +2060,12 @@ __webpack_require__.r(__webpack_exports__);
2055
2060
  /* 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");
2056
2061
 
2057
2062
 
2058
- /**
2059
- * Get the name of a BPMN element.
2060
- *
2061
- * @param {import('../types').Element} element
2062
- *
2063
- * @returns {string}
2063
+ /**
2064
+ * Get the name of a BPMN element.
2065
+ *
2066
+ * @param {import('../types').Element} element
2067
+ *
2068
+ * @returns {string}
2064
2069
  */
2065
2070
  function getName(element) {
2066
2071
  const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element);
@@ -2071,12 +2076,12 @@ function getName(element) {
2071
2076
  return name;
2072
2077
  }
2073
2078
 
2074
- /**
2075
- * Get the name of a BPMN element.
2076
- *
2077
- * @param {import('../types').Element} element
2078
- *
2079
- * @returns {string}
2079
+ /**
2080
+ * Get the name of a BPMN element.
2081
+ *
2082
+ * @param {import('../types').Element} element
2083
+ *
2084
+ * @returns {string}
2080
2085
  */
2081
2086
  function getType(element) {
2082
2087
  const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element);
@@ -32814,7 +32819,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `.task-testing__container {
32814
32819
  }
32815
32820
  .code__editor .code__editor-copy-button svg {
32816
32821
  fill: #525252;
32817
- }`, "",{"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":""}]);
32822
+ }`, "",{"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 {\r\n display: flex;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n padding: 10px;\r\n font-size: 14px;\r\n\r\n &.task-testing__container--empty {\r\n .task-testing__container-no-config,\r\n .task-testing__container-no-element {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n height: 32px;\r\n\r\n .cds--inline-loading {\r\n inline-size: initial;\r\n min-block-size: initial;\r\n }\r\n }\r\n }\r\n\r\n .task-testing__container--left {\r\n width: 50%;\r\n display: flex;\r\n flex-direction: column;\r\n border-right: 1px solid #E0E0E0;\r\n padding-right: 6px;\r\n }\r\n\r\n .task-testing__container--right {\r\n width: 50%;\r\n display: flex;\r\n flex-direction: column;\r\n padding-left: 6px;\r\n }\r\n\r\n .task-testing__container--header {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n width: 100%;\r\n\r\n .task-header {\r\n display: flex;\r\n gap: 6px;\r\n \r\n .task-type {\r\n font-weight: bold;\r\n }\r\n }\r\n\r\n .btn-execute {\r\n width: 138px;\r\n }\r\n\r\n .cds--popover-container:not(.has-error) .cds--popover {\r\n display: none;\r\n }\r\n\r\n .cds--tooltip-content {\r\n padding: 12px;\r\n }\r\n\r\n .cds--btn .cds--inline-loading {\r\n inline-size: initial;\r\n min-block-size: initial;\r\n }\r\n }\r\n\r\n .input {\r\n flex-grow: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n\r\n .input__header {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n }\r\n\r\n .input__header--title {\r\n color: #525252;\r\n }\r\n }\r\n\r\n .output {\r\n flex-grow: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n\r\n .output__header {\r\n display: flex;\r\n align-items: center;\r\n height: 32px;\r\n width: 100%;\r\n }\r\n\r\n .output__header--title {\r\n color: #525252;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n\r\n svg.output__status-icon--ready {\r\n fill: #0043ce;\r\n }\r\n\r\n svg.output__status-icon--success {\r\n fill: #24a148;\r\n }\r\n\r\n svg.output__status-icon--error {\r\n fill: #da1e28;\r\n }\r\n\r\n .cds--inline-loading {\r\n inline-size: 16px;\r\n min-block-size: initial;\r\n }\r\n }\r\n\r\n .output__header--button-operate {\r\n margin-left: auto;\r\n }\r\n\r\n .output__body {\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n position: relative;\r\n\r\n .cds--tabs {\r\n --cds-layout-size-height-local: 32px;\r\n }\r\n \r\n .cds--tab-content {\r\n padding: 0;\r\n height: calc(100% - 20px);\r\n }\r\n\r\n .cds--tab-content:not([hidden]) {\r\n display: flex;\r\n }\r\n\r\n // Tooltip on Carbon Button with absolute position is broken.\r\n .cds--popover {\r\n display: none;\r\n }\r\n }\r\n\r\n .output__error {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 12px;\r\n padding: 12px;\r\n margin-bottom: 12px;\r\n border: 1px solid #da1e28;\r\n border-left-width: 3px;\r\n background-color: #fff1f1;\r\n\r\n .output__error--title {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n font-weight: bold;\r\n\r\n svg {\r\n fill: #da1e28;\r\n }\r\n\r\n .output__error--action {\r\n margin-left: auto;\r\n }\r\n }\r\n }\r\n\r\n .output__variables--empty {\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n color: #525252;\r\n }\r\n\r\n .output__variables--empty-action {\r\n font-weight: bold;\r\n }\r\n\r\n .cds--snippet-container {\r\n width: 100%;\r\n }\r\n\r\n .cds--snippet {\r\n max-inline-size: 100%;\r\n height: 100%;\r\n }\r\n\r\n code {\r\n font-size: 14px;\r\n }\r\n }\r\n}\r\n\r\n.code__editor {\r\n position: relative;\r\n flex-grow: 1;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n &.code__editor--error .code__editor-codemirror .code__editor-codemirror-inner .cm-editor {\r\n outline: 1px solid #da1e28;\r\n outline-offset: -1px;\r\n }\r\n\r\n .code__editor-codemirror {\r\n position: relative;\r\n flex-grow: 1;\r\n\r\n .code__editor-codemirror-inner {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n\r\n .cm-editor {\r\n height: 100%;\r\n background-color: var(--cds-layer, #f4f4f4);\r\n }\r\n\r\n .cm-scroller {\r\n overflow-y: auto !important;\r\n }\r\n\r\n .cm-content {\r\n padding: 15px;\r\n }\r\n\r\n .cm-focused {\r\n outline: none;\r\n }\r\n\r\n .cm-tooltip {\r\n font-size: 14px;\r\n }\r\n\r\n .info {\r\n padding: 5px;\r\n font-family: monospace;\r\n font-size: 12px;\r\n max-width: 300px;\r\n word-wrap: break-word;\r\n\r\n span {\r\n font-style: italic;\r\n }\r\n\r\n pre {\r\n margin-top: 5px;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .code__editor-error {\r\n color: #da1e28;\r\n font-size: 13px;\r\n margin-top: 5px;\r\n }\r\n\r\n .code__editor-copy-button {\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n z-index: 10;\r\n\r\n svg {\r\n fill: #525252;\r\n }\r\n }\r\n}"],"sourceRoot":""}]);
32818
32823
  // Exports
32819
32824
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
32820
32825