@qualtrics/plugin-ui-react 1.3.3 → 1.4.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/.dockerignore +10 -0
  2. package/.eslintrc.js +1 -1
  3. package/Dockerfile +18 -0
  4. package/Makefile +33 -4
  5. package/README.md +28 -0
  6. package/dist/common/capture-event/capture-event.d.ts +13 -0
  7. package/dist/common/capture-event/capture-event.test.d.ts +1 -0
  8. package/dist/common/copy-text/copy-text.d.ts +8 -0
  9. package/dist/common/copy-text/copy-text.test.d.ts +1 -0
  10. package/dist/common/field-mapper/field-mapper-key/field-mapper-key.d.ts +12 -0
  11. package/dist/common/field-mapper/field-mapper-row/field-mapper-row.d.ts +17 -0
  12. package/dist/common/field-mapper/field-mapper-value/field-mapper-value.d.ts +11 -0
  13. package/dist/common/field-mapper/field-mapper.d.ts +20 -0
  14. package/dist/common/field-mapper/index.d.ts +4 -0
  15. package/dist/common/piped-text-input/piped-text-input.d.ts +2 -2
  16. package/dist/common/piped-text-select/piped-text-menu/piped-text-menu-item/piped-text-menu-item.d.ts +16 -0
  17. package/dist/common/piped-text-select/piped-text-menu/piped-text-submenu-item/piped-text-submenu-item.d.ts +13 -0
  18. package/dist/common/portal.d.ts +3 -0
  19. package/dist/hooks/use-id.d.ts +7 -0
  20. package/dist/index.d.ts +4 -1
  21. package/dist/lib/models/field-mapper-item.d.ts +7 -0
  22. package/dist/lib/models/piped-text-menu-item-data.d.ts +21 -0
  23. package/dist/lib/models/piped-text.d.ts +16 -0
  24. package/dist/lib/type-validation/validate-primitives.d.ts +1 -0
  25. package/dist/main.es.js +959 -172
  26. package/dist/main.js +963 -170
  27. package/jenkins.groovy +284 -0
  28. package/jenkinsPipelineUtils/jira.groovy +84 -0
  29. package/jenkinsPipelineUtils/notifications.groovy +34 -0
  30. package/jenkinsPipelineUtils/pipelineControls.groovy +56 -0
  31. package/jenkinsPipelineUtils/trs.groovy +30 -0
  32. package/package.json +7 -6
  33. package/test_results/junit.xml +101 -0
  34. package/.bee +0 -2
  35. package/Jenkinsfile +0 -109
  36. package/bee +0 -932
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @license @qualtrics/plugin-ui-react 1.3.3
1
+ /*! @license @qualtrics/plugin-ui-react 1.4.0-alpha.0
2
2
  Qualtrics Software License Agreement
3
3
 
4
4
  1. General.
@@ -64,16 +64,16 @@ var _get = require('lodash.get');
64
64
  var uiReact = require('@qualtrics/ui-react');
65
65
  var icons = require('@qualtrics/ui-react/icons');
66
66
  require('core-js/modules/es.string.anchor.js');
67
+ require('core-js/modules/es.array.filter.js');
67
68
  require('core-js/modules/es.string.trim.js');
68
69
  require('core-js/modules/es.array.map.js');
69
70
  require('core-js/modules/es.array.concat.js');
70
- require('core-js/modules/es.array.filter.js');
71
- require('regenerator-runtime/runtime.js');
72
71
  var _cloneDeep = require('lodash.clonedeep');
73
72
  require('core-js/modules/es.array.is-array.js');
74
73
  var reactPopper = require('react-popper');
75
74
  var ReactDOM = require('react-dom');
76
75
  require('core-js/modules/web.timers.js');
76
+ var uuid = require('uuid');
77
77
  require('core-js/modules/es.function.name.js');
78
78
  require('core-js/modules/es.array.slice.js');
79
79
  require('core-js/modules/es.array.iterator.js');
@@ -81,7 +81,6 @@ require('core-js/modules/web.dom-collections.iterator.js');
81
81
  require('core-js/modules/es.array.find.js');
82
82
  require('core-js/modules/es.object.assign.js');
83
83
  var _cloneDeepWith = require('lodash.clonedeepwith');
84
- var uuid = require('uuid');
85
84
  require('core-js/modules/es.regexp.exec.js');
86
85
  require('core-js/modules/es.string.search.js');
87
86
 
@@ -91,8 +90,8 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
91
90
  var _get__default = /*#__PURE__*/_interopDefaultLegacy(_get);
92
91
  var _cloneDeep__default = /*#__PURE__*/_interopDefaultLegacy(_cloneDeep);
93
92
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
94
- var _cloneDeepWith__default = /*#__PURE__*/_interopDefaultLegacy(_cloneDeepWith);
95
93
  var uuid__default = /*#__PURE__*/_interopDefaultLegacy(uuid);
94
+ var _cloneDeepWith__default = /*#__PURE__*/_interopDefaultLegacy(_cloneDeepWith);
96
95
 
97
96
  function styleInject(css, ref) {
98
97
  if ( ref === void 0 ) ref = {};
@@ -121,8 +120,8 @@ function styleInject(css, ref) {
121
120
  }
122
121
  }
123
122
 
124
- var css_248z$b = ".react-app {\n background-color: RGBA(0, 0, 0, 0.1); }\n";
125
- styleInject(css_248z$b);
123
+ var css_248z$j = ".react-app {\n background-color: RGBA(0, 0, 0, 0.1); }\n";
124
+ styleInject(css_248z$j);
126
125
 
127
126
  function ownKeys(object, enumerableOnly) {
128
127
  var keys = Object.keys(object);
@@ -150,6 +149,351 @@ function _objectSpread2(target) {
150
149
  return target;
151
150
  }
152
151
 
152
+ function _regeneratorRuntime() {
153
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
154
+
155
+ _regeneratorRuntime = function () {
156
+ return exports;
157
+ };
158
+
159
+ var exports = {},
160
+ Op = Object.prototype,
161
+ hasOwn = Op.hasOwnProperty,
162
+ $Symbol = "function" == typeof Symbol ? Symbol : {},
163
+ iteratorSymbol = $Symbol.iterator || "@@iterator",
164
+ asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
165
+ toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
166
+
167
+ function define(obj, key, value) {
168
+ return Object.defineProperty(obj, key, {
169
+ value: value,
170
+ enumerable: !0,
171
+ configurable: !0,
172
+ writable: !0
173
+ }), obj[key];
174
+ }
175
+
176
+ try {
177
+ define({}, "");
178
+ } catch (err) {
179
+ define = function (obj, key, value) {
180
+ return obj[key] = value;
181
+ };
182
+ }
183
+
184
+ function wrap(innerFn, outerFn, self, tryLocsList) {
185
+ var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
186
+ generator = Object.create(protoGenerator.prototype),
187
+ context = new Context(tryLocsList || []);
188
+ return generator._invoke = function (innerFn, self, context) {
189
+ var state = "suspendedStart";
190
+ return function (method, arg) {
191
+ if ("executing" === state) throw new Error("Generator is already running");
192
+
193
+ if ("completed" === state) {
194
+ if ("throw" === method) throw arg;
195
+ return doneResult();
196
+ }
197
+
198
+ for (context.method = method, context.arg = arg;;) {
199
+ var delegate = context.delegate;
200
+
201
+ if (delegate) {
202
+ var delegateResult = maybeInvokeDelegate(delegate, context);
203
+
204
+ if (delegateResult) {
205
+ if (delegateResult === ContinueSentinel) continue;
206
+ return delegateResult;
207
+ }
208
+ }
209
+
210
+ if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
211
+ if ("suspendedStart" === state) throw state = "completed", context.arg;
212
+ context.dispatchException(context.arg);
213
+ } else "return" === context.method && context.abrupt("return", context.arg);
214
+ state = "executing";
215
+ var record = tryCatch(innerFn, self, context);
216
+
217
+ if ("normal" === record.type) {
218
+ if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
219
+ return {
220
+ value: record.arg,
221
+ done: context.done
222
+ };
223
+ }
224
+
225
+ "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
226
+ }
227
+ };
228
+ }(innerFn, self, context), generator;
229
+ }
230
+
231
+ function tryCatch(fn, obj, arg) {
232
+ try {
233
+ return {
234
+ type: "normal",
235
+ arg: fn.call(obj, arg)
236
+ };
237
+ } catch (err) {
238
+ return {
239
+ type: "throw",
240
+ arg: err
241
+ };
242
+ }
243
+ }
244
+
245
+ exports.wrap = wrap;
246
+ var ContinueSentinel = {};
247
+
248
+ function Generator() {}
249
+
250
+ function GeneratorFunction() {}
251
+
252
+ function GeneratorFunctionPrototype() {}
253
+
254
+ var IteratorPrototype = {};
255
+ define(IteratorPrototype, iteratorSymbol, function () {
256
+ return this;
257
+ });
258
+ var getProto = Object.getPrototypeOf,
259
+ NativeIteratorPrototype = getProto && getProto(getProto(values([])));
260
+ NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
261
+ var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
262
+
263
+ function defineIteratorMethods(prototype) {
264
+ ["next", "throw", "return"].forEach(function (method) {
265
+ define(prototype, method, function (arg) {
266
+ return this._invoke(method, arg);
267
+ });
268
+ });
269
+ }
270
+
271
+ function AsyncIterator(generator, PromiseImpl) {
272
+ function invoke(method, arg, resolve, reject) {
273
+ var record = tryCatch(generator[method], generator, arg);
274
+
275
+ if ("throw" !== record.type) {
276
+ var result = record.arg,
277
+ value = result.value;
278
+ return value && "object" == typeof value && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
279
+ invoke("next", value, resolve, reject);
280
+ }, function (err) {
281
+ invoke("throw", err, resolve, reject);
282
+ }) : PromiseImpl.resolve(value).then(function (unwrapped) {
283
+ result.value = unwrapped, resolve(result);
284
+ }, function (error) {
285
+ return invoke("throw", error, resolve, reject);
286
+ });
287
+ }
288
+
289
+ reject(record.arg);
290
+ }
291
+
292
+ var previousPromise;
293
+
294
+ this._invoke = function (method, arg) {
295
+ function callInvokeWithMethodAndArg() {
296
+ return new PromiseImpl(function (resolve, reject) {
297
+ invoke(method, arg, resolve, reject);
298
+ });
299
+ }
300
+
301
+ return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
302
+ };
303
+ }
304
+
305
+ function maybeInvokeDelegate(delegate, context) {
306
+ var method = delegate.iterator[context.method];
307
+
308
+ if (undefined === method) {
309
+ if (context.delegate = null, "throw" === context.method) {
310
+ if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
311
+ context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
312
+ }
313
+
314
+ return ContinueSentinel;
315
+ }
316
+
317
+ var record = tryCatch(method, delegate.iterator, context.arg);
318
+ if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
319
+ var info = record.arg;
320
+ return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
321
+ }
322
+
323
+ function pushTryEntry(locs) {
324
+ var entry = {
325
+ tryLoc: locs[0]
326
+ };
327
+ 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
328
+ }
329
+
330
+ function resetTryEntry(entry) {
331
+ var record = entry.completion || {};
332
+ record.type = "normal", delete record.arg, entry.completion = record;
333
+ }
334
+
335
+ function Context(tryLocsList) {
336
+ this.tryEntries = [{
337
+ tryLoc: "root"
338
+ }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
339
+ }
340
+
341
+ function values(iterable) {
342
+ if (iterable) {
343
+ var iteratorMethod = iterable[iteratorSymbol];
344
+ if (iteratorMethod) return iteratorMethod.call(iterable);
345
+ if ("function" == typeof iterable.next) return iterable;
346
+
347
+ if (!isNaN(iterable.length)) {
348
+ var i = -1,
349
+ next = function next() {
350
+ for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
351
+
352
+ return next.value = undefined, next.done = !0, next;
353
+ };
354
+
355
+ return next.next = next;
356
+ }
357
+ }
358
+
359
+ return {
360
+ next: doneResult
361
+ };
362
+ }
363
+
364
+ function doneResult() {
365
+ return {
366
+ value: undefined,
367
+ done: !0
368
+ };
369
+ }
370
+
371
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
372
+ var ctor = "function" == typeof genFun && genFun.constructor;
373
+ return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
374
+ }, exports.mark = function (genFun) {
375
+ return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
376
+ }, exports.awrap = function (arg) {
377
+ return {
378
+ __await: arg
379
+ };
380
+ }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
381
+ return this;
382
+ }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
383
+ void 0 === PromiseImpl && (PromiseImpl = Promise);
384
+ var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
385
+ return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
386
+ return result.done ? result.value : iter.next();
387
+ });
388
+ }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
389
+ return this;
390
+ }), define(Gp, "toString", function () {
391
+ return "[object Generator]";
392
+ }), exports.keys = function (object) {
393
+ var keys = [];
394
+
395
+ for (var key in object) keys.push(key);
396
+
397
+ return keys.reverse(), function next() {
398
+ for (; keys.length;) {
399
+ var key = keys.pop();
400
+ if (key in object) return next.value = key, next.done = !1, next;
401
+ }
402
+
403
+ return next.done = !0, next;
404
+ };
405
+ }, exports.values = values, Context.prototype = {
406
+ constructor: Context,
407
+ reset: function (skipTempReset) {
408
+ if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);
409
+ },
410
+ stop: function () {
411
+ this.done = !0;
412
+ var rootRecord = this.tryEntries[0].completion;
413
+ if ("throw" === rootRecord.type) throw rootRecord.arg;
414
+ return this.rval;
415
+ },
416
+ dispatchException: function (exception) {
417
+ if (this.done) throw exception;
418
+ var context = this;
419
+
420
+ function handle(loc, caught) {
421
+ return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
422
+ }
423
+
424
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
425
+ var entry = this.tryEntries[i],
426
+ record = entry.completion;
427
+ if ("root" === entry.tryLoc) return handle("end");
428
+
429
+ if (entry.tryLoc <= this.prev) {
430
+ var hasCatch = hasOwn.call(entry, "catchLoc"),
431
+ hasFinally = hasOwn.call(entry, "finallyLoc");
432
+
433
+ if (hasCatch && hasFinally) {
434
+ if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
435
+ if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
436
+ } else if (hasCatch) {
437
+ if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
438
+ } else {
439
+ if (!hasFinally) throw new Error("try statement without catch or finally");
440
+ if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
441
+ }
442
+ }
443
+ }
444
+ },
445
+ abrupt: function (type, arg) {
446
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
447
+ var entry = this.tryEntries[i];
448
+
449
+ if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
450
+ var finallyEntry = entry;
451
+ break;
452
+ }
453
+ }
454
+
455
+ finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
456
+ var record = finallyEntry ? finallyEntry.completion : {};
457
+ return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
458
+ },
459
+ complete: function (record, afterLoc) {
460
+ if ("throw" === record.type) throw record.arg;
461
+ return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
462
+ },
463
+ finish: function (finallyLoc) {
464
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
465
+ var entry = this.tryEntries[i];
466
+ if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
467
+ }
468
+ },
469
+ catch: function (tryLoc) {
470
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
471
+ var entry = this.tryEntries[i];
472
+
473
+ if (entry.tryLoc === tryLoc) {
474
+ var record = entry.completion;
475
+
476
+ if ("throw" === record.type) {
477
+ var thrown = record.arg;
478
+ resetTryEntry(entry);
479
+ }
480
+
481
+ return thrown;
482
+ }
483
+ }
484
+
485
+ throw new Error("illegal catch attempt");
486
+ },
487
+ delegateYield: function (iterable, resultName, nextLoc) {
488
+ return this.delegate = {
489
+ iterator: values(iterable),
490
+ resultName: resultName,
491
+ nextLoc: nextLoc
492
+ }, "next" === this.method && (this.arg = undefined), ContinueSentinel;
493
+ }
494
+ }, exports;
495
+ }
496
+
153
497
  function _typeof(obj) {
154
498
  "@babel/helpers - typeof";
155
499
 
@@ -255,18 +599,17 @@ function _inherits(subClass, superClass) {
255
599
  }
256
600
 
257
601
  function _getPrototypeOf(o) {
258
- _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
602
+ _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
259
603
  return o.__proto__ || Object.getPrototypeOf(o);
260
604
  };
261
605
  return _getPrototypeOf(o);
262
606
  }
263
607
 
264
608
  function _setPrototypeOf(o, p) {
265
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
609
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
266
610
  o.__proto__ = p;
267
611
  return o;
268
612
  };
269
-
270
613
  return _setPrototypeOf(o, p);
271
614
  }
272
615
 
@@ -593,7 +936,7 @@ function languageCodeAdapter(languageCode) {
593
936
  return adaptedCode;
594
937
  }
595
938
 
596
- /*! *****************************************************************************
939
+ /******************************************************************************
597
940
  Copyright (c) Microsoft Corporation.
598
941
 
599
942
  Permission to use, copy, modify, and/or distribute this software for any
@@ -674,8 +1017,8 @@ var Portal = function (_Component) {
674
1017
  return Portal;
675
1018
  }(React.Component);
676
1019
 
677
- var css_248z$a = ".q-popover {\n position: absolute;\n z-index: 1000;\n padding: 4px 0;\n font-size: 14px;\n line-height: 20px;\n color: #32363A;\n fill: #333;\n list-style: none;\n min-width: 160px;\n max-width: 500px;\n min-height: 10px;\n max-height: 99%;\n background: #fff;\n border-radius: 4px;\n box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 0px 10px 1px rgba(0, 0, 0, 0.14), 0 0px 10px 2px rgba(0, 0, 0, 0.12);\n z-index: 9000; }\n\nbody .q-popover {\n max-height: 50vh;\n overflow-y: scroll;\n max-width: 30vw; }\n";
678
- styleInject(css_248z$a);
1020
+ var css_248z$i = ".q-popover {\n position: absolute;\n z-index: 1000;\n padding: 4px 0;\n font-size: 14px;\n line-height: 20px;\n color: #32363A;\n fill: #333;\n list-style: none;\n min-width: 160px;\n max-width: 500px;\n min-height: 10px;\n max-height: 99%;\n background: #fff;\n border-radius: 4px;\n box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 0px 10px 1px rgba(0, 0, 0, 0.14), 0 0px 10px 2px rgba(0, 0, 0, 0.12);\n z-index: 9000; }\n\nbody .q-popover {\n max-height: 50vh;\n overflow-y: scroll;\n max-width: 30vw; }\n";
1021
+ styleInject(css_248z$i);
679
1022
 
680
1023
  var globalClickRegistry = new EventRegistry();
681
1024
  var DEFAULT_PLACEMENT = 'bottom-start';
@@ -789,10 +1132,10 @@ function initGlobalListener() {
789
1132
  });
790
1133
  }
791
1134
 
792
- var css_248z$9 = "div[role=\"menu\"] .piped-text-search-input-container {\n padding: 5px 10px; }\n\n.piped-text-search-input {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n align-content: center;\n padding: 4px 8px 8px; }\n .piped-text-search-input input.q-plugin-popover-input {\n box-sizing: border-box;\n height: 36px;\n padding: 7px 9px; }\n\n.piped-text-menu-empty-anchor {\n /* the margin-right hack was not in harmony with tao.\n now, the empty-anchor is truly empty */ }\n\n.piped-text-submenu-item-container {\n position: relative; }\n .piped-text-submenu-item-container .piped-text-menu .piped-text-submenu-anchor {\n position: absolute;\n z-index: -1;\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n min-width: 100%; }\n\n.piped-text-menu-item, .piped-text-submenu-item {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis; }\n .piped-text-menu-item:not(.piped-text-header):not(.piped-text-disabled):hover, .piped-text-submenu-item:not(.piped-text-header):not(.piped-text-disabled):hover {\n cursor: pointer;\n background: RGBA(50, 54, 58, 0.08); }\n .piped-text-menu-item.piped-text-header, .piped-text-submenu-item.piped-text-header {\n font-size: 12px;\n line-height: 16px;\n font-weight: 700;\n padding: 12px; }\n .piped-text-menu-item.piped-text-disabled:not(.piped-text-header), .piped-text-submenu-item.piped-text-disabled:not(.piped-text-header) {\n color: RGB(116, 119, 122); }\n\n.piped-text-submenu-item {\n padding-right: 24px; }\n\n.piped-text-information-message {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n color: #74777A;\n text-align: center;\n white-space: pre-line; }\n\n.piped-text-loading-spinner {\n width: fit-content;\n margin: 0 auto; }\n\n.piped-text-error-container {\n color: #BB0000; }\n .piped-text-error-container .piped-text-error-icon {\n padding: 8px 0; }\n .piped-text-error-container .piped-text-error-icon svg {\n fill: #BB0000;\n display: block;\n margin: 0 auto; }\n .piped-text-error-container .piped-text-error-text {\n text-align: center;\n white-space: pre-line;\n padding: 0 12px 8px; }\n\n.embedded-data-menu {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n align-content: center;\n padding: 4px 8px 8px; }\n .embedded-data-menu input.q-plugin-popover-input {\n box-sizing: border-box;\n height: 36px;\n padding: 7px 9px; }\n";
793
- styleInject(css_248z$9);
1135
+ var css_248z$h = "div[role=\"menu\"] .piped-text-search-input-container {\n padding: 5px 10px; }\n\n.piped-text-search-input {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n align-content: center;\n padding: 4px 8px 8px; }\n .piped-text-search-input input.q-plugin-popover-input {\n box-sizing: border-box;\n height: 36px;\n padding: 7px 9px; }\n\n.piped-text-menu-empty-anchor {\n /* the margin-right hack was not in harmony with tao.\n now, the empty-anchor is truly empty */ }\n\n.piped-text-submenu-item-container {\n position: relative; }\n .piped-text-submenu-item-container .piped-text-menu .piped-text-submenu-anchor {\n position: absolute;\n z-index: -1;\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n min-width: 100%; }\n\n.piped-text-menu-item, .piped-text-submenu-item {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis; }\n .piped-text-menu-item:not(.piped-text-header):not(.piped-text-disabled):hover, .piped-text-submenu-item:not(.piped-text-header):not(.piped-text-disabled):hover {\n cursor: pointer;\n background: RGBA(50, 54, 58, 0.08); }\n .piped-text-menu-item.piped-text-header, .piped-text-submenu-item.piped-text-header {\n font-size: 12px;\n line-height: 16px;\n font-weight: 700;\n padding: 12px; }\n .piped-text-menu-item.piped-text-disabled:not(.piped-text-header), .piped-text-submenu-item.piped-text-disabled:not(.piped-text-header) {\n color: RGB(116, 119, 122); }\n\n.piped-text-submenu-item {\n padding-right: 24px; }\n\n.piped-text-information-message {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n color: #74777A;\n text-align: center;\n white-space: pre-line; }\n\n.piped-text-loading-spinner {\n width: fit-content;\n margin: 0 auto; }\n\n.piped-text-error-container {\n color: #BB0000; }\n .piped-text-error-container .piped-text-error-icon {\n padding: 8px 0; }\n .piped-text-error-container .piped-text-error-icon svg {\n fill: #BB0000;\n display: block;\n margin: 0 auto; }\n .piped-text-error-container .piped-text-error-text {\n text-align: center;\n white-space: pre-line;\n padding: 0 12px 8px; }\n\n.embedded-data-menu {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n align-content: center;\n padding: 4px 8px 8px; }\n .embedded-data-menu input.q-plugin-popover-input {\n box-sizing: border-box;\n height: 36px;\n padding: 7px 9px; }\n";
1136
+ styleInject(css_248z$h);
794
1137
 
795
- var EmbeddedDataMenu = React__default["default"].forwardRef(function (props, ref) {
1138
+ var EmbeddedDataMenu = React__default["default"].forwardRef(function EmbeddedDataMeny(props, ref) {
796
1139
  var _useState = React.useState(''),
797
1140
  _useState2 = _slicedToArray(_useState, 2),
798
1141
  inputValue = _useState2[0],
@@ -860,7 +1203,8 @@ var EmbeddedDataMenu = React__default["default"].forwardRef(function (props, ref
860
1203
  ignoreClickSelector: ignoreClickSelector,
861
1204
  placement: props.placement || 'right-start'
862
1205
  }, React__default["default"].createElement("div", {
863
- className: "embedded-data-menu"
1206
+ className: "embedded-data-menu",
1207
+ ref: ref
864
1208
  }, React__default["default"].createElement("div", null, React__default["default"].createElement(uiReact.InputGroup, null, React__default["default"].createElement(uiReact.Input, {
865
1209
  onChange: handleInputChange,
866
1210
  invalid: isInputInvalid,
@@ -875,8 +1219,151 @@ var EmbeddedDataMenu = React__default["default"].forwardRef(function (props, ref
875
1219
  }))))));
876
1220
  });
877
1221
 
878
- var css_248z$8 = "div[role=\"menu\"] .piped-text-search-input-container {\n padding: 5px 10px; }\n\n.piped-text-search-input {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n align-content: center;\n padding: 4px 8px 8px; }\n .piped-text-search-input input.q-plugin-popover-input {\n box-sizing: border-box;\n height: 36px;\n padding: 7px 9px; }\n\n.piped-text-menu-empty-anchor {\n /* the margin-right hack was not in harmony with tao.\n now, the empty-anchor is truly empty */ }\n\n.piped-text-submenu-item-container {\n position: relative; }\n .piped-text-submenu-item-container .piped-text-menu .piped-text-submenu-anchor {\n position: absolute;\n z-index: -1;\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n min-width: 100%; }\n\n.piped-text-menu-item, .piped-text-submenu-item {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis; }\n .piped-text-menu-item:not(.piped-text-header):not(.piped-text-disabled):hover, .piped-text-submenu-item:not(.piped-text-header):not(.piped-text-disabled):hover {\n cursor: pointer;\n background: RGBA(50, 54, 58, 0.08); }\n .piped-text-menu-item.piped-text-header, .piped-text-submenu-item.piped-text-header {\n font-size: 12px;\n line-height: 16px;\n font-weight: 700;\n padding: 12px; }\n .piped-text-menu-item.piped-text-disabled:not(.piped-text-header), .piped-text-submenu-item.piped-text-disabled:not(.piped-text-header) {\n color: RGB(116, 119, 122); }\n\n.piped-text-submenu-item {\n padding-right: 24px; }\n\n.piped-text-information-message {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n color: #74777A;\n text-align: center;\n white-space: pre-line; }\n\n.piped-text-loading-spinner {\n width: fit-content;\n margin: 0 auto; }\n\n.piped-text-error-container {\n color: #BB0000; }\n .piped-text-error-container .piped-text-error-icon {\n padding: 8px 0; }\n .piped-text-error-container .piped-text-error-icon svg {\n fill: #BB0000;\n display: block;\n margin: 0 auto; }\n .piped-text-error-container .piped-text-error-text {\n text-align: center;\n white-space: pre-line;\n padding: 0 12px 8px; }\n";
879
- styleInject(css_248z$8);
1222
+ /**
1223
+ * Copied from: https://gitlab-app.eng.qops.net/cfe/ui/-/blob/master/packages/ui-react/src/hooks/useId/useId.js
1224
+ * Returns an ID that is stable across renders.
1225
+ * @param {string=} defaultExternalId - ID to be used instead of a randomly generated ID. This ID is only considered on mount, so changes to this ID are ignored.
1226
+ * @returns {String} If an external ID is passed in, the external ID. Otherwise, a randomly generated ID.
1227
+ */
1228
+ function useId(defaultExternalId) {
1229
+ var currentId = React.useState(function () {
1230
+ return defaultExternalId !== null && defaultExternalId !== void 0 ? defaultExternalId : uuid.v4();
1231
+ })[0];
1232
+ return currentId;
1233
+ }
1234
+
1235
+ var css_248z$g = "";
1236
+ styleInject(css_248z$g);
1237
+
1238
+ var css_248z$f = "";
1239
+ styleInject(css_248z$f);
1240
+
1241
+ // const WrappedPipedTextMenu = PipedTextMenu as PipedTextMenuType;
1242
+ var PipedTextSubmenuItem = React__default["default"].forwardRef(function PipedTextSubmenuItem(props, ref) {
1243
+ var submenuAnchorRef = React.useRef(null);
1244
+ var submenuItemId = useId();
1245
+ var menuItem = props.menuItem;
1246
+ return (React__default["default"].createElement("div", { "data-testid": "piped-text-submenu", className: "piped-text-submenu-item-container" },
1247
+ menuItem.show && (React__default["default"].createElement(PipedTextMenu, { "aria-labelledby": submenuItemId,
1248
+ //@ts-ignore
1249
+ items: menuItem.submenu.items, show: menuItem.show, placement: "right-start", onClose: function () {
1250
+ menuItem.show = false;
1251
+ }, allowCustom: menuItem.submenu.allowCustom, customScheme: menuItem.submenu.customScheme, customInputMessage: menuItem.submenu.customInputMessage, searchPlaceholder: menuItem.submenu.searchPlaceholder, errorText: menuItem.submenu.errorText, onSelected: menuItemClicked, anchor: function (ref) { return (React__default["default"].createElement("div", { ref: ref, className: "piped-text-submenu-anchor" })); }, anchorRef: submenuAnchorRef })),
1252
+ React__default["default"].createElement("div", {
1253
+ // aria-haspopup="menu"
1254
+ // id={subMenuItemId}
1255
+ className: "piped-text-submenu-item",
1256
+ // role="menuitem"
1257
+ onMouseEnter: function () { return submenuHovered(menuItem); }, ref: submenuAnchorRef },
1258
+ React__default["default"].createElement("div", { className: "label-text" }, menuItem.label),
1259
+ React__default["default"].createElement("div", { className: "piped-text-icon" },
1260
+ React__default["default"].createElement(uiReact.Icon, { type: uiReact.IconTypes.ChevronRight, size: "medium" })))));
1261
+ function menuItemClicked(menuItem) {
1262
+ props.onMenuItemClick(menuItem);
1263
+ }
1264
+ function submenuHovered(menuItem) {
1265
+ props.onSubmenuHover(menuItem);
1266
+ }
1267
+ });
1268
+
1269
+ var EMBEDDED_DATA_LOCATOR$1 = 'embeddedData';
1270
+ var PipedTextMenuItem = React__default["default"].forwardRef(function PipedTextMenuItem(props, ref) {
1271
+ var submenuId = useId();
1272
+ return (React__default["default"].createElement("div", { className: 'piped-text-menu-item-container', ref: ref }, getMenuItemContent(props.menuItem)));
1273
+ function getMenuItemContent(menuItem) {
1274
+ var innerContent, menuItemEl;
1275
+ var menuItemHeaderClass, menuItemDisabledClass, menuItemClassName;
1276
+ var isSubmenu = checkSubmenuMenuItemItem$1(menuItem);
1277
+ var isDecorated = checkDecoratedMenuItem$1(menuItem);
1278
+ var isEmbeddedDataMenuItem = checkEmbeddedDataMenuItem$1(menuItem);
1279
+ var isFocusable = checkMenuItemFocusable$1(menuItem);
1280
+ var role = isSubmenu
1281
+ ? 'submenu'
1282
+ : 'menuitemradio';
1283
+ if (isSubmenu) {
1284
+ innerContent = (React__default["default"].createElement(PipedTextSubmenuItem, { key: menuItem.key, menuItem: menuItem, onSubmenuHover: handleSubmenuHover, onMenuItemClick: handleMenuItemClick }));
1285
+ }
1286
+ else if (isDecorated) {
1287
+ menuItemHeaderClass = (menuItem.header === true)
1288
+ ? 'piped-text-header'
1289
+ : '';
1290
+ menuItemDisabledClass = (menuItem.disabled === true)
1291
+ ? 'piped-text-disabled'
1292
+ : '';
1293
+ menuItemClassName = "piped-text-menu-item ".concat(menuItemHeaderClass, " ").concat(menuItemDisabledClass);
1294
+ innerContent = (React__default["default"].createElement("div", { className: menuItemClassName }, menuItem.label));
1295
+ }
1296
+ else if (isEmbeddedDataMenuItem) {
1297
+ innerContent = (React__default["default"].createElement("div", { onClick: function () {
1298
+ handleEmbeddedDataItemClick(menuItem);
1299
+ }, onMouseEnter: function () { return handleMenuItemHovered(menuItem); } },
1300
+ React__default["default"].createElement(EmbeddedDataMenu
1301
+ //@ts-ignore
1302
+ , {
1303
+ //@ts-ignore
1304
+ show: menuItem.show, onSelect: handleEmbeddedDataSelect, anchor: function (ref) { return (React__default["default"].createElement("div", { ref: ref, className: "embedded-data-menu-anchor" })); } }),
1305
+ React__default["default"].createElement("div", { className: "piped-text-menu-item" }, menuItem.label)));
1306
+ }
1307
+ else {
1308
+ innerContent = (React__default["default"].createElement("div", { onClick: function () { return handleMenuItemClick(menuItem); }, onMouseEnter: function () { return handleMenuItemHovered(menuItem); } },
1309
+ React__default["default"].createElement("div", { className: "piped-text-menu-item" }, menuItem.label)));
1310
+ }
1311
+ menuItemEl = (React__default["default"].createElement("div", { "aria-haspopup": isSubmenu ? 'menu' : undefined, id: isSubmenu ? submenuId : undefined, role: role, className: "piped-text-menu-item-content", tabIndex: isFocusable ? -1 : undefined }, innerContent));
1312
+ return menuItemEl;
1313
+ }
1314
+ function handleEmbeddedDataItemClick(menuItem) {
1315
+ props.onEmbeddedDataItemClick(menuItem);
1316
+ }
1317
+ function handleMenuItemClick(menuItem) {
1318
+ props.onMenuItemClicked(menuItem);
1319
+ }
1320
+ function handleSubmenuHover(menuItem) {
1321
+ props.onSubmenuHover(menuItem);
1322
+ }
1323
+ function handleMenuItemHovered(menuItem) {
1324
+ props.onMenuItemHover(menuItem);
1325
+ }
1326
+ function handleEmbeddedDataSelect(edLocator) {
1327
+ var edMenuItem;
1328
+ /* Instead of returning the menuItem, we'll construct one that matches the interface.
1329
+ There is no mappable "menuItem" here, when ED values are added they can be different
1330
+ potentially every time, so we trigger events generically ad hoc
1331
+ */
1332
+ edMenuItem = {
1333
+ value: {
1334
+ locator: edLocator,
1335
+ },
1336
+ };
1337
+ props.onMenuItemClicked(edMenuItem);
1338
+ }
1339
+ });
1340
+ function checkEmbeddedDataMenuItem$1(menuItem) {
1341
+ return menuItem.value === EMBEDDED_DATA_LOCATOR$1;
1342
+ }
1343
+ function checkDecoratedMenuItem$1(menuItem) {
1344
+ return (menuItem.header === true)
1345
+ || (menuItem.disabled === true);
1346
+ }
1347
+ function checkSubmenuMenuItemItem$1(menuItem) {
1348
+ return !!menuItem.hasSubmenu;
1349
+ }
1350
+ function checkMenuItemFocusable$1(menuItem) {
1351
+ var isEmbeddedData, isSubmenu, isDefaultMenuItem;
1352
+ isEmbeddedData = checkEmbeddedDataMenuItem$1(menuItem);
1353
+ isSubmenu = checkSubmenuMenuItemItem$1(menuItem);
1354
+ isDefaultMenuItem = checkDefaultMenuItem$1(menuItem);
1355
+ return (isEmbeddedData
1356
+ || isSubmenu
1357
+ || isDefaultMenuItem);
1358
+ }
1359
+ function checkDefaultMenuItem$1(menuItem) {
1360
+ return !(checkEmbeddedDataMenuItem$1(menuItem)
1361
+ || checkDecoratedMenuItem$1(menuItem)
1362
+ || checkSubmenuMenuItemItem$1(menuItem));
1363
+ }
1364
+
1365
+ var css_248z$e = "div[role=\"menu\"] .piped-text-search-input-container {\n padding: 5px 10px; }\n\n.piped-text-search-input {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n align-content: center;\n padding: 4px 8px 8px; }\n .piped-text-search-input input.q-plugin-popover-input {\n box-sizing: border-box;\n height: 36px;\n padding: 7px 9px; }\n\n.piped-text-menu-empty-anchor {\n /* the margin-right hack was not in harmony with tao.\n now, the empty-anchor is truly empty */ }\n\n.piped-text-submenu-item-container {\n position: relative; }\n .piped-text-submenu-item-container .piped-text-menu .piped-text-submenu-anchor {\n position: absolute;\n z-index: -1;\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n min-width: 100%; }\n\n.piped-text-menu-item, .piped-text-submenu-item {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis; }\n .piped-text-menu-item:not(.piped-text-header):not(.piped-text-disabled):hover, .piped-text-submenu-item:not(.piped-text-header):not(.piped-text-disabled):hover {\n cursor: pointer;\n background: RGBA(50, 54, 58, 0.08); }\n .piped-text-menu-item.piped-text-header, .piped-text-submenu-item.piped-text-header {\n font-size: 12px;\n line-height: 16px;\n font-weight: 700;\n padding: 12px; }\n .piped-text-menu-item.piped-text-disabled:not(.piped-text-header), .piped-text-submenu-item.piped-text-disabled:not(.piped-text-header) {\n color: RGB(116, 119, 122); }\n\n.piped-text-submenu-item {\n padding-right: 24px; }\n\n.piped-text-information-message {\n padding: 10px 12px;\n user-select: none;\n box-sizing: border-box;\n overflow-x: hidden;\n text-overflow: ellipsis;\n color: #74777A;\n text-align: center;\n white-space: pre-line; }\n\n.piped-text-loading-spinner {\n width: fit-content;\n margin: 0 auto; }\n\n.piped-text-error-container {\n color: #BB0000; }\n .piped-text-error-container .piped-text-error-icon {\n padding: 8px 0; }\n .piped-text-error-container .piped-text-error-icon svg {\n fill: #BB0000;\n display: block;\n margin: 0 auto; }\n .piped-text-error-container .piped-text-error-text {\n text-align: center;\n white-space: pre-line;\n padding: 0 12px 8px; }\n";
1366
+ styleInject(css_248z$e);
880
1367
 
881
1368
  var EMBEDDED_DATA_LOCATOR = 'embeddedData';
882
1369
  var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(props, ref) {
@@ -909,31 +1396,64 @@ var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(
909
1396
  setSearchValue = _useState8[1];
910
1397
 
911
1398
  var _useState9 = React.useState(undefined),
912
- _useState10 = _slicedToArray(_useState9, 2),
913
- isSubmenu = _useState10[0],
914
- setIsSubmenu = _useState10[1];
1399
+ _useState10 = _slicedToArray(_useState9, 2);
1400
+ _useState10[0];
1401
+ var setIsSubmenu = _useState10[1];
1402
+
1403
+ var _useState11 = React.useState([]),
1404
+ _useState12 = _slicedToArray(_useState11, 2),
1405
+ itemsToRender = _useState12[0],
1406
+ setItemsToRender = _useState12[1];
1407
+
1408
+ var externalAriaLabelledBy = props['aria-labelledby'];
1409
+ var popoverAriaLabelledBy = useId();
1410
+
1411
+ var _useState13 = React.useState([]),
1412
+ _useState14 = _slicedToArray(_useState13, 2),
1413
+ menuChildren = _useState14[0],
1414
+ setMenuChildren = _useState14[1];
1415
+
1416
+ var _useState15 = React.useState(-1),
1417
+ _useState16 = _slicedToArray(_useState15, 2),
1418
+ higlightedItemIndex = _useState16[0],
1419
+ setHighlightedItemIndex = _useState16[1];
1420
+
1421
+ var _useState17 = React.useState([]),
1422
+ _useState18 = _slicedToArray(_useState17, 2);
1423
+ _useState18[0];
1424
+ var setFocusMenuItems = _useState18[1];
915
1425
 
916
1426
  var onClose = props.onClose || function () {
917
1427
  return undefined;
918
1428
  };
919
1429
 
920
- var _useState11 = React.useState(null),
921
- _useState12 = _slicedToArray(_useState11, 2),
922
- popoverEl = _useState12[0],
923
- setPopoverEl = _useState12[1];
1430
+ var _useState19 = React.useState(null),
1431
+ _useState20 = _slicedToArray(_useState19, 2),
1432
+ popoverEl = _useState20[0],
1433
+ setPopoverEl = _useState20[1];
924
1434
 
925
1435
  var popoverRefCb = React.useCallback(function (el) {
926
1436
  setPopoverEl(el);
927
1437
  }, []);
928
1438
 
929
- var _useState13 = React.useState(null),
930
- _useState14 = _slicedToArray(_useState13, 2),
931
- searchBoxEl = _useState14[0],
932
- setSearchBoxEl = _useState14[1];
1439
+ var _useState21 = React.useState(null),
1440
+ _useState22 = _slicedToArray(_useState21, 2);
1441
+ _useState22[0];
1442
+ var setSearchBoxEl = _useState22[1];
933
1443
 
934
1444
  var searchBoxRefCb = React.useCallback(function (el) {
935
1445
  setSearchBoxEl(el);
936
1446
  }, []);
1447
+ React.useEffect(function () {
1448
+ var nextMenuChildren;
1449
+ nextMenuChildren = getPipedTextMenuItems(itemsToRender);
1450
+ setMenuChildren(nextMenuChildren);
1451
+ }, [itemsToRender]);
1452
+ React.useEffect(function () {
1453
+ var nextItemsToRender;
1454
+ nextItemsToRender = (menuItems || []).filter(matchesSearch);
1455
+ setItemsToRender(nextItemsToRender);
1456
+ }, [searchValue, menuItems]);
937
1457
  React.useEffect(function () {
938
1458
  var anchorRefEl = _get__default["default"](props, 'anchorRef.current');
939
1459
 
@@ -942,17 +1462,11 @@ var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(
942
1462
  var nextIsSubmenu = anchorRefElRole === 'menuitem';
943
1463
  setIsSubmenu(nextIsSubmenu);
944
1464
  }
945
-
946
- if (isSubmenu === true) ; else if (isSubmenu === false) {
947
- if (popoverEl !== null) {
948
- popoverEl.focus();
949
- }
950
- }
951
- }, [popoverEl, searchBoxEl, props.anchorRef, isSubmenu]);
1465
+ }, [popoverEl]);
952
1466
  React.useEffect(function () {
953
- _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
1467
+ _asyncToGenerator(_regeneratorRuntime().mark(function _callee() {
954
1468
  var newMenuItems;
955
- return regeneratorRuntime.wrap(function _callee$(_context) {
1469
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
956
1470
  while (1) {
957
1471
  switch (_context.prev = _context.next) {
958
1472
  case 0:
@@ -1053,7 +1567,7 @@ var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(
1053
1567
  return JSON.stringify(item).toLowerCase().includes(searchVal);
1054
1568
  };
1055
1569
 
1056
- var menuItemClicked = function menuItemClicked(menuItem, $e) {
1570
+ var menuItemClicked = function menuItemClicked(menuItem) {
1057
1571
  if (!menuItem.disabled) {
1058
1572
  props.onSelected(menuItem);
1059
1573
  }
@@ -1066,118 +1580,47 @@ var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(
1066
1580
  reRenderMenus();
1067
1581
  };
1068
1582
 
1069
- var handleEmbeddedDataSelect = function handleEmbeddedDataSelect(edLocator) {
1070
- var edMenuItem;
1071
- edMenuItem = {
1072
- value: {
1073
- locator: edLocator
1074
- }
1075
- };
1076
- props.onSelected(edMenuItem);
1077
- };
1078
-
1079
- var SubmenuItem = function SubmenuItem(props) {
1080
- var submenuAnchorRef = React.useRef(null);
1081
- var menuItem = props.menuItem;
1082
- return React__default["default"].createElement("div", {
1083
- "data-testid": "piped-text-submenu",
1084
- className: "piped-text-submenu-item-container"
1085
- }, menuItem.show && React__default["default"].createElement(PipedTextMenu, {
1086
- items: menuItem.submenu.items,
1087
- show: menuItem.show,
1088
- placement: "right-start",
1089
- onClose: function onClose() {
1090
- menuItem.show = false;
1091
- },
1092
- allowCustom: menuItem.submenu.allowCustom,
1093
- customScheme: menuItem.submenu.customScheme,
1094
- customInputMessage: menuItem.submenu.customInputMessage,
1095
- searchPlaceholder: menuItem.submenu.searchPlaceholder,
1096
- errorText: menuItem.submenu.errorText,
1097
- onSelected: menuItemClicked,
1098
- anchor: function anchor(ref) {
1099
- return React__default["default"].createElement("div", {
1100
- ref: ref,
1101
- className: "piped-text-submenu-anchor"
1102
- });
1103
- },
1104
- anchorRef: submenuAnchorRef
1105
- }), React__default["default"].createElement("div", {
1106
- className: "piped-text-submenu-item",
1107
- "aria-haspopup": "menu",
1108
- role: "menuitem",
1109
- onMouseEnter: function onMouseEnter($e) {
1110
- return submenuHovered(menuItem);
1111
- },
1112
- ref: submenuAnchorRef
1113
- }, React__default["default"].createElement("div", {
1114
- className: "label-text"
1115
- }, menuItem.label), React__default["default"].createElement("div", {
1116
- className: "piped-text-icon"
1117
- }, React__default["default"].createElement(uiReact.Icon, {
1118
- type: uiReact.IconTypes.ChevronRight,
1119
- size: "medium"
1120
- }))));
1121
- };
1122
-
1123
1583
  var getPipedTextMenuItems = function getPipedTextMenuItems(menuItems) {
1584
+ var pipedTextMenuItems, nextFocusMenuItems;
1585
+ pipedTextMenuItems = [];
1586
+ nextFocusMenuItems = [];
1587
+
1124
1588
  if (menuItems.length === 0 && props.allowCustom === true && props.customInputMessage) {
1125
1589
  return React__default["default"].createElement("div", null, React__default["default"].createElement("div", {
1126
1590
  className: "piped-text-information-message"
1127
1591
  }, props.customInputMessage));
1128
1592
  }
1129
1593
 
1130
- return menuItems.map(function (menuItem) {
1131
- var menuItemHeaderClass, menuItemDisabledClass, menuItemClassName;
1594
+ pipedTextMenuItems = menuItems.map(function (menuItem) {
1595
+ var isFocusable, menuItemEl;
1596
+ var menuItemRef = React__default["default"].createRef();
1597
+ isFocusable = checkMenuItemFocusable(menuItem);
1598
+ menuItemEl = React__default["default"].createElement(PipedTextMenuItem, {
1599
+ key: menuItem.key,
1600
+ menuItem: menuItem,
1601
+ onSubmenuHover: function onSubmenuHover(menuItem) {
1602
+ submenuHovered(menuItem);
1603
+ },
1604
+ onMenuItemClicked: function onMenuItemClicked(menuItem) {
1605
+ menuItemClicked(menuItem);
1606
+ },
1607
+ onMenuItemHover: function onMenuItemHover(menuItem) {
1608
+ menuItemHovered();
1609
+ },
1610
+ onEmbeddedDataItemClick: function onEmbeddedDataItemClick(menuItem) {
1611
+ embeddedDataItemClicked(menuItem);
1612
+ },
1613
+ ref: menuItemRef
1614
+ });
1132
1615
 
1133
- if (menuItem.hasSubmenu) {
1134
- return React__default["default"].createElement(SubmenuItem, {
1135
- key: menuItem.key,
1136
- menuItem: menuItem
1137
- });
1138
- } else if (menuItem.header === true || menuItem.disabled === true) {
1139
- menuItemHeaderClass = menuItem.header === true ? 'piped-text-header' : '';
1140
- menuItemDisabledClass = menuItem.disabled === true ? 'piped-text-disabled' : '';
1141
- menuItemClassName = "piped-text-menu-item ".concat(menuItemHeaderClass, " ").concat(menuItemDisabledClass);
1142
- return React__default["default"].createElement("div", {
1143
- key: menuItem.key,
1144
- className: menuItemClassName
1145
- }, menuItem.label);
1146
- } else if (menuItem.value === EMBEDDED_DATA_LOCATOR) {
1147
- return React__default["default"].createElement("div", {
1148
- key: menuItem.key,
1149
- onClick: function onClick($e) {
1150
- return embeddedDataItemClicked(menuItem);
1151
- },
1152
- onMouseEnter: function onMouseEnter($e) {
1153
- return menuItemHovered();
1154
- }
1155
- }, React__default["default"].createElement(EmbeddedDataMenu, {
1156
- show: menuItem.show,
1157
- onSelect: handleEmbeddedDataSelect,
1158
- anchor: function anchor(ref) {
1159
- return React__default["default"].createElement("div", {
1160
- ref: ref,
1161
- className: "embedded-data-menu-anchor"
1162
- });
1163
- }
1164
- }), React__default["default"].createElement("div", {
1165
- className: "piped-text-menu-item"
1166
- }, menuItem.label));
1167
- } else {
1168
- return React__default["default"].createElement("div", {
1169
- key: menuItem.key,
1170
- onMouseEnter: function onMouseEnter($e) {
1171
- return menuItemHovered();
1172
- },
1173
- onClick: function onClick($e) {
1174
- return menuItemClicked(menuItem);
1175
- }
1176
- }, React__default["default"].createElement("div", {
1177
- className: "piped-text-menu-item"
1178
- }, menuItem.label));
1616
+ if (isFocusable) {
1617
+ nextFocusMenuItems.push(menuItemEl);
1179
1618
  }
1619
+
1620
+ return menuItemEl;
1180
1621
  });
1622
+ setFocusMenuItems(nextFocusMenuItems);
1623
+ return pipedTextMenuItems;
1181
1624
  };
1182
1625
 
1183
1626
  var handleSearchSubmit = function handleSearchSubmit(e) {
@@ -1230,7 +1673,6 @@ var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(
1230
1673
  if (isLoadError) {
1231
1674
  return getLoadError();
1232
1675
  } else {
1233
- var itemsToRender = (menuItems || []).filter(matchesSearch);
1234
1676
  return React__default["default"].createElement("div", {
1235
1677
  className: "piped-text-popover-menu"
1236
1678
  }, React__default["default"].createElement("div", {
@@ -1250,7 +1692,7 @@ var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(
1250
1692
  return handleSearchInputClick($e);
1251
1693
  },
1252
1694
  ref: searchBoxRefCb
1253
- }))), menuItems === undefined ? getLoadingSpinner() : getPipedTextMenuItems(itemsToRender));
1695
+ }))), menuItems === undefined ? getLoadingSpinner() : menuChildren);
1254
1696
  }
1255
1697
  };
1256
1698
 
@@ -1263,20 +1705,35 @@ var PipedTextMenu = React__default["default"].forwardRef(function PipedTextMenu(
1263
1705
  anchor: props.anchor,
1264
1706
  ignoreClickSelector: props.ignoreClickSelector
1265
1707
  }, React__default["default"].createElement("div", {
1708
+ id: popoverAriaLabelledBy,
1709
+ "aria-labelledby": externalAriaLabelledBy,
1710
+ role: "menu",
1266
1711
  className: "piped-text-popover-container",
1267
1712
  ref: popoverRefCb,
1268
1713
  onFocus: function onFocus($e) {
1269
1714
  return handleFocus($e);
1270
1715
  },
1716
+ onKeyDown: function onKeyDown($e) {
1717
+ return handleKeyDown($e);
1718
+ },
1271
1719
  tabIndex: props.tabIndex !== undefined ? props.tabIndex : -1
1272
1720
  }, getMenuContent()), React__default["default"].createElement(OptionsPlaceholder, {
1273
1721
  optionsRef: optionsRef
1274
1722
  })));
1275
1723
 
1724
+ function handleKeyDown(evt) {
1725
+ var nextFocusElIdx;
1726
+
1727
+ if (evt.key === 'ArrowDown') {
1728
+ if (higlightedItemIndex < menuChildren.length) {
1729
+ nextFocusElIdx = higlightedItemIndex + 1;
1730
+ menuChildren[nextFocusElIdx];
1731
+ setHighlightedItemIndex(nextFocusElIdx);
1732
+ }
1733
+ } else if (evt.key === 'ArrowUp') ;
1734
+ }
1735
+
1276
1736
  function handleFocus(evt) {
1277
- if (!isSubmenu && searchBoxEl !== null) {
1278
- searchBoxEl.focus();
1279
- }
1280
1737
 
1281
1738
  evt.stopPropagation();
1282
1739
  }
@@ -1319,8 +1776,32 @@ function pipedTextDataAdapter(pipedTextData, recursed) {
1319
1776
  return pipedTextData;
1320
1777
  }
1321
1778
 
1322
- var css_248z$7 = ".piped-text-dropdown button[type=button].popover-toggle-button {\n min-width: 128px; }\n\n.piped-text-popover-container {\n padding: 0; }\n .piped-text-popover-container > * {\n min-height: 32px; }\n .piped-text-popover-container .piped-text-submenu-item .label-text, .piped-text-popover-container .piped-text-submenu-item > .piped-text-icon {\n display: inline-block;\n vertical-align: middle;\n overflow-wrap: break-word;\n word-wrap: break-word;\n -webkit-hyphens: auto;\n -ms-hyphens: auto;\n -moz-hyphens: auto;\n hyphens: auto; }\n .piped-text-popover-container .piped-text-submenu-item .piped-text-icon {\n display: inline-block;\n box-sizing: content-box;\n position: absolute;\n right: 0;\n max-width: 24px;\n min-width: 24px;\n max-height: 24px; }\n .piped-text-popover-container .piped-text-submenu-item .piped-text-icon > svg {\n position: relative;\n margin-left: -5px;\n margin-top: -3px; }\n";
1323
- styleInject(css_248z$7);
1779
+ function checkDefaultMenuItem(menuItem) {
1780
+ return !(checkEmbeddedDataMenuItem(menuItem) || checkDecoratedMenuItem(menuItem) || checkSubmenuMenuItemItem(menuItem));
1781
+ }
1782
+
1783
+ function checkEmbeddedDataMenuItem(menuItem) {
1784
+ return menuItem.value === EMBEDDED_DATA_LOCATOR;
1785
+ }
1786
+
1787
+ function checkDecoratedMenuItem(menuItem) {
1788
+ return menuItem.header === true || menuItem.disabled === true;
1789
+ }
1790
+
1791
+ function checkSubmenuMenuItemItem(menuItem) {
1792
+ return !!menuItem.hasSubmenu;
1793
+ }
1794
+
1795
+ function checkMenuItemFocusable(menuItem) {
1796
+ var isEmbeddedData, isSubmenu, isDefaultMenuItem;
1797
+ isEmbeddedData = checkEmbeddedDataMenuItem(menuItem);
1798
+ isSubmenu = checkSubmenuMenuItemItem(menuItem);
1799
+ isDefaultMenuItem = checkDefaultMenuItem(menuItem);
1800
+ return isEmbeddedData || isSubmenu || isDefaultMenuItem;
1801
+ }
1802
+
1803
+ var css_248z$d = ".piped-text-dropdown button[type=button].popover-toggle-button {\n min-width: 128px; }\n\n.piped-text-popover-container {\n padding: 0; }\n .piped-text-popover-container > * {\n min-height: 32px; }\n .piped-text-popover-container .piped-text-submenu-item .label-text, .piped-text-popover-container .piped-text-submenu-item > .piped-text-icon {\n display: inline-block;\n vertical-align: middle;\n overflow-wrap: break-word;\n word-wrap: break-word;\n -webkit-hyphens: auto;\n -ms-hyphens: auto;\n -moz-hyphens: auto;\n hyphens: auto; }\n .piped-text-popover-container .piped-text-submenu-item .piped-text-icon {\n display: inline-block;\n box-sizing: content-box;\n position: absolute;\n right: 0;\n max-width: 24px;\n min-width: 24px;\n max-height: 24px; }\n .piped-text-popover-container .piped-text-submenu-item .piped-text-icon > svg {\n position: relative;\n margin-left: -5px;\n margin-top: -3px; }\n";
1804
+ styleInject(css_248z$d);
1324
1805
 
1325
1806
  var defaultAnchor = function defaultAnchor(ref) {
1326
1807
  return React__default["default"].createElement("div", {
@@ -1342,6 +1823,7 @@ function PipedTextSelect(props) {
1342
1823
 
1343
1824
  var defaultAnchorRef = React.useRef(null);
1344
1825
  var externalAnchor = props.anchor;
1826
+ var ariaLabelledBy = props['aria-labelledby'];
1345
1827
  React.useEffect(function () {
1346
1828
  return function () {
1347
1829
  return onClose();
@@ -1381,7 +1863,8 @@ function PipedTextSelect(props) {
1381
1863
  items: pipedTextItems,
1382
1864
  anchor: actualAnchor,
1383
1865
  anchorRef: anchorRef,
1384
- ignoreClickSelector: props.ignoreClickSelector
1866
+ ignoreClickSelector: props.ignoreClickSelector,
1867
+ "aria-labelledby": ariaLabelledBy
1385
1868
  }));
1386
1869
 
1387
1870
  function initializePipedText() {
@@ -1391,12 +1874,13 @@ function PipedTextSelect(props) {
1391
1874
  }
1392
1875
  }
1393
1876
 
1394
- var css_248z$6 = ".piped-text-input .piped-text-input-toggle, .piped-text-input .piped-text-select-container {\n display: inline-block; }\n\n.piped-text-input .piped-text-input-toggle {\n display: flex; }\n .piped-text-input .piped-text-input-toggle input {\n flex: 1 1;\n box-sizing: border-box; }\n .piped-text-input .piped-text-input-toggle input:first-child {\n border-right: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0; }\n .piped-text-input .piped-text-input-toggle.multiline-input textarea {\n flex: 1 1;\n box-sizing: border-box; }\n .piped-text-input .piped-text-input-toggle input + button, .piped-text-input .piped-text-input-toggle textarea + button {\n margin-left: 4px; }\n\n.piped-text-input .addon-text-container {\n /*\n These styles are intended to match CFE QDS components,\n notably FormField and InputField.\n See: https://gitlab-app.eng.qops.net/cfe/ui/-/blob/master/packages/ui-react/src/FormField/Caption.less\n */\n margin-top: 6px; }\n .piped-text-input .addon-text-container .helper-text, .piped-text-input .addon-text-container .error-text {\n font-size: 12px; }\n .piped-text-input .addon-text-container .helper-text {\n color: #74777a;\n fill: #74777a; }\n .piped-text-input .addon-text-container .helper-text + .error-text {\n margin-top: 4px; }\n .piped-text-input .addon-text-container .error-text {\n display: flex;\n align-items: center;\n color: #b00;\n fill: #b00; }\n .piped-text-input .addon-text-container .error-text .error-text-icon svg {\n margin-left: -2px;\n margin-right: 3px;\n width: 16px;\n height: 16px; }\n";
1395
- styleInject(css_248z$6);
1877
+ var css_248z$c = ".piped-text-input .piped-text-input-toggle, .piped-text-input .piped-text-select-container {\n display: inline-block; }\n\n.piped-text-input .piped-text-input-toggle {\n display: flex; }\n .piped-text-input .piped-text-input-toggle input {\n flex: 1 1;\n box-sizing: border-box; }\n .piped-text-input .piped-text-input-toggle input:first-child {\n border-right: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0; }\n .piped-text-input .piped-text-input-toggle.multiline-input textarea {\n flex: 1 1;\n box-sizing: border-box; }\n .piped-text-input .piped-text-input-toggle input + button, .piped-text-input .piped-text-input-toggle textarea + button {\n margin-left: 4px; }\n\n.piped-text-input .addon-text-container {\n /*\n These styles are intended to match CFE QDS components,\n notably FormField and InputField.\n See: https://gitlab-app.eng.qops.net/cfe/ui/-/blob/master/packages/ui-react/src/FormField/Caption.less\n */\n margin-top: 6px; }\n .piped-text-input .addon-text-container .helper-text, .piped-text-input .addon-text-container .error-text {\n font-size: 12px; }\n .piped-text-input .addon-text-container .helper-text {\n color: #74777a;\n fill: #74777a; }\n .piped-text-input .addon-text-container .helper-text + .error-text {\n margin-top: 4px; }\n .piped-text-input .addon-text-container .error-text {\n display: flex;\n align-items: center;\n color: #b00;\n fill: #b00; }\n .piped-text-input .addon-text-container .error-text .error-text-icon svg {\n margin-left: -2px;\n margin-right: 3px;\n width: 16px;\n height: 16px; }\n";
1878
+ styleInject(css_248z$c);
1396
1879
 
1397
1880
  function PipedTextInput(props) {
1398
1881
  var _a = React.useState(false), showMenu = _a[0], setShowMenu = _a[1];
1399
1882
  var _b = React.useState(), cursorPosition = _b[0], setCursorPosition = _b[1];
1883
+ var pipedTextButtonId = useId();
1400
1884
  var pipedTextButtonRef = React.useRef(null);
1401
1885
  /*
1402
1886
  This has to be an Object type ref instead of 'string' or React will lose
@@ -1432,10 +1916,10 @@ function PipedTextInput(props) {
1432
1916
  React__default["default"].createElement(uiReact.Input, __assign({ value: inputRefValue.value, onChange: function (evt) {
1433
1917
  onInputChange(evt);
1434
1918
  }, onBlur: onInputBlur, placeholder: placeholder, multiline: multiline }, restProps)),
1435
- React__default["default"].createElement(uiReact.IconButton, { "aria-label": "PipedText", "aria-haspopup": "menu", "aria-expanded": showMenu ? true : undefined, role: "button", onClick: toggleMenu, ref: pipedTextButtonRef },
1919
+ React__default["default"].createElement(uiReact.IconButton, { id: pipedTextButtonId, "aria-label": "PipedText", "aria-haspopup": "menu", "aria-expanded": showMenu ? true : undefined, role: "button", onClick: toggleMenu, ref: pipedTextButtonRef },
1436
1920
  React__default["default"].createElement(icons.PipedTextIcon, null)),
1437
1921
  React__default["default"].createElement("div", { className: "piped-text-select-container" },
1438
- React__default["default"].createElement(PipedTextSelect, { items: items, onSelect: pipedTextSelected, show: showMenu, onClose: handleClose, ignoreClickSelector: "piped-text-input-toggle", anchorRef: pipedTextButtonRef }))),
1922
+ React__default["default"].createElement(PipedTextSelect, { items: items, onSelect: pipedTextSelected, show: showMenu, onClose: handleClose, ignoreClickSelector: "piped-text-input-toggle", anchorRef: pipedTextButtonRef, "aria-labelledby": pipedTextButtonId }))),
1439
1923
  showAddonText() && (React__default["default"].createElement("div", { className: "addon-text-container" },
1440
1924
  helperText && (React__default["default"].createElement("div", { className: "helper-text" }, helperText)),
1441
1925
  errorText && (React__default["default"].createElement("div", { className: "error-text" },
@@ -1507,8 +1991,8 @@ function PipedTextInput(props) {
1507
1991
  }
1508
1992
  }
1509
1993
 
1510
- var css_248z$5 = ".field-row {\n min-width: 475px;\n display: flex;\n align-items: center; }\n .field-row .field-selector, .field-row .field-input, .field-row .delete-row, .field-row .required-indicator {\n display: inline-block; }\n .field-row .field-selector, .field-row .field-input {\n padding: 0 10px; }\n .field-row .custom-field-name, .field-row .field-input, .field-row .delete-row {\n box-sizing: border-box; }\n .field-row .field-selector {\n min-width: 30%; }\n .field-row .field-selector.required-field button:hover {\n cursor: not-allowed; }\n .field-row .field-selector .required-indicator-container {\n padding-left: 12px;\n display: flex;\n color: #32363A; }\n .field-row .field-selector .required-indicator-container .required-indicator-text {\n min-width: 0;\n font-size: 14px; }\n .field-row .field-selector .required-indicator-container .required-indicator-symbol {\n margin-top: -2px; }\n .field-row .field-selector .left-align {\n text-align: left; }\n .field-row .field-selector .custom-field-name {\n padding-left: 16px;\n padding-right: 30px; }\n .field-row .field-selector .custom-field-name input {\n text-align: center;\n display: inline-block;\n width: 100%;\n padding: 0; }\n .field-row .field-input-container {\n display: flex;\n flex: 1 0;\n align-items: center; }\n .field-row .field-input-container .field-input {\n flex: 1;\n min-width: 0;\n margin-right: 4px; }\n .field-row .field-input-container .delete-row {\n max-width: 36px;\n margin-left: 12px;\n vertical-align: middle; }\n .field-row .field-input-container .delete-row .icon-wrapper {\n display: block;\n width: fit-content;\n margin: 0 auto;\n min-width: 41px; }\n .field-row .field-input-container .delete-row .icon-wrapper:hover {\n cursor: pointer; }\n .field-row .full-width {\n width: 100%; }\n";
1511
- styleInject(css_248z$5);
1994
+ var css_248z$b = ".field-row {\n min-width: 475px;\n display: flex;\n align-items: center; }\n .field-row .field-selector, .field-row .field-input, .field-row .delete-row, .field-row .required-indicator {\n display: inline-block; }\n .field-row .field-selector, .field-row .field-input {\n padding: 0 10px; }\n .field-row .custom-field-name, .field-row .field-input, .field-row .delete-row {\n box-sizing: border-box; }\n .field-row .field-selector {\n min-width: 30%; }\n .field-row .field-selector.required-field button:hover {\n cursor: not-allowed; }\n .field-row .field-selector .required-indicator-container {\n padding-left: 12px;\n display: flex;\n color: #32363A; }\n .field-row .field-selector .required-indicator-container .required-indicator-text {\n min-width: 0;\n font-size: 14px; }\n .field-row .field-selector .required-indicator-container .required-indicator-symbol {\n margin-top: -2px; }\n .field-row .field-selector .left-align {\n text-align: left; }\n .field-row .field-selector .custom-field-name {\n padding-left: 16px;\n padding-right: 30px; }\n .field-row .field-selector .custom-field-name input {\n text-align: center;\n display: inline-block;\n width: 100%;\n padding: 0; }\n .field-row .field-input-container {\n display: flex;\n flex: 1 0;\n align-items: center; }\n .field-row .field-input-container .field-input {\n flex: 1;\n min-width: 0;\n margin-right: 4px; }\n .field-row .field-input-container .delete-row {\n max-width: 36px;\n margin-left: 12px;\n vertical-align: middle; }\n .field-row .field-input-container .delete-row .icon-wrapper {\n display: block;\n width: fit-content;\n margin: 0 auto;\n min-width: 41px; }\n .field-row .field-input-container .delete-row .icon-wrapper:hover {\n cursor: pointer; }\n .field-row .full-width {\n width: 100%; }\n";
1995
+ styleInject(css_248z$b);
1512
1996
 
1513
1997
  function FieldRow(props) {
1514
1998
  var _useState = React.useState(props.children),
@@ -1682,8 +2166,8 @@ function FieldRow(props) {
1682
2166
  }, getRowDelete())));
1683
2167
  }
1684
2168
 
1685
- var css_248z$4 = "";
1686
- styleInject(css_248z$4);
2169
+ var css_248z$a = "";
2170
+ styleInject(css_248z$a);
1687
2171
 
1688
2172
  function FieldItem(props) {
1689
2173
  var label = props.name || undefined;
@@ -1700,8 +2184,8 @@ function FieldItem(props) {
1700
2184
  }, label);
1701
2185
  }
1702
2186
 
1703
- var css_248z$3 = ".task-fields {\n margin-right: 100px; }\n .task-fields .add-field-button .add-field-button-label {\n padding: 0 3px; }\n .task-fields .field-headers {\n margin-bottom: 10px;\n padding-left: 12px; }\n .task-fields .field-headers .field-row {\n color: #6A6D70;\n font-weight: bold; }\n .task-fields .field-headers .field-row .field-selector label, .task-fields .field-headers .field-row .field-input label {\n font-size: 12px; }\n .task-fields .field-headers .field-row .field-selector {\n padding-top: 0;\n padding-right: 24px;\n padding-bottom: 0;\n padding-left: 0; }\n .task-fields .field-headers .field-row .field-input {\n padding-top: 0;\n padding-right: 0;\n padding-bottom: 0;\n padding-left: 12px; }\n .task-fields .field-rows {\n padding-bottom: 12px; }\n .task-fields .field-rows .field-row {\n border-top: 1px solid #E5E5E5; }\n .task-fields .field-rows .field-row .field-selector {\n padding-top: 8px;\n padding-right: 12px;\n padding-bottom: 8px;\n padding-left: 12px; }\n .task-fields .field-rows .field-row .field-input {\n border-left: 1px solid #E5E5E5;\n padding-top: 8px;\n padding-right: 0;\n padding-bottom: 8px;\n padding-left: 12px; }\n\n.q-popover .field-item {\n padding: 5px 32px; }\n .q-popover .field-item:hover {\n cursor: pointer;\n user-select: none;\n background: #007ac0;\n color: #fff;\n fill: #fff; }\n";
1704
- styleInject(css_248z$3);
2187
+ var css_248z$9 = ".task-fields {\n margin-right: 100px; }\n .task-fields .add-field-button .add-field-button-label {\n padding: 0 3px; }\n .task-fields .field-headers {\n margin-bottom: 10px;\n padding-left: 12px; }\n .task-fields .field-headers .field-row {\n color: #6A6D70;\n font-weight: bold; }\n .task-fields .field-headers .field-row .field-selector label, .task-fields .field-headers .field-row .field-input label {\n font-size: 12px; }\n .task-fields .field-headers .field-row .field-selector {\n padding-top: 0;\n padding-right: 24px;\n padding-bottom: 0;\n padding-left: 0; }\n .task-fields .field-headers .field-row .field-input {\n padding-top: 0;\n padding-right: 0;\n padding-bottom: 0;\n padding-left: 12px; }\n .task-fields .field-rows {\n padding-bottom: 12px; }\n .task-fields .field-rows .field-row {\n border-top: 1px solid #E5E5E5; }\n .task-fields .field-rows .field-row .field-selector {\n padding-top: 8px;\n padding-right: 12px;\n padding-bottom: 8px;\n padding-left: 12px; }\n .task-fields .field-rows .field-row .field-input {\n border-left: 1px solid #E5E5E5;\n padding-top: 8px;\n padding-right: 0;\n padding-bottom: 8px;\n padding-left: 12px; }\n\n.q-popover .field-item {\n padding: 5px 32px; }\n .q-popover .field-item:hover {\n cursor: pointer;\n user-select: none;\n background: #007ac0;\n color: #fff;\n fill: #fff; }\n";
2188
+ styleInject(css_248z$9);
1705
2189
 
1706
2190
  var uuidv4 = uuid__default["default"].v4;
1707
2191
  var CUSTOM_TYPE = 'custom';
@@ -2086,8 +2570,8 @@ function AddFieldHeaders(props) {
2086
2570
  }
2087
2571
  }
2088
2572
 
2089
- var css_248z$2 = ".select-item .item {\n padding: 5px 32px;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%; }\n .select-item .item .checked-container, .select-item .item .item-content {\n display: inline-block; }\n .select-item .item .checked-container {\n margin-bottom: -3px;\n transition: opacity cubic-bezier(0.4, 0, 0.2, 1) 0.1s; }\n .select-item .item .checked-container.checked {\n opacity: 1; }\n .select-item .item .checked-container:not(.checked) {\n opacity: 0; }\n .select-item .item:hover {\n cursor: pointer;\n user-select: none;\n background: #007ac0;\n color: #fff;\n fill: #fff; }\n";
2090
- styleInject(css_248z$2);
2573
+ var css_248z$8 = ".select-item .item {\n padding: 5px 32px;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%; }\n .select-item .item .checked-container, .select-item .item .item-content {\n display: inline-block; }\n .select-item .item .checked-container {\n margin-bottom: -3px;\n transition: opacity cubic-bezier(0.4, 0, 0.2, 1) 0.1s; }\n .select-item .item .checked-container.checked {\n opacity: 1; }\n .select-item .item .checked-container:not(.checked) {\n opacity: 0; }\n .select-item .item:hover {\n cursor: pointer;\n user-select: none;\n background: #007ac0;\n color: #fff;\n fill: #fff; }\n";
2574
+ styleInject(css_248z$8);
2091
2575
 
2092
2576
  function SelectItem(props) {
2093
2577
  var checked = props.checked || false;
@@ -2109,8 +2593,8 @@ function SelectItem(props) {
2109
2593
  }, children)));
2110
2594
  }
2111
2595
 
2112
- var css_248z$1 = "";
2113
- styleInject(css_248z$1);
2596
+ var css_248z$7 = "";
2597
+ styleInject(css_248z$7);
2114
2598
 
2115
2599
  function MultiselectDropdown(props) {
2116
2600
  var _useState = React.useState(false),
@@ -2165,8 +2649,8 @@ function MultiselectDropdown(props) {
2165
2649
  })));
2166
2650
  }
2167
2651
 
2168
- var css_248z = ".dynamic-search-input .search-input {\n box-sizing: border-box; }\n\n.dynamic-search-popover-child {\n padding: 5px 32px; }\n .dynamic-search-popover-child:hover {\n cursor: pointer;\n user-select: none;\n background: #007ac0;\n color: #fff;\n fill: #fff; }\n";
2169
- styleInject(css_248z);
2652
+ var css_248z$6 = ".dynamic-search-input .search-input {\n box-sizing: border-box; }\n\n.dynamic-search-popover-child {\n padding: 5px 32px; }\n .dynamic-search-popover-child:hover {\n cursor: pointer;\n user-select: none;\n background: #007ac0;\n color: #fff;\n fill: #fff; }\n";
2653
+ styleInject(css_248z$6);
2170
2654
 
2171
2655
  function DynamicSearchInput(props) {
2172
2656
  var _useState = React.useState(false),
@@ -2231,9 +2715,9 @@ function DynamicSearchInput(props) {
2231
2715
  };
2232
2716
 
2233
2717
  var defaultSearch = function () {
2234
- var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(value) {
2718
+ var _ref = _asyncToGenerator(_regeneratorRuntime().mark(function _callee(value) {
2235
2719
  var results;
2236
- return regeneratorRuntime.wrap(function _callee$(_context) {
2720
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
2237
2721
  while (1) {
2238
2722
  switch (_context.prev = _context.next) {
2239
2723
  case 0:
@@ -2266,9 +2750,9 @@ function DynamicSearchInput(props) {
2266
2750
  }();
2267
2751
 
2268
2752
  var handleInputChange = function () {
2269
- var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(event) {
2753
+ var _ref2 = _asyncToGenerator(_regeneratorRuntime().mark(function _callee2(event) {
2270
2754
  var inputVal, searchFunc, results, resultsType, nextSearchResults;
2271
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
2755
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
2272
2756
  while (1) {
2273
2757
  switch (_context2.prev = _context2.next) {
2274
2758
  case 0:
@@ -2349,8 +2833,317 @@ function SearchItem(props) {
2349
2833
  }, props.children);
2350
2834
  }
2351
2835
 
2836
+ var css_248z$5 = ".capture-event .capture-event-controls {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 15px; }\n .capture-event .capture-event-controls .waiting-message {\n display: flex;\n align-items: center; }\n .capture-event .capture-event-controls .waiting-message .waiting-label {\n color: #74777a;\n margin-left: 8px; }\n\n.capture-event .payload-block {\n text-align: left; }\n .capture-event .payload-block .payload-label {\n text-decoration: underline;\n margin-bottom: 3px; }\n";
2837
+ styleInject(css_248z$5);
2838
+
2839
+ function CaptureEvent(props) {
2840
+ var _a = React.useState(props.payload), payload = _a[0]; _a[1];
2841
+ var _b = React.useState(props.capturing || false), capturing = _b[0], setCapturing = _b[1];
2842
+ var _c = React.useState(props.waitingForEventTranslation), waitingLabel = _c[0], setWaitingLabel = _c[1];
2843
+ return (React__default["default"].createElement("div", { className: "capture-event" },
2844
+ React__default["default"].createElement("div", { className: "capture-event-controls" },
2845
+ getCaptureEventButton(),
2846
+ capturing && (React__default["default"].createElement("div", { className: "waiting-message" },
2847
+ React__default["default"].createElement(uiReact.LoadingSpinner, { show: true, size: 'small' }),
2848
+ React__default["default"].createElement("div", { className: "waiting-label" }, waitingLabel)))),
2849
+ payload && (React__default["default"].createElement("div", { className: "payload-block" },
2850
+ React__default["default"].createElement("div", { className: "payload-label" }, "".concat(props.payloadTranslation, ":")),
2851
+ React__default["default"].createElement("div", { className: "payload" },
2852
+ React__default["default"].createElement("pre", null, payload))))));
2853
+ function getCaptureEventButton() {
2854
+ if (capturing) {
2855
+ return (React__default["default"].createElement("div", { className: "capture-event-button-container" },
2856
+ React__default["default"].createElement(uiReact.Button, { kind: "secondary", onClick: cancelCapture }, props.cancelCaptureTranslation)));
2857
+ }
2858
+ else {
2859
+ return (React__default["default"].createElement("div", { className: "capture-event-button-container" },
2860
+ React__default["default"].createElement(uiReact.Button, { kind: "primary", onClick: startCapture }, props.captureNextEventTranslation)));
2861
+ }
2862
+ }
2863
+ function startCapture() {
2864
+ setCapturing(true);
2865
+ props.onStart();
2866
+ }
2867
+ function cancelCapture() {
2868
+ setCapturing(false);
2869
+ setWaitingLabel(props.waitingForEventTranslation);
2870
+ props.onCancel();
2871
+ }
2872
+ }
2873
+
2874
+ var css_248z$4 = ".copy-text {\n display: flex;\n column-gap: 8px; }\n .copy-text .input-container {\n width: 100%; }\n .copy-text .input-container .input-textbox {\n width: 100%; }\n .copy-text .copy-button-container .selected-button {\n display: flex; }\n .copy-text .copy-button-container .selected-button .selected-button-text {\n display: flex;\n align-self: center; }\n";
2875
+ styleInject(css_248z$4);
2876
+
2877
+ var COPY_BUTTON_SELECTED_TEXT_TIME = 1.5 * 1000; // seconds * milliseconds
2878
+ function CopyText(props) {
2879
+ var _a = React.useState(false), copyButtonSelected = _a[0], setCopyButtonSelected = _a[1];
2880
+ return (React__default["default"].createElement("div", { className: "copy-text" },
2881
+ React__default["default"].createElement("div", { className: "input-container" },
2882
+ React__default["default"].createElement(uiReact.Input, { className: "input-textbox", defaultValue: props.text, "aria-readonly": true, readOnly: true })),
2883
+ React__default["default"].createElement("div", { className: "copy-button-container" },
2884
+ React__default["default"].createElement(uiReact.Button, { kind: "secondary", disabled: copyButtonSelected, onClick: copyTextToClipboard }, getCopyButtonContent()))));
2885
+ function copyTextToClipboard() {
2886
+ try {
2887
+ navigator.clipboard.writeText(props.text);
2888
+ setCopyButtonSelected(true);
2889
+ setTimeout(function () { return setCopyButtonSelected(false); }, COPY_BUTTON_SELECTED_TEXT_TIME);
2890
+ }
2891
+ catch (err) {
2892
+ console.error('Failed to copy text');
2893
+ console.error(err);
2894
+ }
2895
+ }
2896
+ function getCopyButtonContent() {
2897
+ if (copyButtonSelected) {
2898
+ return (React__default["default"].createElement("div", { className: "selected-button" },
2899
+ React__default["default"].createElement("div", { className: "selected-button-icon" },
2900
+ React__default["default"].createElement(icons.CheckIcon, null)),
2901
+ React__default["default"].createElement("div", { className: "selected-button-text" }, props.copySelectedTranslation)));
2902
+ }
2903
+ else {
2904
+ return (React__default["default"].createElement("div", { className: "default-button" }, props.copyTranslation));
2905
+ }
2906
+ }
2907
+ }
2908
+
2909
+ var css_248z$3 = ".field-mapper {\n padding-bottom: 12px; }\n .field-mapper .field-mapper-row-container .field-mapper-row {\n border-top: 1px solid #E5E5E5; }\n .field-mapper .field-mapper-row-container.field-mapper-header-row {\n margin-bottom: 10px;\n padding-left: 12px; }\n .field-mapper .field-mapper-row-container.field-mapper-header-row .field-mapper-row {\n border: 0; }\n .field-mapper .field-mapper-row-container.field-mapper-header-row .field-mapper-key, .field-mapper .field-mapper-row-container.field-mapper-header-row .field-mapper-value {\n border: 0;\n display: flex;\n align-items: center; }\n .field-mapper .field-mapper-row-container.field-mapper-header-row .field-mapper-key .field-mapper-header-cell, .field-mapper .field-mapper-row-container.field-mapper-header-row .field-mapper-value .field-mapper-header-cell {\n color: #6A6D70;\n font-weight: bold;\n font-size: 12px; }\n .field-mapper .field-mapper-row-container.field-mapper-header-row .field-mapper-key {\n padding-top: 0;\n padding-right: 24px;\n padding-bottom: 0;\n padding-left: 0; }\n .field-mapper .field-mapper-row-container.field-mapper-header-row .field-mapper-value {\n padding-top: 0;\n padding-right: 0;\n padding-bottom: 0;\n padding-left: 12px; }\n .field-mapper .add-field-button-container {\n padding-top: 12px; }\n";
2910
+ styleInject(css_248z$3);
2911
+
2912
+ function isString(val) {
2913
+ return (typeof val) === 'string';
2914
+ }
2915
+
2916
+ var css_248z$2 = ".field-mapper-row .field-mapper-row-content {\n display: flex; }\n .field-mapper-row .field-mapper-row-content .field-mapper-key-container {\n flex: 4; }\n .field-mapper-row .field-mapper-row-content .field-mapper-value-container {\n flex: 7; }\n .field-mapper-row .field-mapper-row-content .remove-row-container {\n min-height: 100%;\n padding: 8px 12px;\n border-left: 1px solid #E5E5E5; }\n .field-mapper-row .field-mapper-row-content .remove-row-container.hide-remove-button {\n border: 0; }\n .field-mapper-row .field-mapper-row-content .remove-row-container .empty-remove-button {\n min-width: 36px; }\n";
2917
+ styleInject(css_248z$2);
2918
+
2919
+ var css_248z$1 = ".field-mapper-key {\n display: flex;\n align-items: center;\n padding-top: 8px;\n padding-right: 12px;\n padding-bottom: 8px;\n padding-left: 12px;\n height: 100%; }\n .field-mapper-key .required-field-container {\n display: flex; }\n .field-mapper-key .required-field-container .required-field-text {\n min-width: 0;\n font-size: 14px; }\n .field-mapper-key .required-field-container .required-field-symbol {\n margin-top: -2px; }\n";
2920
+ styleInject(css_248z$1);
2921
+
2922
+ var FieldMapperKey = React__default["default"].forwardRef(function FieldMapperKey(props, ref) {
2923
+ var _a, _b, _c, _d, _e;
2924
+ var availableFields;
2925
+ var onFieldKeyChange;
2926
+ availableFields = Array.isArray(props.availableFields)
2927
+ ? props.availableFields
2928
+ : [];
2929
+ onFieldKeyChange = (typeof props.onFieldKeyChange === 'function')
2930
+ ? props.onFieldKeyChange
2931
+ : function () { return undefined; };
2932
+ return (React__default["default"].createElement("div", { className: "field-mapper-key", ref: ref }, (React__default["default"].Children.count(props.children) > 0)
2933
+ ? props.children
2934
+ : (React__default["default"].createElement("div", { className: "field-mapper-key-dropdown" }, fieldMapperKeyDropdownDisabled()
2935
+ ? (React__default["default"].createElement(uiReact.Button, { disabled: true }, (_a = props.selectedField) === null || _a === void 0 ? void 0 : _a.label))
2936
+ : (((_b = props.selectedField) === null || _b === void 0 ? void 0 : _b.required) === true)
2937
+ ? (React__default["default"].createElement("div", { className: "required-field-container" },
2938
+ React__default["default"].createElement("div", { className: "required-field-text" }, (_c = props.selectedField) === null || _c === void 0 ? void 0 : _c.label),
2939
+ React__default["default"].createElement("div", { className: "required-field-symbol" }, "*")))
2940
+ : (React__default["default"].createElement(uiReact.Dropdown, { onChange: handleFieldKeyChange },
2941
+ React__default["default"].createElement(uiReact.DropdownButton, { label: (_d = props.selectedField) === null || _d === void 0 ? void 0 : _d.label }),
2942
+ React__default["default"].createElement(uiReact.DropdownList, null, (_e = props.availableFields) === null || _e === void 0 ? void 0 : _e.map(function (fieldItem) {
2943
+ return (React__default["default"].createElement(uiReact.DropdownOption, { key: fieldItem.key, label: fieldItem.label, value: fieldItem.value }));
2944
+ }))))))));
2945
+ function handleFieldKeyChange(value) {
2946
+ var foundSelectedFieldKey;
2947
+ foundSelectedFieldKey = availableFields.find(function (availableField) {
2948
+ return availableField.value === value;
2949
+ });
2950
+ if (foundSelectedFieldKey === undefined) {
2951
+ return;
2952
+ }
2953
+ onFieldKeyChange(props.selectedField, foundSelectedFieldKey);
2954
+ }
2955
+ function fieldMapperKeyDropdownDisabled() {
2956
+ var hasAvailableFields;
2957
+ hasAvailableFields = (availableFields === null || availableFields === void 0 ? void 0 : availableFields.length) > 0;
2958
+ return !hasAvailableFields;
2959
+ }
2960
+ });
2961
+
2962
+ var css_248z = ".field-mapper-value {\n border-left: 1px solid #E5E5E5;\n padding-top: 8px;\n padding-right: 12px;\n padding-bottom: 8px;\n padding-left: 12px;\n height: 100%; }\n";
2963
+ styleInject(css_248z);
2964
+
2965
+ var FieldMapperValue = React__default["default"].forwardRef(function FieldMapperValue(props, ref) {
2966
+ var _a, _b;
2967
+ return (React__default["default"].createElement("div", { className: "field-mapper-value" }, (React__default["default"].Children.count(props.children) > 0)
2968
+ ? props.children
2969
+ : (React__default["default"].createElement("div", { className: "piped-text-input-value-container" },
2970
+ React__default["default"].createElement(PipedTextInput, { items: (_a = props.pipedTextItems) !== null && _a !== void 0 ? _a : [], onChange: (_b = props.onChange) !== null && _b !== void 0 ? _b : (function () { return undefined; }) })))));
2971
+ });
2972
+
2973
+ var FieldMapperRow = React__default["default"].forwardRef(function FieldMapperRow(props, ref) {
2974
+ return (React__default["default"].createElement("div", { className: "field-mapper-row", ref: ref },
2975
+ React__default["default"].createElement("div", { className: "field-mapper-row-content" },
2976
+ React__default["default"].Children.map(props.children, function (child) {
2977
+ return getWrappedKeyValue(child);
2978
+ }),
2979
+ React__default["default"].createElement("div", { className: 'remove-row-container' + ((props.showRemove === false) ? ' hide-remove-button' : '') }, (props.showRemove === false)
2980
+ ? (React__default["default"].createElement("div", { className: "empty-remove-button" }))
2981
+ : (React__default["default"].createElement(uiReact.IconButton
2982
+ /*
2983
+ TODO: Require an i18n string to be passed in for a11y labels
2984
+ */
2985
+ , { "aria-label": "Remove", onClick: function ($e) { return handleRemoveClick(); } },
2986
+ React__default["default"].createElement(icons.RemoveItemIcon, null)))))));
2987
+ function handleRemoveClick(evt) {
2988
+ var _a;
2989
+ (_a = props.onFieldRemove) === null || _a === void 0 ? void 0 : _a.call(props, props.selectedField);
2990
+ }
2991
+ function getWrappedKeyValue(child) {
2992
+ var _a, _b, _c, _d;
2993
+ var wrappedEl;
2994
+ var fieldMapperKeyProps, fieldMapperValueProps;
2995
+ var includeAvailableFields, includeSelectedField;
2996
+ var includePipedTextItems, includeOnChange;
2997
+ fieldMapperKeyProps = {};
2998
+ fieldMapperValueProps = {};
2999
+ switch (child.type) {
3000
+ case FieldMapperKey:
3001
+ includeAvailableFields = (!Array.isArray(child.props.availableFields)
3002
+ && (((_a = props.availableFields) === null || _a === void 0 ? void 0 : _a.length) > 0));
3003
+ includeSelectedField = (((typeof child.props.selectedField) !== 'object')
3004
+ && (props.selectedField !== undefined));
3005
+ if (includeAvailableFields) {
3006
+ fieldMapperKeyProps.availableFields = (_c = (_b = props.availableFields) === null || _b === void 0 ? void 0 : _b.slice()) !== null && _c !== void 0 ? _c : [];
3007
+ }
3008
+ if (includeSelectedField) {
3009
+ fieldMapperKeyProps.selectedField = Object.assign({}, props.selectedField);
3010
+ }
3011
+ if (React__default["default"].isValidElement(child)
3012
+ && (includeAvailableFields
3013
+ || includeSelectedField)) {
3014
+ child = React__default["default"].cloneElement(child, fieldMapperKeyProps);
3015
+ }
3016
+ wrappedEl = (React__default["default"].createElement("div", { className: "field-mapper-key-container" }, child));
3017
+ break;
3018
+ case FieldMapperValue:
3019
+ includePipedTextItems = (!Array.isArray(child.props.pipedTextItems)
3020
+ && (((_d = props.pipedTextItems) === null || _d === void 0 ? void 0 : _d.length) > 0));
3021
+ includeOnChange = (((typeof child.props.onChange) !== 'function')
3022
+ && ((typeof props.onChange) === 'function'));
3023
+ if (includePipedTextItems) {
3024
+ fieldMapperValueProps.pipedTextItems = props.pipedTextItems;
3025
+ }
3026
+ if (includeOnChange) {
3027
+ fieldMapperValueProps.onChange = function (value) {
3028
+ props.onChange(props.selectedField, value);
3029
+ };
3030
+ }
3031
+ if (React__default["default"].isValidElement(child)
3032
+ && includePipedTextItems) {
3033
+ child = React__default["default"].cloneElement(child, fieldMapperValueProps);
3034
+ }
3035
+ wrappedEl = (React__default["default"].createElement("div", { className: "field-mapper-value-container" }, child));
3036
+ break;
3037
+ default:
3038
+ wrappedEl = child;
3039
+ }
3040
+ return wrappedEl;
3041
+ }
3042
+ });
3043
+
3044
+ var MISSING_TRANSLATION_WARNING = '{{MISSING_I18N_STRING}}';
3045
+ var FieldMapper = React__default["default"].forwardRef(function FieldMapper(props, ref) {
3046
+ var _a, _b, _c, _d, _e, _f;
3047
+ return (React__default["default"].createElement("div", { className: 'field-mapper ' + ((_a = props.className) !== null && _a !== void 0 ? _a : ''), ref: ref },
3048
+ hasHeaderRow() && (React__default["default"].createElement("div", { className: "field-mapper-row-container field-mapper-header-row" },
3049
+ React__default["default"].createElement(FieldMapperRow, { showRemove: false },
3050
+ React__default["default"].createElement(FieldMapperKey, null,
3051
+ React__default["default"].createElement("div", { className: "field-mapper-header-cell field-mapper-key-header" }, (_b = props.fieldKeysHeaderText) !== null && _b !== void 0 ? _b : '')),
3052
+ React__default["default"].createElement(FieldMapperValue, null,
3053
+ React__default["default"].createElement("div", { className: "field-mapper-header-cell field-mapper-value-header" }, (_c = props.fieldValuesHeaderText) !== null && _c !== void 0 ? _c : ''))))),
3054
+ React__default["default"].createElement("div", { className: "field-mapper-row-container" }, React__default["default"].Children.map(props.children, function (child) {
3055
+ return getWrappedFieldRow(child);
3056
+ })),
3057
+ React__default["default"].createElement("div", { className: "add-field-button-container" }, isAddFieldDisabled()
3058
+ ? (React__default["default"].createElement(uiReact.Button, { disabled: true, kind: "secondary", className: "add-field-button" },
3059
+ React__default["default"].createElement("div", { className: "add-field-icon" },
3060
+ React__default["default"].createElement(icons.AddIcon, null)),
3061
+ React__default["default"].createElement("div", { className: "add-field-button-label" }, (_d = props.addFieldLabel) !== null && _d !== void 0 ? _d : MISSING_TRANSLATION_WARNING)))
3062
+ : (React__default["default"].createElement(uiReact.Dropdown, null,
3063
+ React__default["default"].createElement(uiReact.DropdownButton, null,
3064
+ React__default["default"].createElement(uiReact.Button, { className: "add-field-button", kind: "secondary" },
3065
+ React__default["default"].createElement("div", { className: "add-field-icon" },
3066
+ React__default["default"].createElement(icons.AddIcon, null)),
3067
+ React__default["default"].createElement("div", { className: "add-field-button-label" }, (_e = props.addFieldLabel) !== null && _e !== void 0 ? _e : MISSING_TRANSLATION_WARNING))),
3068
+ React__default["default"].createElement(uiReact.DropdownList, null, (_f = props.availableFields) === null || _f === void 0 ? void 0 : _f.map(function (fieldItem) {
3069
+ return (React__default["default"].createElement(uiReact.DropdownOption, { key: fieldItem.key, value: fieldItem.value, label: fieldItem.label, onSelect: function ($e) {
3070
+ handleDropdownSelect(fieldItem.value);
3071
+ } }));
3072
+ })))))));
3073
+ function hasHeaderRow() {
3074
+ return (isString(props.fieldKeysHeaderText)
3075
+ || isString(props.fieldValuesHeaderText));
3076
+ }
3077
+ function getWrappedFieldRow(child) {
3078
+ var _a, _b, _c;
3079
+ var wrappedEl;
3080
+ var fieldMapperRowProps;
3081
+ var includeAvailableFields, includeOnFieldRemove, includePipedTextItems, includeOnFieldValueChange, includeShowRemove;
3082
+ fieldMapperRowProps = {};
3083
+ switch (child.type) {
3084
+ case FieldMapperRow:
3085
+ wrappedEl = child;
3086
+ break;
3087
+ default:
3088
+ wrappedEl = (React__default["default"].createElement(FieldMapperRow, null, child));
3089
+ }
3090
+ includeAvailableFields = (!Array.isArray(wrappedEl.props.availableFields)
3091
+ && (((_a = props.availableFields) === null || _a === void 0 ? void 0 : _a.length) > 0));
3092
+ includeOnFieldRemove = (((typeof wrappedEl.props.onFieldRemove) !== 'function')
3093
+ && ((typeof props.onFieldRemove) === 'function'));
3094
+ includePipedTextItems = (!Array.isArray(wrappedEl.props.pipedTextItems)
3095
+ && (((_b = props.pipedTextItems) === null || _b === void 0 ? void 0 : _b.length) > 0));
3096
+ includeOnFieldValueChange = (((typeof wrappedEl.props.onChange) !== 'function')
3097
+ && (typeof props.onFieldValueChange === 'function'));
3098
+ includeShowRemove = (((typeof wrappedEl.props.showRemove !== 'boolean'))
3099
+ && ((typeof ((_c = child.props.selectedField) === null || _c === void 0 ? void 0 : _c.required)) === 'boolean'));
3100
+ if (includeAvailableFields) {
3101
+ fieldMapperRowProps.availableFields = props.availableFields.slice();
3102
+ }
3103
+ if (includeOnFieldRemove) {
3104
+ fieldMapperRowProps.onFieldRemove = function (fieldItem) {
3105
+ return props.onFieldRemove(fieldItem);
3106
+ };
3107
+ }
3108
+ if (includePipedTextItems) {
3109
+ fieldMapperRowProps.pipedTextItems = props.pipedTextItems;
3110
+ }
3111
+ if (includeOnFieldValueChange) {
3112
+ fieldMapperRowProps.onChange = function (fieldItem, inputValue) {
3113
+ return props.onFieldValueChange(fieldItem, inputValue);
3114
+ };
3115
+ }
3116
+ if (includeShowRemove) {
3117
+ fieldMapperRowProps.showRemove = !child.props.selectedField.required;
3118
+ }
3119
+ wrappedEl = React__default["default"].cloneElement(wrappedEl, fieldMapperRowProps);
3120
+ return wrappedEl;
3121
+ }
3122
+ function handleDropdownSelect(value) {
3123
+ var foundFieldMapperItem;
3124
+ foundFieldMapperItem = props.availableFields.find(function (availableField) {
3125
+ return availableField.value === value;
3126
+ });
3127
+ if (foundFieldMapperItem) {
3128
+ props.onFieldAdd(foundFieldMapperItem);
3129
+ }
3130
+ }
3131
+ function isAddFieldDisabled() {
3132
+ var hasAvailableFields;
3133
+ hasAvailableFields = ((Array.isArray(props.availableFields))
3134
+ && (props.availableFields.length > 0));
3135
+ return !hasAvailableFields;
3136
+ }
3137
+ });
3138
+
3139
+ exports.CaptureEvent = CaptureEvent;
3140
+ exports.CopyText = CopyText;
2352
3141
  exports.DynamicSearchInput = DynamicSearchInput;
2353
3142
  exports.FieldItem = FieldItem;
3143
+ exports.FieldMapper = FieldMapper;
3144
+ exports.FieldMapperKey = FieldMapperKey;
3145
+ exports.FieldMapperRow = FieldMapperRow;
3146
+ exports.FieldMapperValue = FieldMapperValue;
2354
3147
  exports.MultiselectDropdown = MultiselectDropdown;
2355
3148
  exports.PipedTextInput = PipedTextInput;
2356
3149
  exports.PipedTextSelect = PipedTextSelect;