@integry/sdk 0.0.82 → 0.0.83
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/@babel/runtime/regenerator/index.js","../../src/extensions/HMAC.ts","../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../node_modules/preact/dist/preact.module.js","../../node_modules/htm/dist/htm.mjs","../../node_modules/htm/preact/index.mjs","../../node_modules/unfetch/dist/unfetch.module.js","../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../node_modules/@babel/runtime/helpers/esm/construct.js","../../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../../src/extensions/IntegryAPIError.ts","../../src/modules/api/responseHandler.ts","../../src/modules/api/index.ts","../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../node_modules/preact/hooks/dist/hooks.module.js","../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../node_modules/superstruct/lib/index.es.js","../../src/contexts/AppContext.ts","../../node_modules/unistore/dist/unistore.es.js","../../node_modules/unistore/devtools.js","../../src/store/initialState.ts","../../src/store/actionFunctions.ts","../../src/store/index.ts","../../src/interfaces/index.ts","../../node_modules/style-inject/dist/style-inject.es.js","../../src/components/Loader/index.ts","../../src/types/utils.ts","../../node_modules/classnames/index.js","../../src/components/Tooltip/index.ts","../../src/components/ThreeDotLoader/index.ts","../../src/components/Button/index.ts","../../src/components/ErrorPage/index.ts","../../src/hooks/useElementResize.ts","../../src/hooks/useEventListener.ts","../../src/features/appdir/StepNavigation/NavItem.ts","../../src/hooks/useOnClickOutside.ts","../../src/features/appdir/StepNavigation/CollapsedSteps.ts","../../src/features/appdir/StepNavigation/index.ts","../../src/hooks/useDebounce.ts","../../src/components/RadioGroup/Radio.ts","../../src/components/ErrorMessage/index.ts","../../src/components/Label/index.ts","../../src/utils/isBrowser.ts","../../src/features/common/AuthSelector/index.ts","../../src/utils/isAuthMessage.ts","../../src/utils/popup.ts","../../node_modules/dompurify/dist/purify.js","../../src/components/Listbox/ListBoxItem.ts","../../src/components/Listbox/index.ts","../../src/components/CheckboxGroup/Checkbox.ts","../../src/components/LargeLoader/index.ts","../../src/components/BasicSelect/index.ts","../../src/features/common/MappingUI/index.ts","../../src/components/Input/BaseInput/index.ts","../../src/components/Input/Input/index.ts","../../src/components/Input/DateInput/index.ts","../../src/components/Input/PasswordInput/index.ts","../../src/components/TextArea/index.ts","../../src/utils/copyToClipboard.ts","../../src/components/RadioGroup/index.ts","../../src/features/templates/Step/index.ts","../../src/features/appdir/Steps/index.ts","../../src/features/appdir/Wrapper/index.ts","../../node_modules/fuzzysort/fuzzysort.js","../../src/features/templates/TemplateSearch/index.ts","../../src/components/TabBar/Tab.ts","../../src/components/TabBar/index.ts","../../src/components/Toggle/index.ts","../../src/types/index.ts","../../src/features/integrations/IntegrationsList/index.ts","../../src/utils/datetime.ts","../../src/features/templates/TemplatesView/index.ts","../../src/features/common/StepNavigation/NavItem.ts","../../src/features/common/StepNavigation/index.ts","../../src/features/templates/Steps/index.ts","../../src/features/templates/TemplateForm/index.ts","../../src/features/templates/Template/index.ts","../../src/components/Modal/index.ts","../../src/features/common/Container/index.ts","../../src/modules/event-emitter/runners/default.ts","../../src/modules/event-emitter/runners/abstract.ts","../../node_modules/@babel/runtime/helpers/esm/get.js","../../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../../src/modules/event-emitter/runners/ntimes.ts","../../src/modules/event-emitter/index.ts","../../src/index.ts","../../src/index.umd.ts"],"sourcesContent":["export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\"use strict\";\n\nvar Op = Object.prototype;\nvar hasOwn = Op.hasOwnProperty;\nvar undefined; // More compressible than void 0.\nvar $Symbol = typeof Symbol === \"function\" ? Symbol : {};\nvar iteratorSymbol = $Symbol.iterator || \"@@iterator\";\nvar asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\nvar toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\nfunction wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n}\n\n// Try/catch helper to minimize deoptimizations. Returns a completion\n// record like context.tryEntries[i].completion. This interface could\n// have been (and was previously) designed to take a closure to be\n// invoked without arguments, but in all the cases we care about we\n// already have an existing method we want to call, so there's no need\n// to create a new function object. We can even get away with assuming\n// the method takes exactly one argument, since that happens to be true\n// in every case, so we don't have to touch the arguments object. The\n// only additional allocation required is the completion record, which\n// has a stable shape and so hopefully should be cheap to allocate.\nfunction tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n}\n\nvar GenStateSuspendedStart = \"suspendedStart\";\nvar GenStateSuspendedYield = \"suspendedYield\";\nvar GenStateExecuting = \"executing\";\nvar GenStateCompleted = \"completed\";\n\n// Returning this object from the innerFn has the same effect as\n// breaking out of the dispatch switch statement.\nvar ContinueSentinel = {};\n\n// Dummy constructor functions that we use as the .constructor and\n// .constructor.prototype properties for functions that return Generator\n// objects. For full spec compliance, you may wish to configure your\n// minifier not to mangle the names of these two functions.\nfunction Generator() {}\nfunction GeneratorFunction() {}\nfunction GeneratorFunctionPrototype() {}\n\n// This is a polyfill for %IteratorPrototype% for environments that\n// don't natively support it.\nvar IteratorPrototype = {};\nIteratorPrototype[iteratorSymbol] = function () {\n return this;\n};\n\nvar getProto = Object.getPrototypeOf;\nvar NativeIteratorPrototype = getProto && getProto(getProto(values([])));\nif (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n}\n\nvar Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\nGeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\nGeneratorFunctionPrototype.constructor = GeneratorFunction;\nGeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n// Helper for defining the .next, .throw, and .return methods of the\n// Iterator interface in terms of a single ._invoke method.\nfunction defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n}\n\nfunction isGeneratorFunction (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n};\n\nfunction mark (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n};\n\n// Within the body of any async function, `await x` is transformed to\n// `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n// `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n// meant to be awaited.\nfunction awrap (arg) {\n return { __await: arg };\n};\n\nfunction AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n}\n\ndefineIteratorMethods(AsyncIterator.prototype);\nAsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n};\n\n// Note that simple async functions are implemented on top of\n// AsyncIterator objects; they just return a Promise for the value of\n// the final result produced by the iterator.\n function async (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n};\n\nfunction makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n}\n\n// Call delegate.iterator[context.method](context.arg) and handle the\n// result, either by returning a { value, done } result from the\n// delegate iterator, or by modifying context.method and context.arg,\n// setting context.delegate to null, and returning the ContinueSentinel.\nfunction maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n}\n\n// Define Generator.prototype.{next,throw,return} in terms of the\n// unified ._invoke helper method.\ndefineIteratorMethods(Gp);\n\nGp[toStringTagSymbol] = \"Generator\";\n\n// A Generator should always return itself as the iterator object when the\n// @@iterator function is called on it. Some browsers' implementations of the\n// iterator prototype chain incorrectly implement this, causing the Generator\n// object to not be returned from this call. This ensures that doesn't happen.\n// See https://github.com/facebook/regenerator/issues/274 for more details.\nGp[iteratorSymbol] = function() {\n return this;\n};\n\nGp.toString = function() {\n return \"[object Generator]\";\n};\n\nfunction pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n}\n\nfunction resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n}\n\nfunction Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n}\n\nfunction keys (object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n};\n\nfunction values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n}\n\nfunction doneResult() {\n return { value: undefined, done: true };\n}\n\nContext.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n};\n\n// Export a default namespace that plays well with Rollup\nexport default {\n wrap,\n isGeneratorFunction,\n AsyncIterator,\n mark,\n awrap,\n async,\n keys,\n values\n};\n","/**\n *\n * @param key Key to sign hash\n * @param message Message to hash\n * @returns {string}\n */\nexport async function HMAC(message: string, key: string): Promise<string> {\n const g = (str: string) =>\n new Uint8Array(\n [...unescape(encodeURIComponent(str))].map((c) => c.charCodeAt(0)),\n );\n const k = g(key);\n const m = g(message);\n const c = await crypto.subtle.importKey(\n 'raw',\n k,\n { name: 'HMAC', hash: 'SHA-256' },\n true,\n ['sign'],\n );\n const s = await crypto.subtle.sign('HMAC', c, m);\n return [...new Uint8Array(s)]\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n","export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","var n,l,u,t,i,o,r,f={},e=[],c=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord/i;function s(n,l){for(var u in l)n[u]=l[u];return n}function a(n){var l=n.parentNode;l&&l.removeChild(n)}function h(n,l,u){var t,i=arguments,o={};for(t in l)\"key\"!==t&&\"ref\"!==t&&(o[t]=l[t]);if(arguments.length>3)for(u=[u],t=3;t<arguments.length;t++)u.push(i[t]);if(null!=u&&(o.children=u),\"function\"==typeof n&&null!=n.defaultProps)for(t in n.defaultProps)void 0===o[t]&&(o[t]=n.defaultProps[t]);return v(n,o,l&&l.key,l&&l.ref)}function v(l,u,t,i){var o={type:l,props:u,key:t,ref:i,__k:null,__:null,__b:0,__e:null,__d:null,__c:null,constructor:void 0};return n.vnode&&n.vnode(o),o}function p(){return{}}function y(n){return n.children}function d(n,l){this.props=n,this.context=l}function m(n,l){if(null==l)return n.__?m(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?m(n):null}function w(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return w(n)}}function g(l){(!l.__d&&(l.__d=!0)&&1===u.push(l)||i!==n.debounceRendering)&&((i=n.debounceRendering)||t)(k)}function k(){var n,l,t,i,o,r,f;for(u.sort(function(n,l){return l.__v.__b-n.__v.__b});n=u.pop();)n.__d&&(t=void 0,i=void 0,r=(o=(l=n).__v).__e,(f=l.__P)&&(t=[],i=T(f,o,s({},o),l.__n,void 0!==f.ownerSVGElement,null,t,null==r?m(o):r),$(t,o),i!=r&&w(o)))}function _(n,l,u,t,i,o,r,c,s){var h,v,p,y,d,w,g,k=u&&u.__k||e,_=k.length;if(c==f&&(c=null!=o?o[0]:_?m(u,0):null),h=0,l.__k=b(l.__k,function(u){if(null!=u){if(u.__=l,u.__b=l.__b+1,null===(p=k[h])||p&&u.key==p.key&&u.type===p.type)k[h]=void 0;else for(v=0;v<_;v++){if((p=k[v])&&u.key==p.key&&u.type===p.type){k[v]=void 0;break}p=null}if(y=T(n,u,p=p||f,t,i,o,r,c,s),(v=u.ref)&&p.ref!=v&&(g||(g=[]),p.ref&&g.push(p.ref,null,u),g.push(v,u.__c||y,u)),null!=y){if(null==w&&(w=y),null!=u.__d)y=u.__d,u.__d=null;else if(o==p||y!=c||null==y.parentNode){n:if(null==c||c.parentNode!==n)n.appendChild(y);else{for(d=c,v=0;(d=d.nextSibling)&&v<_;v+=2)if(d==y)break n;n.insertBefore(y,c)}\"option\"==l.type&&(n.value=\"\")}c=y.nextSibling,\"function\"==typeof l.type&&(l.__d=y)}}return h++,u}),l.__e=w,null!=o&&\"function\"!=typeof l.type)for(h=o.length;h--;)null!=o[h]&&a(o[h]);for(h=_;h--;)null!=k[h]&&A(k[h],k[h]);if(g)for(h=0;h<g.length;h++)z(g[h],g[++h],g[++h])}function b(n,l,u){if(null==u&&(u=[]),null==n||\"boolean\"==typeof n)l&&u.push(l(null));else if(Array.isArray(n))for(var t=0;t<n.length;t++)b(n[t],l,u);else u.push(l?l(\"string\"==typeof n||\"number\"==typeof n?v(null,n,null,null):null!=n.__e||null!=n.__c?v(n.type,n.props,n.key,null):n):n);return u}function x(n,l,u,t,i){var o;for(o in u)o in l||P(n,o,null,u[o],t);for(o in l)i&&\"function\"!=typeof l[o]||\"value\"===o||\"checked\"===o||u[o]===l[o]||P(n,o,l[o],u[o],t)}function C(n,l,u){\"-\"===l[0]?n.setProperty(l,u):n[l]=\"number\"==typeof u&&!1===c.test(l)?u+\"px\":null==u?\"\":u}function P(n,l,u,t,i){var o,r,f,e,c;if(i?\"className\"===l&&(l=\"class\"):\"class\"===l&&(l=\"className\"),\"key\"===l||\"children\"===l);else if(\"style\"===l)if(o=n.style,\"string\"==typeof u)o.cssText=u;else{if(\"string\"==typeof t&&(o.cssText=\"\",t=null),t)for(r in t)u&&r in u||C(o,r,\"\");if(u)for(f in u)t&&u[f]===t[f]||C(o,f,u[f])}else\"o\"===l[0]&&\"n\"===l[1]?(e=l!==(l=l.replace(/Capture$/,\"\")),c=l.toLowerCase(),l=(c in n?c:l).slice(2),u?(t||n.addEventListener(l,N,e),(n.l||(n.l={}))[l]=u):n.removeEventListener(l,N,e)):\"list\"!==l&&\"tagName\"!==l&&\"form\"!==l&&\"type\"!==l&&!i&&l in n?n[l]=null==u?\"\":u:\"function\"!=typeof u&&\"dangerouslySetInnerHTML\"!==l&&(l!==(l=l.replace(/^xlink:?/,\"\"))?null==u||!1===u?n.removeAttributeNS(\"http://www.w3.org/1999/xlink\",l.toLowerCase()):n.setAttributeNS(\"http://www.w3.org/1999/xlink\",l.toLowerCase(),u):null==u||!1===u?n.removeAttribute(l):n.setAttribute(l,u))}function N(l){this.l[l.type](n.event?n.event(l):l)}function T(l,u,t,i,o,r,f,e,c){var a,h,v,p,m,w,g,k,x,C,P=u.type;if(void 0!==u.constructor)return null;(a=n.__b)&&a(u);try{n:if(\"function\"==typeof P){if(k=u.props,x=(a=P.contextType)&&i[a.__c],C=a?x?x.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(\"prototype\"in P&&P.prototype.render?u.__c=h=new P(k,C):(u.__c=h=new d(k,C),h.constructor=P,h.render=D),x&&x.sub(h),h.props=k,h.state||(h.state={}),h.context=C,h.__n=i,v=h.__d=!0,h.__h=[]),null==h.__s&&(h.__s=h.state),null!=P.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=s({},h.__s)),s(h.__s,P.getDerivedStateFromProps(k,h.__s))),p=h.props,m=h.state,v)null==P.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==P.getDerivedStateFromProps&&k!==p&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(k,C),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(k,h.__s,C)){for(h.props=k,h.state=h.__s,h.__d=!1,h.__v=u,u.__e=t.__e,u.__k=t.__k,h.__h.length&&f.push(h),a=0;a<u.__k.length;a++)u.__k[a]&&(u.__k[a].__=u);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(k,h.__s,C),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(p,m,w)})}h.context=C,h.props=k,h.state=h.__s,(a=n.__r)&&a(u),h.__d=!1,h.__v=u,h.__P=l,a=h.render(h.props,h.state,h.context),u.__k=b(null!=a&&a.type==y&&null==a.key?a.props.children:a),null!=h.getChildContext&&(i=s(s({},i),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(w=h.getSnapshotBeforeUpdate(p,m)),_(l,u,t,i,o,r,f,e,c),h.base=u.__e,h.__h.length&&f.push(h),g&&(h.__E=h.__=null),h.__e=null}else u.__e=j(t.__e,u,t,i,o,r,f,c);(a=n.diffed)&&a(u)}catch(l){n.__e(l,u,t)}return u.__e}function $(l,u){n.__c&&n.__c(u,l),l.some(function(u){try{l=u.__h,u.__h=[],l.some(function(n){n.call(u)})}catch(l){n.__e(l,u.__v)}})}function j(n,l,u,t,i,o,r,c){var s,a,h,v,p,y=u.props,d=l.props;if(i=\"svg\"===l.type||i,null==n&&null!=o)for(s=0;s<o.length;s++)if(null!=(a=o[s])&&(null===l.type?3===a.nodeType:a.localName===l.type)){n=a,o[s]=null;break}if(null==n){if(null===l.type)return document.createTextNode(d);n=i?document.createElementNS(\"http://www.w3.org/2000/svg\",l.type):document.createElement(l.type),o=null}if(null===l.type)null!=o&&(o[o.indexOf(n)]=null),y===d||c||n.data==d||(n.data=d);else if(l!==u){if(null!=o&&(o=e.slice.call(n.childNodes)),h=(y=u.props||f).dangerouslySetInnerHTML,v=d.dangerouslySetInnerHTML,!c){if(y===f)for(y={},p=0;p<n.attributes.length;p++)y[n.attributes[p].name]=n.attributes[p].value;(v||h)&&(v&&h&&v.__html==h.__html||(n.innerHTML=v&&v.__html||\"\"))}x(n,d,y,i,c),l.__k=l.props.children,v||_(n,l,u,t,\"foreignObject\"!==l.type&&i,o,r,f,c),c||(\"value\"in d&&void 0!==d.value&&d.value!==n.value&&(n.value=null==d.value?\"\":d.value),\"checked\"in d&&void 0!==d.checked&&d.checked!==n.checked&&(n.checked=d.checked))}return n}function z(l,u,t){try{\"function\"==typeof l?l(u):l.current=u}catch(l){n.__e(l,t)}}function A(l,u,t){var i,o,r;if(n.unmount&&n.unmount(l),(i=l.ref)&&(i.current&&i.current!==l.__e||z(i,null,u)),t||\"function\"==typeof l.type||(t=null!=(o=l.__e)),l.__e=l.__d=null,null!=(i=l.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(l){n.__e(l,u)}i.base=i.__P=null}if(i=l.__k)for(r=0;r<i.length;r++)i[r]&&A(i[r],u,t);null!=o&&a(o)}function D(n,l,u){return this.constructor(n,u)}function E(l,u,t){var i,r,c;n.__&&n.__(l,u),r=(i=t===o)?null:t&&t.__k||u.__k,l=h(y,null,[l]),c=[],T(u,(i?u:t||u).__k=l,r||f,f,void 0!==u.ownerSVGElement,t&&!i?[t]:r?null:e.slice.call(u.childNodes),c,t||f,i),$(c,l)}function H(n,l){E(n,l,o)}function I(n,l){return l=s(s({},n.props),l),arguments.length>2&&(l.children=e.slice.call(arguments,2)),v(n.type,l,l.key||n.key,l.ref||n.ref)}function L(n){var l={},u={__c:\"__cC\"+r++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var t,i=this;return this.getChildContext||(t=[],this.getChildContext=function(){return l[u.__c]=i,l},this.shouldComponentUpdate=function(l){n.value!==l.value&&t.some(function(n){n.context=l.value,g(n)})},this.sub=function(n){t.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){t.splice(t.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Consumer.contextType=u,u}n={__e:function(n,l){for(var u,t;l=l.__;)if((u=l.__c)&&!u.__)try{if(u.constructor&&null!=u.constructor.getDerivedStateFromError&&(t=!0,u.setState(u.constructor.getDerivedStateFromError(n))),null!=u.componentDidCatch&&(t=!0,u.componentDidCatch(n)),t)return g(u.__E=u)}catch(l){n=l}throw n}},l=function(n){return null!=n&&void 0===n.constructor},d.prototype.setState=function(n,l){var u;u=this.__s!==this.state?this.__s:this.__s=s({},this.state),\"function\"==typeof n&&(n=n(u,this.props)),n&&s(u,n),null!=n&&this.__v&&(this.__e=!1,l&&this.__h.push(l),g(this))},d.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),g(this))},d.prototype.render=y,u=[],t=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,o=f,r=0;export{E as render,H as hydrate,h as createElement,h,y as Fragment,p as createRef,l as isValidElement,d as Component,I as cloneElement,L as createContext,b as toChildArray,A as _unmount,n as options};\n//# sourceMappingURL=preact.module.js.map\n","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import{h as r,Component as o,render as t}from\"preact\";export{h,render,Component}from\"preact\";import e from\"htm\";var m=e.bind(r);export{m as html};\n","export default function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(s.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}\n//# sourceMappingURL=unfetch.module.js.map\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import { UnfetchResponse } from '../types';\n\n/**\n * Extend default Error class\n */\nclass IntegryAPIError extends Error {\n statusCode: number | undefined;\n\n response: UnfetchResponse | undefined;\n\n constructor(errorMessage: string, response?: UnfetchResponse) {\n super(errorMessage);\n this.name = this.constructor.name;\n this.statusCode = response?.status;\n this.response = response;\n }\n}\n\nexport { IntegryAPIError };\n","/* eslint-disable no-console */\n\nimport { UnfetchResponse } from '../../types';\nimport { IntegryAPIError } from '../../extensions/IntegryAPIError';\n\nexport const ResponseHandler = async <T>(\n response: UnfetchResponse,\n): Promise<{\n data: T | null;\n status: number;\n}> => {\n const debugMode = !!process.env.DEBUG;\n\n if (response.ok) {\n try {\n const parsedResponse: T = await response.json();\n if (debugMode) console.log(parsedResponse);\n return {\n data: parsedResponse,\n status: response.status,\n };\n } catch (error) {\n if (debugMode) console.log('Response is not in json');\n return {\n data: null,\n status: response.status,\n };\n }\n } else if (response.status === 405) {\n return {\n data: await response.json(),\n status: response.status,\n };\n }\n if (debugMode) console.log('Received a non-2xx status code');\n const error = new IntegryAPIError(response.statusText, response);\n return Promise.reject(error);\n};\n","/**\n * Simple API module\n */\n\nimport fetch from 'unfetch';\n\nimport {\n APIConfig,\n BundleResponse,\n IntegrationSaveResponse,\n IntegrationStatusResponse,\n SaveOrUpdateIntegrationBody,\n TemplateResponse,\n IntegrationResponse,\n TemplateStep,\n} from '@/interfaces';\n\nimport { ResponseHandler } from './responseHandler';\n\nclass IntegryAPI {\n private config: APIConfig;\n\n constructor(config: APIConfig) {\n this.config = config;\n }\n\n static addUrlSearchParams = (\n url: URL,\n paramList: Record<string, string | boolean | null>,\n ) =>\n Object.keys(paramList).map(\n (objKey) =>\n paramList[objKey] !== undefined &&\n url.searchParams.append(objKey, `${paramList[objKey]}`),\n );\n\n public getTemplate = async (\n templateId: number,\n ): Promise<TemplateResponse | null> => {\n const url = new URL(`${this.config.baseUrlv2}/template/${templateId}/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n self_api_key: this.config.apiKey || null,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<TemplateResponse>(data),\n );\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getAuthUrl = (authorizationTypeId: number): string => {\n const url = new URL(\n `${this.config.baseUrl}/auth/login/${authorizationTypeId}/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n return url.toString();\n };\n\n public getTemplateStep = async (\n stepId: number,\n ): Promise<TemplateStep | null> => {\n const url = new URL(`${this.config.baseUrl}/template_step/${stepId}/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n self_api_key: this.config.apiKey || null,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<TemplateStep>(data),\n );\n\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public verifyOAuth = async (authId: number): Promise<boolean | null> => {\n const url = new URL(\n `${this.config.baseUrl}/${this.config.oauthVerifyPath}`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n authorization_id: `${authId}`,\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), { method: 'POST' }).then(\n ResponseHandler,\n );\n return !!response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public deleteAuth = async (\n authId: number,\n ): Promise<{\n data: string | null;\n status: number;\n } | null> => {\n const url = new URL(`${this.config.baseUrl}/connected-accounts/${authId}`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n }).then((data) => ResponseHandler<string>(data));\n\n return {\n status: response.status,\n data: response.data,\n };\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public callDynamicDataEndpoint = async <T>(\n url: URL,\n endpointData: Record<string, string> = {},\n ): Promise<T | null> => {\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n ...endpointData,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<T>(data),\n );\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getTemplateListing = async (\n bundleId: string,\n ): Promise<BundleResponse | null> => {\n const url = new URL(`${this.config.baseUrl}/bundle/${bundleId}/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<BundleResponse>(data),\n );\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public saveIntegration = async (\n body: SaveOrUpdateIntegrationBody,\n ): Promise<IntegrationSaveResponse | null> => {\n const url = new URL(`${this.config.baseUrlv2}/integration/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n async: false,\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n activate: true,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then((data) => ResponseHandler<IntegrationSaveResponse>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public updateIntegration = async (\n integrationId: string,\n body: SaveOrUpdateIntegrationBody,\n ): Promise<boolean | null> => {\n const url = new URL(\n `${this.config.baseUrlv2}/integration/${integrationId}/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n async: false,\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n activate: true,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'PUT',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then((data) => ResponseHandler<boolean>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public deleteIntegration = async (\n integrationId: number,\n ): Promise<boolean | null> => {\n const url = new URL(\n `${this.config.baseUrl}/setup/template/${integrationId}/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n }).then((data) => ResponseHandler<boolean>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public toggleIntegration = async (\n integrationId: number,\n activate: boolean,\n ): Promise<string | null> => {\n const url = new URL(\n `${this.config.baseUrlv2}/integration/${integrationId}/${\n activate ? 'enable' : 'disable'\n }/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'PUT',\n }).then((data) => ResponseHandler<string>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getIntegrationById = async (\n integrationId: number,\n ): Promise<IntegrationResponse | null> => {\n const url = new URL(\n `${this.config.baseUrlv2}/integration/${integrationId}`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'GET',\n }).then((data) => ResponseHandler<IntegrationResponse>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getIntegrationStatuses = async (\n integrationIds: number[],\n ): Promise<IntegrationStatusResponse | null> => {\n const url = new URL(`${this.config.baseUrlv2}/integration_status/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'PUT',\n body: JSON.stringify(integrationIds),\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then(ResponseHandler);\n return response;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n}\n\nexport { IntegryAPI };\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import{options as n}from\"preact\";var t,u,r,i=[],o=n.__r,f=n.diffed,c=n.__c,e=n.unmount;function a(t){n.__h&&n.__h(u);var r=u.__H||(u.__H={t:[],u:[]});return t>=r.t.length&&r.t.push({}),r.t[t]}function v(n){return m(E,n)}function m(n,r,i){var o=a(t++);return o.__c||(o.__c=u,o.i=[i?i(r):E(void 0,r),function(t){var u=n(o.i[0],t);o.i[0]!==u&&(o.i[0]=u,o.__c.setState({}))}]),o.i}function p(n,r){var i=a(t++);x(i.o,r)&&(i.i=n,i.o=r,u.__H.u.push(i))}function l(n,r){var i=a(t++);x(i.o,r)&&(i.i=n,i.o=r,u.__h.push(i))}function d(n){return y(function(){return{current:n}},[])}function s(n,t,u){l(function(){\"function\"==typeof n?n(t()):n&&(n.current=t())},null==u?u:u.concat(n))}function y(n,u){var r=a(t++);return x(r.o,u)?(r.o=u,r.v=n,r.i=n()):r.i}function T(n,t){return y(function(){return n},t)}function w(n){var r=u.context[n.__c];if(!r)return n.__;var i=a(t++);return null==i.i&&(i.i=!0,r.sub(u)),r.props.value}function A(t,u){n.useDebugValue&&n.useDebugValue(u?u(t):t)}function F(n){var r=a(t++),i=v();return r.i=n,u.componentDidCatch||(u.componentDidCatch=function(n){r.i&&r.i(n),i[1](n)}),[i[0],function(){i[1](void 0)}]}function _(){i.some(function(n){n.__P&&(n.__H.u.forEach(g),n.__H.u.forEach(q),n.__H.u=[])}),i=[]}function g(n){n.m&&n.m()}function q(n){var t=n.i();\"function\"==typeof t&&(n.m=t)}function x(n,t){return!n||t.some(function(t,u){return t!==n[u]})}function E(n,t){return\"function\"==typeof t?t(n):t}n.__r=function(n){o&&o(n),t=0,(u=n.__c).__H&&(u.__H.u.forEach(g),u.__H.u.forEach(q),u.__H.u=[])},n.diffed=function(t){f&&f(t);var u=t.__c;if(u){var o=u.__H;o&&o.u.length&&(1!==i.push(u)&&r===n.requestAnimationFrame||((r=n.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),cancelAnimationFrame(t),setTimeout(n)},r=setTimeout(u,100);\"undefined\"!=typeof window&&(t=requestAnimationFrame(u))})(_))}},n.__c=function(n,t){t.some(function(n){n.__h.forEach(g),n.__h=n.__h.filter(function(n){return!n.i||q(n)})}),c&&c(n,t)},n.unmount=function(n){e&&e(n);var t=n.__c;if(t){var u=t.__H;u&&u.t.forEach(function(n){return n.m&&n.m()})}};export{v as useState,m as useReducer,p as useEffect,l as useLayoutEffect,d as useRef,s as useImperativeHandle,y as useMemo,T as useCallback,w as useContext,A as useDebugValue,F as useErrorBoundary};\n//# sourceMappingURL=hooks.module.js.map\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","/**\n * A `StructFailure` represents a single specific failure in validation.\n */\n\n/**\n * `StructError` objects are thrown (or returned) when validation fails.\n *\n * Validation logic is design to exit early for maximum performance. The error\n * represents the first error encountered during validation. For more detail,\n * the `error.failures` property is a generator function that can be run to\n * continue validation and receive all the failures in the data.\n */\nclass StructError extends TypeError {\n constructor(failure, failures) {\n let cached;\n const {\n message,\n ...rest\n } = failure;\n const {\n path\n } = failure;\n const msg = path.length === 0 ? message : \"At path: \" + path.join('.') + \" -- \" + message;\n super(msg);\n Object.assign(this, rest);\n this.name = this.constructor.name;\n\n this.failures = () => {\n var _cached;\n\n return (_cached = cached) != null ? _cached : cached = [failure, ...failures()];\n };\n }\n\n}\n\n/**\n * Check if a value is an iterator.\n */\nfunction isIterable(x) {\n return isObject(x) && typeof x[Symbol.iterator] === 'function';\n}\n/**\n * Check if a value is a plain object.\n */\n\n\nfunction isObject(x) {\n return typeof x === 'object' && x != null;\n}\n/**\n * Check if a value is a plain object.\n */\n\nfunction isPlainObject(x) {\n if (Object.prototype.toString.call(x) !== '[object Object]') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(x);\n return prototype === null || prototype === Object.prototype;\n}\n/**\n * Return a value as a printable string.\n */\n\nfunction print(value) {\n return typeof value === 'string' ? JSON.stringify(value) : \"\" + value;\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\n\nfunction shiftIterator(input) {\n const {\n done,\n value\n } = input.next();\n return done ? undefined : value;\n}\n/**\n * Convert a single validation result to a failure.\n */\n\nfunction toFailure(result, context, struct, value) {\n if (result === true) {\n return;\n } else if (result === false) {\n result = {};\n } else if (typeof result === 'string') {\n result = {\n message: result\n };\n }\n\n const {\n path,\n branch\n } = context;\n const {\n type\n } = struct;\n const {\n refinement,\n message = \"Expected a value of type `\" + type + \"`\" + (refinement ? \" with refinement `\" + refinement + \"`\" : '') + \", but received: `\" + print(value) + \"`\"\n } = result;\n return {\n value,\n type,\n refinement,\n key: path[path.length - 1],\n path,\n branch,\n ...result,\n message\n };\n}\n/**\n * Convert a validation result to an iterable of failures.\n */\n\nfunction* toFailures(result, context, struct, value) {\n if (!isIterable(result)) {\n result = [result];\n }\n\n for (const r of result) {\n const failure = toFailure(r, context, struct, value);\n\n if (failure) {\n yield failure;\n }\n }\n}\n/**\n * Check a value against a struct, traversing deeply into nested values, and\n * returning an iterator of failures or success.\n */\n\nfunction* run(value, struct, options = {}) {\n const {\n path = [],\n branch = [value],\n coerce = false,\n mask = false\n } = options;\n const ctx = {\n path,\n branch\n };\n\n if (coerce) {\n value = struct.coercer(value, ctx);\n\n if (mask && struct.type !== 'type' && isObject(struct.schema) && isObject(value) && !Array.isArray(value)) {\n for (const key in value) {\n if (struct.schema[key] === undefined) {\n delete value[key];\n }\n }\n }\n }\n\n let valid = true;\n\n for (const failure of struct.validator(value, ctx)) {\n valid = false;\n yield [failure, undefined];\n }\n\n for (let [k, v, s] of struct.entries(value, ctx)) {\n const ts = run(v, s, {\n path: k === undefined ? path : [...path, k],\n branch: k === undefined ? branch : [...branch, v],\n coerce,\n mask\n });\n\n for (const t of ts) {\n if (t[0]) {\n valid = false;\n yield [t[0], undefined];\n } else if (coerce) {\n v = t[1];\n\n if (k === undefined) {\n value = v;\n } else if (value instanceof Map) {\n value.set(k, v);\n } else if (value instanceof Set) {\n value.add(v);\n } else if (isObject(value)) {\n value[k] = v;\n }\n }\n }\n }\n\n if (valid) {\n for (const failure of struct.refiner(value, ctx)) {\n valid = false;\n yield [failure, undefined];\n }\n }\n\n if (valid) {\n yield [undefined, value];\n }\n}\n\n/**\n * `Struct` objects encapsulate the validation logic for a specific type of\n * values. Once constructed, you use the `assert`, `is` or `validate` helpers to\n * validate unknown input data against the struct.\n */\n\nclass Struct {\n constructor(props) {\n const {\n type,\n schema,\n validator,\n refiner,\n coercer = value => value,\n entries = function* () {}\n } = props;\n this.type = type;\n this.schema = schema;\n this.entries = entries;\n this.coercer = coercer;\n\n if (validator) {\n this.validator = (value, context) => {\n const result = validator(value, context);\n return toFailures(result, context, this, value);\n };\n } else {\n this.validator = () => [];\n }\n\n if (refiner) {\n this.refiner = (value, context) => {\n const result = refiner(value, context);\n return toFailures(result, context, this, value);\n };\n } else {\n this.refiner = () => [];\n }\n }\n /**\n * Assert that a value passes the struct's validation, throwing if it doesn't.\n */\n\n\n assert(value) {\n return assert(value, this);\n }\n /**\n * Create a value with the struct's coercion logic, then validate it.\n */\n\n\n create(value) {\n return create(value, this);\n }\n /**\n * Check if a value passes the struct's validation.\n */\n\n\n is(value) {\n return is(value, this);\n }\n /**\n * Mask a value, coercing and validating it, but returning only the subset of\n * properties defined by the struct's schema.\n */\n\n\n mask(value) {\n return mask(value, this);\n }\n /**\n * Validate a value with the struct's validation logic, returning a tuple\n * representing the result.\n *\n * You may optionally pass `true` for the `withCoercion` argument to coerce\n * the value before attempting to validate it. If you do, the result will\n * contain the coerced result when successful.\n */\n\n\n validate(value, options = {}) {\n return validate(value, this, options);\n }\n\n}\n/**\n * Assert that a value passes a struct, throwing if it doesn't.\n */\n\nfunction assert(value, struct) {\n const result = validate(value, struct);\n\n if (result[0]) {\n throw result[0];\n }\n}\n/**\n * Create a value with the coercion logic of struct and validate it.\n */\n\nfunction create(value, struct) {\n const result = validate(value, struct, {\n coerce: true\n });\n\n if (result[0]) {\n throw result[0];\n } else {\n return result[1];\n }\n}\n/**\n * Mask a value, returning only the subset of properties defined by a struct.\n */\n\nfunction mask(value, struct) {\n const result = validate(value, struct, {\n coerce: true,\n mask: true\n });\n\n if (result[0]) {\n throw result[0];\n } else {\n return result[1];\n }\n}\n/**\n * Check if a value passes a struct.\n */\n\nfunction is(value, struct) {\n const result = validate(value, struct);\n return !result[0];\n}\n/**\n * Validate a value against a struct, returning an error if invalid, or the\n * value (with potential coercion) if valid.\n */\n\nfunction validate(value, struct, options = {}) {\n const tuples = run(value, struct, options);\n const tuple = shiftIterator(tuples);\n\n if (tuple[0]) {\n const error = new StructError(tuple[0], function* () {\n for (const t of tuples) {\n if (t[0]) {\n yield t[0];\n }\n }\n });\n return [error, undefined];\n } else {\n const v = tuple[1];\n return [undefined, v];\n }\n}\n\nfunction assign(...Structs) {\n const isType = Structs[0].type === 'type';\n const schemas = Structs.map(s => s.schema);\n const schema = Object.assign({}, ...schemas);\n return isType ? type(schema) : object(schema);\n}\n/**\n * Define a new struct type with a custom validation function.\n */\n\nfunction define(name, validator) {\n return new Struct({\n type: name,\n schema: null,\n validator\n });\n}\n/**\n * Create a new struct based on an existing struct, but the value is allowed to\n * be `undefined`. `log` will be called if the value is not `undefined`.\n */\n\nfunction deprecated(struct, log) {\n return new Struct({ ...struct,\n refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx),\n\n validator(value, ctx) {\n if (value === undefined) {\n return true;\n } else {\n log(value, ctx);\n return struct.validator(value, ctx);\n }\n }\n\n });\n}\n/**\n * Create a struct with dynamic validation logic.\n *\n * The callback will receive the value currently being validated, and must\n * return a struct object to validate it with. This can be useful to model\n * validation logic that changes based on its input.\n */\n\nfunction dynamic(fn) {\n return new Struct({\n type: 'dynamic',\n schema: null,\n\n *entries(value, ctx) {\n const struct = fn(value, ctx);\n yield* struct.entries(value, ctx);\n },\n\n validator(value, ctx) {\n const struct = fn(value, ctx);\n return struct.validator(value, ctx);\n },\n\n coercer(value, ctx) {\n const struct = fn(value, ctx);\n return struct.coercer(value, ctx);\n }\n\n });\n}\n/**\n * Create a struct with lazily evaluated validation logic.\n *\n * The first time validation is run with the struct, the callback will be called\n * and must return a struct object to use. This is useful for cases where you\n * want to have self-referential structs for nested data structures to avoid a\n * circular definition problem.\n */\n\nfunction lazy(fn) {\n let struct;\n return new Struct({\n type: 'lazy',\n schema: null,\n\n *entries(value, ctx) {\n var _struct;\n\n (_struct = struct) != null ? _struct : struct = fn();\n yield* struct.entries(value, ctx);\n },\n\n validator(value, ctx) {\n var _struct2;\n\n (_struct2 = struct) != null ? _struct2 : struct = fn();\n return struct.validator(value, ctx);\n },\n\n coercer(value, ctx) {\n var _struct3;\n\n (_struct3 = struct) != null ? _struct3 : struct = fn();\n return struct.coercer(value, ctx);\n }\n\n });\n}\n/**\n * Create a new struct based on an existing object struct, but excluding\n * specific properties.\n *\n * Like TypeScript's `Omit` utility.\n */\n\nfunction omit(struct, keys) {\n const {\n schema\n } = struct;\n const subschema = { ...schema\n };\n\n for (const key of keys) {\n delete subschema[key];\n }\n\n return object(subschema);\n}\n/**\n * Create a new struct based on an existing object struct, but with all of its\n * properties allowed to be `undefined`.\n *\n * Like TypeScript's `Partial` utility.\n */\n\nfunction partial(struct) {\n const schema = struct instanceof Struct ? { ...struct.schema\n } : { ...struct\n };\n\n for (const key in schema) {\n schema[key] = optional(schema[key]);\n }\n\n return object(schema);\n}\n/**\n * Create a new struct based on an existing object struct, but only including\n * specific properties.\n *\n * Like TypeScript's `Pick` utility.\n */\n\nfunction pick(struct, keys) {\n const {\n schema\n } = struct;\n const subschema = {};\n\n for (const key of keys) {\n subschema[key] = schema[key];\n }\n\n return object(subschema);\n}\n/**\n * Define a new struct type with a custom validation function.\n *\n * @deprecated This function has been renamed to `define`.\n */\n\nfunction struct(name, validator) {\n console.warn('superstruct@0.11 - The `struct` helper has been renamed to `define`.');\n return define(name, validator);\n}\n\n/**\n * Ensure that any value passes validation.\n */\n\nfunction any() {\n return define('any', () => true);\n}\nfunction array(Element) {\n return new Struct({\n type: 'array',\n schema: Element,\n\n *entries(value) {\n if (Element && Array.isArray(value)) {\n for (const [i, v] of value.entries()) {\n yield [i, v, Element];\n }\n }\n },\n\n coercer(value) {\n return Array.isArray(value) ? value.slice() : value;\n },\n\n validator(value) {\n return Array.isArray(value) || \"Expected an array value, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a boolean.\n */\n\nfunction boolean() {\n return define('boolean', value => {\n return typeof value === 'boolean';\n });\n}\n/**\n * Ensure that a value is a valid `Date`.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\n\nfunction date() {\n return define('date', value => {\n return value instanceof Date && !isNaN(value.getTime()) || \"Expected a valid `Date` object, but received: \" + print(value);\n });\n}\nfunction enums(values) {\n const schema = {};\n const description = values.map(v => print(v)).join();\n\n for (const key of values) {\n schema[key] = key;\n }\n\n return new Struct({\n type: 'enums',\n schema,\n\n validator(value) {\n return values.includes(value) || \"Expected one of `\" + description + \"`, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a function.\n */\n\nfunction func() {\n return define('func', value => {\n return typeof value === 'function' || \"Expected a function, but received: \" + print(value);\n });\n}\n/**\n * Ensure that a value is an instance of a specific class.\n */\n\nfunction instance(Class) {\n return define('instance', value => {\n return value instanceof Class || \"Expected a `\" + Class.name + \"` instance, but received: \" + print(value);\n });\n}\n/**\n * Ensure that a value is an integer.\n */\n\nfunction integer() {\n return define('integer', value => {\n return typeof value === 'number' && !isNaN(value) && Number.isInteger(value) || \"Expected an integer, but received: \" + print(value);\n });\n}\nfunction intersection(Structs) {\n return new Struct({\n type: 'intersection',\n schema: null,\n\n *entries(value, ctx) {\n for (const S of Structs) {\n yield* S.entries(value, ctx);\n }\n },\n\n *validator(value, ctx) {\n for (const S of Structs) {\n yield* S.validator(value, ctx);\n }\n },\n\n *refiner(value, ctx) {\n for (const S of Structs) {\n yield* S.refiner(value, ctx);\n }\n }\n\n });\n}\nfunction literal(constant) {\n const description = print(constant);\n const t = typeof constant;\n return new Struct({\n type: 'literal',\n schema: t === 'string' || t === 'number' || t === 'boolean' ? constant : null,\n\n validator(value) {\n return value === constant || \"Expected the literal `\" + description + \"`, but received: \" + print(value);\n }\n\n });\n}\nfunction map(Key, Value) {\n return new Struct({\n type: 'map',\n schema: null,\n\n *entries(value) {\n if (Key && Value && value instanceof Map) {\n for (const [k, v] of value.entries()) {\n yield [k, k, Key];\n yield [k, v, Value];\n }\n }\n },\n\n coercer(value) {\n return value instanceof Map ? new Map(value) : value;\n },\n\n validator(value) {\n return value instanceof Map || \"Expected a `Map` object, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that no value ever passes validation.\n */\n\nfunction never() {\n return define('never', () => false);\n}\n/**\n * Augment an existing struct to allow `null` values.\n */\n\nfunction nullable(struct) {\n return new Struct({ ...struct,\n validator: (value, ctx) => value === null || struct.validator(value, ctx),\n refiner: (value, ctx) => value === null || struct.refiner(value, ctx)\n });\n}\n/**\n * Ensure that a value is a number.\n */\n\nfunction number() {\n return define('number', value => {\n return typeof value === 'number' && !isNaN(value) || \"Expected a number, but received: \" + print(value);\n });\n}\nfunction object(schema) {\n const knowns = schema ? Object.keys(schema) : [];\n const Never = never();\n return new Struct({\n type: 'object',\n schema: schema ? schema : null,\n\n *entries(value) {\n if (schema && isObject(value)) {\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n yield [key, value[key], schema[key]];\n }\n\n for (const key of unknowns) {\n yield [key, value[key], Never];\n }\n }\n },\n\n validator(value) {\n return isObject(value) || \"Expected an object, but received: \" + print(value);\n },\n\n coercer(value) {\n return isObject(value) ? { ...value\n } : value;\n }\n\n });\n}\n/**\n * Augment a struct to allow `undefined` values.\n */\n\nfunction optional(struct) {\n return new Struct({ ...struct,\n validator: (value, ctx) => value === undefined || struct.validator(value, ctx),\n refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx)\n });\n}\n/**\n * Ensure that a value is an object with keys and values of specific types, but\n * without ensuring any specific shape of properties.\n *\n * Like TypeScript's `Record` utility.\n */\n\nfunction record(Key, Value) {\n return new Struct({\n type: 'record',\n schema: null,\n\n *entries(value) {\n if (isObject(value)) {\n for (const k in value) {\n const v = value[k];\n yield [k, k, Key];\n yield [k, v, Value];\n }\n }\n },\n\n validator(value) {\n return isObject(value) || \"Expected an object, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a `RegExp`.\n *\n * Note: this does not test the value against the regular expression! For that\n * you need to use the `pattern()` refinement.\n */\n\nfunction regexp() {\n return define('regexp', value => {\n return value instanceof RegExp;\n });\n}\nfunction set(Element) {\n return new Struct({\n type: 'set',\n schema: null,\n\n *entries(value) {\n if (Element && value instanceof Set) {\n for (const v of value) {\n yield [v, v, Element];\n }\n }\n },\n\n coercer(value) {\n return value instanceof Set ? new Set(value) : value;\n },\n\n validator(value) {\n return value instanceof Set || \"Expected a `Set` object, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a string.\n */\n\nfunction string() {\n return define('string', value => {\n return typeof value === 'string' || \"Expected a string, but received: \" + print(value);\n });\n}\nfunction tuple(Elements) {\n const Never = never();\n return new Struct({\n type: 'tuple',\n schema: null,\n\n *entries(value) {\n if (Array.isArray(value)) {\n const length = Math.max(Elements.length, value.length);\n\n for (let i = 0; i < length; i++) {\n yield [i, value[i], Elements[i] || Never];\n }\n }\n },\n\n validator(value) {\n return Array.isArray(value) || \"Expected an array, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value has a set of known properties of specific types.\n *\n * Note: Unrecognized properties are allowed and untouched. This is similar to\n * how TypeScript's structural typing works.\n */\n\nfunction type(schema) {\n const keys = Object.keys(schema);\n return new Struct({\n type: 'type',\n schema,\n\n *entries(value) {\n if (isObject(value)) {\n for (const k of keys) {\n yield [k, value[k], schema[k]];\n }\n }\n },\n\n validator(value) {\n return isObject(value) || \"Expected an object, but received: \" + print(value);\n }\n\n });\n}\nfunction union(Structs) {\n const description = Structs.map(s => s.type).join(' | ');\n return new Struct({\n type: 'union',\n schema: null,\n\n coercer(value, ctx) {\n const firstMatch = Structs.find(s => {\n const [e] = s.validate(value, {\n coerce: true\n });\n return !e;\n }) || unknown();\n return firstMatch.coercer(value, ctx);\n },\n\n validator(value, ctx) {\n const failures = [];\n\n for (const S of Structs) {\n const [...tuples] = run(value, S, ctx);\n const [first] = tuples;\n\n if (!first[0]) {\n return [];\n } else {\n for (const [failure] of tuples) {\n if (failure) {\n failures.push(failure);\n }\n }\n }\n }\n\n return [\"Expected the value to satisfy a union of `\" + description + \"`, but received: \" + print(value), ...failures];\n }\n\n });\n}\n/**\n * Ensure that any value passes validation, without widening its type to `any`.\n */\n\nfunction unknown() {\n return define('unknown', () => true);\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n *\n * This allows you to transform input data before validating it, to increase the\n * likelihood that it passes validation—for example for default values, parsing\n * different formats, etc.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\n\nfunction coerce(struct, condition, coercer) {\n return new Struct({ ...struct,\n coercer: (value, ctx) => {\n return is(value, condition) ? struct.coercer(coercer(value, ctx), ctx) : struct.coercer(value, ctx);\n }\n });\n}\n/**\n * Augment a struct to replace `undefined` values with a default.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\n\nfunction defaulted(struct, fallback, options = {}) {\n return coerce(struct, unknown(), x => {\n const f = typeof fallback === 'function' ? fallback() : fallback;\n\n if (x === undefined) {\n return f;\n }\n\n if (!options.strict && isPlainObject(x) && isPlainObject(f)) {\n const ret = { ...x\n };\n let changed = false;\n\n for (const key in f) {\n if (ret[key] === undefined) {\n ret[key] = f[key];\n changed = true;\n }\n }\n\n if (changed) {\n return ret;\n }\n }\n\n return x;\n });\n}\n/**\n * Augment a struct to trim string inputs.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\n\nfunction trimmed(struct) {\n return coerce(struct, string(), x => x.trim());\n}\n\n/**\n * Ensure that a string, array, map, or set is empty.\n */\n\nfunction empty(struct) {\n const expected = \"Expected an empty \" + struct.type;\n return refine(struct, 'empty', value => {\n if (value instanceof Map || value instanceof Set) {\n const {\n size\n } = value;\n return size === 0 || expected + \" but received one with a size of `\" + size + \"`\";\n } else {\n const {\n length\n } = value;\n return length === 0 || expected + \" but received one with a length of `\" + length + \"`\";\n }\n });\n}\n/**\n * Ensure that a number or date is below a threshold.\n */\n\nfunction max(struct, threshold, options = {}) {\n const {\n exclusive\n } = options;\n return refine(struct, 'max', value => {\n return exclusive ? value < threshold : value <= threshold || \"Expected a \" + struct.type + \" less than \" + (exclusive ? '' : 'or equal to ') + threshold + \" but received `\" + value + \"`\";\n });\n}\n/**\n * Ensure that a number or date is above a threshold.\n */\n\nfunction min(struct, threshold, options = {}) {\n const {\n exclusive\n } = options;\n return refine(struct, 'min', value => {\n return exclusive ? value > threshold : value >= threshold || \"Expected a \" + struct.type + \" greater than \" + (exclusive ? '' : 'or equal to ') + threshold + \" but received `\" + value + \"`\";\n });\n}\n/**\n * Ensure that a string matches a regular expression.\n */\n\nfunction pattern(struct, regexp) {\n return refine(struct, 'pattern', value => {\n return regexp.test(value) || \"Expected a \" + struct.type + \" matching `/\" + regexp.source + \"/` but received \\\"\" + value + \"\\\"\";\n });\n}\n/**\n * Ensure that a string, array, number, date, map, or set has a size (or length, or time) between `min` and `max`.\n */\n\nfunction size(struct, min, max = min) {\n const expected = \"Expected a \" + struct.type;\n const of = min === max ? \"of `\" + min + \"`\" : \"between `\" + min + \"` and `\" + max + \"`\";\n return refine(struct, 'size', value => {\n if (typeof value === 'number' || value instanceof Date) {\n return min <= value && value <= max || expected + \" \" + of + \" but received `\" + value + \"`\";\n } else if (value instanceof Map || value instanceof Set) {\n const {\n size\n } = value;\n return min <= size && size <= max || expected + \" with a size \" + of + \" but received one with a size of `\" + size + \"`\";\n } else {\n const {\n length\n } = value;\n return min <= length && length <= max || expected + \" with a length \" + of + \" but received one with a length of `\" + length + \"`\";\n }\n });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n *\n * The refiner function is guaranteed to receive a value of the struct's type,\n * because the struct's existing validation will already have passed. This\n * allows you to layer additional validation on top of existing structs.\n */\n\nfunction refine(struct, name, refiner) {\n return new Struct({ ...struct,\n\n *refiner(value, ctx) {\n yield* struct.refiner(value, ctx);\n const result = refiner(value, ctx);\n const failures = toFailures(result, ctx, struct, value);\n\n for (const failure of failures) {\n yield { ...failure,\n refinement: name\n };\n }\n }\n\n });\n}\n\nexport { Struct, StructError, any, array, assert, assign, boolean, coerce, create, date, defaulted, define, deprecated, dynamic, empty, enums, func, instance, integer, intersection, is, lazy, literal, map, mask, max, min, never, nullable, number, object, omit, optional, partial, pattern, pick, record, refine, regexp, set, size, string, struct, trimmed, tuple, type, union, unknown, validate };\n//# sourceMappingURL=index.es.js.map\n","import { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { IntegrySDKEvents } from '@/types';\nimport { createContext } from 'preact';\n\nexport default createContext<{\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n integrationId?: number;\n isPreviewMode: boolean;\n isEditMode: boolean;\n} | null>(null);\n","function n(n,t){for(var r in t)n[r]=t[r];return n}export default function(t){var r=[];function u(n){for(var t=[],u=0;u<r.length;u++)r[u]===n?n=null:t.push(r[u]);r=t}function e(u,e,f){t=e?u:n(n({},t),u);for(var i=r,o=0;o<i.length;o++)i[o](t,f)}return t=t||{},{action:function(n){function r(t){e(t,!1,n)}return function(){for(var u=arguments,e=[t],f=0;f<arguments.length;f++)e.push(u[f]);var i=n.apply(this,e);if(null!=i)return i.then?i.then(r):r(i)}},setState:e,subscribe:function(n){return r.push(n),function(){u(n)}},unsubscribe:u,getState:function(){return t}}}\n//# sourceMappingURL=unistore.es.js.map\n","module.exports = function unistoreDevTools(store) {\n\tvar extension = window.__REDUX_DEVTOOLS_EXTENSION__ || window.top.__REDUX_DEVTOOLS_EXTENSION__;\n\tvar ignoreState = false;\n\n\tif (!extension) {\n\t\tconsole.warn('Please install/enable Redux devtools extension');\n\t\tstore.devtools = null;\n\n\t\treturn store;\n\t}\n\n\tif (!store.devtools) {\n\t\tstore.devtools = extension.connect();\n\t\tstore.devtools.subscribe(function (message) {\n\t\t\tif (message.type === 'DISPATCH' && message.state) {\n\t\t\t\tignoreState = (message.payload.type === 'JUMP_TO_ACTION' || message.payload.type === 'JUMP_TO_STATE');\n\t\t\t\tstore.setState(JSON.parse(message.state), true);\n\t\t\t}\n\t\t});\n\t\tstore.devtools.init(store.getState());\n\t\tstore.subscribe(function (state, action) {\n\t\t\tvar actionName = action && action.name || 'setState';\n\n\t\t\tif (!ignoreState) {\n\t\t\t\tstore.devtools.send(actionName, state);\n\t\t\t} else {\n\t\t\t\tignoreState = false;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn store;\n}\n","import { State } from '@/types/store';\n\nexport const initialState: State = {\n stepState: {\n steps: [],\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: 0,\n showValidation: false,\n allStepsCompleted: false,\n },\n genericData: {\n bundleId: null,\n templateId: null,\n templateApp: null,\n isPreviewMode: false,\n },\n stepMapping: {},\n stepDataMapping: {},\n parentChildMapping: {},\n};\n","import { Store } from 'unistore';\n\nimport {\n IntegrationResponse,\n PreviewMetadata,\n TemplateStep,\n} from '@/interfaces';\nimport { StepStateStep, State } from '@/types/store';\nimport { Authorization } from '@/types';\nimport { initialState } from '@/store/initialState';\n\n// If actions is a function, it gets passed the store:\nexport const actionFunctions = (storeSnapshot: Store<State>) => ({\n setSteps(state: State, templateSteps: TemplateStep[]): Partial<State> {\n const parsedSteps: StepStateStep[] = [];\n let itemIndex = -1;\n templateSteps.forEach((element) => {\n if (element.activity.auth_required && !element.hide_authorization) {\n itemIndex += 1;\n // step has auth required so split into two.\n parsedSteps.push({\n stepId: element.id,\n title: `Connect ${element.activity.app.name}`,\n iconUrl: element.activity.app.icon_url,\n isCompleted: false,\n isCurrentlyOpen: false,\n type: 'AUTH',\n requiredFields: [element.id], // auth if required will always be named like this\n invalidFields: {\n [element.id]: '',\n },\n isValid: false,\n itemIndex,\n });\n } else {\n // auth is implicit so we will select the first available auth\n }\n\n if (element.is_visible) {\n // check if we need to show the config step at all\n if (element.template_fields.length > 0) {\n // step has template fields with atleast one visible\n const hasVisibleTemplateFields =\n element.template_fields.filter((el) => el.is_visible).length > 0;\n\n // check which of these are required\n const requiredFields = element.template_fields\n .filter((el) => el.is_required && el.is_visible)\n .map((field) => field.id);\n\n // check if no default value is provided\n const invalidFields = element.template_fields\n .filter((el) => el.is_required && !el.default_value)\n .reduce((prev, field) => ({ ...prev, [field.id]: '' }), {});\n\n const isValid = !(Object.keys(invalidFields).length > 0);\n\n if (hasVisibleTemplateFields) {\n itemIndex += 1;\n parsedSteps.push({\n stepId: element.id,\n title: element.title,\n iconUrl: element.activity.app.icon_url,\n isCompleted: false,\n isCurrentlyOpen: false,\n type: 'CONFIGURATION',\n requiredFields,\n invalidFields,\n isValid,\n itemIndex,\n });\n }\n }\n }\n });\n\n return {\n ...state,\n stepState: {\n steps: parsedSteps,\n currentStep: parsedSteps[0],\n stepIndex: 0,\n showValidation: false,\n allStepsCompleted: false,\n },\n };\n },\n\n setIntegrationData(state: State, data: IntegrationResponse): Partial<State> {\n const { stepDataMapping, stepMapping } = state;\n\n const selectedAuthData = data.steps.reduce(\n (\n prev: Record<\n number,\n {\n authId: number | null;\n stepId: number;\n }\n >,\n next,\n ) => {\n if (stepMapping[next.template_step]) {\n // add this data in return\n return {\n ...prev,\n [next.template_step]: {\n authId: next.authorization ? Number(next.authorization) : null,\n stepId: next.id,\n },\n };\n }\n return prev;\n },\n {},\n );\n\n const visibleStepsData = data.steps.reduce(\n (\n prev: Record<\n number,\n {\n id: number;\n value: string;\n template_field: number;\n }[]\n >,\n next,\n ) => {\n if (stepDataMapping[next.template_step]) {\n // add this data in return\n return {\n ...prev,\n [next.template_step]: next.app_user_data,\n };\n }\n return prev;\n },\n {},\n );\n\n const stepMappingCopy = { ...stepMapping };\n const stepDataMappingCopy = { ...stepDataMapping };\n const parsedStepsCopy = state.stepState.steps.map((el) => ({\n ...el,\n isCompleted: true,\n }));\n\n Object.keys(visibleStepsData).forEach((stepId) => {\n stepDataMappingCopy[Number(stepId)] = {\n ...stepDataMapping[Number(stepId)],\n ...visibleStepsData[Number(stepId)].reduce((prev, next) => {\n if (stepDataMapping[Number(stepId)])\n return {\n ...prev,\n [next.template_field]: {\n ...stepDataMapping[Number(stepId)][next.template_field],\n integrationFieldId: next.id,\n value: stepDataMapping[Number(stepId)][next.template_field]\n .isDynamic\n ? null\n : next.value,\n objectValue: stepDataMapping[Number(stepId)][\n next.template_field\n ].isDynamic\n ? JSON.parse(next.value || '{}')\n : null,\n },\n };\n return prev;\n }, {}),\n };\n });\n\n Object.keys(selectedAuthData).forEach((stepId) => {\n stepMappingCopy[Number(stepId)] = {\n ...stepMappingCopy[Number(stepId)],\n integrationStepId: selectedAuthData[Number(stepId)].stepId,\n isAuthVerified: true,\n selectedAuthId: selectedAuthData[Number(stepId)].authId,\n };\n });\n\n return {\n ...state,\n stepMapping: stepMappingCopy,\n stepDataMapping: stepDataMappingCopy,\n stepState: {\n ...state.stepState,\n steps: parsedStepsCopy,\n currentStep: parsedStepsCopy[0],\n stepIndex: 0,\n showValidation: false,\n allStepsCompleted: true,\n },\n };\n },\n\n showStepValidationState(state: State): Partial<State> {\n const { stepState } = state;\n return {\n stepState: {\n ...stepState,\n showValidation: true,\n },\n };\n },\n\n hideStepValidationState(state: State): Partial<State> {\n const { stepState } = state;\n return {\n stepState: {\n ...stepState,\n showValidation: false,\n },\n };\n },\n\n gotoNextStep(state: State): Partial<State> {\n const { stepState } = state;\n if (stepState) {\n const newIndex = Number(stepState.stepIndex) + 1;\n const step = stepState.steps[Number(stepState.stepIndex) + 1];\n const updatedStep = {\n ...stepState.steps[state.stepState.stepIndex],\n isCompleted: true,\n };\n if (!step) {\n // last step reached\n return {\n stepState: {\n ...stepState,\n steps: [\n ...stepState.steps.slice(0, stepState.stepIndex),\n updatedStep,\n ...stepState.steps.slice(stepState.stepIndex + 1),\n ],\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: newIndex,\n allStepsCompleted: true,\n showValidation: false,\n },\n };\n }\n\n return {\n stepState: {\n ...stepState,\n steps: [\n ...stepState.steps.slice(0, stepState.stepIndex),\n updatedStep,\n ...stepState.steps.slice(stepState.stepIndex + 1),\n ],\n currentStep: {\n ...step,\n },\n stepIndex: newIndex,\n showValidation: false,\n },\n };\n }\n return state;\n },\n\n gotoPreviousStep(state: State): Partial<State> {\n if (state.stepState) {\n const newIndex = Number(state.stepState.stepIndex) - 1;\n const step = state.stepState.steps[Number(state.stepState.stepIndex) - 1];\n\n return {\n stepState: {\n ...state.stepState,\n currentStep: step,\n stepIndex: newIndex,\n showValidation: !step.isValid,\n },\n };\n }\n return state;\n },\n\n gotoStepInPreview: (\n state: State,\n previewMetadata: PreviewMetadata,\n ): Partial<State> => {\n const { stepState } = state;\n const { stepId, type } = previewMetadata;\n\n if (stepId && type !== 'CONFIRMATION') {\n // go to a particular step\n const stepIndexToNavigateTo = stepState.steps.findIndex(\n (el) => el.stepId === stepId && el.type === type,\n );\n if (stepIndexToNavigateTo > -1)\n return {\n stepState: {\n ...state.stepState,\n currentStep: stepState.steps[stepIndexToNavigateTo],\n stepIndex: stepIndexToNavigateTo,\n allStepsCompleted: false,\n },\n };\n }\n\n if (!stepId && type === 'CONFIRMATION') {\n return {\n stepState: {\n ...stepState,\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: stepState.steps.length,\n allStepsCompleted: true,\n },\n };\n }\n return state;\n },\n\n gotoStep: (state: State, stepIndex: number): Partial<State> => {\n const { stepState } = state;\n const { stepIndex: oldStepIndex } = stepState;\n if (stepState) {\n const currentStep = stepState.steps[oldStepIndex];\n const stepToNavigateTo = stepState.steps[stepIndex];\n\n if (state.genericData.isPreviewMode) {\n // we can go to any step in preview mode\n if (stepIndex === stepState.steps.length) {\n return {\n stepState: {\n ...stepState,\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: stepState.steps.length,\n allStepsCompleted: true,\n },\n };\n }\n return {\n stepState: {\n ...state.stepState,\n currentStep: {\n ...stepToNavigateTo,\n },\n stepIndex,\n allStepsCompleted: false,\n },\n };\n }\n\n // navigate directly to confirmation page if all steps are completed\n if (stepState.allStepsCompleted && stepIndex === stepState.steps.length) {\n return {\n stepState: {\n ...stepState,\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: stepState.steps.length,\n allStepsCompleted: true,\n },\n };\n }\n\n // navigate to confirmation from final step\n if (\n currentStep &&\n currentStep.isValid &&\n oldStepIndex === stepState.steps.length - 1 &&\n stepIndex === stepState.steps.length\n ) {\n const updatedStep = {\n ...stepState.steps[oldStepIndex],\n isCompleted: true,\n };\n return {\n stepState: {\n ...stepState,\n steps: [\n ...stepState.steps.slice(0, oldStepIndex),\n updatedStep,\n ...stepState.steps.slice(oldStepIndex + 1),\n ],\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex,\n allStepsCompleted: true,\n },\n };\n }\n // navigate to a step if it is completed\n if (stepToNavigateTo && stepToNavigateTo.isCompleted) {\n return {\n stepState: {\n ...state.stepState,\n currentStep: {\n ...stepToNavigateTo,\n },\n stepIndex,\n showValidation: !stepToNavigateTo.isValid,\n },\n };\n }\n if (\n // clicking on next step with current completed\n currentStep &&\n currentStep.isValid &&\n stepIndex === oldStepIndex + 1\n ) {\n const updatedStep = {\n ...stepState.steps[oldStepIndex],\n isCompleted: true,\n };\n return {\n stepState: {\n ...state.stepState,\n steps: [\n ...stepState.steps.slice(0, oldStepIndex),\n updatedStep,\n ...stepState.steps.slice(oldStepIndex + 1),\n ],\n currentStep: {\n ...stepToNavigateTo,\n },\n stepIndex,\n },\n };\n }\n }\n return state;\n },\n\n verifyStepValidity(state: State, stepId: number) {\n const { stepDataMapping } = state;\n const element = stepDataMapping[stepId];\n\n const fieldsData = Object.keys(element).map((fieldId) => {\n const ele = element[Number(fieldId)];\n return ele;\n });\n\n const invalid = fieldsData.filter(\n (el) => el.isRequired && !el.value && !el.objectValue,\n );\n\n const isValid = !(invalid.length > 0);\n return {\n stepState: {\n ...state.stepState,\n currentStep: {\n ...state.stepState.currentStep,\n isValid,\n },\n },\n };\n },\n\n getStepState() {\n return storeSnapshot.getState().stepState;\n },\n\n setGenericData(\n state: State,\n genericData: Partial<{\n templateId: number;\n bundleId: number;\n isPreviewMode: boolean;\n }>,\n ): Partial<State> {\n return {\n genericData: {\n ...state.genericData,\n ...genericData,\n },\n };\n },\n\n setTemplateApp(\n state: State,\n data: {\n name: string;\n iconUrl: string;\n },\n ): Partial<State> {\n return {\n genericData: {\n ...state.genericData,\n templateApp: {\n name: data.name,\n iconUrl: data.iconUrl,\n },\n },\n };\n },\n\n setStepMapping(state: State, steps: TemplateStep[]): Partial<State> {\n const stepMapping = steps.reduce((prev, step) => {\n let selectedAuthId = null;\n let shouldAutoVerifyAuth = false;\n if (step.hide_authorization || state.genericData.isPreviewMode) {\n shouldAutoVerifyAuth = true;\n selectedAuthId = step.authorization_type.authorizations[0]?.id ?? null;\n } else if (step.step_authorization || state.stepMapping[step.id]) {\n selectedAuthId = state.stepMapping[step.id].selectedAuthId;\n }\n return {\n ...prev,\n [step.id]: {\n step,\n authorizations:\n step.authorization_type.authorizations?.map((el) => ({\n authorizationId: el.id,\n userIdentity: el.user_identity,\n authType: el.authorization_type,\n disableLink: el.disable_link,\n isErrored: false,\n isVerified: shouldAutoVerifyAuth,\n })) ?? [],\n isAuthVerified: shouldAutoVerifyAuth,\n selectedAuthId,\n },\n };\n }, {});\n\n const stepDataMapping = steps.reduce(\n (prev, step) => ({\n ...prev,\n [step.id]: {\n ...state.stepDataMapping[step.id],\n ...step.template_fields.reduce(\n (acc, curr) => ({\n ...acc,\n [curr.id]: {\n fieldId: curr.id,\n value:\n !curr.is_visible || curr.default_value // set default value if step is not visible on SDK\n ? curr.default_value\n : (state.stepDataMapping[step.id] && // set empty if initializing, or existing if already set\n state.stepDataMapping[step.id][curr.id] &&\n state.stepDataMapping[step.id][curr.id].value) ||\n '',\n machineName: curr.activity_field?.machine_name,\n isRequired: curr.is_required,\n isVisible: curr.is_visible,\n isDynamic: curr.activity_field?.type === 'DYNAMIC',\n },\n }),\n {},\n ),\n },\n }),\n {},\n );\n\n return {\n stepMapping: {\n ...state.stepMapping,\n ...stepMapping,\n },\n stepDataMapping: {\n ...state.stepDataMapping,\n ...stepDataMapping,\n },\n genericData: {\n ...state.genericData,\n templateApp: {\n name: steps.length > 0 ? steps[0].activity.app.name : '',\n iconUrl: steps.length > 0 ? steps[0].activity.app.icon_url : '',\n },\n },\n };\n },\n\n setActivityOutputData(\n state: State,\n data: {\n activityOutputData: {\n value: string;\n text: string;\n }[];\n },\n ): Partial<State> {\n return {\n ...state,\n activityOutputData: data.activityOutputData,\n };\n },\n\n setDynamicFieldData(\n state: State,\n data: {\n dynamicFieldData: {\n [fieldId: string]: (string | Record<string, string>)[];\n };\n },\n ): Partial<State> {\n return {\n ...state,\n dynamicFieldData: Object.keys(data.dynamicFieldData).reduce(\n (prev, next) => ({\n ...prev,\n [`{${next}}`]: data.dynamicFieldData[next],\n }),\n {},\n ),\n };\n },\n\n setParentChildMapping(state: State, steps: TemplateStep[]): Partial<State> {\n const parentChildMapping = steps.reduce(\n (prev, step) => ({\n ...prev,\n [step.id]: {\n ...state.parentChildMapping[step.id],\n ...step.template_fields.reduce((acc, curr) => {\n if (curr.activity_field)\n return {\n ...acc,\n [curr.activity_field?.machine_name]: {\n fieldId: curr.id,\n childFields: curr.activity_field?.child_fields\n ? JSON.parse(curr.activity_field?.child_fields ?? '[]')\n : null,\n parentFields: curr.activity_field?.parent_fields\n ? JSON.parse(curr.activity_field?.parent_fields ?? '[]')\n : null,\n },\n };\n return acc;\n }, {}),\n },\n }),\n {},\n );\n\n return {\n parentChildMapping: {\n ...state.parentChildMapping,\n ...parentChildMapping,\n },\n };\n },\n\n addAuthorization(\n state: State,\n params: {\n stepId: number;\n authData: Authorization;\n },\n ): Partial<State> {\n const { stepId, authData } = params;\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: [\n ...state.stepMapping[stepId].authorizations,\n authData,\n ],\n },\n },\n };\n },\n\n removeAuthorization(\n state: State,\n params: {\n stepId: number;\n authId: number;\n },\n ): Partial<State> {\n const { stepId, authId } = params;\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: state.stepMapping[stepId].authorizations.filter(\n (el) => el.authorizationId !== authId,\n ),\n },\n },\n };\n },\n\n toggleVerifyAuthorizationFlag(\n state: State,\n params: {\n stepId: number;\n authId: number;\n isVerifying: boolean;\n },\n ): Partial<State> {\n const { stepId, authId, isVerifying } = params;\n const authObjIndex = state.stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === authId,\n );\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: [\n ...state.stepMapping[stepId].authorizations.slice(0, authObjIndex),\n {\n ...state.stepMapping[stepId].authorizations[authObjIndex],\n isVerifying,\n },\n ...state.stepMapping[stepId].authorizations.slice(authObjIndex + 1),\n ],\n },\n },\n };\n },\n\n toggleDeleteAuthorizationFlag(\n state: State,\n params: {\n stepId: number;\n authId: number;\n isDeleting: boolean;\n error: string;\n },\n ): Partial<State> {\n const { stepId, authId, isDeleting, error } = params;\n const authObjIndex = state.stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === authId,\n );\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: [\n ...state.stepMapping[stepId].authorizations.slice(0, authObjIndex),\n {\n ...state.stepMapping[stepId].authorizations[authObjIndex],\n isDeleting,\n error,\n },\n ...state.stepMapping[stepId].authorizations.slice(authObjIndex + 1),\n ],\n },\n },\n };\n },\n\n setStepAuthId(\n state: State,\n params: { stepId: number; authId: number },\n ): Partial<State> {\n const { stepId, authId } = params;\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n selectedAuthId: authId,\n },\n },\n };\n },\n\n setStepAuthorization(\n state: State,\n stepId: number,\n selectedAuthId: number | null,\n isVerified: boolean,\n fieldsToReset: number[],\n override: boolean,\n ): Partial<State> {\n const step = state.stepState.steps[state.stepState.stepIndex];\n const stepFromMapping = state.stepMapping[stepId];\n const latestStepState = storeSnapshot.getState().stepState;\n if (\n step.type !== 'CONFIRMATION' &&\n latestStepState.currentStep?.type !== 'CONFIRMATION' &&\n latestStepState.currentStep?.stepId === stepId\n ) {\n const { invalidFields } = step;\n if (isVerified) delete invalidFields[stepId];\n const updatedStep = {\n ...state.stepState.steps[state.stepState.stepIndex],\n invalidFields,\n isValid: Object.keys(invalidFields).length < 1,\n isCompleted: stepFromMapping.selectedAuthId !== null || isVerified,\n };\n const authObjIndex = state.stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === selectedAuthId,\n );\n\n return {\n stepState: {\n ...state.stepState,\n steps: [\n ...state.stepState.steps.slice(0, state.stepState.stepIndex),\n updatedStep,\n ...state.stepState.steps.slice(state.stepState.stepIndex + 1),\n ],\n currentStep: updatedStep,\n showValidation: !isVerified && !stepFromMapping.selectedAuthId,\n },\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n selectedAuthId: isVerified\n ? selectedAuthId\n : state.stepMapping[stepId].selectedAuthId,\n authorizations: [\n ...state.stepMapping[stepId].authorizations.slice(\n 0,\n authObjIndex,\n ),\n {\n ...state.stepMapping[stepId].authorizations[authObjIndex],\n isVerified,\n isVerifying: false,\n didFetchStatus: true,\n error: '',\n },\n ...state.stepMapping[stepId].authorizations.slice(\n authObjIndex + 1,\n ),\n ],\n },\n },\n // reset all values for the dependent fields of auth\n stepDataMapping: override\n ? state.stepDataMapping\n : {\n ...state.stepDataMapping,\n [stepId]: {\n ...state.stepDataMapping[stepId],\n ...fieldsToReset.reduce(\n (acc, curr) => ({\n ...acc,\n [curr]: {\n ...state.stepDataMapping[stepId][curr],\n value: '',\n },\n }),\n {},\n ),\n },\n },\n };\n }\n return state;\n },\n\n resetCustomMappingData(state: State, stepId: number): Partial<State> {\n const step = state.stepMapping[stepId];\n const dynamicFieldId = step.step.template_fields.filter(\n (el) => el.activity_field?.type === 'DYNAMIC',\n )[0]?.id;\n\n if (dynamicFieldId) {\n const stepData = state.stepDataMapping[stepId][dynamicFieldId];\n if (stepData) stepData.objectValue = {};\n return {\n stepDataMapping: {\n ...state.stepDataMapping,\n [stepId]: {\n ...state.stepDataMapping[stepId],\n [dynamicFieldId]: stepData,\n },\n },\n };\n }\n return state;\n },\n\n setStepFieldData(\n state: State,\n data: {\n stepId: number;\n fieldId: number;\n value: string;\n isRequired: boolean;\n },\n ): Partial<State> {\n const { stepId, fieldId, value, isRequired } = data;\n const step = state.stepState.steps[state.stepState.stepIndex];\n if (step.type !== 'CONFIRMATION') {\n const { invalidFields } = step;\n\n if (value) {\n // since this field was filled, it is no longer invalid\n delete invalidFields[fieldId];\n } else if (isRequired) {\n invalidFields[fieldId] = null;\n }\n\n const updatedStep = {\n ...state.stepState.steps[state.stepState.stepIndex],\n invalidFields,\n isValid: Object.keys(invalidFields).length < 1,\n };\n\n return {\n stepState: {\n ...state.stepState,\n steps: [\n ...state.stepState.steps.slice(0, state.stepState.stepIndex),\n updatedStep,\n ...state.stepState.steps.slice(state.stepState.stepIndex + 1),\n ],\n currentStep: updatedStep,\n allStepsCompleted: false,\n },\n stepDataMapping: {\n ...state.stepDataMapping,\n [stepId]: {\n ...state.stepDataMapping[stepId],\n [fieldId]: {\n ...state.stepDataMapping[stepId][fieldId],\n value,\n },\n },\n },\n };\n }\n return state;\n },\n\n setStepMappingData(\n state: State,\n data: {\n stepId: number;\n fieldId: number;\n id: string;\n value: string | null;\n },\n ): Partial<State> {\n const val = state.stepDataMapping[data.stepId][data.fieldId]?.objectValue;\n let newVal;\n if (data.value) {\n newVal = {\n ...(state.stepDataMapping[data.stepId][data.fieldId]?.objectValue ??\n {}),\n ...{ [data.id]: data.value },\n };\n } else if (val) {\n delete val[data.id];\n newVal = val;\n if (Object.keys(newVal).length === 0) newVal = null;\n }\n if (newVal)\n return {\n stepDataMapping: {\n ...state.stepDataMapping,\n [data.stepId]: {\n ...state.stepDataMapping[data.stepId],\n [data.fieldId]: {\n ...state.stepDataMapping[data.stepId][data.fieldId],\n objectValue: newVal,\n },\n },\n },\n };\n return state;\n },\n reset(): State {\n return initialState;\n },\n});\n","import createStore, { Store } from 'unistore';\nimport devtools from 'unistore/devtools';\n\nimport { initialState } from '@/store/initialState';\n\nimport { State } from '../types/store';\nimport { actionFunctions } from './actionFunctions';\n\nconst createSDKStore = (): Store<State> => {\n const createStoreWrapper = () => createStore<State>(initialState);\n // const store = createStoreWrapper();\n const store = devtools(createStoreWrapper());\n return store;\n};\n\nexport { createSDKStore, actionFunctions, initialState };\n","import { Authorization, TemplateFormRenderModes } from '@/types';\nimport {\n array,\n boolean,\n date,\n Describe,\n nullable,\n number,\n object,\n optional,\n size,\n string,\n} from 'superstruct';\n\nexport interface UserConfig {\n availableFlowsLabel?: string;\n myFlowsLabel?: string;\n}\n\nexport interface SDKConfig {\n env?: 'staging' | 'production';\n debug?: boolean;\n integrationId?: number;\n xIntegryConfig?: {\n appAuth: {\n apiKey: string;\n };\n };\n userConfig?: UserConfig;\n}\n\nexport interface ConfigWithObject extends SDKConfig {\n appKey: string;\n hash: string;\n userId: string;\n bundleId: string;\n}\n\nexport interface ConfigWithUrlParams extends SDKConfig {\n useUrlParams?: boolean;\n}\n\nexport interface APIConfig {\n baseUrl: string;\n baseUrlv2: string;\n endpointsUrl: string;\n appKey: string;\n hash: string;\n userId: string;\n oauthVerifyPath: string;\n apiKey?: string;\n}\n\nexport interface Template {\n id: number;\n name: string;\n description: string;\n can_add_integration: boolean;\n integration_count: number;\n app: {\n icon_url: string;\n category: string[];\n tags: string;\n };\n branding_app: {\n icon_url: string;\n category: string[];\n tags: string;\n };\n}\n\nexport interface Integration {\n name: string;\n branding_app: {\n icon_url: string;\n category: string[];\n tags: string;\n };\n id: number;\n runs_count: number;\n bundle_instance: number;\n created: Date;\n delete_link: string;\n disable_link: string;\n edit_link: string;\n enable_link: string;\n icon_url: string;\n is_visible: number;\n last_modified: Date;\n status: string;\n template: number;\n task_execution: {\n integration_created_at: Date;\n last_execution_at: {\n date: Date;\n timezone: string;\n timezone_type: number;\n } | null;\n status: string | null;\n };\n}\n\nexport interface IntegrationSaveResponse {\n id: number;\n connected_account_id: number;\n is_visible: number | boolean;\n name: string;\n bundle_name: string;\n bundle_instance_id: number;\n status: string;\n template: number;\n steps: {\n id: number;\n template_step: number;\n returned_data: string | null;\n }[];\n}\n\nexport interface BundleResponse {\n templates: Template[];\n integrations: Integration[];\n}\n\ntype SaveIntegrationRequestStep = {\n id: number;\n authorization: number;\n template_step: number;\n app_user_data: {\n id: number;\n value: string;\n template_field: number;\n }[];\n};\n\nexport interface SaveOrUpdateIntegrationBody {\n id?: number;\n name: string;\n notification_email: string;\n template: number;\n bundle_id: number;\n bundle_instance_id?: number;\n steps: SaveIntegrationRequestStep[];\n}\n\nexport interface IntegrationStatusResponse {\n [integrationId: number]: {\n name: string;\n status: string;\n template_id: number;\n tooltip: string | null;\n task_execution: {\n integration_created_at: string;\n last_execution_at: string | null;\n status: string | null;\n };\n };\n}\n\ntype App = {\n id: number;\n name: string;\n description: string;\n icon_url: string;\n color: string;\n publishing_status: string;\n category: string[];\n app_type?: string;\n action_url?: string | null;\n created_at?: Date;\n tags: string;\n};\n\ntype Activity = {\n id: number;\n name: string;\n type: string;\n endpoint: string;\n auth_required: boolean;\n total_fields: number;\n app: App;\n activity_output: string | null;\n activity_output_url: string | null;\n dynamic_field_data_endpoint: string | null;\n};\n\ntype AuthorizationType = {\n id: number;\n type: string;\n authorizations: Authorization[];\n provider: string;\n is_sandbox_enabled: boolean;\n authorization_url_sandbox: string;\n};\n\nexport type IntegryStep = {\n id: number;\n weight: number;\n title: string;\n is_visible: boolean;\n activity: Activity;\n hide_authorization: boolean;\n};\n\nexport interface TemplateResponse {\n id: number;\n name: string;\n description: string;\n app: App;\n branding_app: App;\n button_text: string | null;\n is_wizard: boolean;\n steps: IntegryStep[];\n publishing_status: string;\n level?: number;\n parent_id?: number;\n}\n\nexport interface TemplateField {\n id: number;\n is_required: boolean;\n is_hidden: boolean;\n default_value: string | null;\n weight: number;\n description: string;\n summary: string | null;\n activity_field: {\n id: number;\n machine_name: string;\n type: string;\n title: string;\n description: string;\n weight: number;\n is_required: boolean;\n child_fields: string | null;\n is_dynamic: boolean;\n data_src: string | null;\n data_src_endpoint: number | null;\n parent_fields: string | null;\n dynamic_field_src: string | null;\n default_value: string | null;\n auto_machine_name: string;\n dynamic_field_src_endpoint: number | null;\n regex: string | null;\n is_searchable: boolean;\n } | null;\n title: string | null;\n type: string;\n placeholder: string | null;\n // manual_template: unknown | null;\n child_field: string | null;\n child_field_value: string | null;\n // template_fields: unknown[];\n button_text: string | null;\n // field_actions: unknown[];\n icon_url: string | null;\n long_description: string | null;\n regex: string | null;\n regex_msg: string | null;\n is_visible: boolean;\n}\n\nexport interface TemplateStep {\n id: number;\n weight: number;\n title: string;\n is_visible: boolean;\n activity: Activity;\n authorization_type: AuthorizationType;\n template_fields: TemplateField[];\n // step_instance: unknown | null;\n allow_multiple_authorizations: boolean;\n step_authorization: number | null;\n button_text: string | null;\n is_self_step: boolean;\n summary: string | null;\n auth_description: string | null;\n hide_authorization: boolean;\n // step_condition: unknown | null;\n machine_name: string | null;\n is_custom_machine_name: boolean;\n}\n\nexport interface InitConfig {\n containerId: string;\n templateContainerId?: string;\n renderMode: TemplateFormRenderModes;\n}\n\nexport interface IntegrationResponse {\n id: number;\n guid: string;\n name: string;\n notification_email: string;\n bundle_name: string;\n template: number;\n template_detail: {\n id: number;\n name: string;\n description: string;\n };\n steps: {\n id: number;\n endpoint: string | null;\n authorization: string | number | null;\n app_user_data: {\n id: number;\n value: string;\n template_field: number;\n }[];\n template_step: number;\n returned_data: null | string;\n verb?: string | null;\n }[];\n is_visible: number;\n parent_integration: number | null;\n status: string;\n task_execution: {\n last_execution_at: string | null;\n status: string | null;\n integration_created_at: string;\n };\n created: string;\n last_modified: string;\n}\n\nexport interface TemplatePreviewData {\n id: number;\n name: string;\n description: string;\n app: App;\n branding_app: App;\n button_text: string | null;\n is_wizard: boolean;\n publishing_status: string;\n level?: number;\n parent_id?: number;\n steps: TemplateStep[];\n}\n\nexport const TemplatePreviewDataType: Describe<TemplatePreviewData> = object({\n id: number(),\n name: string(),\n description: string(),\n app: object({\n id: number(),\n name: string(),\n description: string(),\n icon_url: string(),\n color: string(),\n publishing_status: string(),\n category: array(string()),\n app_type: optional(string()),\n action_url: nullable(optional(string())),\n created_at: optional(date()),\n tags: string(),\n }),\n branding_app: object({\n id: number(),\n name: string(),\n description: string(),\n icon_url: string(),\n color: string(),\n publishing_status: string(),\n category: array(string()),\n app_type: optional(string()),\n action_url: nullable(optional(string())),\n created_at: optional(date()),\n tags: string(),\n }),\n button_text: nullable(string()),\n is_wizard: boolean(),\n publishing_status: string(),\n steps: size(\n array(\n object({\n id: number(),\n weight: number(),\n title: string(),\n is_visible: boolean(),\n activity: object({\n id: number(),\n name: string(),\n type: string(),\n endpoint: string(),\n auth_required: boolean(),\n total_fields: number(),\n app: object({\n id: number(),\n name: string(),\n description: string(),\n icon_url: string(),\n color: string(),\n publishing_status: string(),\n category: array(string()),\n app_type: optional(string()),\n action_url: nullable(optional(string())),\n created_at: optional(date()),\n tags: string(),\n }),\n activity_output: nullable(string()),\n activity_output_url: nullable(string()),\n dynamic_field_data_endpoint: nullable(string()),\n }),\n authorization_type: object({\n id: number(),\n type: string(),\n authorizations: array(\n object({\n id: number(),\n authorization_type: string(),\n app_user: optional(number()),\n app_user_id: optional(number()),\n disable_link: optional(string()),\n integration_count: optional(number()),\n user_identity: string(),\n }),\n ),\n provider: string(),\n is_sandbox_enabled: boolean(),\n authorization_url_sandbox: string(),\n }),\n template_fields: array(\n object({\n id: number(),\n is_required: boolean(),\n is_hidden: boolean(),\n default_value: nullable(string()),\n weight: number(),\n description: string(),\n summary: nullable(string()),\n placeholder: nullable(string()),\n activity_field: nullable(\n object({\n id: number(),\n machine_name: string(),\n type: string(),\n title: string(),\n description: string(),\n weight: number(),\n is_required: boolean(),\n child_fields: nullable(string()),\n is_dynamic: boolean(),\n data_src: nullable(string()),\n data_src_endpoint: nullable(number()),\n parent_fields: nullable(string()),\n dynamic_field_src: nullable(string()),\n default_value: nullable(string()),\n auto_machine_name: string(),\n dynamic_field_src_endpoint: nullable(number()),\n regex: nullable(string()),\n is_searchable: boolean(),\n }),\n ),\n title: nullable(string()),\n type: string(),\n // manual_template: unknown | null;\n child_field: nullable(string()),\n child_field_value: nullable(string()),\n // template_fields: unknown[];\n button_text: nullable(string()),\n // field_actions: unknown[];\n icon_url: nullable(string()),\n long_description: nullable(string()),\n regex: nullable(string()),\n regex_msg: nullable(string()),\n is_visible: boolean(),\n }),\n ),\n // step_instance: unknown | null;\n allow_multiple_authorizations: boolean(),\n step_authorization: nullable(number()),\n button_text: nullable(string()),\n is_self_step: boolean(),\n summary: nullable(string()),\n auth_description: nullable(string()),\n hide_authorization: boolean(),\n // step_condition: unknown | null;\n machine_name: nullable(string()),\n is_custom_machine_name: boolean(),\n }),\n ),\n 0,\n Number.POSITIVE_INFINITY,\n ),\n});\n\nexport interface PreviewMetadata {\n stepId: number | null;\n type: 'AUTH' | 'CONFIGURATION' | 'CONFIRMATION' | 'SECTION';\n}\n\nexport interface PreviewPayload {\n templateData: TemplatePreviewData;\n metadata: PreviewMetadata;\n previewContainerId: string;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\nconst Loader = () => html`\n <svg\n class=${styles.loader}\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.13037 0.179352C7.57047 -0.168051 5.94039 -0.00810102 4.47777 0.635883C3.01515 1.27987 1.79647 2.37421 0.999409 3.75937C0.202348 5.14453 -0.131421 6.74808 0.0467641 8.33623C0.224949 9.92438 0.90577 11.4141 1.98997 12.5882C3.07417 13.7623 4.50506 14.5593 6.07402 14.8632C7.64298 15.167 9.26799 14.9618 10.7121 14.2773C12.1562 13.5929 13.344 12.4651 14.1022 11.0582C14.8604 9.65144 15.1494 8.03922 14.9271 6.45665L14.1844 6.56098C14.3845 7.9853 14.1243 9.43629 13.442 10.7024C12.7596 11.9685 11.6906 12.9836 10.3909 13.5996C9.09119 14.2156 7.62869 14.4003 6.21662 14.1269C4.80455 13.8534 3.51675 13.136 2.54097 12.0794C1.56519 11.0227 0.952454 9.68194 0.792088 8.2526C0.631721 6.82327 0.932113 5.38008 1.64947 4.13343C2.36682 2.88679 3.46363 1.90188 4.77999 1.32229C6.09635 0.742709 7.56343 0.598754 8.96733 0.911417L9.13037 0.179352Z\"\n fill=\"#E0E0E0\"\n />\n <path\n d=\"M14.93 6.47755C14.7207 4.95709 14.0501 3.53742 13.0085 2.41017C11.9669 1.28292 10.6046 0.50235 9.10537 0.173829L8.94483 0.906446C10.2941 1.20212 11.5202 1.90462 12.4577 2.91915C13.3951 3.93368 13.9987 5.21138 14.187 6.57979L14.93 6.47755Z\"\n fill=\"#ADADAD\"\n />\n </svg>\n`;\n\nexport { Loader };\n","/**\n * Utility types\n */\n\nexport type OrNull<Type> = Type | null;\n\nexport type OneOrMany<Type> = Type | Type[];\n\nexport type OneOrManyOrNull<Type> = OrNull<OneOrMany<Type>>;\n\nexport type Merge<A, B> = {\n [K in keyof (A | B)]: K extends keyof B ? B[K] : A[K];\n};\n\nexport function notEmpty<TValue>(\n value: TValue | null | undefined,\n): value is TValue {\n return value !== null && value !== undefined;\n}\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * Modified version of https://github.com/rschristian/preact-hint\n * for Preact with htm with added support for:\n * 1. bottom position\n * 2. dismissing popup on click of target element\n */\n\nimport { html } from 'htm/preact';\nimport type { ComponentChild, VNode } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\nimport styles from './styles.module.scss';\n\ninterface Props {\n children: ComponentChild | ComponentChild[];\n dismissOnClick?: boolean;\n position?: 'top' | 'bottom';\n attribute?: string;\n template?: (content: string) => VNode;\n}\n\ninterface HintProps {\n content: string;\n position: 'top' | 'bottom';\n template?: (content: string) => VNode;\n rootBoundingRect: ClientRect;\n targetBoundingRect: ClientRect;\n}\n\nexport function HintWrap(props: HintProps): VNode {\n const hint = useRef<HTMLSpanElement | null>(null);\n // Render way off-screen to prevent rubber banding from initial (and unavoidable) render.\n const [hintWidth, setHintWidth] = useState(10000);\n\n const { position } = props;\n\n useEffect(() => {\n if (hint.current) {\n setHintWidth(hint.current.getBoundingClientRect().width);\n }\n }, [hint]);\n\n return html`\n <div\n class=\"${`${styles['preact-hint']} ${\n position === 'top'\n ? styles['preact-hint__top']\n : styles['preact-hint__bottom']\n }`}\"\n style=${{\n ...{\n left:\n props.targetBoundingRect.left -\n props.rootBoundingRect.left -\n hintWidth / 2 +\n props.targetBoundingRect.width / 2,\n },\n ...(position === 'top'\n ? {\n bottom:\n props.rootBoundingRect.height -\n props.targetBoundingRect.top +\n props.rootBoundingRect.top +\n 2,\n }\n : {\n top:\n props.rootBoundingRect.height -\n props.targetBoundingRect.top +\n props.rootBoundingRect.top +\n 2,\n }),\n }}\n >\n <pre class=${styles['preact-hint__content']} ref=${hint}>\n ${props.template ? props.template(props.content) : props.content}\n </pre\n >\n </div>\n `;\n}\n\nexport const Hint = (props: Props): VNode => {\n const { position = 'bottom', attribute = 'data-hint' } = props;\n const [content, setContent] = useState<string>('');\n const [\n containerElement,\n setContainerElement,\n ] = useState<HTMLDivElement | null>(null);\n const [\n targetBoundingRect,\n setTargetBoundingRect,\n ] = useState<ClientRect | null>(null);\n\n const onRefChange = useCallback(\n (node: HTMLDivElement | null) => {\n setContainerElement(node);\n if (containerElement) {\n containerElement.addEventListener('mouseover', (e) => {\n if (e.target instanceof Element && e.target.hasAttribute(attribute)) {\n setContent(e.target.getAttribute(attribute) || '');\n setTargetBoundingRect(e.target.getBoundingClientRect());\n }\n });\n containerElement.addEventListener('mouseout', (e) => {\n if (e.target instanceof Element && e.target.hasAttribute(attribute)) {\n setContent('');\n setTargetBoundingRect(null);\n }\n });\n if (props.dismissOnClick)\n containerElement.addEventListener('click', () => {\n setContent('');\n setTargetBoundingRect(null);\n });\n }\n },\n [containerElement],\n );\n\n return html`\n <div ref=${onRefChange} style=\"position: relative\">\n ${content &&\n containerElement &&\n targetBoundingRect &&\n html` <${HintWrap}\n content=${content}\n position=${position}\n template=${props.template}\n rootBoundingRect=${containerElement?.getBoundingClientRect()}\n targetBoundingRect=${targetBoundingRect}\n />`}\n ${props.children}\n </div>\n `;\n};\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ThreeDotLoaderProps {\n size?: number;\n color?: string;\n}\nconst LoaderDot = (props: { color: string; size: number }) => html`\n <svg\n width=${props.size}\n height=${props.size}\n viewBox=\"0 0 ${props.size} ${props.size}\"\n fill=${props.color}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"${props.size / 2}\"\n cy=${props.size / 2}\n r=${props.size / 2}\n fill=${props.color}\n />\n </svg>\n`;\n\nconst ThreeDotLoader = (props: ThreeDotLoaderProps) => {\n const { size = 6, color = '#fff' } = props;\n\n return html`\n <div class=${styles.loader}>\n <${LoaderDot} size=${size} color=${color} />\n <${LoaderDot} size=${size} color=${color} />\n <${LoaderDot} size=${size} color=${color} />\n </div>\n `;\n};\n\nexport { ThreeDotLoader };\n","import { html } from 'htm/preact';\nimport cx from 'classnames';\n\nimport { Hint } from '@/components/Tooltip';\nimport { ThreeDotLoader } from '@/components/ThreeDotLoader';\n\nimport styles from './styles.module.scss';\n\nexport enum ButtonTypes {\n PRIMARY = 'primary',\n SECONDARY = 'secondary',\n LINK = 'link',\n}\n\nexport interface ButtonProps {\n label: string;\n type?: ButtonTypes;\n color?: string;\n dismissOnClick?: boolean;\n position?: 'top' | 'bottom';\n tooltip?: string;\n isLoading?: boolean;\n disabled?: boolean;\n backgroundColor: string;\n onClick: (e: MouseEvent) => void;\n}\n\n/**\n * Button component\n *\n */\nexport const Button = (props: ButtonProps) => {\n const {\n label,\n type = ButtonTypes.PRIMARY,\n color = null,\n backgroundColor = null,\n disabled = false,\n tooltip,\n dismissOnClick = true,\n isLoading = false,\n position = 'bottom',\n onClick = undefined,\n ...restOfProps\n } = props;\n\n return html`\n <${Hint} dismissOnClick=${dismissOnClick} position=${position}>\n <button\n type=\"button\"\n onclick=${onClick}\n data-hint=${tooltip || null}\n class=${cx(styles.button, {\n [styles.buttonPrimary]: type === ButtonTypes.PRIMARY,\n [styles.buttonSecondary]: type === ButtonTypes.SECONDARY,\n [styles.buttonLink]: type === ButtonTypes.LINK,\n [styles.disabled]: disabled,\n })}\n style=${{\n backgroundColor:\n type === ButtonTypes.PRIMARY ? backgroundColor : null,\n borderColor: type === ButtonTypes.PRIMARY ? backgroundColor : color,\n color,\n }}\n ${{ ...restOfProps }}\n >\n ${isLoading ? html`<${ThreeDotLoader} />` : label}\n </button>\n <//>\n `;\n};\n","import { html } from 'htm/preact';\nimport { StructError } from 'superstruct';\nimport { Button } from '../Button';\n\nimport styles from './styles.module.scss';\n\ninterface ErrorPageProps {\n title: string;\n description: string;\n errorPayload: Error | StructError | null;\n onDismiss?: () => void;\n}\n\n/**\n * ErrorPage component\n *\n */\nconst ErrorPage = (props: ErrorPageProps) => {\n const { title, description, errorPayload, onDismiss = null } = props;\n\n return html`\n <div class=\"${styles.errorPageWrapper}\">\n <div class=${styles.errorTitle}>${title}</div>\n <div class=${styles.errorDescription}>${description}</div>\n ${errorPayload &&\n html`\n <div class=${styles.errorContainer}>\n <pre class=${styles.errorPayload}>${errorPayload.message}</pre>\n <pre class=${styles.errorPayload}>${errorPayload.stack}</pre>\n </div>\n `}\n ${onDismiss &&\n html`\n <div>\n <${Button} label=\"Dismiss\" onClick=${onDismiss} />\n </div>\n `}\n </div>\n `;\n};\n\nexport { ErrorPage, ErrorPageProps };\n","import { RefObject } from 'preact';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\n\nimport useEventListener from './useEventListener';\n\ninterface Size {\n width: number;\n height: number;\n}\n\nfunction useElementSize<T extends HTMLElement = HTMLDivElement>(\n elementRef: RefObject<T>,\n): Size {\n const [size, setSize] = useState<Size>({\n width: 0,\n height: 0,\n });\n\n // Prevent too many rendering using useCallback\n const updateSize = useCallback(() => {\n const node = elementRef?.current;\n if (node) {\n setSize({\n width: node.offsetWidth || 0,\n height: node.offsetHeight || 0,\n });\n }\n }, [elementRef]);\n\n // Initial size on mount\n useEffect(() => {\n updateSize();\n }, []);\n\n useEventListener('resize', updateSize);\n\n return size;\n}\n\nexport default useElementSize;\n","import { RefObject } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\n\nfunction useEventListener<T extends HTMLElement = HTMLDivElement>(\n eventName: keyof WindowEventMap,\n handler: (event: Event) => void,\n element?: RefObject<T>,\n) {\n // Create a ref that stores handler\n const savedHandler: RefObject<(event: Event) => void> = useRef<\n (event: Event) => void\n >();\n\n useEffect(() => {\n // Define the listening target\n const targetElement: T | Window = element?.current || window;\n if (!(targetElement && targetElement.addEventListener)) {\n return;\n }\n\n // Update saved handler if necessary\n if (savedHandler.current !== handler) {\n savedHandler.current = handler;\n }\n\n // Create event listener that calls handler function stored in ref\n const eventListener = (event: Event) => {\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!savedHandler?.current) {\n savedHandler.current(event);\n }\n };\n\n targetElement.addEventListener(eventName, eventListener);\n\n // Remove event listener on cleanup\n // eslint-disable-next-line consistent-return\n return () => {\n targetElement.removeEventListener(eventName, eventListener);\n };\n }, [eventName, element, handler]);\n}\n\nexport default useEventListener;\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ntype NavItemProps = {\n label: string;\n logoUrl?: string;\n isDisabled?: boolean;\n isActive?: boolean;\n isCompleted?: boolean;\n isLastStep?: boolean;\n showArrow?: boolean;\n onClick?(): void;\n};\n\nconst TickMark = html` <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <rect opacity=\"0.7\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#2ECC71\" />\n <path\n d=\"M9.23107 6.34619L6.96066 8.94234L5.76953 7.58033\"\n stroke=\"white\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n</svg>`;\n\nconst FinalTickMark = html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"7.5\"\n cy=\"7.5\"\n r=\"6.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10.3333 5.5L6.83522 9.5L5 7.40148\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n`;\n\nclass NavItem extends Component<NavItemProps> {\n render() {\n const {\n logoUrl,\n isActive = false,\n isCompleted = false,\n isDisabled = false,\n isLastStep = false,\n onClick = () => null,\n showArrow = true,\n } = this.props;\n return html`\n <div\n class=${`${styles.navItem} ${isDisabled ? styles.disabled : ''} ${\n isActive ? styles.active : ''\n }`}\n onclick=${onClick}\n tabindex=\"-1\"\n role=\"button\"\n >\n <div class=${styles.navItemContent}>\n <div class=${styles.imgContainer}>\n ${!(isCompleted && !isActive)\n ? html`<img src=${logoUrl} />`\n : TickMark}\n ${isLastStep && FinalTickMark}\n </div>\n <p>${this.props.label}</p>\n ${!isLastStep &&\n showArrow &&\n html`\n <div class=${styles.arrow}>\n <svg\n width=\"6\"\n height=\"11\"\n viewBox=\"0 0 6 11\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.917969 1.33366L5.08464 5.50033L0.917969 9.66699\"\n stroke=\"#999999\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n `}\n </div>\n </div>\n `;\n }\n}\n\nexport { NavItem, NavItemProps };\n","/**\n * https://usehooks.com/useOnClickOutside/\n */\n\nimport { RefObject } from 'preact';\nimport { useEffect } from 'preact/hooks';\n\nexport function useOnClickOutside(\n ref: RefObject<HTMLDivElement>,\n handler: (event: MouseEvent | TouchEvent) => unknown,\n) {\n useEffect(\n () => {\n const listener = (event: MouseEvent | TouchEvent) => {\n // Do nothing if clicking ref's element or descendent elements\n if (event.target instanceof HTMLElement) {\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n }\n handler(event);\n };\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n },\n // Add ref and handler to effect dependencies\n // It's worth noting that because passed in handler is a new ...\n // ... function on every render that will cause this effect ...\n // ... callback/cleanup to run every render. It's not a big deal ...\n // ... but to optimize you can wrap handler in useCallback before ...\n // ... passing it into this hook.\n [ref, handler],\n );\n}\n","import { html } from 'htm/preact';\nimport { useRef, useState } from 'preact/hooks';\nimport { StepStateStep } from '@/types/store';\nimport { useOnClickOutside } from '@/hooks/useOnClickOutside';\n\nimport { NavItem } from './NavItem';\n\nimport styles from './styles.module.scss';\n\ninterface CollapsedStepsProps {\n isPreviewMode?: boolean;\n currentStepIndex: number;\n changeStep(index: number): void;\n steps: StepStateStep[];\n}\n\nconst CollapsedSteps = (props: CollapsedStepsProps) => {\n const { steps, currentStepIndex, isPreviewMode, changeStep } = props;\n\n const collapseRef = useRef<HTMLDivElement>();\n const dotsRef = useRef<HTMLDivElement>();\n\n const [showCollapsed, setShowCollapsed] = useState(false);\n\n useOnClickOutside(collapseRef, () =>\n showCollapsed ? setShowCollapsed(false) : null,\n );\n\n // useEffect(() => {\n // const onMouseOver = () => {\n // setShowCollapsed(true);\n // };\n // const onMouseLeave = () => {\n // setShowCollapsed(false);\n // };\n // dotsRef.current?.addEventListener('mouseenter', onMouseOver);\n // collapseRef.current?.addEventListener('mouseleave', onMouseLeave);\n\n // return () => {\n // dotsRef.current?.removeEventListener('mouseenter', onMouseOver);\n // collapseRef.current?.removeEventListener('mouseleave', onMouseLeave);\n // };\n // }, []);\n\n return html`\n <div class=${styles.collapse}>\n <div\n class=${styles.dots}\n ref=${dotsRef}\n onclick=${() => setShowCollapsed(true)}\n >\n <svg\n width=\"16\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M3.60039 9.83213C4.26313 9.83213 4.80039 9.29487 4.80039 8.63213C4.80039 7.96939 4.26313 7.43213 3.60039 7.43213C2.93765 7.43213 2.40039 7.96939 2.40039 8.63213C2.40039 9.29487 2.93765 9.83213 3.60039 9.83213Z\"\n fill=\"#333333\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.60039 9.83213C8.26313 9.83213 8.80039 9.29487 8.80039 8.63213C8.80039 7.96939 8.26313 7.43213 7.60039 7.43213C6.93765 7.43213 6.40039 7.96939 6.40039 8.63213C6.40039 9.29487 6.93765 9.83213 7.60039 9.83213Z\"\n fill=\"#333333\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.6004 9.83213C12.2631 9.83213 12.8004 9.29487 12.8004 8.63213C12.8004 7.96939 12.2631 7.43213 11.6004 7.43213C10.9376 7.43213 10.4004 7.96939 10.4004 8.63213C10.4004 9.29487 10.9376 9.83213 11.6004 9.83213Z\"\n fill=\"#333333\"\n />\n </svg>\n </div>\n <div\n ref=${collapseRef}\n class=\"${styles.popup} ${showCollapsed ? styles.show : ''}\"\n >\n ${steps.map(\n (el) => html`<div class=${styles.stepItem}>\n <${NavItem}\n label=${el.type !== 'CONFIRMATION' ? el.title : 'Confirmation'}\n logoUrl=${el.type !== 'CONFIRMATION' && el.iconUrl}\n isCompleted=${!isPreviewMode && el.isCompleted}\n isActive=${el.type !== 'CONFIRMATION' &&\n currentStepIndex === el.itemIndex}\n isDisabled=${(isPreviewMode &&\n Number(currentStepIndex) !== el.itemIndex) ||\n Number(currentStepIndex) < el.itemIndex}\n isLastStep=${false}\n showArrow=${false}\n onClick=${() => {\n setShowCollapsed(false);\n changeStep(el.itemIndex);\n }}\n />\n </div>`,\n )}\n </div>\n <div class=${styles.arrow}>\n <svg\n width=\"6\"\n height=\"11\"\n viewBox=\"0 0 6 11\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.917969 1.33366L5.08464 5.50033L0.917969 9.66699\"\n stroke=\"#999999\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n </div>\n `;\n};\n\nexport { CollapsedSteps };\n","/* eslint-disable no-console */\nimport { html } from 'htm/preact';\nimport { useContext, useState, useEffect, useRef } from 'preact/hooks';\nimport { connect } from 'unistore/preact';\nimport { StepStateStep, StoreType } from '@/types/store';\n\nimport AppContext from '@/contexts/AppContext';\nimport { actionFunctions } from '@/store';\nimport useElementResize from '@/hooks/useElementResize';\nimport useDebounce from '@/hooks/useDebounce';\n\nimport { NavItem } from './NavItem';\nimport { CollapsedSteps } from './CollapsedSteps';\n\nimport styles from './styles.module.scss';\n\nexport type StepNavigationProps = StoreType;\n\ninterface ParsedStep {\n type: 'VISIBLE' | 'COLLAPSED';\n steps: StepStateStep[];\n}\n\nconst StepNavigation = (props: StepNavigationProps) => {\n const MAX_STEP_WIDTH = 220;\n\n const wrapRef = useRef<HTMLDivElement>();\n\n const {\n gotoStep,\n stepState: {\n stepIndex: currentStepIndex,\n steps,\n currentStep: step,\n allStepsCompleted,\n },\n } = props;\n const context = useContext(AppContext);\n\n const { width } = useElementResize(wrapRef);\n\n const debouncedWidth = useDebounce(width, 150);\n\n const [parsedSteps, setParsedSteps] = useState<ParsedStep[]>([]);\n\n useEffect(() => {\n let widthToUse = 0;\n // immediately use width and then use debounded value\n if (debouncedWidth === 0) widthToUse = width;\n else widthToUse = debouncedWidth;\n\n let composedArray: ParsedStep[] = [];\n\n if (wrapRef.current) {\n // console.log('Width of step container:', debouncedWidth);\n // console.log('Max width:', MAX_STEP_WIDTH);\n // console.log('Number of steps:', steps.length);\n\n const stepsToShow = widthToUse / MAX_STEP_WIDTH;\n // console.log('step_width / MAX_WIDTH:', stepsToShow);\n\n let itemIndex = -1;\n\n if (stepsToShow <= steps.length) {\n // const canShowComfortably = Math.floor(stepsToShow);\n // console.log(\n // 'Collapsed state enabled since we can only show:',\n // canShowComfortably,\n // );\n if (steps.length <= 2) {\n // simple template with upto 2 steps, always show all\n // console.log(\n // 'Simple template with upto three steps, always show all three',\n // );\n // first and second, and confirmation step are always shown.\n composedArray.push({\n type: 'VISIBLE',\n steps: steps.map((el) => {\n itemIndex += 1;\n return {\n ...el,\n itemIndex,\n };\n }),\n });\n } else if (steps.length > 2) {\n itemIndex += 1;\n\n // now we have to check logic\n // console.log(\n // 'Template has more than 3 steps, checking collapse states',\n // );\n // if index is not first or last\n // always show first step\n composedArray.push({\n type: 'VISIBLE',\n steps: [{ ...steps[0], itemIndex }],\n });\n\n if (currentStepIndex !== 0 && currentStepIndex !== steps.length) {\n // check middle cases\n if (currentStepIndex > 1) {\n // console.log('More steps on the left exist');\n composedArray.push({\n type: 'COLLAPSED',\n steps: steps.slice(1, currentStepIndex).map((el) => {\n itemIndex += 1;\n return { ...el, itemIndex };\n }),\n });\n }\n\n // add the current step in every case\n composedArray.push({\n type: 'VISIBLE',\n steps: [\n { ...steps[currentStepIndex], itemIndex: currentStepIndex },\n ],\n });\n itemIndex += 1;\n\n if (steps.length - currentStepIndex > 1) {\n // console.log('More steps on the right exist');\n composedArray.push({\n type: 'COLLAPSED',\n steps: steps\n .slice(currentStepIndex + 1, steps.length)\n .map((el) => {\n itemIndex += 1;\n return {\n ...el,\n itemIndex,\n };\n }),\n });\n }\n } else {\n // console.log('Show first, last, collapsed steps in middle');\n composedArray.push({\n type: 'COLLAPSED',\n steps: steps.slice(1, steps.length).map((el) => {\n itemIndex += 1;\n return { ...el, itemIndex };\n }),\n });\n }\n }\n } else {\n // console.log('Showing all');\n composedArray = [\n {\n type: 'VISIBLE',\n steps: steps.map((el, idx) => ({\n ...el,\n itemIndex: idx,\n })),\n },\n ];\n }\n }\n // console.log({\n // composedArray,\n // });\n setParsedSteps(composedArray);\n }, [steps, width, debouncedWidth, currentStepIndex]);\n\n const changeStep = (stepIndex: number) => {\n gotoStep(stepIndex);\n };\n\n return html`\n <div class=${styles.navigation} ref=${wrapRef}>\n ${parsedSteps.map((parent) => {\n if (parent.type === 'VISIBLE') {\n return parent.steps.map(\n (el) => html`\n <div\n class=${styles.stepItem}\n style=${{\n maxWidth: MAX_STEP_WIDTH,\n }}\n >\n <${NavItem}\n label=${el.type !== 'CONFIRMATION'\n ? el.title\n : 'Confirmation'}\n logoUrl=${el.type !== 'CONFIRMATION' && el.iconUrl}\n isCompleted=${!context?.isPreviewMode && el.isCompleted}\n isActive=${step?.type !== 'CONFIRMATION' &&\n el.type !== 'CONFIRMATION' &&\n currentStepIndex === el.itemIndex}\n isDisabled=${!allStepsCompleted &&\n ((context?.isPreviewMode &&\n Number(currentStepIndex) !== el.itemIndex) ||\n Number(currentStepIndex) < el.itemIndex)}\n isLastStep=${el.itemIndex === steps.length}\n onClick=${() => changeStep(el.itemIndex)}\n />\n </div>\n `,\n );\n }\n if (parent.type === 'COLLAPSED') {\n return html`\n <${CollapsedSteps}\n isPreviewMode=${context?.isPreviewMode}\n currentStepIndex=${currentStepIndex}\n changeStep=${changeStep}\n steps=${parent.steps}\n />\n `;\n }\n return html`<></>`;\n })}\n ${parsedSteps.length > 0 &&\n html`\n <${NavItem}\n label=\"Confirmation\"\n logoUrl=\"\"\n isCompleted=${true}\n isActive=${step !== undefined && currentStepIndex === steps.length}\n isDisabled=${!allStepsCompleted &&\n step !== undefined &&\n currentStepIndex !== steps.length}\n isLastStep=${true}\n onClick=${() => changeStep(steps.length ?? 0)}\n />\n `}\n </div>\n `;\n};\n\nexport default connect<StepNavigationProps, unknown, StoreType, unknown>(\n 'stepState',\n actionFunctions,\n)(StepNavigation);\n","import { useEffect, useState } from 'preact/hooks';\n\nfunction useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nexport default useDebounce;\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\nexport interface RadioProps extends HTMLInputElement {\n description?: string;\n value: string;\n isChecked?: boolean;\n onChange?: (id: string) => void;\n}\n\n/**\n * Radio component\n *\n */\nexport const Radio = (props: RadioProps) => {\n const {\n id,\n description = null,\n value,\n isChecked = false,\n onChange = () => null,\n } = props;\n\n const handleRadioChange = (e: MouseEvent) => {\n e.preventDefault();\n if (e.currentTarget instanceof HTMLDivElement) {\n onChange(id);\n }\n };\n\n return html`\n <div class=${styles.radio}>\n <input\n id=${value}\n type=\"radio\"\n name=${id}\n value=${value}\n checked=${isChecked}\n />\n <div onclick=${handleRadioChange}>\n <label for=${value}>\n <div class=${styles.button}>\n ${isChecked\n ? html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14 7.5C14 11.0899 11.0899 14 7.5 14C3.91015 14 1 11.0899 1 7.5C1 3.91015 3.91015 1 7.5 1C11.0899 1 14 3.91015 14 7.5Z\"\n fill=\"white\"\n stroke=\"#5F4D86\"\n stroke-width=\"2\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.5 11C9.433 11 11 9.433 11 7.5C11 5.567 9.433 4 7.5 4C5.567 4 4 5.567 4 7.5C4 9.433 5.567 11 7.5 11Z\"\n fill=\"#5F4D86\"\n />\n </svg>\n `\n : html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14 7.5C14 11.0899 11.0899 14 7.5 14C3.91015 14 1 11.0899 1 7.5C1 3.91015 3.91015 1 7.5 1C11.0899 1 14 3.91015 14 7.5Z\"\n fill=\"white\"\n stroke=\"#E2E0DB\"\n stroke-width=\"2\"\n />\n </svg>\n `}\n </div>\n <div>\n <div class=${styles.text}>${value}</div>\n ${description &&\n html`<div class=${styles.description}>${description}</div>`}\n </div>\n </label>\n </div>\n </div>\n `;\n};\n","import { FunctionComponent } from 'preact';\nimport { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\n/**\n * ErrorMessage component\n *\n */\nconst ErrorMessage: FunctionComponent = (props) => {\n const { children } = props;\n\n return html` <div class=${styles.errorMessage}>${children}</div> `;\n};\n\nexport { ErrorMessage };\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface LabelProps {\n title: string;\n description?: string;\n isRequired?: boolean;\n}\n\nconst Label = (props: LabelProps) => {\n const { title, description, isRequired = false } = props;\n return html`\n <div class=${styles.label}>\n <label>\n <div>\n ${title}\n ${isRequired && html`<span class=${styles.required}>*</span>`}\n </div>\n ${description && html`<div>${description}</div>`}\n </label>\n </div>\n `;\n};\n\nexport { Label, LabelProps };\n","export default () => ![typeof window, typeof document].includes('undefined');\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\n\nimport { Loader } from '@/components/Loader';\nimport { IntegryAPI } from '@/modules/api';\nimport { Radio } from '@/components/RadioGroup/Radio';\nimport { Button, ButtonTypes } from '@/components/Button';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { Label } from '@/components/Label';\nimport { Authorization, StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\nimport isBrowser from '@/utils/isBrowser';\nimport AppContext from '@/contexts/AppContext';\n\nimport { openPopupWindow } from '@/utils/popup';\nimport { AuthData, isAuthMessage } from '@/utils/isAuthMessage';\n\nimport styles from './styles.module.scss';\n\ninterface AuthSelectorPropsType extends StoreType {\n stepId: number;\n apiHandler: IntegryAPI;\n showErrors?: boolean;\n onAuthSelected(\n authId: number | null,\n isVerified: boolean,\n override: boolean,\n ): void;\n}\n\ninterface AuthSelectorStateType {\n isLoading: boolean;\n fetched: boolean;\n}\n\nconst Resend = () => html`\n <svg\n class=${styles.resend}\n width=\"13\"\n height=\"15\"\n viewBox=\"0 0 13 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.8403 5.34L10.1453 6.345C10.5053 6.96 10.7003 7.68 10.7003 8.445C10.7003 10.77 8.81031 12.645 6.50031 12.645C4.19031 12.645 2.30031 10.755 2.30031 8.445C2.30031 6.135 4.19031 4.245 6.50031 4.245V6.15L11.1053 3.27L6.50031 0.375V2.28C3.09531 2.28 0.320312 5.055 0.320312 8.46C0.320313 11.85 3.09531 14.625 6.50031 14.625C9.90531 14.625 12.6803 11.85 12.6803 8.445C12.6803 7.32 12.3653 6.255 11.8403 5.34Z\"\n fill=\"#8D8D8D\"\n />\n </svg>\n`;\n\nconst AuthorizationRow = (props: {\n id: string;\n value: string;\n isChecked?: boolean;\n isLoading: boolean;\n isDeleting?: boolean;\n error?: string;\n status: 'VERIFYING' | 'CONNECTED' | 'ERROR' | 'IDLE' | null;\n handleChange?: (id: string) => void;\n handleReverify?: () => void;\n handleDelete?: () => void;\n}) => {\n const {\n id,\n value,\n isChecked,\n status = 'IDLE',\n isDeleting = false,\n handleChange,\n handleReverify,\n handleDelete = () => null,\n error,\n } = props;\n return html`\n <div class=${styles.checkboxRow}>\n <${Radio}\n id=${id}\n value=${value}\n isChecked=${isChecked}\n onChange=${handleChange}\n />\n <div class=${styles.statusWrap}>\n <div class=${styles.status}>\n <div>\n ${status === 'VERIFYING' &&\n !isDeleting &&\n html`<div class=${styles.statusOrange} />\n Verifying <${Loader} /> `}\n </div>\n <div>\n ${status === 'CONNECTED' &&\n !error &&\n !isDeleting &&\n html`<div class=${styles.statusGreen} />\n Connected`}\n </div>\n <div>\n ${status === 'ERROR' &&\n !isDeleting &&\n html`<div class=${styles.statusRed} />\n Failed\n <div onclick=${handleReverify}><${Resend} /></div>`}\n </div>\n ${isDeleting && html`<${Loader} />`}\n ${error &&\n !isDeleting &&\n !(status === 'VERIFYING') &&\n html`<div class=${styles.error}>${error}</div>`}\n </div>\n <div class=${styles.deleteIcon} onclick=${handleDelete}>\n ${!(status === 'VERIFYING' || isDeleting) &&\n html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M1.5 4.1999H13.65\" stroke=\"#F05C42\" />\n <path\n d=\"M11.6254 5.5498V6.2248L10.9504 13.6498H4.20039L3.52539 6.2248V5.5498\"\n stroke=\"#F05C42\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M5.55078 3.525V2.175C5.55078 1.80221 5.85299 1.5 6.22578 1.5H8.92578C9.29857 1.5 9.60078 1.80221 9.60078 2.175V3.525\"\n stroke=\"#F05C42\"\n />\n </svg>\n `}\n </div>\n </div>\n </div>\n `;\n};\n\nclass AuthSelector extends Component<\n AuthSelectorPropsType,\n AuthSelectorStateType\n> {\n static contextType = AppContext;\n\n constructor(props: AuthSelectorPropsType) {\n super(props);\n this.state = {\n isLoading: false,\n fetched: false,\n };\n }\n\n componentDidMount() {\n if (isBrowser())\n window.addEventListener('message', this.onAuthResponseReceived);\n\n // in preview mode, auto-verify the auth we pass\n const { stepId, stepMapping } = this.props;\n const auth = stepMapping[stepId].selectedAuthId;\n const authIndex = stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === auth,\n );\n // auth is selected but is in idle state\n if (\n stepMapping[stepId].selectedAuthId &&\n this.getAuthStatus(stepMapping[stepId].authorizations[authIndex]) ===\n 'IDLE'\n ) {\n this.verifyAuth(authIndex, true);\n }\n }\n\n componentDidUpdate(prevProps: AuthSelectorPropsType) {\n const { stepId, stepMapping } = this.props;\n const step = stepMapping[stepId];\n const auth = step.selectedAuthId;\n\n const authIndex = stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === auth,\n );\n // verify auth whenever we select a new one\n if (auth !== prevProps.stepMapping[stepId].selectedAuthId && authIndex) {\n this.verifyAuth(authIndex);\n }\n if (\n step.authorizations.length ===\n prevProps.stepMapping[stepId].authorizations.length + 1\n ) {\n // auth was added so we verify\n this.verifyAuth(step.authorizations.length - 1);\n }\n }\n\n componentWillUnmount() {\n if (isBrowser())\n window.removeEventListener('message', this.onAuthResponseReceived);\n }\n\n private verifyAuth = (authIndex: number, override?: boolean) => {\n const { stepId } = this.props;\n const auth = this.props.stepMapping[stepId].authorizations[authIndex];\n\n if (!auth) return;\n\n if (auth.isVerified) {\n this.props.onAuthSelected(auth.authorizationId, true, !!override);\n return;\n }\n\n this.props.toggleVerifyAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isVerifying: true,\n });\n this.setState({ isLoading: true });\n\n this.props.apiHandler\n .verifyOAuth(auth.authorizationId)\n .then((res) => {\n if (res) {\n this.props.onAuthSelected(auth.authorizationId, true, !!override);\n } else {\n this.props.onAuthSelected(auth.authorizationId, false, !!override);\n }\n })\n .catch((err) => console.error(err))\n .finally(() => {\n this.props.toggleVerifyAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isVerifying: false,\n });\n this.setState({ isLoading: false });\n });\n };\n\n private deleteAuth = (authIndex: number) => {\n const { stepId } = this.props;\n const auth = this.props.stepMapping[stepId].authorizations[authIndex];\n\n this.props.toggleDeleteAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isDeleting: true,\n error: '',\n });\n\n this.props.apiHandler\n .deleteAuth(auth.authorizationId)\n .then((res) => {\n if (res?.status === 200) {\n this.props.removeAuthorization({\n stepId,\n authId: auth.authorizationId,\n });\n } else if (res?.status === 405) {\n // we have a deletion error\n this.props.toggleDeleteAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isDeleting: false,\n error: `${res.data}`,\n });\n } else {\n this.props.toggleDeleteAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isDeleting: false,\n error: 'An unexpected error occurred',\n });\n }\n })\n .catch((err) => {\n console.error(err);\n });\n };\n\n private onAuthResponseReceived = (messageEvent: MessageEvent<AuthData>) => {\n if (isAuthMessage(messageEvent) && messageEvent.data.activity_name) {\n console.info(messageEvent.data);\n if (this.props.stepId) {\n if (!messageEvent.data.already_exists) {\n this.props.addAuthorization({\n stepId: this.props.stepId,\n authData: {\n authorizationId: messageEvent.data.authorization_id,\n userIdentity: messageEvent.data.user_identity,\n disableLink: '',\n authType: '',\n isVerified: false,\n didFetchStatus: false,\n isVerifying: false,\n isDeleting: false,\n error: '',\n },\n });\n } else {\n this.props.setStepAuthId({\n stepId: this.props.stepId,\n authId: Number(messageEvent.data.authorization_id),\n });\n }\n }\n }\n };\n\n private getAuthStatus = (auth: Authorization) => {\n if (!auth) return null;\n let status = 'IDLE';\n if (auth.isVerified && auth.didFetchStatus) status = 'CONNECTED';\n if (!auth.isVerified && auth.didFetchStatus) status = 'ERROR';\n if (auth.isVerifying) status = 'VERIFYING';\n return status;\n };\n\n private getError = () => {\n const { stepId } = this.props;\n const step = this.props.stepMapping[stepId];\n if (!step.authorizations) {\n return `Please add a valid ${step.step.activity.app.name} account`;\n }\n return `Please select a valid ${step.step.activity.app.name} account`;\n };\n\n public openAuthWindow = () => {\n const { stepMapping, stepId } = this.props;\n const selectedStep = stepMapping[stepId].step;\n if (selectedStep) {\n const url = this.context.apiHandler.getAuthUrl(\n selectedStep.authorization_type.id,\n );\n openPopupWindow(url, 'Auth Window', window, 800, 600);\n }\n };\n\n render() {\n const { stepId, showErrors = false } = this.props;\n const step = this.props.stepMapping[stepId];\n const { authorizations } = step;\n\n return html`\n <div class=${styles.authSelectorWrap}>\n <${Label}\n title=\"Connect account\"\n description=${`Select your ${step.step.activity.app.name} account`}\n isRequired=${true}\n />\n <div class=${styles.rows}>\n ${authorizations.map(\n (el, index) => html`<${AuthorizationRow}\n id=${el.authorizationId}\n value=${el.userIdentity}\n status=${this.getAuthStatus(el)}\n isChecked=${el.authorizationId === step.selectedAuthId}\n isDeleting=${el.isDeleting}\n error=${el.error}\n handleChange=${() => this.verifyAuth(index)}\n handleReverify=${() => this.verifyAuth(index)}\n handleDelete=${() => this.deleteAuth(index)}\n />`,\n )}\n </div>\n <div class=${showErrors ? `${styles.error}` : ''}>\n <${Button}\n onClick=${() => this.openAuthWindow()}\n label=${`Add ${step.step.activity.app.name} account`}\n type=${ButtonTypes.SECONDARY}\n disabled=${this.state.isLoading}\n >\n <//>\n </div>\n ${showErrors && html`<${ErrorMessage}>${this.getError()}<//>`}\n </div>\n `;\n }\n}\n\nexport default connect<\n AuthSelectorPropsType,\n AuthSelectorStateType,\n StoreType,\n unknown\n>(\n ['stepMapping'],\n actionFunctions,\n)(AuthSelector);\n","interface AuthData {\n activity_name: string;\n already_exists: boolean;\n authorization_id: number;\n user_identity: string;\n}\n\nfunction isAuthMessage(\n msg: MessageEvent<AuthData>,\n): msg is MessageEvent<AuthData> {\n return (msg as MessageEvent<AuthData>) !== undefined;\n}\n\nexport { isAuthMessage, AuthData };\n","/**\n *\n * @param url Url to open in this popup window\n * @param windowName Given name\n * @param win Original window reference\n * @param w Width in px\n * @param h Height in px\n * @returns Reference to the newly created popup window\n */\nfunction openPopupWindow(\n url: string,\n windowName: string,\n win: Window,\n w: number,\n h: number,\n): Window | null {\n if (win.top) {\n const y = win.top.outerHeight / 2 + win.top.screenY - h / 2;\n const x = win.top.outerWidth / 2 + win.top.screenX - w / 2;\n return win.open(\n url,\n windowName,\n `toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=${w}, height=${h}, top=${y}, left=${x}`,\n );\n }\n return null;\n}\n\nexport { openPopupWindow };\n","/*! @license DOMPurify 2.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.1/LICENSE */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.DOMPurify = factory());\n}(this, function () { 'use strict';\n\n function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n var hasOwnProperty = Object.hasOwnProperty,\n setPrototypeOf = Object.setPrototypeOf,\n isFrozen = Object.isFrozen,\n getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze,\n seal = Object.seal,\n create = Object.create; // eslint-disable-line import/no-mutable-exports\n\n var _ref = typeof Reflect !== 'undefined' && Reflect,\n apply = _ref.apply,\n construct = _ref.construct;\n\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n\n if (!construct) {\n construct = function construct(Func, args) {\n return new (Function.prototype.bind.apply(Func, [null].concat(_toConsumableArray(args))))();\n };\n }\n\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n\n var regExpTest = unapply(RegExp.prototype.test);\n\n var typeErrorCreate = unconstruct(TypeError);\n\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return apply(func, thisArg, args);\n };\n }\n\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return construct(func, args);\n };\n }\n\n /* Add properties to a lookup table */\n function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n }\n\n /* Shallow clone an object */\n function clone(object) {\n var newObject = create(null);\n\n var property = void 0;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n }\n\n /* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n }\n\n var html = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n var svg = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n\n var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'feimage', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n\n var mathMl = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n\n var text = freeze(['#text']);\n\n var html$1 = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n\n var svg$1 = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n\n var mathMl$1 = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n\n var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n var MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n var ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html$$1) {\n return html$$1;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '2.3.1';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n var originalDocument = window.document;\n\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n Element = window.Element,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n Text = window.Text,\n Comment = window.Comment,\n DOMParser = window.DOMParser,\n trustedTypes = window.trustedTypes;\n\n\n var ElementPrototype = Element.prototype;\n\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML('') : '';\n\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n createDocumentFragment = _document.createDocumentFragment,\n getElementsByTagName = _document.getElementsByTagName;\n var importNode = originalDocument.importNode;\n\n\n var documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n\n var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,\n ERB_EXPR$$1 = ERB_EXPR,\n DATA_ATTR$$1 = DATA_ATTR,\n ARIA_ATTR$$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(html), _toConsumableArray$1(svg), _toConsumableArray$1(svgFilters), _toConsumableArray$1(mathMl), _toConsumableArray$1(text)));\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray$1(html$1), _toConsumableArray$1(svg$1), _toConsumableArray$1(mathMl$1), _toConsumableArray$1(xml)));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with <html>... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n var RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify.\n *\n * This defaults to `true` starting DOMPurify 2.2.0. Note that setting it to `false`\n * might cause XSS from attacks hidden in closed shadowroots in case the browser\n * supports Declarative Shadow: DOM https://web.dev/declarative-shadow-dom/\n */\n var RETURN_DOM_IMPORT = true;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n var RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n var SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n var IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n var USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = null;\n var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n var NAMESPACE = HTML_NAMESPACE;\n var IS_EMPTY_INPUT = false;\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT !== false; // Default true\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(text)));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html);\n addToSet(ALLOWED_ATTR, html$1);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl);\n addToSet(ALLOWED_ATTR, mathMl$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n\n var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n var ALL_SVG_TAGS = addToSet({}, svg);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n\n var ALL_MATHML_TAGS = addToSet({}, mathMl);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template'\n };\n }\n\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erronously deleted from\n // HTML namespace.\n var commonSvgAndHTMLElements = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG or MathML). Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n var _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n var _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n var doc = void 0;\n var leadingWhitespace = void 0;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, 'text/html');\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n var body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n var _isClobbered = function _isClobbered(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n\n if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function') {\n return true;\n }\n\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n var _isNode = function _isNode(object) {\n return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? object instanceof Node : object && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content = void 0;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (stringMatch(currentNode.nodeName, /[\\u0080-\\uFFFF]/)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n var tagName = stringToLowerCase(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (!_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Mitigate a problem with templates inside select */\n if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n var childCount = childNodes.length;\n\n for (var i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR$$1, ' ');\n content = stringReplace(content, ERB_EXPR$$1, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$$1, stringReplace(value, ATTR_WHITESPACE$$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$$1, stringReplace(value, ATTR_WHITESPACE$$1, ''))) ; else if (!value) ; else {\n return false;\n }\n\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr = void 0;\n var value = void 0;\n var lcName = void 0;\n var l = void 0;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n var attributes = currentNode.attributes;\n\n /* Check if we have attributes; if not we might have a text node */\n\n if (!attributes) {\n return;\n }\n\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n var _attr = attr,\n name = _attr.name,\n namespaceURI = _attr.namespaceURI;\n\n value = stringTrim(attr.value);\n lcName = stringToLowerCase(name);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR$$1, ' ');\n value = stringReplace(value, ERB_EXPR$$1, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n var lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode = void 0;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n var body = void 0;\n var importedNode = void 0;\n var currentNode = void 0;\n var oldNode = void 0;\n var returnNode = void 0;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw typeErrorCreate('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) ; else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : emptyHTML;\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$$1, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR$$1, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n var lcTag = stringToLowerCase(tag);\n var lcName = stringToLowerCase(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n }\n\n var purify = createDOMPurify();\n\n return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ListBoxItemProps {\n value: string;\n id: string;\n isSelected?: boolean;\n onClick(): void;\n}\n\nconst ListBoxItem = (props: ListBoxItemProps) => {\n const { id, value, isSelected, onClick } = props;\n return html`\n <span\n class=${`${styles.listboxItem} ${isSelected ? styles.selected : ''}`}\n data-value=${id}\n onclick=${onClick}\n >\n ${isSelected &&\n html`\n <svg\n width=\"7\"\n height=\"7\"\n viewBox=\"0 0 7 7\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"#333\"\n >\n <path\n d=\"M6.33333 1.5L2.83522 5.5L1 3.40148\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n `}\n ${value}\n </span>\n `;\n};\n\nexport { ListBoxItem, ListBoxItemProps };\n","import { html } from 'htm/preact';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\n\nimport { Label } from '@/components/Label';\nimport { useOnClickOutside } from '@/hooks/useOnClickOutside';\nimport { ThreeDotLoader } from '@/components/ThreeDotLoader';\nimport { IntegryAPI } from '@/modules/api';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { ListBoxItem, ListBoxItemProps } from './ListBoxItem';\n\nimport styles from './styles.module.scss';\n\ninterface ListBoxProps {\n title: string;\n description: string;\n items: Omit<ListBoxItemProps, 'onClick'>[];\n value?: string;\n onChange(val: string): void;\n isOpen?: boolean;\n isDynamic?: boolean;\n endpointUrl?: string;\n placeholder: string | null;\n isRequired?: boolean;\n showStepValidation?: boolean;\n responseMapper?(input: unknown): Omit<ListBoxItemProps, 'onClick'>[];\n apiHandler: IntegryAPI;\n endpointData: string;\n}\n\nconst ListBox = (props: ListBoxProps) => {\n const {\n title,\n description,\n items: passedItems = [],\n value = null,\n isOpen = false,\n isDynamic = false,\n endpointData,\n isRequired = false,\n placeholder,\n onChange = () => null,\n showStepValidation = false,\n responseMapper = (input: { id: string; value: string }[]) => input,\n } = props;\n\n const [items, setItems] = useState<Omit<ListBoxItemProps, 'onClick'>[]>(\n passedItems,\n );\n const [loading, setLoading] = useState(\n isDynamic && !passedItems.length && !value,\n );\n\n const [isDropdownOpen, setIsDropdownOpen] = useState(isOpen);\n\n const dropdownRef = useRef<HTMLDivElement>();\n\n useOnClickOutside(\n dropdownRef,\n () => isDropdownOpen && setIsDropdownOpen(false),\n );\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { apiHandler, isDynamic, endpointUrl } = props;\n if (isDynamic && endpointUrl) {\n setLoading(true);\n let data;\n try {\n data = JSON.parse(endpointData);\n } catch (error) {\n data = '';\n }\n apiHandler\n .callDynamicDataEndpoint<\n {\n id: string;\n value: string;\n }[]\n >(new URL(endpointUrl), data)\n .then((res) => {\n setLoading(false);\n if (res) {\n setItems(responseMapper(res));\n }\n });\n }\n }, [endpointData]);\n\n const toggleDropdown = () => {\n setIsDropdownOpen((prev) => !prev);\n };\n\n const onEnterClicked = () => {\n toggleDropdown();\n };\n\n const getSelectedItem = useMemo(() => {\n const index = items.findIndex((el) => el.id === value);\n return index > -1 ? items[index].value : 'Please Select...';\n }, [items, value]);\n\n return html`\n <div ref=${dropdownRef} class=\"${styles.listboxGroupWrapper}\">\n <fieldset>\n ${title &&\n html`\n <${Label}\n title=${title}\n description=${description}\n isRequired=${isRequired}\n />\n `}\n <div class=${styles.listbox}>\n <div\n class=${`${styles.customSelect} ${\n isDropdownOpen ? styles.open : ''\n }`}\n >\n <div\n class=${`${styles.customSelectTrigger} ${\n showStepValidation &&\n !value &&\n isRequired &&\n !isDropdownOpen &&\n styles.error\n }`}\n role=\"button\"\n tabindex=${0}\n onclick=${toggleDropdown}\n onkeyup=${(e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onEnterClicked();\n }\n }}\n >\n <span class=${value && styles.selected}>\n ${loading\n ? html`Loading`\n : html`\n ${items.length > 0\n ? html`\n ${value\n ? html`${getSelectedItem}`\n : html`${placeholder || 'Please Select...'}`}\n `\n : html`No options`}\n `}\n </span>\n\n <div ref=${dropdownRef} style=\"display: flex;\">\n ${loading\n ? html`<${ThreeDotLoader} color=\"#ababab\"><//>`\n : html`\n <div\n class=${`${styles.arrow} ${\n isDropdownOpen ? styles.close : ''\n }`}\n >\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11 1.5L6 6.5L1 1.5\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n `}\n </div>\n </div>\n <div class=${styles.customOptions}>\n ${items.length > 0 &&\n !loading &&\n html`\n ${items.map(\n (el) => html`\n <${ListBoxItem}\n key=${el.id}\n id=${el.id}\n value=${el.value}\n isSelected=${value === el.id}\n onClick=${() => {\n onChange(el.id);\n setIsDropdownOpen(false);\n }}\n ><//>\n `,\n )}\n `}\n </div>\n </div>\n ${showStepValidation &&\n !value &&\n !isDropdownOpen &&\n isRequired &&\n html` <${ErrorMessage}>Please select an option</${ErrorMessage}>`}\n </div>\n </fieldset>\n </div>\n `;\n};\n\nexport { ListBox, ListBoxProps };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '@/components/ErrorMessage';\n\nimport styles from './styles.module.scss';\n\nexport interface CheckboxProps extends Partial<HTMLInputElement> {\n label: { id: number; value: string }[];\n name: string;\n description?: string;\n value: string;\n isChecked?: boolean;\n isRequired?: boolean;\n showStepValidation?: boolean;\n handleChange?: (id: string, value: boolean) => void;\n}\n\n/**\n * Checkbox component\n *\n */\nexport const Checkbox = (props: CheckboxProps) => {\n const {\n label,\n name,\n description = null,\n value,\n isRequired = false,\n isChecked = false,\n showStepValidation = false,\n handleChange = () => null,\n } = props;\n\n const handleCheckboxChange = (e: MouseEvent) => {\n if (e.target instanceof HTMLInputElement) {\n const { id: changedId, checked } = e.target;\n handleChange(changedId, checked);\n }\n };\n\n return html`\n <div class=${styles.checkboxWrap}>\n <div class=${styles.checkbox}>\n <label for=${name}>\n <input\n id=${name}\n type=\"checkbox\"\n name=${name}\n value=${value}\n checked=${isChecked}\n onclick=${handleCheckboxChange}\n />\n <div class=${styles.button}>\n ${isChecked\n ? html`\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.86364 15.5L10 13.4923L17.5 6.49357L15.3485 4.5L7.86364 11.4987L4.63636 8.50129L2.5 10.4949L5.71212 13.4923L7.86364 15.5Z\"\n fill=\"#5F4D86\"\n />\n <path\n d=\"M0 0V-2H-2V0H0ZM20 0H22V-2H20V0ZM20 20V22H22V20H20ZM0 20H-2V22H0V20ZM0 2H20V-2H0V2ZM18 0V20H22V0H18ZM20 18H0V22H20V18ZM2 20V0H-2V20H2Z\"\n fill=\"#5F4D86\"\n />\n </svg>\n `\n : html`\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 0V-2H-2V0H0ZM20 0H22V-2H20V0ZM20 20V22H22V20H20ZM0 20H-2V22H0V20ZM0 2H20V-2H0V2ZM18 0V20H22V0H18ZM20 18H0V22H20V18ZM2 20V0H-2V20H2Z\"\n fill=\"#5F4D86\"\n />\n </svg>\n `}\n </div>\n <div>\n <div class=${styles.text}>\n ${label.map((data) => html`${data.value}`)}\n </div>\n ${description &&\n html`<div class=${styles.description}>${description}</div>`}\n </div>\n </label>\n </div>\n ${showStepValidation &&\n !value &&\n isRequired &&\n html` <${ErrorMessage}>Please select an option</${ErrorMessage}>`}\n </div>\n `;\n};\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\nconst LargeLoader = () => html`\n <svg\n class=${styles.loader}\n width=\"26\"\n height=\"25\"\n viewBox=\"0 0 26 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.7173 0.29892C13.1175 -0.280085 10.4006 -0.0135017 7.96294 1.0598C5.52524 2.13311 3.49412 3.95702 2.16568 6.26562C0.837246 8.57421 0.280965 11.2468 0.57794 13.8937C0.874915 16.5406 2.00962 19.0235 3.81662 20.9803C5.62362 22.9371 8.00843 24.2656 10.6234 24.772C13.2383 25.2784 15.9466 24.9363 18.3535 23.7956C20.7604 22.6548 22.74 20.7751 24.0036 18.4304C25.2673 16.0857 25.749 13.3987 25.3785 10.7611L24.1406 10.935C24.4741 13.3088 24.0406 15.7272 22.9033 17.8374C21.766 19.9476 19.9844 21.6393 17.8182 22.666C15.652 23.6927 13.2145 24.0006 10.861 23.5448C8.50758 23.089 6.36125 21.8934 4.73495 20.1323C3.10866 18.3711 2.08742 16.1366 1.82015 13.7543C1.55287 11.3721 2.05352 8.96679 3.24911 6.88905C4.44471 4.81132 6.27272 3.1698 8.46665 2.20382C10.6606 1.23785 13.1057 0.997923 15.4456 1.51903L15.7173 0.29892Z\"\n fill=\"#EFEFEF\"\n />\n <path\n d=\"M25.3833 10.7959C25.0346 8.26181 23.9168 5.8957 22.1808 4.01695C20.4449 2.13819 18.1743 0.83725 15.6756 0.289715L15.4081 1.51074C17.6569 2.00353 19.7004 3.17437 21.2628 4.86525C22.8251 6.55613 23.8311 8.68563 24.145 10.9663L25.3833 10.7959Z\"\n fill=\"#C4C4C4\"\n />\n </svg>\n`;\n\nexport { LargeLoader };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '../ErrorMessage';\n\nimport styles from './styles.module.scss';\n\ninterface SelectProps {\n ariaLabel: string;\n options: { label: string; key: string }[];\n placeholder: string;\n value?: string;\n showUnselectedValue?: boolean;\n unselectedText?: string;\n isRequired?: boolean;\n showStepValidation?: boolean;\n onChange?: (index: number) => void;\n}\n\n/**\n * Input component\n *\n */\nconst Select = (props: SelectProps) => {\n const {\n placeholder,\n ariaLabel,\n value,\n options = [],\n showUnselectedValue = false,\n unselectedText = 'Select a value',\n isRequired = false,\n showStepValidation = false,\n onChange = () => null,\n } = props;\n\n const handleInputChange = (e: MouseEvent) => {\n if (e.currentTarget instanceof HTMLSelectElement) {\n const { value: newValue } = e.currentTarget;\n const val = options.findIndex((el) => `${el.key}` === `${newValue}`);\n onChange(val);\n }\n };\n\n return html`\n <div class=${styles.selectWrapper}>\n <select\n aria-label=${ariaLabel}\n onchange=${handleInputChange}\n class=${value && styles.selectedVal}\n >\n ${showUnselectedValue &&\n html` <option value=\"\">${unselectedText}</option> `}\n ${value === undefined &&\n html`\n <option value=\"\" disabled selected hidden>${placeholder}</option>\n `}\n ${options.map(\n (el) => html`\n <option value=${el.key} selected=${value === el.key}>\n ${el.label}\n </option>\n `,\n )}\n </select>\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11 1.5L6 6.5L1 1.5\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n ${isRequired &&\n !value &&\n showStepValidation &&\n html`<${ErrorMessage}>Please map this required field<//>`}\n `;\n};\n\nexport { Select, SelectProps };\n","import { html } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { useContext, useEffect, useRef, useState } from 'preact/hooks';\nimport { TemplateField } from '@/interfaces';\nimport AppContext from '@/contexts/AppContext';\nimport { StoreType } from '@/types/store';\nimport { LargeLoader } from '@/components/LargeLoader';\nimport { actionFunctions } from '@/store';\nimport { Label } from '@/components/Label';\nimport { Select } from '@/components/BasicSelect';\n\nimport styles from './styles.module.scss';\n\nexport type MappingUiProps = {\n stepId: number;\n templateFields: TemplateField[];\n showStepValidation?: boolean;\n endpointData: {\n authId: number;\n fieldsData: Record<string, string | number>;\n };\n} & StoreType;\n\ninterface DynamicDataItem {\n fieldId: number;\n id: string | null;\n title: string | null;\n type: string;\n isNotDynamic?: boolean;\n}\n\nconst MappingUI = (props: MappingUiProps) => {\n const [loading, setLoading] = useState<boolean>(true);\n const [rootDataLoading, setRootDataLoading] = useState<boolean>(false);\n const [dynamicDataLoading, setDynamicDataLoading] = useState<boolean>(false);\n const [fieldsRef, setFieldsRef] = useState<number[]>([]);\n const [dynamicItems, setDynamicItems] = useState<DynamicDataItem[]>([]);\n const [dynamicListId, setDynamicListId] = useState('');\n\n const context = useContext(AppContext);\n\n const dynamicFieldIdRef = useRef('');\n\n useEffect(() => {\n if (dynamicItems.length > 0) {\n // eslint-disable-next-line array-callback-return\n dynamicItems.map((el, index) => {\n const ele = props.stepDataMapping[props.stepId][el.fieldId];\n if (!ele.isDynamic && ele.value) {\n const parsedValue = ele.value.slice(1, -1);\n if (parsedValue) setFieldsRef((prev) => [...prev, index]);\n } else if (ele.isDynamic && ele.objectValue && el.id) {\n const parsedValues = ele.objectValue || {};\n if (parsedValues[el.id]) {\n setFieldsRef((prev) => [...prev, index]);\n }\n }\n });\n }\n }, [dynamicItems]);\n\n useEffect(() => {\n const dynamicFieldToRender = props.templateFields.filter(\n (el) => el.activity_field && el.activity_field.type === 'DYNAMIC',\n )[0];\n\n if (dynamicFieldToRender) setDynamicListId(`${dynamicFieldToRender.id}`);\n const textFieldsToRender = props.templateFields\n .filter(\n (el) =>\n el.activity_field &&\n el.activity_field.type === 'TEXTFIELD' &&\n el.is_visible,\n )\n .map((el) => ({\n fieldId: el.id,\n id: el.activity_field && el.activity_field.machine_name,\n title: el.activity_field && el.activity_field.title,\n type: 'text',\n isNotDynamic: true,\n }));\n\n if (dynamicFieldToRender.activity_field) {\n const mappingField =\n props.parentChildMapping[props.stepId][\n dynamicFieldToRender.activity_field.machine_name\n ];\n\n let valuesMapField = '';\n if (mappingField) {\n const valuesMap = mappingField.parentFields?.reduce((prev, next) => {\n const parentFieldId =\n props.parentChildMapping[props.stepId][next].fieldId;\n return {\n ...prev,\n [parentFieldId]:\n props.stepDataMapping[props.stepId][parentFieldId].value,\n };\n }, {});\n valuesMapField = JSON.stringify(valuesMap);\n }\n\n if (valuesMapField !== dynamicFieldIdRef.current) {\n setLoading(true);\n setRootDataLoading(true);\n setDynamicDataLoading(true);\n // eslint-disable-next-line no-use-before-define\n setRootStepData();\n\n // eslint-disable-next-line no-use-before-define\n fetchDynamicFieldData(dynamicFieldToRender)\n ?.then((res) => {\n setLoading(false);\n // props.resetCustomMappingData(props.stepId);\n setFieldsRef([]);\n dynamicFieldIdRef.current = valuesMapField;\n if (Array.isArray(res)) {\n setDynamicItems([\n ...textFieldsToRender,\n ...res.map((el) => ({\n ...el,\n fieldId: dynamicFieldToRender.id,\n })),\n ]);\n } else {\n setDynamicItems(textFieldsToRender);\n }\n })\n .catch((err) => console.error(err));\n }\n }\n }, [props.stepDataMapping[props.stepId]]);\n\n const getVisibleFieldsDataOnRootStep = (\n stepId: number,\n ): {\n [machineName: string]: string;\n } => {\n const fields = props.stepDataMapping[stepId];\n const requiredFieldsWithValues = Object.keys(fields)\n .filter((el) => fields[Number(el)].value)\n .reduce((prev, curr) => {\n const currentItem = fields[Number(curr)];\n return {\n ...prev,\n [currentItem.machineName]: currentItem.value,\n };\n }, {});\n\n return requiredFieldsWithValues;\n };\n\n const setRootStepData = async () => {\n const triggerStepId = props.stepState.steps[0].stepId;\n const additionalData = getVisibleFieldsDataOnRootStep(triggerStepId);\n\n let stepData;\n if (triggerStepId) {\n stepData = props.stepMapping[triggerStepId].step;\n if (\n stepData.activity.type === 'TRIGGER' ||\n stepData.activity.type === 'QUERY' ||\n stepData.activity.type === 'ADAPTER'\n ) {\n if (stepData.activity.activity_output_url) {\n setRootDataLoading(true);\n context?.apiHandler\n .callDynamicDataEndpoint<\n {\n text: string;\n value: string;\n }[]\n >(new URL(stepData.activity.activity_output_url), {\n authorization_id: `${props.stepMapping[triggerStepId].selectedAuthId}`,\n ...additionalData,\n })\n .then((res) => {\n setRootDataLoading(false);\n if (res)\n props.setActivityOutputData({\n activityOutputData: res,\n });\n });\n } else {\n setRootDataLoading(false);\n }\n if (stepData.activity.dynamic_field_data_endpoint) {\n setDynamicDataLoading(true);\n context?.apiHandler\n .callDynamicDataEndpoint<{\n [fieldId: string]: (string | Record<string, string>)[];\n }>(new URL(stepData.activity.dynamic_field_data_endpoint), {\n authorization_id: `${props.stepMapping[triggerStepId].selectedAuthId}`,\n ...additionalData,\n })\n .then((res) => {\n setDynamicDataLoading(false);\n if (res)\n props.setDynamicFieldData({\n dynamicFieldData: res,\n });\n });\n } else {\n setDynamicDataLoading(false);\n }\n }\n }\n };\n\n const fetchDynamicFieldData = (templateField: TemplateField) => {\n const dynamicEndpoint = `${templateField.activity_field?.dynamic_field_src}`;\n return context?.apiHandler.callDynamicDataEndpoint<DynamicDataItem[]>(\n new URL(dynamicEndpoint),\n {\n authorization_id: `${props.endpointData.authId}`,\n ...props.endpointData.fieldsData,\n },\n );\n };\n\n const onMappingValueSelected = (\n index: number,\n item: DynamicDataItem,\n isRequired: boolean,\n rowIndex: number,\n ) => {\n const activityOutputObject = props.activityOutputData?.[index];\n const arrayIndex = fieldsRef.findIndex((el) => el === rowIndex);\n if (index < 0) {\n setFieldsRef((prev) => prev.filter((el) => el !== rowIndex));\n if (item.isNotDynamic) {\n props.setStepFieldData({\n stepId: `${props.stepId}`,\n fieldId: `${item.fieldId}`,\n value: '',\n isRequired,\n });\n } else if (dynamicListId) {\n props.setStepMappingData({\n stepId: props.stepId,\n fieldId: Number(dynamicListId),\n id: `${item.id}`,\n value: null,\n });\n }\n } else if (activityOutputObject) {\n if (arrayIndex < 0) {\n setFieldsRef((prev) => [...prev, rowIndex]);\n }\n if (item.isNotDynamic) {\n props.setStepFieldData({\n stepId: `${props.stepId}`,\n fieldId: `${item.fieldId}`,\n value: `{${activityOutputObject.value}}`,\n isRequired,\n });\n } else if (dynamicListId) {\n props.setStepMappingData({\n stepId: props.stepId,\n fieldId: Number(dynamicListId),\n id: `${item.id}`,\n value: `{${activityOutputObject.value}}`,\n });\n }\n }\n };\n\n return html`\n <div>\n <${Label}\n title=\"Map data\"\n description=\"Please map fields you want to use from both apps\"\n />\n <div>\n ${loading || rootDataLoading || dynamicDataLoading\n ? html`<div class=${styles.loader}><${LargeLoader} /></div>`\n : html`\n <div class=${styles.mappingWrap}>\n <div class=${styles.mappingRow}>\n <div class=${styles.mappingHeaderItem}>\n <img\n src=${props.stepMapping[props.stepId].step.activity.app\n .icon_url}\n />\n <div>\n ${`${\n props.stepMapping[props.stepId].step.activity.app.name\n } Field`}\n </div>\n </div>\n <div class=${styles.sampleData}>Sample Data</div>\n <div class=${styles.mappingHeaderItem}>\n <img src=${props.genericData.templateApp?.iconUrl} />\n <div>${props.genericData.templateApp?.name} Field</div>\n </div>\n </div>\n ${dynamicItems.map((el, itemIndex) => {\n const slug = el.id || '';\n const ele = props.stepDataMapping[props.stepId][el.fieldId];\n let selectVal;\n let parsedVal: string | Record<string, string | number>;\n if (ele.isDynamic) {\n parsedVal = ele.objectValue as Record<\n string,\n string | number\n >;\n } else {\n parsedVal = ele.value?.slice(1, -1) as string;\n }\n if (!ele.isDynamic && parsedVal) {\n selectVal = parsedVal;\n } else if (\n el.id &&\n ele.isDynamic &&\n ele.objectValue &&\n (parsedVal as Record<string, string | number>)[slug]\n ) {\n selectVal = `${\n (parsedVal as Record<string, string | number>)[slug]\n }`.slice(1, -1);\n }\n return html`\n <div class=${styles.mappingRow}>\n <div class=${styles.title}>\n ${el.title}${ele?.isRequired && html`<span>*</span>`}\n </div>\n <div class=${styles.sampleData}>\n ${props.dynamicFieldData &&\n selectVal &&\n props.dynamicFieldData[\n `{${selectVal}}`\n ]?.map((sample: string | Record<string, string>) =>\n sample ? html`<pre>${sample}</pre>` : html``,\n )}\n </div>\n <div class=${styles.selectBox}>\n <${Select}\n ariaLabel=\"Map a value\"\n placeholder=\"Please map a value\"\n options=${props.activityOutputData?.map((item) => ({\n key: item.value,\n label: item.text,\n }))}\n value=${selectVal}\n isRequired=${ele?.isRequired}\n showStepValidation=${props.showStepValidation}\n showUnselectedValue=${true}\n unselectedText=\"Skip\"\n onChange=${(index: number) =>\n onMappingValueSelected(\n index,\n el,\n ele?.isRequired ?? false,\n itemIndex,\n )}\n ><//>\n </div>\n </div>\n `;\n })}\n <div class=${styles.mappingInfo}>\n <div>\n <span>Mapped</span>\n <span\n >${fieldsRef.length}${' '}\n field${fieldsRef.length !== 1 ? 's' : ''}</span\n >\n </div>\n <div>\n <span>Ignored</span>\n <span\n >${dynamicItems.length - fieldsRef.length}${' '}\n field${dynamicItems.length - fieldsRef.length !== 1\n ? 's'\n : ''}</span\n >\n </div>\n </div>\n </div>\n `}\n </div>\n </div>\n `;\n};\n\nexport default connect<MappingUiProps, unknown, StoreType, unknown>(\n [\n 'stepState',\n 'genericData',\n 'stepMapping',\n 'activityOutputData',\n 'dynamicFieldData',\n 'stepDataMapping',\n 'parentChildMapping',\n ],\n actionFunctions,\n)(MappingUI);\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface BaseInputProps extends Partial<HTMLInputElement> {\n placeholder: string;\n value: string;\n control?: Component;\n handleChange?: (id: string) => void;\n}\n\n/**\n * BaseInput component\n *\n */\nconst BaseInput = (props: BaseInputProps) => {\n const {\n placeholder,\n value,\n type = 'text',\n control,\n handleChange = () => null,\n } = props;\n\n const handleInputChange = (e: MouseEvent) => {\n if (e.currentTarget instanceof HTMLInputElement) {\n const { value: newValue } = e.currentTarget;\n handleChange(newValue);\n }\n };\n\n const handleDateChange = (e: InputEvent) => {\n if (\n e.currentTarget instanceof HTMLInputElement &&\n e.currentTarget.type === 'date'\n ) {\n const { value: newValue } = e.currentTarget;\n handleChange(newValue);\n }\n };\n\n return html`\n <div class=${styles.inputWrapper}>\n <input\n type=${type}\n placeholder=${placeholder}\n value=${value}\n onkeyup=${handleInputChange}\n onchange=${handleDateChange}\n />\n ${control && html`<${control} //>`}\n </div>\n `;\n};\n\nexport { BaseInput, BaseInputProps };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { Label } from '@/components/Label';\n\nimport { BaseInput } from '../BaseInput';\nimport styles from './styles.module.scss';\n\ninterface InputProps {\n title: string;\n description: string;\n placeholder: string;\n value?: string;\n isRequired?: boolean;\n showStepValidation?: boolean;\n onChange?: (val: string) => void;\n}\n\n/**\n * Input component\n *\n */\nconst Input = (props: InputProps) => {\n const {\n title,\n description,\n placeholder,\n value,\n showStepValidation = false,\n isRequired = false,\n onChange = () => null,\n } = props;\n\n const handleChange = (inputValue: string) => {\n onChange(inputValue);\n };\n\n return html`\n <div class=\"${styles.inputGroupWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <${BaseInput}\n type=\"text\"\n placeholder=${placeholder}\n handleChange=${handleChange}\n value=${value}\n ><//>\n </fieldset>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a value<//>`}\n </div>\n `;\n};\n\nexport { Input, InputProps };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { Label } from '@/components/Label';\nimport { BaseInput } from '../BaseInput';\n\nimport styles from './styles.module.scss';\n\ninterface DateInputProps {\n title: string;\n description: string;\n placeholder: string;\n showStepValidation?: boolean;\n isRequired?: boolean;\n value?: string;\n onChange?: (val: string) => void;\n}\n\n/**\n * DateInput component\n *\n */\nconst DateInput = (props: DateInputProps) => {\n const {\n title,\n description,\n placeholder,\n value,\n showStepValidation = false,\n isRequired = false,\n onChange = () => null,\n } = props;\n\n return html`\n <div class=\"${styles.dateGroupWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <${BaseInput}\n type=\"date\"\n placeholder=${placeholder}\n handleChange=${onChange}\n value=${value}\n control=${() => html` <div\n role=\"button\"\n class=${styles.visibilityToggle}\n onclick=${() => {\n if (value) onChange('');\n }}\n >\n ${!value\n ? html`\n <svg\n width=\"25\"\n height=\"26\"\n viewBox=\"0 0 25 26\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M16.9543 5.5464H19.335L19.3349 5.54639C20.6491 5.54639 21.7156 6.61204 21.7156 7.92812L21.7147 19.8323C21.7147 21.1466 20.6482 22.2131 19.334 22.2131H5.04866C3.73449 22.2131 2.66797 21.1466 2.66797 19.8323V7.92719C2.66797 6.61296 3.73444 5.54639 5.04866 5.54639L7.42936 5.5473V4.35641C7.42936 3.69791 7.96262 3.16553 8.62019 3.16553C9.27777 3.16553 9.81102 3.69791 9.81102 4.35641V5.5464L14.5717 5.5473V4.35641C14.5717 3.69791 15.105 3.16553 15.7626 3.16553C16.4201 3.16553 16.9534 3.69791 16.9534 4.35641L16.9543 5.5464ZM4.04688 20.8324H20.3369L20.3358 8.7124H4.04688V20.8324Z\"\n fill=\"#999999\"\n />\n </svg>\n `\n : html`\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M9 0C13.9673 0 18 4.03275 18 9C18 13.9673 13.9673 18 9 18C4.03275 18 0 13.9673 0 9C0 4.03275 4.03275 0 9 0ZM9 0.75C13.5533 0.75 17.25 4.44675 17.25 9C17.25 13.5533 13.5533 17.25 9 17.25C4.44675 17.25 0.75 13.5533 0.75 9C0.75 4.44675 4.44675 0.75 9 0.75ZM9 8.46975L12.9697 4.5L13.5 5.03025L9.53025 9L13.5 12.9697L12.9697 13.5L9 9.53025L5.03025 13.5L4.5 12.9697L8.46975 9L4.5 5.03025L5.03025 4.5L9 8.46975Z\"\n fill=\"black\"\n />\n </svg>\n `}\n </div>`}\n ><//>\n </fieldset>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a date<//>`}\n </div>\n `;\n};\n\nexport { DateInput, DateInputProps };\n","import { html } from 'htm/preact';\nimport { useState } from 'preact/hooks';\n\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { BaseInput } from '../BaseInput';\nimport { Label } from '../../Label';\n\nimport styles from './styles.module.scss';\n\ninterface PasswordInputProps {\n id: string;\n title: string;\n description: string;\n placeholder: string;\n showStepValidation?: boolean;\n isRequired?: boolean;\n value?: string;\n onChange?: (val: string) => void;\n}\n\n/**\n * Input component\n *\n */\nconst PasswordInput = (props: PasswordInputProps) => {\n const {\n title,\n description,\n placeholder,\n value,\n showStepValidation = false,\n isRequired = false,\n onChange = () => null,\n } = props;\n\n const [passwordShown, setPasswordShown] = useState(false);\n\n const togglePasswordVisiblity = () => {\n setPasswordShown((isShown) => !isShown);\n };\n\n return html`\n <div class=\"${styles.passwordInputWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <${BaseInput}\n type=${passwordShown ? 'text' : 'password'}\n placeholder=${placeholder}\n handleChange=${onChange}\n value=${value}\n control=${() => html`\n <div\n class=${styles.visibilityToggle}\n onclick=${togglePasswordVisiblity}\n >\n ${!passwordShown\n ? html` <svg\n width=\"20\"\n height=\"12\"\n viewBox=\"0 0 20 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M0.183387 6.51359C0.35582 6.72918 4.47535 11.6704 9.71968 11.6704V11.6704C14.964 11.6704 19.0836 6.72924 19.256 6.51357C19.5005 6.21515 19.5005 5.78535 19.256 5.48691V5.48615C19.0835 5.27523 14.964 0.330078 9.71968 0.330078C4.47535 0.330078 0.355766 5.27507 0.183387 5.48693C-0.0611291 5.78535 -0.0611291 6.21515 0.183387 6.51359ZM9.71968 10.0499C6.1643 10.0499 3.04855 7.1924 1.90266 6.00018C3.04632 4.80579 6.1643 1.95044 9.71968 1.95044C13.2751 1.95044 16.3908 4.80797 17.5367 6.00018C16.393 7.19458 13.2751 10.0499 9.71968 10.0499Z\"\n fill=\"#999999\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M6.94922 8.29099C7.55668 8.89849 8.3806 9.24021 9.24022 9.24021C10.0998 9.24021 10.9237 8.89845 11.5312 8.29099C12.1387 7.68353 12.4804 6.85956 12.4804 5.99999C12.4804 5.14041 12.1387 4.31648 11.5312 3.70898C10.9238 3.10148 10.0998 2.75977 9.24022 2.75977C8.38064 2.75977 7.55672 3.10152 6.94922 3.70898C6.34172 4.31644 6 5.14041 6 5.99999C6 6.85956 6.34176 7.68349 6.94922 8.29099ZM7.7435 5.3803C7.99408 4.77431 8.58488 4.38021 9.24022 4.38021C9.67002 4.38021 10.0816 4.55031 10.3854 4.85481C10.6899 5.15856 10.86 5.57015 10.86 5.99995C10.86 6.65529 10.4659 7.24607 9.85987 7.49667C9.25464 7.74727 8.5583 7.60905 8.09509 7.14508C7.63111 6.68186 7.49289 5.98552 7.7435 5.3803Z\"\n fill=\"#999999\"\n />\n </svg>`\n : html` <svg\n width=\"20\"\n height=\"12\"\n viewBox=\"0 0 20 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M0.183387 6.51359C0.35582 6.72918 4.47535 11.6704 9.71968 11.6704V11.6704C14.964 11.6704 19.0836 6.72924 19.256 6.51357C19.5005 6.21515 19.5005 5.78535 19.256 5.48691V5.48615C19.0835 5.27523 14.964 0.330078 9.71968 0.330078C4.47535 0.330078 0.355766 5.27507 0.183387 5.48693C-0.0611291 5.78535 -0.0611291 6.21515 0.183387 6.51359ZM9.71968 10.0499C6.1643 10.0499 3.04855 7.1924 1.90266 6.00018C3.04632 4.80579 6.1643 1.95044 9.71968 1.95044C13.2751 1.95044 16.3908 4.80797 17.5367 6.00018C16.393 7.19458 13.2751 10.0499 9.71968 10.0499Z\"\n fill=\"#333333\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M6.94922 8.29099C7.55668 8.89849 8.3806 9.24021 9.24022 9.24021C10.0998 9.24021 10.9237 8.89845 11.5312 8.29099C12.1387 7.68353 12.4804 6.85956 12.4804 5.99999C12.4804 5.14041 12.1387 4.31648 11.5312 3.70898C10.9238 3.10148 10.0998 2.75977 9.24022 2.75977C8.38064 2.75977 7.55672 3.10152 6.94922 3.70898C6.34172 4.31644 6 5.14041 6 5.99999C6 6.85956 6.34176 7.68349 6.94922 8.29099ZM7.7435 5.3803C7.99408 4.77431 8.58488 4.38021 9.24022 4.38021C9.67002 4.38021 10.0816 4.55031 10.3854 4.85481C10.6899 5.15856 10.86 5.57015 10.86 5.99995C10.86 6.65529 10.4659 7.24607 9.85987 7.49667C9.25464 7.74727 8.5583 7.60905 8.09509 7.14508C7.63111 6.68186 7.49289 5.98552 7.7435 5.3803Z\"\n fill=\"#333333\"\n />\n </svg>`}\n </div>\n `}\n ><//>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a value<//>`}\n </fieldset>\n </div>\n `;\n};\n\nexport { PasswordInput, PasswordInputProps };\n","import { copyStringToClipboard } from '@/utils/copyToClipboard';\nimport { html } from 'htm/preact';\nimport { ErrorMessage } from '../ErrorMessage';\nimport { Label } from '../Label';\n\nimport styles from './styles.module.scss';\n\ninterface TextAreaProps {\n title: string;\n description: string;\n placeholder: string;\n value?: string;\n showStepValidation?: boolean;\n isRequired?: boolean;\n showCopyButton?: boolean;\n onChange?: (val: string) => void;\n}\n\n/**\n * TextArea component\n *\n */\nconst TextArea = (props: TextAreaProps) => {\n const {\n title,\n description,\n value,\n placeholder,\n onChange = () => null,\n showStepValidation = false,\n showCopyButton = false,\n isRequired = false,\n } = props;\n\n const handleInputChange = (e: InputEvent) => {\n if (e.currentTarget instanceof HTMLTextAreaElement) {\n const { value: newValue } = e.currentTarget;\n onChange(newValue);\n }\n };\n\n const onCopy = () => {\n copyStringToClipboard(value || '');\n };\n\n return html`\n <div class=\"${styles.textareaInputWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <textarea\n placeholder=${placeholder}\n value=${value}\n oninput=${handleInputChange}\n />\n ${showCopyButton &&\n html`\n <div onclick=${onCopy} class=${styles.copyButton}>\n <svg\n width=\"12\"\n height=\"15\"\n viewBox=\"0 0 12 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.75\"\n y=\"1\"\n width=\"7.5\"\n height=\"9.5\"\n rx=\"0.75\"\n stroke=\"#999999\"\n stroke-width=\"1.5\"\n />\n <rect\n x=\"3.75\"\n y=\"4.5\"\n width=\"7.5\"\n height=\"9.5\"\n rx=\"0.75\"\n fill=\"#E4E4E4\"\n stroke=\"#999999\"\n stroke-width=\"1.5\"\n />\n </svg>\n </div>\n `}\n </fieldset>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a value<//>`}\n </div>\n `;\n};\n\nexport { TextArea, TextAreaProps };\n","export const copyStringToClipboard = (str: string) => {\n if (!navigator.clipboard) {\n // Create new element\n const el = document.createElement('textarea');\n // Set value (string to be copied)\n el.value = str;\n // Set non-editable to avoid focus and move outside of view\n el.setAttribute('readonly', '');\n\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n document.body.appendChild(el);\n // Select text inside element\n el.select();\n // Copy text to clipboard\n document.execCommand('copy');\n // Remove temporary element\n document.body.removeChild(el);\n } else {\n navigator.clipboard.writeText(str).catch(() => {\n console.error('Could not copy to clipboard'); // error\n });\n }\n};\n","import { html } from 'htm/preact';\nimport { useContext, useEffect, useRef, useState } from 'preact/hooks';\n\nimport AppContext from '@/contexts/AppContext';\nimport { Radio } from './Radio';\nimport { Label } from '../Label';\nimport { ErrorMessage } from '../ErrorMessage';\n\nimport styles from './styles.module.scss';\nimport { ThreeDotLoader } from '../ThreeDotLoader';\n\ninterface RadioItem {\n id: string;\n value: string;\n}\n\nexport interface RadioGroupProps {\n title: string;\n description: string;\n isDynamic: boolean;\n dataSrcEndpoint?: string;\n ariaLabel: string;\n selectedItemIndex?: number;\n options: RadioItem[];\n isRequired?: boolean;\n showStepValidation?: boolean;\n onChange?: (selected: string) => void;\n}\n\n/**\n * RadioGroup component\n *\n */\nexport const RadioGroup = (props: RadioGroupProps) => {\n const {\n options,\n title,\n description,\n ariaLabel,\n selectedItemIndex = null,\n isDynamic,\n dataSrcEndpoint,\n isRequired = false,\n showStepValidation = false,\n onChange = () => null,\n } = props;\n\n if (\n selectedItemIndex !== null &&\n (selectedItemIndex < 0 || selectedItemIndex >= options.length)\n )\n throw new Error('Iniital item index out of bounds');\n\n const [loading, setLoading] = useState(isDynamic);\n\n const preSelectedItem =\n selectedItemIndex !== null ? options[selectedItemIndex].value : '';\n\n const selectedItemRef = useRef(preSelectedItem);\n\n const [selectedItem, setSelectedItem] = useState(preSelectedItem);\n const [error, setError] = useState<string | null>(null);\n\n const handleChange = (inputValue: string) => {\n setSelectedItem(inputValue);\n };\n\n const [parsedOptions, setParsedOptions] = useState<\n { id: string; value: string }[]\n >([]);\n\n const context = useContext(AppContext);\n\n useEffect(() => {\n if (isDynamic) {\n if (dataSrcEndpoint) {\n // call dynamic endpoint\n context?.apiHandler\n .callDynamicDataEndpoint<{ id: string; value: string }[]>(\n new URL(dataSrcEndpoint),\n )\n .then((res) => {\n if (res) setParsedOptions(res);\n else setError(`Error loading radio options`);\n })\n .catch((err) => {\n console.error(err);\n setError('Error loading radio options');\n })\n .finally(() => setLoading(false));\n } else {\n setParsedOptions(options);\n }\n } else\n throw new Error(\n 'Checkbox group with dynamic source has no data src endpoint',\n );\n }, []);\n\n useEffect(() => {\n if (selectedItemRef.current !== selectedItem) onChange(selectedItem);\n }, [selectedItem]);\n\n return html`\n <div class=\"${styles.radioGroup}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <div role=\"group\" aria-labelledby=${ariaLabel}>\n ${loading\n ? html`<div style=\"margin-top: 20px\">\n <${ThreeDotLoader} color=\"#999\" />\n </div>`\n : html`\n ${error\n ? html`<div style=\"margin-top: 20px\">\n <${ErrorMessage}>${error}<//>\n </div>`\n : html`\n ${parsedOptions.map(\n (el) =>\n html`\n <${Radio}\n id=${el.id}\n value=${el.value}\n isChecked=${selectedItem === el.id}\n onChange=${handleChange}\n ><//>\n `,\n )}\n `}\n `}\n </div>\n </fieldset>\n ${showStepValidation &&\n !selectedItem &&\n isRequired &&\n html` <${ErrorMessage}>Please select an option</${ErrorMessage}>`}\n </div>\n `;\n};\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport DOMPurify from 'dompurify';\nimport { IntegrySDKEvents } from '@/types';\nimport { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { ListBox } from '@/components/Listbox';\nimport { Loader } from '@/components/Loader';\nimport { IntegryStep, TemplateField } from '@/interfaces';\nimport { actionFunctions } from '@/store';\nimport { Checkbox } from '@/components/CheckboxGroup/Checkbox';\nimport MappingUI from '@/features/common/MappingUI';\nimport { Label } from '@/components/Label';\nimport { Button } from '@/components/Button';\nimport { StoreType } from '@/types/store';\nimport { DateInput, Input, PasswordInput } from '@/components/Input';\nimport { TextArea } from '@/components/TextArea';\nimport { RadioGroup } from '@/components/RadioGroup';\n\nimport styles from './styles.module.scss';\n\ninterface StepPropsType extends StoreType {\n step: IntegryStep;\n stepType: 'AUTH' | 'CONFIGURATION' | 'SECTION';\n showStepValidation: boolean;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n}\n\ninterface StepStateType {\n loading: boolean;\n}\n\nclass Step extends Component<StepPropsType, StepStateType> {\n constructor(props: StepPropsType) {\n super(props);\n this.state = {\n loading: false,\n };\n }\n\n componentDidMount() {\n this.props.verifyStepValidity(this.props.step.id);\n }\n\n private getVisibleFieldsDataOnRootStep = (): {\n [machineName: string]: string;\n } => {\n const fields = this.props.stepDataMapping[this.props.step.id];\n const requiredFieldsWithValues = Object.keys(fields)\n .filter((el) => fields[Number(el)].value)\n .reduce((prev, curr) => {\n const currentItem = fields[Number(curr)];\n return {\n ...prev,\n [currentItem.machineName]: currentItem.value,\n };\n }, {});\n\n return requiredFieldsWithValues;\n };\n\n private areParentValuesFilled = (stepId: number, parentFields: string[]) => {\n let valid = true;\n // check if all parent fields have their values set\n for (let index = 0; index < parentFields.length; index += 1) {\n const val = parentFields[index];\n const { fieldId } = this.props.parentChildMapping[stepId][val];\n const parentField =\n this.props.stepDataMapping[stepId] &&\n this.props.stepDataMapping[stepId][fieldId];\n if (!(parentField && parentField.value)) {\n valid = false;\n break;\n }\n }\n return valid;\n };\n\n private doParentFieldsHaveValues = (stepId: number, machineName: string) => {\n let valid = true;\n const fieldInfo = this.props.parentChildMapping[stepId][machineName];\n\n if (fieldInfo && fieldInfo.parentFields)\n // check if all parent fields have their values set\n for (let index = 0; index < fieldInfo.parentFields.length; index += 1) {\n const parentField = this.props.parentChildMapping[stepId][\n fieldInfo.parentFields[index]\n ];\n const parentFieldData =\n this.props.stepDataMapping[stepId] &&\n this.props.stepDataMapping[stepId][parentField.fieldId];\n if (!(parentFieldData && parentFieldData.value)) {\n valid = false;\n break;\n }\n }\n return valid;\n };\n\n private shouldShowStep = (field: TemplateField) => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n\n if (field.type === 'BUTTON' || field.type === 'HTML') return true;\n\n if (stepObject && field.activity_field) {\n const shouldBeShown = !field.is_hidden;\n // const isAuthSelected = stepObject.selectedAuthId;\n const isAuthSelected = true;\n\n const { parentFields } = this.props.parentChildMapping[stepId][\n field.activity_field.machine_name\n ];\n\n let isValid = true;\n if (parentFields) {\n isValid = this.areParentValuesFilled(stepId, parentFields);\n }\n\n return shouldBeShown && isAuthSelected && isValid;\n }\n return false;\n };\n\n private stepIsOfType = (fields: string[]) => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n return fields.indexOf(stepObject.step.activity.type) > -1;\n };\n\n private textFieldParentHasValues = () => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n\n const anyVisibleFields = stepObject.step.template_fields.filter(\n (el) => el.is_visible,\n );\n\n const isAuthSelected = stepObject.selectedAuthId;\n\n const dynamicField = anyVisibleFields.filter(\n (el) => el.activity_field && el.activity_field.type === 'DYNAMIC',\n )[0];\n\n if (!dynamicField) {\n return true;\n }\n\n if (\n anyVisibleFields.length > 0 &&\n dynamicField &&\n dynamicField.activity_field &&\n isAuthSelected &&\n this.doParentFieldsHaveValues(\n stepId,\n dynamicField.activity_field.machine_name,\n )\n ) {\n return true;\n }\n return false;\n };\n\n private shouldShowMapping = () => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n if (this.stepIsOfType(['ADAPTER', 'ACTION'])) {\n const anyVisibleFields = stepObject.step.template_fields.filter(\n (el) => el.is_visible,\n );\n\n // console.log({ anyVisibleFields });\n\n const isAuthSelected = stepObject.selectedAuthId;\n\n // console.log({ isAuthSelected });\n\n const dynamicField = anyVisibleFields.filter(\n (el) => el.activity_field && el.activity_field.type === 'DYNAMIC',\n )[0];\n\n // console.log({ dynamicField });\n\n if (!dynamicField) {\n return false;\n }\n\n if (\n anyVisibleFields.length > 0 &&\n isAuthSelected &&\n dynamicField &&\n dynamicField.activity_field &&\n this.doParentFieldsHaveValues(\n stepId,\n dynamicField.activity_field.machine_name,\n )\n ) {\n return true;\n }\n }\n return false;\n };\n\n private getMappingDataInput = () => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n return {\n authId: stepObject.selectedAuthId,\n fieldsData: this.getVisibleFieldsDataOnRootStep(),\n };\n };\n\n private fieldDynamicData = (field: TemplateField) => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n if (stepObject && field.activity_field) {\n const { parentFields } = this.props.parentChildMapping[stepId][\n field.activity_field.machine_name\n ];\n if (parentFields) {\n const { fieldId } = this.props.parentChildMapping[stepId][\n parentFields[0]\n ];\n if (fieldId) {\n return {\n [parentFields[0]]: this.props.stepDataMapping[stepId][fieldId]\n .value,\n };\n }\n }\n }\n return null;\n };\n\n render() {\n const {\n step,\n stepMapping,\n stepDataMapping,\n setStepFieldData,\n showStepValidation,\n } = this.props;\n const selectedStep = stepMapping[step.id] && stepMapping[step.id].step;\n const selectedStepData = stepDataMapping && stepDataMapping[step.id];\n\n return html`\n ${this.state.loading\n ? html`<${Loader} //>`\n : html`\n ${selectedStep\n ? html`\n <div class=${styles.stepsWrap}>\n ${selectedStep.template_fields.map((el) => {\n if (this.shouldShowStep(el) && el.activity_field) {\n switch (el.activity_field.type) {\n case 'SELECT':\n return html`\n <div class=${styles.stepWrap}>\n <${ListBox}\n key=${el.activity_field.id}\n apiHandler=${this.props.apiHandler}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n showStepValidation=${showStepValidation}\n placeholder=${el.placeholder}\n isRequired=${el.is_required}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n endpointUrl=${el.activity_field.data_src}\n isDynamic=${el.activity_field.is_dynamic}\n endpointData=${JSON.stringify({\n authorization_id:\n this.props.stepMapping &&\n this.props.stepMapping[this.props.step.id]\n ?.selectedAuthId,\n ...this.fieldDynamicData(el),\n })}\n ><//>\n </div>\n `;\n case 'TEXTFIELD':\n return (\n !this.shouldShowMapping() &&\n this.textFieldParentHasValues() &&\n html`\n <div class=${styles.stepWrap}>\n <${Input}\n id=${el.activity_field.id}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n ><//>\n </div>\n `\n );\n case 'CHECKBOX': {\n let dataSrc:\n | Record<string, string>[]\n | string\n | null = el.activity_field?.data_src;\n if (!dataSrc || dataSrc === '') {\n // use title as checkbox label\n dataSrc = [\n {\n id: el.activity_field.machine_name,\n value: el.activity_field.title,\n },\n ];\n } else {\n try {\n dataSrc = JSON.parse(\n el.activity_field?.data_src ?? '[]',\n );\n } catch (error) {\n console.error(\n 'Error parsing value: ',\n el.activity_field?.data_src,\n );\n }\n }\n return html`\n <div class=${styles.stepWrap}>\n <${Label}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n isRequired=${el.is_required}\n />\n <${Checkbox}\n label=${dataSrc}\n name=${el.activity_field.machine_name}\n value=${selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value === '1'}\n isChecked=${selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value === '1'}\n isRequired=${el.is_required}\n showStepValidation=${showStepValidation}\n handleChange=${(_: string, val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val ? '1' : '0',\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n }\n case 'DYNAMIC':\n return html``;\n case 'PASSWORD':\n return html`\n <div class=${styles.stepWrap}>\n <${PasswordInput}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n case 'TEXTAREA':\n return html`\n <div class=${styles.stepWrap}>\n <${TextArea}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n case 'DATE':\n return html`\n <div class=${styles.stepWrap}>\n <${DateInput}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n case 'RADIO':\n return html`\n <div class=${styles.stepWrap}>\n <${RadioGroup}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n isDynamic=${el.activity_field.is_dynamic}\n isRequired=${el.is_required}\n showStepValidation=${showStepValidation}\n dataSrcEndpoint=${el.activity_field.is_dynamic\n ? el.activity_field.data_src\n : null}\n onChange=${(selected: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: selected,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n default:\n return html` <div\n class=${`${styles.stepWrap} ${styles.unsupported}`}\n >\n Field: ${el.activity_field.type} is currently not\n supported\n </div>`;\n }\n } else {\n switch (el.type) {\n case 'HTML':\n return html`\n <div\n style=\"margin-bottom: 2rem;\"\n dangerouslySetInnerHTML=${{\n __html: DOMPurify(window).sanitize(\n el.default_value,\n ),\n }}\n />\n `;\n case 'BUTTON':\n return html`\n <div style=\"margin-bottom: 2rem;\">\n <${Button} label=${el.title} />\n </div>\n `;\n default:\n break;\n }\n }\n return html``;\n })}\n ${this.shouldShowMapping() &&\n html`\n <div class=${styles.stepWrap}>\n <${MappingUI}\n stepId=${selectedStep.id}\n templateFields=${selectedStep.template_fields}\n showStepValidation=${showStepValidation}\n endpointData=${this.getMappingDataInput()}\n ><//>\n </div>\n `}\n </div>\n `\n : html`Step data could not be loaded`}\n `}\n `;\n }\n}\n\nexport default connect<StepPropsType, StepStateType, StoreType, unknown>(\n ['stepMapping', 'stepDataMapping', 'parentChildMapping'],\n actionFunctions,\n)(Step);\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { IntegrationSaveResponse, TemplateStep } from '@/interfaces';\nimport { Button, ButtonTypes } from '@/components/Button';\nimport { StoreType } from '@/types/store';\nimport AuthSelector from '@/features/common/AuthSelector';\nimport AppContext from '@/contexts/AppContext';\nimport Step from '@/features/templates/Step';\nimport { actionFunctions } from '@/store';\nimport { TextArea } from '@/components/TextArea';\n\nimport styles from './styles.module.scss';\n\nexport type StepsPropsType = StoreType;\n\ntype StepsStateType = {\n selectedAuthStep: number | null;\n loading: boolean;\n postSave: boolean;\n postSaveData: Record<string, string | number | boolean> | null;\n integrationData: IntegrationSaveResponse | null;\n};\n\nclass Steps extends Component<\n StepsPropsType,\n StepsStateType & Record<string, unknown>\n> {\n static contextType = AppContext;\n\n constructor(props: StepsPropsType) {\n super(props);\n this.state = {\n loading: false,\n selectedAuthStep: null,\n postSave: false,\n postSaveData: null,\n integrationData: null,\n };\n }\n\n componentDidUpdate(prevProps: StepsPropsType) {\n const { stepState: prevStepState } = prevProps;\n const { stepState: newStepState } = this.props;\n if (prevStepState.stepIndex !== newStepState.stepIndex)\n this.context.eventEmitter.emit('did-change-step', {\n stepId: newStepState.steps[newStepState.stepIndex]?.stepId ?? null,\n stepType:\n newStepState.steps[newStepState.stepIndex]?.type ?? 'CONFIRMATION',\n });\n }\n\n private getPayload = () => {\n const { stepMapping, stepDataMapping } = this.props;\n if (this.context.isPreviewMode) {\n return null;\n }\n this.setState({ loading: true });\n const payload = {\n name: this.props.genericData.templateApp?.name ?? 'My new flow',\n notification_email: '',\n template: Number(this.props.genericData.templateId),\n bundle_id: Number(this.props.genericData.bundleId),\n steps: Object.keys(stepMapping).map((el) => ({\n id: stepMapping[el].integrationStepId || stepMapping[el].step.id,\n authorization: Number(stepMapping[el].selectedAuthId) || null,\n template_step: stepMapping[el].step.id,\n app_user_data: stepMapping[el].step.template_fields.map((tField) => ({\n id:\n stepDataMapping[stepMapping[el].step.id][tField.id]\n .integrationFieldId || tField.id,\n value:\n (stepDataMapping[stepMapping[el].step.id][tField.id].value ||\n stepDataMapping[stepMapping[el].step.id][tField.id].value ===\n '') &&\n !stepDataMapping[stepMapping[el].step.id][tField.id].objectValue\n ? `${stepDataMapping[stepMapping[el].step.id][tField.id].value}`\n : JSON.stringify(\n stepDataMapping[stepMapping[el].step.id][tField.id]\n .objectValue,\n ),\n template_field: tField.id,\n })),\n })),\n };\n return payload;\n };\n\n private createIntegration = () => {\n const payload = this.getPayload();\n if (payload)\n this.context.apiHandler\n .saveIntegration(payload)\n .then((integration: IntegrationSaveResponse) => {\n this.postSaveOrCreate(integration);\n })\n .catch((err: unknown) => console.error(err));\n };\n\n private postSaveOrCreate = (integration: IntegrationSaveResponse) => {\n const { stepMapping } = this.props;\n const triggerStep = Object.keys(stepMapping)\n .map((stepId) => stepMapping[stepId])\n .filter(\n (el) =>\n el &&\n el.step &&\n el.step.activity &&\n el.step.activity.type === 'TRIGGER',\n )[0];\n const returnedStep = integration.steps.filter(\n (el) => el.template_step === triggerStep?.step?.id,\n )[0];\n if (returnedStep && returnedStep.returned_data) {\n try {\n const parsedData = JSON.parse(returnedStep.returned_data);\n if (parsedData.is_webhook_url && parsedData.endpoint) {\n this.setState({\n postSave: true,\n postSaveData: parsedData,\n integrationData: integration,\n });\n }\n } catch (error) {\n console.error(error);\n }\n } else {\n this.setState(\n {\n integrationData: integration,\n },\n () => {\n this.dismiss();\n },\n );\n }\n this.setState({ loading: false });\n };\n\n private updateIntegration = () => {\n const payload = this.getPayload();\n if (payload)\n this.context.apiHandler\n .updateIntegration(this.context.integrationId, {\n ...payload,\n id: `${this.context.integrationId}`,\n })\n .then((integration: IntegrationSaveResponse) => {\n this.postSaveOrCreate(integration);\n })\n .catch((err: unknown) => console.error(err));\n };\n\n private dismiss = () => {\n const { integrationData } = this.state;\n if (integrationData) {\n this.context.eventEmitter.emit('did-save-integration', {\n integrationId: integrationData.id,\n name: integrationData.name,\n templateId: integrationData.template,\n status: integrationData.status,\n });\n }\n };\n\n private handleAuthSelected = (\n authId: number,\n stepId: number,\n isVerified: boolean,\n override: boolean,\n ) => {\n const dependentSteps = this.props.stepMapping[stepId].step.template_fields\n .filter((el) => el.activity_field && el.activity_field.is_dynamic)\n .map((el) => el.id);\n // reset all dynamic steps if auth changes\n this.props.setStepAuthorization(\n stepId,\n authId,\n isVerified,\n dependentSteps,\n override,\n );\n };\n\n render() {\n let selectedStep: {\n step: TemplateStep;\n selectedAuthId: number | null;\n } | null = null;\n const { stepState, stepMapping } = this.props;\n const { postSave, postSaveData } = this.state;\n const { currentStep, stepIndex, steps } = stepState;\n\n let shouldShowLastStep = false;\n let shouldShowBackButton = false;\n let isStepValid = false;\n let showStepValidation = false;\n if (stepIndex > -1 && currentStep?.type !== 'CONFIRMATION') {\n selectedStep = stepMapping[Number(currentStep?.stepId)];\n\n shouldShowLastStep = false;\n shouldShowBackButton = stepState.stepIndex > 0;\n isStepValid = currentStep?.isValid ?? false;\n showStepValidation = stepState.showValidation;\n } else if (\n currentStep?.type === 'CONFIRMATION' &&\n stepIndex === steps.length\n ) {\n shouldShowBackButton = true;\n shouldShowLastStep = true;\n }\n\n return html`\n <div class=${styles.stepsWrap}>\n <div class=${styles.stepContainer}>\n <div class=${styles.stepInfo}>\n ${currentStep &&\n html`\n ${shouldShowLastStep\n ? html`\n <div class=${styles.header}>\n <div class=${styles.name}>\n <svg\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"11.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M17.2209 9.16699L11.3907 15.8337L8.33203 12.3361\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n <div>\n ${postSaveData && postSave\n ? `Flow ${\n this.context?.integrationId\n ? 'updated'\n : 'created'\n } successfully`\n : 'Confirm and activate'}\n </div>\n </div>\n <div class=${styles.steps}>\n ${`Step ${\n (this.props.stepState?.stepIndex ?? 0) + 1\n } / ${(this.props.stepState?.steps.length ?? 0) + 1}`}\n </div>\n </div>\n `\n : html`\n <div class=${styles.header}>\n <div class=${styles.name}>\n <img src=${selectedStep?.step.activity.app.icon_url} />\n <div>\n ${currentStep?.type !== 'CONFIRMATION' &&\n currentStep?.title}\n </div>\n </div>\n <div class=${styles.steps}>\n ${`Step ${\n (this.props.stepState?.stepIndex ?? 0) + 1\n } / ${(this.props.stepState?.steps.length ?? 0) + 1}`}\n </div>\n </div>\n `}\n `}\n </div>\n\n <div class=${styles.top}>\n ${currentStep\n ? html`\n ${shouldShowLastStep\n ? html`\n ${!postSave && !postSaveData\n ? html`\n <div class=${styles.save}>\n ${this.context.isEditMode\n ? 'Your integration is ready to be updated. Click “Update” to continue.'\n : 'Your integration is ready to be enabled. Click “Save” to continue.'}\n </div>\n `\n : html`\n <div class=${styles.postSave}>\n <${TextArea}\n title=\"Webhook URL\"\n description=\"Please use the following webhook url to send data\"\n value=${postSaveData?.endpoint}\n showCopyButton=${true}\n />\n </div>\n `}\n `\n : html`\n ${selectedStep &&\n html`\n ${currentStep?.type === 'AUTH'\n ? html`\n <div class=${styles.authWrap}>\n <${AuthSelector}\n stepId=${selectedStep.step.id}\n apiHandler=${this.context.apiHandler}\n showErrors=${showStepValidation}\n onAuthSelected=${(\n authId: number,\n isVerified: boolean,\n override: boolean,\n ) =>\n this.handleAuthSelected(\n authId,\n Number(selectedStep?.step.id),\n isVerified,\n override,\n )}\n >\n <//>\n </div>\n `\n : html`\n <${Step}\n step=${selectedStep?.step}\n stepType=${currentStep?.type}\n showStepValidation=${showStepValidation}\n apiHandler=${this.context.apiHandler}\n eventEmitter=${this.context.eventEmitter}\n />\n `}\n `}\n `}\n `\n : html`This template has no configured steps`}\n </div>\n ${currentStep &&\n html`\n <div class=${styles.bottom}>\n <div class=${styles.buttons}>\n ${shouldShowBackButton &&\n !postSave &&\n !postSaveData &&\n html`\n <${Button}\n label=\"Back\"\n onClick=${() => this.props.gotoPreviousStep()}\n type=${ButtonTypes.SECONDARY}\n ><//>\n `}\n ${shouldShowLastStep\n ? html`\n ${!postSave && !postSaveData\n ? html`\n ${this.context.isEditMode\n ? html`\n <${Button}\n label=\"Update\"\n isLoading=${this.state.loading}\n onClick=${() => this.updateIntegration()}\n ><//>\n `\n : html`\n <${Button}\n label=\"Save\"\n disabled=${this.context.isPreviewMode}\n tooltip=${this.context.isPreviewMode\n ? 'Integration setup will have to be\\ndone in \"Live View\"'\n : null}\n isLoading=${this.state.loading}\n onClick=${() => this.createIntegration()}\n ><//>\n `}\n `\n : html`\n <${Button}\n label=\"Continue\"\n onClick=${() => this.dismiss()}\n ><//>\n `}\n `\n : html`\n <${Button}\n label=\"Next\"\n disabled=${!isStepValid}\n onClick=${() =>\n isStepValid\n ? this.props.gotoNextStep()\n : this.props.showStepValidationState()}\n ><//>\n `}\n </div>\n </div>\n `}\n </div>\n </div>\n `;\n }\n}\n\nexport default connect<StepsPropsType, StepsStateType, StoreType, unknown>(\n ['stepState', 'genericData', 'stepMapping', 'stepDataMapping'],\n actionFunctions,\n)(Steps);\n","import { html } from 'htm/preact';\nimport {\n useContext,\n useEffect,\n useErrorBoundary,\n useState,\n} from 'preact/hooks';\nimport { assert, StructError } from 'superstruct';\nimport { connect } from 'unistore/preact';\n\nimport AppContext from '@/contexts/AppContext';\nimport { actionFunctions } from '@/store';\nimport { StoreType } from '@/types/store';\nimport {\n TemplateResponse,\n TemplatePreviewData,\n PreviewMetadata,\n TemplatePreviewDataType,\n} from '@/interfaces';\nimport { Loader } from '@/components/Loader';\nimport { notEmpty } from '@/types/utils';\nimport { ErrorPage } from '@/components/ErrorPage';\n\nimport StepNavigation from '../StepNavigation';\nimport Steps from '../Steps';\n\nimport styles from './styles.module.scss';\n\nexport interface WrapperProps extends StoreType {\n bundleId: string;\n templateId?: string;\n templatePreviewData?: TemplatePreviewData;\n isPreviewMode?: boolean;\n previewMetadata?: PreviewMetadata;\n customWrapper?: preact.VNode<Record<string, never>>;\n}\n\n/**\n * Wrapper component\n *\n */\nconst Wrapper = (props: WrapperProps) => {\n const [loading, setLoading] = useState<boolean>(false);\n const [templateData, setTemplateData] = useState<TemplateResponse | null>(\n null,\n );\n const {\n templateId,\n bundleId,\n customWrapper,\n templatePreviewData,\n previewMetadata,\n } = props;\n\n const [validationErr, setValidationErr] = useState<StructError | null>(null);\n\n const [sdkError, resetSdkError] = useErrorBoundary(() => {\n // log something here\n });\n\n const context = useContext(AppContext);\n\n // reset store when unmounting preview\n useEffect(\n () => () => {\n props.reset();\n },\n [],\n );\n\n useEffect(() => {\n if (sdkError) console.error(sdkError);\n }, [sdkError]);\n\n useEffect(() => {\n setLoading(true);\n if (context?.isPreviewMode && previewMetadata) {\n // setup state using preview data\n if (!templatePreviewData)\n throw new Error('Preview data was not provided');\n try {\n assert(templatePreviewData, TemplatePreviewDataType);\n } catch (error) {\n console.error(error);\n setLoading(false);\n setValidationErr(error as StructError);\n return;\n }\n const { steps, ...template } = templatePreviewData;\n setTemplateData(templatePreviewData);\n props.setGenericData({\n templateId: Number(template.id),\n bundleId: Number(bundleId),\n isPreviewMode: context.isPreviewMode,\n });\n props.setSteps(steps.filter(notEmpty));\n props.setStepMapping(steps.filter(notEmpty));\n props.setParentChildMapping(steps.filter(notEmpty));\n props.gotoStepInPreview(previewMetadata);\n context.eventEmitter.emit('did-load-preview', {\n templateId: Number(template.id),\n templateTitle: template.name,\n templateDescription: template.description,\n });\n setLoading(false);\n return;\n }\n if (templateId) {\n context?.apiHandler.getTemplate(Number(templateId)).then((data) => {\n setTemplateData(data);\n if (data)\n Promise.all(\n data.steps.map((el) =>\n context.apiHandler.getTemplateStep(Number(el.id)),\n ),\n )\n .then(async (res) => {\n if (res) {\n props.setGenericData({\n templateId: Number(templateId),\n bundleId: Number(bundleId),\n });\n props.setSteps(res.filter(notEmpty));\n props.setStepMapping(res.filter(notEmpty));\n props.setParentChildMapping(res.filter(notEmpty));\n if (context.integrationId) {\n const integrationData = await context.apiHandler.getIntegrationById(\n context.integrationId,\n );\n if (integrationData)\n props.setIntegrationData(integrationData);\n else\n throw new Error(\n `Error fetching integration data for ID ${context.integrationId}`,\n );\n }\n context.eventEmitter.emit('did-load-template', {\n templateId: Number(templateId),\n templateTitle: data.name,\n templateDescription: data.description,\n });\n setLoading(false);\n }\n })\n .catch((err) => console.error(err));\n });\n } else throw new Error('Template ID not found');\n }, [templateId]);\n\n if (customWrapper) {\n return html`${customWrapper}`;\n }\n\n return html`\n <div class=\"${styles.wrap} ${'integry-container'}\">\n ${sdkError || validationErr\n ? html`\n <${ErrorPage}\n title=${validationErr\n ? 'Validation error'\n : 'An unexpected error occurred'}\n description=${validationErr\n ? 'There was an error validating the preview payload:'\n : 'Please review the following stacktrace:'}\n errorPayload=${validationErr || sdkError}\n onDismiss=${validationErr ? null : resetSdkError}\n />\n `\n : html`\n <div>\n ${!loading &&\n templateData &&\n html`\n <${StepNavigation}\n steps=${templateData.steps?.map((el) => ({\n label: el.title,\n logoUrl: el.activity.app.icon_url,\n }))}\n ><//>\n `}\n </div>\n <div class=${styles.main}>\n ${loading &&\n html`<div style=\"display: flex; justify-content: center;\">\n <${Loader} />\n </div>`}\n ${!loading &&\n templateData &&\n html` <${Steps} steps=${templateData.steps}><//> `}\n </div>\n `}\n </div>\n `;\n};\n\nexport default connect<WrapperProps, unknown, StoreType, unknown>(\n [''],\n actionFunctions,\n)(Wrapper);\n","/*\r\nWHAT: SublimeText-like Fuzzy Search\r\n\r\nUSAGE:\r\n fuzzysort.single('fs', 'Fuzzy Search') // {score: -16}\r\n fuzzysort.single('test', 'test') // {score: 0}\r\n fuzzysort.single('doesnt exist', 'target') // null\r\n\r\n fuzzysort.go('mr', ['Monitor.cpp', 'MeshRenderer.cpp'])\r\n // [{score: -18, target: \"MeshRenderer.cpp\"}, {score: -6009, target: \"Monitor.cpp\"}]\r\n\r\n fuzzysort.highlight(fuzzysort.single('fs', 'Fuzzy Search'), '<b>', '</b>')\r\n // <b>F</b>uzzy <b>S</b>earch\r\n*/\r\n\r\n// UMD (Universal Module Definition) for fuzzysort\r\n;(function(root, UMD) {\r\n if(typeof define === 'function' && define.amd) define([], UMD)\r\n else if(typeof module === 'object' && module.exports) module.exports = UMD()\r\n else root.fuzzysort = UMD()\r\n})(this, function UMD() { function fuzzysortNew(instanceOptions) {\r\n\r\n var fuzzysort = {\r\n\r\n single: function(search, target, options) {\r\n if(!search) return null\r\n if(!isObj(search)) search = fuzzysort.getPreparedSearch(search)\r\n\r\n if(!target) return null\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo\r\n : instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo\r\n : true\r\n var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo\r\n return algorithm(search, target, search[0])\r\n // var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991\r\n // var result = algorithm(search, target, search[0])\r\n // if(result === null) return null\r\n // if(result.score < threshold) return null\r\n // return result\r\n },\r\n\r\n go: function(search, targets, options) {\r\n if(!search) return noResults\r\n search = fuzzysort.prepareSearch(search)\r\n var searchLowerCode = search[0]\r\n\r\n var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991\r\n var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991\r\n var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo\r\n : instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo\r\n : true\r\n var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo\r\n var resultsLen = 0; var limitedCount = 0\r\n var targetsLen = targets.length\r\n\r\n // This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys]\r\n\r\n // options.keys\r\n if(options && options.keys) {\r\n var scoreFn = options.scoreFn || defaultScoreFn\r\n var keys = options.keys\r\n var keysLen = keys.length\r\n for(var i = targetsLen - 1; i >= 0; --i) { var obj = targets[i]\r\n var objResults = new Array(keysLen)\r\n for (var keyI = keysLen - 1; keyI >= 0; --keyI) {\r\n var key = keys[keyI]\r\n var target = getValue(obj, key)\r\n if(!target) { objResults[keyI] = null; continue }\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n objResults[keyI] = algorithm(search, target, searchLowerCode)\r\n }\r\n objResults.obj = obj // before scoreFn so scoreFn can use it\r\n var score = scoreFn(objResults)\r\n if(score === null) continue\r\n if(score < threshold) continue\r\n objResults.score = score\r\n if(resultsLen < limit) { q.add(objResults); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(score > q.peek().score) q.replaceTop(objResults)\r\n }\r\n }\r\n\r\n // options.key\r\n } else if(options && options.key) {\r\n var key = options.key\r\n for(var i = targetsLen - 1; i >= 0; --i) { var obj = targets[i]\r\n var target = getValue(obj, key)\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n\r\n // have to clone result so duplicate targets from different obj can each reference the correct obj\r\n result = {target:result.target, _targetLowerCodes:null, _nextBeginningIndexes:null, score:result.score, indexes:result.indexes, obj:obj} // hidden\r\n\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n }\r\n\r\n // no keys\r\n } else {\r\n for(var i = targetsLen - 1; i >= 0; --i) { var target = targets[i]\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n }\r\n }\r\n\r\n if(resultsLen === 0) return noResults\r\n var results = new Array(resultsLen)\r\n for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n results.total = resultsLen + limitedCount\r\n return results\r\n },\r\n\r\n goAsync: function(search, targets, options) {\r\n var canceled = false\r\n var p = new Promise(function(resolve, reject) {\r\n if(!search) return resolve(noResults)\r\n search = fuzzysort.prepareSearch(search)\r\n var searchLowerCode = search[0]\r\n\r\n var q = fastpriorityqueue()\r\n var iCurrent = targets.length - 1\r\n var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991\r\n var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991\r\n var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo\r\n : instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo\r\n : true\r\n var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo\r\n var resultsLen = 0; var limitedCount = 0\r\n function step() {\r\n if(canceled) return reject('canceled')\r\n\r\n var startMs = Date.now()\r\n\r\n // This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys]\r\n\r\n // options.keys\r\n if(options && options.keys) {\r\n var scoreFn = options.scoreFn || defaultScoreFn\r\n var keys = options.keys\r\n var keysLen = keys.length\r\n for(; iCurrent >= 0; --iCurrent) { var obj = targets[iCurrent]\r\n var objResults = new Array(keysLen)\r\n for (var keyI = keysLen - 1; keyI >= 0; --keyI) {\r\n var key = keys[keyI]\r\n var target = getValue(obj, key)\r\n if(!target) { objResults[keyI] = null; continue }\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n objResults[keyI] = algorithm(search, target, searchLowerCode)\r\n }\r\n objResults.obj = obj // before scoreFn so scoreFn can use it\r\n var score = scoreFn(objResults)\r\n if(score === null) continue\r\n if(score < threshold) continue\r\n objResults.score = score\r\n if(resultsLen < limit) { q.add(objResults); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(score > q.peek().score) q.replaceTop(objResults)\r\n }\r\n\r\n if(iCurrent%1000/*itemsPerCheck*/ === 0) {\r\n if(Date.now() - startMs >= 10/*asyncInterval*/) {\r\n isNode?setImmediate(step):setTimeout(step)\r\n return\r\n }\r\n }\r\n }\r\n\r\n // options.key\r\n } else if(options && options.key) {\r\n var key = options.key\r\n for(; iCurrent >= 0; --iCurrent) { var obj = targets[iCurrent]\r\n var target = getValue(obj, key)\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n\r\n // have to clone result so duplicate targets from different obj can each reference the correct obj\r\n result = {target:result.target, _targetLowerCodes:null, _nextBeginningIndexes:null, score:result.score, indexes:result.indexes, obj:obj} // hidden\r\n\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n\r\n if(iCurrent%1000/*itemsPerCheck*/ === 0) {\r\n if(Date.now() - startMs >= 10/*asyncInterval*/) {\r\n isNode?setImmediate(step):setTimeout(step)\r\n return\r\n }\r\n }\r\n }\r\n\r\n // no keys\r\n } else {\r\n for(; iCurrent >= 0; --iCurrent) { var target = targets[iCurrent]\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n\r\n if(iCurrent%1000/*itemsPerCheck*/ === 0) {\r\n if(Date.now() - startMs >= 10/*asyncInterval*/) {\r\n isNode?setImmediate(step):setTimeout(step)\r\n return\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(resultsLen === 0) return resolve(noResults)\r\n var results = new Array(resultsLen)\r\n for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n results.total = resultsLen + limitedCount\r\n resolve(results)\r\n }\r\n\r\n isNode?setImmediate(step):step()\r\n })\r\n p.cancel = function() { canceled = true }\r\n return p\r\n },\r\n\r\n highlight: function(result, hOpen, hClose) {\r\n if(result === null) return null\r\n if(hOpen === undefined) hOpen = '<b>'\r\n if(hClose === undefined) hClose = '</b>'\r\n var highlighted = ''\r\n var matchesIndex = 0\r\n var opened = false\r\n var target = result.target\r\n var targetLen = target.length\r\n var matchesBest = result.indexes\r\n for(var i = 0; i < targetLen; ++i) { var char = target[i]\r\n if(matchesBest[matchesIndex] === i) {\r\n ++matchesIndex\r\n if(!opened) { opened = true\r\n highlighted += hOpen\r\n }\r\n\r\n if(matchesIndex === matchesBest.length) {\r\n highlighted += char + hClose + target.substr(i+1)\r\n break\r\n }\r\n } else {\r\n if(opened) { opened = false\r\n highlighted += hClose\r\n }\r\n }\r\n highlighted += char\r\n }\r\n\r\n return highlighted\r\n },\r\n\r\n prepare: function(target) {\r\n if(!target) return\r\n return {target:target, _targetLowerCodes:fuzzysort.prepareLowerCodes(target), _nextBeginningIndexes:null, score:null, indexes:null, obj:null} // hidden\r\n },\r\n prepareSlow: function(target) {\r\n if(!target) return\r\n return {target:target, _targetLowerCodes:fuzzysort.prepareLowerCodes(target), _nextBeginningIndexes:fuzzysort.prepareNextBeginningIndexes(target), score:null, indexes:null, obj:null} // hidden\r\n },\r\n prepareSearch: function(search) {\r\n if(!search) return\r\n return fuzzysort.prepareLowerCodes(search)\r\n },\r\n\r\n\r\n\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n\r\n\r\n\r\n getPrepared: function(target) {\r\n if(target.length > 999) return fuzzysort.prepare(target) // don't cache huge targets\r\n var targetPrepared = preparedCache.get(target)\r\n if(targetPrepared !== undefined) return targetPrepared\r\n targetPrepared = fuzzysort.prepare(target)\r\n preparedCache.set(target, targetPrepared)\r\n return targetPrepared\r\n },\r\n getPreparedSearch: function(search) {\r\n if(search.length > 999) return fuzzysort.prepareSearch(search) // don't cache huge searches\r\n var searchPrepared = preparedSearchCache.get(search)\r\n if(searchPrepared !== undefined) return searchPrepared\r\n searchPrepared = fuzzysort.prepareSearch(search)\r\n preparedSearchCache.set(search, searchPrepared)\r\n return searchPrepared\r\n },\r\n\r\n algorithm: function(searchLowerCodes, prepared, searchLowerCode) {\r\n var targetLowerCodes = prepared._targetLowerCodes\r\n var searchLen = searchLowerCodes.length\r\n var targetLen = targetLowerCodes.length\r\n var searchI = 0 // where we at\r\n var targetI = 0 // where you at\r\n var typoSimpleI = 0\r\n var matchesSimpleLen = 0\r\n\r\n // very basic fuzzy match; to remove non-matching targets ASAP!\r\n // walk through target. find sequential matches.\r\n // if all chars aren't found then exit\r\n for(;;) {\r\n var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesSimple[matchesSimpleLen++] = targetI\r\n ++searchI; if(searchI === searchLen) break\r\n searchLowerCode = searchLowerCodes[typoSimpleI===0?searchI : (typoSimpleI===searchI?searchI+1 : (typoSimpleI===searchI-1?searchI-1 : searchI))]\r\n }\r\n\r\n ++targetI; if(targetI >= targetLen) { // Failed to find searchI\r\n // Check for typo or exit\r\n // we go as far as possible before trying to transpose\r\n // then we transpose backwards until we reach the beginning\r\n for(;;) {\r\n if(searchI <= 1) return null // not allowed to transpose first char\r\n if(typoSimpleI === 0) { // we haven't tried to transpose yet\r\n --searchI\r\n var searchLowerCodeNew = searchLowerCodes[searchI]\r\n if(searchLowerCode === searchLowerCodeNew) continue // doesn't make sense to transpose a repeat char\r\n typoSimpleI = searchI\r\n } else {\r\n if(typoSimpleI === 1) return null // reached the end of the line for transposing\r\n --typoSimpleI\r\n searchI = typoSimpleI\r\n searchLowerCode = searchLowerCodes[searchI + 1]\r\n var searchLowerCodeNew = searchLowerCodes[searchI]\r\n if(searchLowerCode === searchLowerCodeNew) continue // doesn't make sense to transpose a repeat char\r\n }\r\n matchesSimpleLen = searchI\r\n targetI = matchesSimple[matchesSimpleLen - 1] + 1\r\n break\r\n }\r\n }\r\n }\r\n\r\n var searchI = 0\r\n var typoStrictI = 0\r\n var successStrict = false\r\n var matchesStrictLen = 0\r\n\r\n var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n if(nextBeginningIndexes === null) nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target)\r\n var firstPossibleI = targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n // Our target string successfully matched all characters in sequence!\r\n // Let's try a more advanced and strict test to improve the score\r\n // only count it as a match if it's consecutive or a beginning character!\r\n if(targetI !== targetLen) for(;;) {\r\n if(targetI >= targetLen) {\r\n // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n if(searchI <= 0) { // We failed to push chars forward for a better match\r\n // transpose, starting from the beginning\r\n ++typoStrictI; if(typoStrictI > searchLen-2) break\r\n if(searchLowerCodes[typoStrictI] === searchLowerCodes[typoStrictI+1]) continue // doesn't make sense to transpose a repeat char\r\n targetI = firstPossibleI\r\n continue\r\n }\r\n\r\n --searchI\r\n var lastMatch = matchesStrict[--matchesStrictLen]\r\n targetI = nextBeginningIndexes[lastMatch]\r\n\r\n } else {\r\n var isMatch = searchLowerCodes[typoStrictI===0?searchI : (typoStrictI===searchI?searchI+1 : (typoStrictI===searchI-1?searchI-1 : searchI))] === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesStrict[matchesStrictLen++] = targetI\r\n ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n ++targetI\r\n } else {\r\n targetI = nextBeginningIndexes[targetI]\r\n }\r\n }\r\n }\r\n\r\n { // tally up the score & keep track of matches for highlighting later\r\n if(successStrict) { var matchesBest = matchesStrict; var matchesBestLen = matchesStrictLen }\r\n else { var matchesBest = matchesSimple; var matchesBestLen = matchesSimpleLen }\r\n var score = 0\r\n var lastTargetI = -1\r\n for(var i = 0; i < searchLen; ++i) { var targetI = matchesBest[i]\r\n // score only goes down if they're not consecutive\r\n if(lastTargetI !== targetI - 1) score -= targetI\r\n lastTargetI = targetI\r\n }\r\n if(!successStrict) {\r\n score *= 1000\r\n if(typoSimpleI !== 0) score += -20/*typoPenalty*/\r\n } else {\r\n if(typoStrictI !== 0) score += -20/*typoPenalty*/\r\n }\r\n score -= targetLen - searchLen\r\n prepared.score = score\r\n prepared.indexes = new Array(matchesBestLen); for(var i = matchesBestLen - 1; i >= 0; --i) prepared.indexes[i] = matchesBest[i]\r\n\r\n return prepared\r\n }\r\n },\r\n\r\n algorithmNoTypo: function(searchLowerCodes, prepared, searchLowerCode) {\r\n var targetLowerCodes = prepared._targetLowerCodes\r\n var searchLen = searchLowerCodes.length\r\n var targetLen = targetLowerCodes.length\r\n var searchI = 0 // where we at\r\n var targetI = 0 // where you at\r\n var matchesSimpleLen = 0\r\n\r\n // very basic fuzzy match; to remove non-matching targets ASAP!\r\n // walk through target. find sequential matches.\r\n // if all chars aren't found then exit\r\n for(;;) {\r\n var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesSimple[matchesSimpleLen++] = targetI\r\n ++searchI; if(searchI === searchLen) break\r\n searchLowerCode = searchLowerCodes[searchI]\r\n }\r\n ++targetI; if(targetI >= targetLen) return null // Failed to find searchI\r\n }\r\n\r\n var searchI = 0\r\n var successStrict = false\r\n var matchesStrictLen = 0\r\n\r\n var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n if(nextBeginningIndexes === null) nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target)\r\n var firstPossibleI = targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n // Our target string successfully matched all characters in sequence!\r\n // Let's try a more advanced and strict test to improve the score\r\n // only count it as a match if it's consecutive or a beginning character!\r\n if(targetI !== targetLen) for(;;) {\r\n if(targetI >= targetLen) {\r\n // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n if(searchI <= 0) break // We failed to push chars forward for a better match\r\n\r\n --searchI\r\n var lastMatch = matchesStrict[--matchesStrictLen]\r\n targetI = nextBeginningIndexes[lastMatch]\r\n\r\n } else {\r\n var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesStrict[matchesStrictLen++] = targetI\r\n ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n ++targetI\r\n } else {\r\n targetI = nextBeginningIndexes[targetI]\r\n }\r\n }\r\n }\r\n\r\n { // tally up the score & keep track of matches for highlighting later\r\n if(successStrict) { var matchesBest = matchesStrict; var matchesBestLen = matchesStrictLen }\r\n else { var matchesBest = matchesSimple; var matchesBestLen = matchesSimpleLen }\r\n var score = 0\r\n var lastTargetI = -1\r\n for(var i = 0; i < searchLen; ++i) { var targetI = matchesBest[i]\r\n // score only goes down if they're not consecutive\r\n if(lastTargetI !== targetI - 1) score -= targetI\r\n lastTargetI = targetI\r\n }\r\n if(!successStrict) score *= 1000\r\n score -= targetLen - searchLen\r\n prepared.score = score\r\n prepared.indexes = new Array(matchesBestLen); for(var i = matchesBestLen - 1; i >= 0; --i) prepared.indexes[i] = matchesBest[i]\r\n\r\n return prepared\r\n }\r\n },\r\n\r\n prepareLowerCodes: function(str) {\r\n var strLen = str.length\r\n var lowerCodes = [] // new Array(strLen) sparse array is too slow\r\n var lower = str.toLowerCase()\r\n for(var i = 0; i < strLen; ++i) lowerCodes[i] = lower.charCodeAt(i)\r\n return lowerCodes\r\n },\r\n prepareBeginningIndexes: function(target) {\r\n var targetLen = target.length\r\n var beginningIndexes = []; var beginningIndexesLen = 0\r\n var wasUpper = false\r\n var wasAlphanum = false\r\n for(var i = 0; i < targetLen; ++i) {\r\n var targetCode = target.charCodeAt(i)\r\n var isUpper = targetCode>=65&&targetCode<=90\r\n var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57\r\n var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum\r\n wasUpper = isUpper\r\n wasAlphanum = isAlphanum\r\n if(isBeginning) beginningIndexes[beginningIndexesLen++] = i\r\n }\r\n return beginningIndexes\r\n },\r\n prepareNextBeginningIndexes: function(target) {\r\n var targetLen = target.length\r\n var beginningIndexes = fuzzysort.prepareBeginningIndexes(target)\r\n var nextBeginningIndexes = [] // new Array(targetLen) sparse array is too slow\r\n var lastIsBeginning = beginningIndexes[0]\r\n var lastIsBeginningI = 0\r\n for(var i = 0; i < targetLen; ++i) {\r\n if(lastIsBeginning > i) {\r\n nextBeginningIndexes[i] = lastIsBeginning\r\n } else {\r\n lastIsBeginning = beginningIndexes[++lastIsBeginningI]\r\n nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning\r\n }\r\n }\r\n return nextBeginningIndexes\r\n },\r\n\r\n cleanup: cleanup,\r\n new: fuzzysortNew,\r\n }\r\n return fuzzysort\r\n} // fuzzysortNew\r\n\r\n// This stuff is outside fuzzysortNew, because it's shared with instances of fuzzysort.new()\r\nvar isNode = typeof require !== 'undefined' && typeof window === 'undefined'\r\n// var MAX_INT = Number.MAX_SAFE_INTEGER\r\n// var MIN_INT = Number.MIN_VALUE\r\nvar preparedCache = new Map()\r\nvar preparedSearchCache = new Map()\r\nvar noResults = []; noResults.total = 0\r\nvar matchesSimple = []; var matchesStrict = []\r\nfunction cleanup() { preparedCache.clear(); preparedSearchCache.clear(); matchesSimple = []; matchesStrict = [] }\r\nfunction defaultScoreFn(a) {\r\n var max = -9007199254740991\r\n for (var i = a.length - 1; i >= 0; --i) {\r\n var result = a[i]; if(result === null) continue\r\n var score = result.score\r\n if(score > max) max = score\r\n }\r\n if(max === -9007199254740991) return null\r\n return max\r\n}\r\n\r\n// prop = 'key' 2.5ms optimized for this case, seems to be about as fast as direct obj[prop]\r\n// prop = 'key1.key2' 10ms\r\n// prop = ['key1', 'key2'] 27ms\r\nfunction getValue(obj, prop) {\r\n var tmp = obj[prop]; if(tmp !== undefined) return tmp\r\n var segs = prop\r\n if(!Array.isArray(prop)) segs = prop.split('.')\r\n var len = segs.length\r\n var i = -1\r\n while (obj && (++i < len)) obj = obj[segs[i]]\r\n return obj\r\n}\r\n\r\nfunction isObj(x) { return typeof x === 'object' } // faster as a function\r\n\r\n// Hacked version of https://github.com/lemire/FastPriorityQueue.js\r\nvar fastpriorityqueue=function(){var r=[],o=0,e={};function n(){for(var e=0,n=r[e],c=1;c<o;){var f=c+1;e=c,f<o&&r[f].score<r[c].score&&(e=f),r[e-1>>1]=r[e],c=1+(e<<1)}for(var a=e-1>>1;e>0&&n.score<r[a].score;a=(e=a)-1>>1)r[e]=r[a];r[e]=n}return e.add=function(e){var n=o;r[o++]=e;for(var c=n-1>>1;n>0&&e.score<r[c].score;c=(n=c)-1>>1)r[n]=r[c];r[n]=e},e.poll=function(){if(0!==o){var e=r[0];return r[0]=r[--o],n(),e}},e.peek=function(e){if(0!==o)return r[0]},e.replaceTop=function(o){r[0]=o,n()},e};\r\nvar q = fastpriorityqueue() // reuse this, except for async, it needs to make its own\r\n\r\nreturn fuzzysortNew()\r\n}) // UMD\r\n\r\n// TODO: (performance) wasm version!?\r\n\r\n// TODO: (performance) layout memory in an optimal way to go fast by avoiding cache misses\r\n\r\n// TODO: (performance) preparedCache is a memory leak\r\n\r\n// TODO: (like sublime) backslash === forwardslash\r\n\r\n// TODO: (performance) i have no idea how well optizmied the allowing typos algorithm is\r\n","import { html, Component } from 'htm/preact';\nimport styles from './styles.module.scss';\n\ninterface SearchState {\n value: string;\n}\n\ninterface SearchProps {\n initialValue?: string;\n placeholder: string;\n resultCount: number;\n onChange: (val: string) => void;\n}\n\nexport class TemplateSearch extends Component<SearchProps, SearchState> {\n constructor(props: SearchProps) {\n super(props);\n this.state = {\n value: this.props.initialValue || '',\n };\n }\n\n onInput = (e: Event) => {\n if (e.target instanceof HTMLInputElement) {\n const { value } = e.target;\n this.setState({ value });\n this.props.onChange(value);\n }\n };\n\n render() {\n return html`\n <div class=${styles.search} ${'integry-search'}>\n <input\n placeholder=${this.props.placeholder || 'Search...'}\n value=${this.state.value}\n oninput=${this.onInput}\n />\n <div class=${styles.resultCount}>${this.props.resultCount} results</div>\n </div>\n `;\n }\n}\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface TabProps {\n activeTab: string;\n label: string;\n onClick(label: string): void;\n}\n\nconst Tab = (props: TabProps) => {\n const { label, activeTab, onClick } = props;\n\n const onClickHandler = () => {\n onClick(label);\n };\n\n return html`\n <li\n class=${`${styles.tab} ${activeTab === label ? styles.tabactive : ''}`}\n onclick=${onClickHandler}\n >\n ${label}\n </li>\n `;\n};\n\nexport { Tab, TabProps };\n","import { html } from 'htm/preact';\nimport { VNode } from 'preact';\nimport { useState } from 'preact/hooks';\n\nimport { Tab } from './Tab';\n\nimport styles from './styles.module.scss';\n\ninterface TabBarProps {\n preSelectedTab?: string;\n children: VNode<{ label: string }>[];\n}\n\nconst TabBar = (props: TabBarProps) => {\n const { preSelectedTab, children } = props;\n\n if (!Array.isArray(children) || children.length < 2) {\n throw new Error('Tab Bar must have at least two children');\n }\n\n // either select preselected if specified, or the first tab\n const [activeTab, setActiveTab] = useState<string>(\n preSelectedTab || children[0].props.label,\n );\n\n const onClickTabItem = (label: string) => {\n setActiveTab(label);\n };\n\n return html`\n <div>\n <ol class=${styles.nav}>\n ${children.map((child) => {\n const { label } = child.props;\n return html`\n <${Tab}\n activeTab=${activeTab}\n key=${label}\n label=${label}\n onClick=${onClickTabItem}\n >\n <//>\n `;\n })}\n </ol>\n <div className=\"tab-content\">\n ${children.map((child) => {\n if (child.props.label !== activeTab) return undefined;\n return child.props.children;\n })}\n </div>\n </div>\n `;\n};\n\nexport { TabBar, TabBarProps };\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ToggleProps {\n id: string;\n value: boolean;\n onChange: (val: boolean) => void;\n}\n\n/**\n * Toggle component\n *\n */\nconst Toggle = (props: ToggleProps) => {\n const { id, value: isToggled, onChange } = props;\n\n const handleChange = () => {\n onChange(!isToggled);\n };\n\n return html`\n <div class=${styles.toggle}>\n <div class=${`${styles.inner} ${isToggled ? styles.toggled : ''} `}>\n <label for=${id} class=${`${isToggled ? styles.toggled : ''} `}></label>\n <input type=\"checkbox\" id=${id} onclick=${handleChange} />\n </div>\n </div>\n `;\n};\n\nexport { Toggle, ToggleProps };\n","export type IntegrySDKEvents = {\n 'should-load-template': ({ templateId }: { templateId: number }) => void;\n 'did-load-template': (data: {\n templateId: number;\n templateTitle: string;\n templateDescription: string;\n }) => void;\n 'did-save-integration': (data: {\n integrationId: number;\n name: string;\n templateId: number;\n status: string;\n }) => void;\n 'did-load-preview': (data: {\n templateId: number;\n templateTitle: string;\n templateDescription: string;\n }) => void;\n 'did-change-step': (data: {\n stepId: number;\n stepType: 'AUTH' | 'CONFIGURATION' | 'SECTION' | 'CONFIRMATION';\n }) => void;\n};\n\nexport enum TemplateFormRenderModes {\n MODAL = 'MODAL',\n INLINE = 'INLINE',\n DETACHED = 'DETACHED',\n CUSTOM = 'CUSTOM',\n}\n\nexport enum TemplateListingRenderModes {\n GRID = 'GRID',\n LIST = 'LIST',\n}\n\nexport type Authorization = {\n id: number;\n authorization_type: string;\n app_user?: number;\n app_user_id?: number;\n disable_link?: string;\n integration_count?: number;\n user_identity: string;\n};\n\nexport type UnfetchResponse = {\n ok: boolean;\n statusText: string;\n status: number;\n url: string;\n text: () => Promise<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n json: () => Promise<any>;\n blob: () => Promise<Blob>;\n clone: () => UnfetchResponse;\n headers: {\n keys: () => string[];\n entries: () => Array<[string, string]>;\n get: (key: string) => string | undefined;\n has: (key: string) => boolean;\n };\n};\n","import { html, Component } from 'htm/preact';\n\nimport { timeAgo } from '@/utils/datetime';\nimport { Toggle } from '@/components/Toggle';\nimport { ListBox } from '@/components/Listbox';\nimport { Integration } from '@/interfaces';\nimport { IntegryAPI } from '@/modules/api';\n\nimport style from './styles.module.scss';\n\ntype Props = {\n integrations: Integration[];\n apiHandler: IntegryAPI;\n};\n\ntype State = {\n loading: boolean;\n};\n\nclass IntegrationsList extends Component<Props, State> {\n private toggleIntegration = (integrationId: number, activate: boolean) => {\n this.props.apiHandler\n .toggleIntegration(integrationId, activate)\n .then((res) => {\n console.info(res);\n })\n .catch((err) => console.error(err));\n };\n\n private onIntegrationDelete = (integrationId: number) => {\n this.props.apiHandler\n .deleteIntegration(integrationId)\n .then((res) => {\n console.info(res);\n })\n .catch((err) => console.error(err));\n };\n\n render() {\n return html`\n <div>\n <div class=${style.topbar}>\n <!-- <h2 class=${style.header}>My Flows</h2> -->\n <!-- <${ListBox} items=${[{ id: 'sort', value: 'Sort' }]} value=\"sort\" //> -->\n </div>\n <div class=${style.row}>\n <div class=\"flex w-12\">Status</div>\n <div class=\"flex w-12\"></div>\n <div class=\"flex-1 pl-4\">Integration Name</div>\n <div class=\"w-24\">Runs</div>\n <div class=\"w-40\">Last Activity</div>\n <div class=\"w-16\"></div>\n <div class=\"flex w-6\"></div>\n </div>\n <div class=${style.integrations}>\n ${this.props.integrations.length < 1 && html`No integrations`}\n ${this.props.integrations.map(\n (el) => html`\n <div\n class=\"${style.integration} ${'integry_container_Integration'}\"\n >\n <div class=${style.row}>\n <div class=\"flex w-12\">\n ${el.task_execution.status !== 'fail'\n ? html`\n <svg\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"12.5\"\n fill=\"#2ECC71\"\n />\n <path\n d=\"M17.2209 9.16699L11.3907 15.8337L8.33203 12.3361\"\n stroke=\"white\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n `\n : html`<svg\n width=\"22\"\n height=\"25\"\n viewBox=\"0 0 25 27\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"12.5\" cy=\"12.5\" r=\"12.5\" fill=\"#E26154\" />\n <g filter=\"url(#filter0_d)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.1886 8.05792C11.1209 7.32574 11.7556 6.61621 12.4701 6.61621C13.2413 6.61621 13.8535 7.32568 13.7963 8.05792L13.3542 13.5234C13.3206 14.0117 12.8896 14.3955 12.4019 14.3605C11.9713 14.3255 11.6422 13.9535 11.6196 13.5234L11.1886 8.05792ZM11.1836 16.9743C11.1836 16.3124 11.7654 15.7737 12.4835 15.7737C13.2189 15.7737 13.8007 16.3124 13.8 16.9743V17.2052C13.8 17.8671 13.2015 18.3902 12.4835 18.3902C11.7647 18.3902 11.1836 17.8671 11.1836 17.2052V16.9743Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <filter\n id=\"filter0_d\"\n x=\"7.18359\"\n y=\"6.61621\"\n width=\"10.6164\"\n height=\"19.7739\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood\n flood-opacity=\"0\"\n result=\"BackgroundImageFix\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"4\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow\"\n result=\"shape\"\n />\n </filter>\n </defs>\n </svg> `}\n </div>\n <div class=\"flex w-12\">\n <img src=${el.icon_url} />\n </div>\n <div class=\"flex-1 pl-4\">${el.name}</div>\n <div class=\"w-24\">${el.runs_count}</div>\n <div class=\"w-40\">\n ${el.task_execution.last_execution_at\n ? timeAgo(\n new Date(\n `${el.task_execution.last_execution_at.date} ${el.task_execution.last_execution_at.timezone}`,\n ),\n )\n : 'Never run'}\n </div>\n <div class=\"w-16\">\n <${Toggle}\n id=${el.id}\n value=${el.status === 'ACTIVE'}\n onChange=${(active: boolean) =>\n this.toggleIntegration(el.id, active)}\n >\n <//>\n </div>\n <div\n class=\"flex w-6 cursor-pointer\"\n onclick=${() => this.onIntegrationDelete(el.id)}\n >\n <svg\n width=\"12\"\n height=\"15\"\n viewBox=\"0 0 12 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 4.16667H12\"\n stroke=\"#F05C42\"\n stroke-width=\"1.2\"\n />\n <path\n d=\"M10 5.5V6.16667L9.33333 13.5H2.66667L2 6.16667V5.5\"\n stroke=\"#F05C42\"\n stroke-width=\"1.2\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M4 3.5V2.16667C4 1.79848 4.29848 1.5 4.66667 1.5H7.33333C7.70152 1.5 8 1.79848 8 2.16667V3.5\"\n stroke=\"#F05C42\"\n stroke-width=\"1.2\"\n />\n </svg>\n </div>\n </div>\n </div>\n `,\n )}\n </div>\n </div>\n `;\n }\n}\n\nexport { IntegrationsList };\n","/**\n *\n * @param length Array length to generate\n * @returns String array like ['00', '01', '02' ...]\n */\nfunction generateDoubleDigitStringArr(length: number): string[] {\n return Array.from({ length }, (_, i) => {\n if (i < 10) return `0${i}`;\n return `${i + 1}`;\n });\n}\n\n/**\n *\n * @param date Input date\n * @returns {string} Date string formatted as YYYY-MM-DD\n */\nfunction getDateFormat(date: Date): string {\n return new Date(date.getTime() - date.getTimezoneOffset() * 60000)\n .toISOString()\n .split('T')[0];\n}\n\nconst timeAgo = (date: Date) => {\n const intervals = [\n { label: 'year', seconds: 31536000 },\n { label: 'month', seconds: 2592000 },\n { label: 'day', seconds: 86400 },\n { label: 'hour', seconds: 3600 },\n { label: 'minute', seconds: 60 },\n { label: 'A few second', seconds: 0 },\n ];\n\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000);\n const interval = intervals.find((i) => i.seconds < seconds);\n if (interval) {\n let count = Math.floor(seconds / interval.seconds);\n if (!Number.isInteger(count)) count = 0;\n return `${count > 0 ? count : ''} ${interval.label}${\n count !== 1 ? 's' : ''\n } ago`;\n }\n return `Cannot be formatted with interval ${interval}`;\n};\n\nexport { generateDoubleDigitStringArr, getDateFormat, timeAgo };\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport fuzzysort from 'fuzzysort';\n\nimport { Integration, Template as TemplateType } from '@/interfaces';\nimport { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { TemplateSearch } from '@/features/templates/TemplateSearch';\nimport { Loader } from '@/components/Loader';\nimport { TabBar } from '@/components/TabBar';\n\nimport { IntegrationsList } from '@/features/integrations/IntegrationsList';\nimport { IntegrySDKEvents, TemplateListingRenderModes } from '@/types';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\n\nimport style from './styles.module.scss';\n\ntype Props = {\n bundleId: string;\n layout: TemplateListingRenderModes;\n templateContainerTemplate: Component;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n onTemplateClick?: (templateId: number) => void;\n} & StoreType;\n\ntype State = {\n loading: boolean;\n integrations: Integration[];\n templates: TemplateType[];\n filteredTemplates: TemplateType[];\n};\n\nclass TemplatesView extends Component<Props, State> {\n constructor() {\n super();\n this.state = {\n loading: false,\n integrations: [],\n templates: [],\n filteredTemplates: [],\n };\n }\n\n // Adding the this argument restricts binding\n static handleClick(this: HTMLButtonElement, event: MouseEvent) {\n event.preventDefault();\n if (event.target instanceof HTMLElement) {\n console.info(event.target.localName);\n }\n }\n\n componentDidMount() {\n this.setState({ loading: true });\n this.props.apiHandler\n .getTemplateListing(this.props.bundleId)\n .then((data) => {\n if (data)\n this.setState({\n integrations: data.integrations,\n templates: data.templates,\n filteredTemplates: data.templates,\n loading: false,\n });\n });\n }\n\n filterTemplates = (query: string) => {\n if (query) {\n this.setState({\n filteredTemplates: fuzzysort\n .go(query, this.state.templates, {\n keys: ['name', 'branding_app.tags'],\n scoreFn: (keysResult) => {\n const nameResult = keysResult[0];\n const tagsResult = keysResult[1];\n // assign higher score to name result\n const score = Math.max(\n nameResult ? nameResult.score + 100 : -Infinity,\n tagsResult ? tagsResult.score : -Infinity,\n );\n return score;\n },\n })\n .map((el) => el.obj),\n });\n } else {\n this.setState({ filteredTemplates: this.state.templates });\n }\n };\n\n onTemplateClick = (templateId: number) => {\n this.props.setGenericData({\n templateId,\n });\n if (this.props.onTemplateClick) {\n this.props.onTemplateClick(templateId);\n }\n };\n\n render() {\n return html`\n <div>\n ${this.state.loading\n ? html` <${Loader} //> `\n : html`\n <${TabBar}>\n <div\n label=${this.props.userConfig?.availableFlowsLabel ||\n 'Available Flows'}\n >\n <!-- <h2 class=${style.header}>Available Flows</h2> -->\n <div>\n <${TemplateSearch}\n resultCount=${this.state.filteredTemplates.length}\n onChange=${(val: string) => this.filterTemplates(val)}\n >\n <//>\n </div>\n <div\n class=\"${this.props.layout ===\n TemplateListingRenderModes.LIST\n ? style.template_list\n : style.template_grid} ${'integry-container_TemplatesView'}\"\n >\n ${this.state.filteredTemplates.map(\n (template) =>\n html`\n <${this.props.templateContainerTemplate}\n name=${template.name}\n description=${template.description}\n layout=${this.props.layout}\n tags=${template.branding_app.tags}\n imgUrl=${template.branding_app.icon_url}\n onClick=${() => this.onTemplateClick(template.id)}\n >\n <//>\n `,\n )}\n </div>\n </div>\n <div label=${this.props.userConfig?.myFlowsLabel || 'My Flows'}>\n <${IntegrationsList} apiHandler=${this.props.apiHandler}\n integrations=${this.state.integrations} //>\n </div>\n <//>\n `}\n </div>\n `;\n }\n}\n\nexport default connect<Props, State, StoreType, unknown>(\n 'userConfig',\n actionFunctions,\n)(TemplatesView);\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ntype NavItemProps = {\n label: string;\n logoUrl?: string;\n isDisabled?: boolean;\n isActive?: boolean;\n isCompleted?: boolean;\n isLastStep?: boolean;\n onClick?(): void;\n};\n\nconst TickMark = html` <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <rect opacity=\"0.7\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#2ECC71\" />\n <path\n d=\"M9.23107 6.34619L6.96066 8.94234L5.76953 7.58033\"\n stroke=\"white\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n</svg>`;\n\nconst FinalTickMark = html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"7.5\"\n cy=\"7.5\"\n r=\"6.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10.3333 5.5L6.83522 9.5L5 7.40148\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n`;\n\nclass NavItem extends Component<NavItemProps> {\n render() {\n const {\n logoUrl,\n isActive = false,\n isCompleted = false,\n isDisabled = false,\n isLastStep = false,\n onClick = () => null,\n } = this.props;\n return html`\n <div\n class=${`${styles.navItem} ${isDisabled ? styles.disabled : ''} ${\n isActive ? styles.active : ''\n }`}\n onclick=${onClick}\n tabindex=\"-1\"\n role=\"button\"\n >\n <div class=${styles.navItemContent}>\n <div class=${styles.imgContainer}>\n ${isLastStep\n ? FinalTickMark\n : html`\n ${!(isCompleted && !isActive)\n ? html`<img src=${logoUrl} />`\n : TickMark}\n `}\n </div>\n <div>${this.props.label}</div>\n </div>\n </div>\n `;\n }\n}\n\nexport { NavItem, NavItemProps };\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\n\nimport { NavItem, NavItemProps } from './NavItem';\n\nimport styles from './styles.module.scss';\n\nexport type StepNavigationProps = {\n steps: NavItemProps[];\n currentStepIndex?: number;\n completedTillIndex?: number;\n} & StoreType;\n\ntype StepNavigationState = {\n templateName: string;\n};\n\nclass StepNavigation extends Component<\n StepNavigationProps,\n StepNavigationState\n> {\n changeStep = (stepIndex: number) => {\n this.props.gotoStep(stepIndex);\n };\n\n render() {\n const { stepState } = this.props;\n const step = stepState?.currentStep;\n\n return html`\n <div class=${styles.navigation}>\n <div>\n ${this.props.stepState &&\n html`\n ${this.props.stepState?.steps.map(\n (el, idx) =>\n html` <${NavItem}\n label=${el.type !== 'CONFIRMATION'\n ? el.title\n : 'Confirmation'}\n logoUrl=${el.type !== 'CONFIRMATION' && el.iconUrl}\n isCompleted=${el.isCompleted}\n isActive=${step?.type !== 'CONFIRMATION' &&\n el.type !== 'CONFIRMATION' &&\n stepState.stepIndex === idx}\n isDisabled=${Number(stepState?.stepIndex) < idx}\n isLastStep=${false}\n onClick=${() => this.changeStep(idx)}\n />`,\n )}\n `}\n <${NavItem}\n label=\"Confirmation\"\n isCompleted=${true}\n isActive=${step !== undefined &&\n stepState?.stepIndex === stepState?.steps.length}\n isDisabled=${step !== undefined &&\n stepState?.stepIndex !== stepState?.steps.length}\n isLastStep=${true}\n onClick=${() => this.changeStep(stepState?.steps.length ?? 0)}\n />\n </div>\n </div>\n `;\n }\n}\n\nStepNavigation.defaultProps = {\n currentStepIndex: -1,\n completedTillIndex: -1,\n};\n\nexport default connect<\n StepNavigationProps,\n StepNavigationState,\n StoreType,\n unknown\n>(\n 'stepState',\n actionFunctions,\n)(StepNavigation);\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { IntegryStep, TemplateStep } from '@/interfaces';\nimport Step from '@/features/templates/Step';\nimport { Button, ButtonTypes } from '@/components/Button';\nimport { IntegryAPI } from '@/modules/api';\nimport StepNavigation from '@/features/common/StepNavigation';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport AppContext from '@/contexts/AppContext';\nimport AuthSelector from '@/features/common/AuthSelector';\nimport { IntegrySDKEvents, TemplateListingRenderModes } from '@/types';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\n\nimport styles from './styles.module.scss';\n\nexport type StepsPropsType = {\n steps: IntegryStep[];\n layout: TemplateListingRenderModes;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n} & StoreType;\n\ntype StepsStateType = {\n selectedAuthStep: number | null;\n loading: boolean;\n};\n\nclass Steps extends Component<\n StepsPropsType,\n StepsStateType & Record<string, unknown>\n> {\n static contextType = AppContext;\n\n constructor(props: StepsPropsType) {\n super(props);\n this.state = {\n loading: false,\n selectedAuthStep: null,\n };\n }\n\n private createIntegration = () => {\n const { stepMapping, stepDataMapping } = this.props;\n console.info(stepMapping);\n this.setState({ loading: true });\n const payload = {\n name: this.props.genericData.templateApp?.name ?? 'My new flow',\n notification_email: '',\n template: Number(this.props.genericData.templateId),\n bundle_id: Number(this.props.genericData.bundleId),\n steps: Object.keys(stepMapping).map((el) => ({\n id: stepMapping[el].step.id,\n authorization: Number(stepMapping[el].selectedAuthId),\n template_step: stepMapping[el].step.id,\n app_user_data: stepMapping[el].step.template_fields.map((tField) => ({\n id: tField.id,\n value:\n (stepDataMapping[stepMapping[el].step.id][tField.id].value ||\n stepDataMapping[stepMapping[el].step.id][tField.id].value ===\n '') &&\n !stepDataMapping[stepMapping[el].step.id][tField.id].objectValue\n ? `${stepDataMapping[stepMapping[el].step.id][tField.id].value}`\n : JSON.stringify(\n stepDataMapping[stepMapping[el].step.id][tField.id]\n .objectValue,\n ),\n template_field: tField.id,\n })),\n })),\n };\n console.info(payload);\n this.context.apiHandler\n .saveIntegration(payload)\n .then((res: unknown) => {\n console.info(res);\n this.setState({ loading: false });\n })\n .catch((err: unknown) => console.error(err));\n };\n\n private handleAuthSelected = (\n authId: number,\n stepId: number,\n isVerified: boolean,\n override: boolean,\n ) => {\n const dependentSteps = this.props.stepMapping[stepId].step.template_fields\n .filter((el) => el.activity_field && el.activity_field.is_dynamic)\n .map((el) => el.id);\n // reset all dynamic steps if auth changes\n this.props.setStepAuthorization(\n stepId,\n authId,\n isVerified,\n dependentSteps,\n override,\n );\n };\n\n render() {\n let selectedStep: {\n step: TemplateStep;\n selectedAuthId: number | null;\n } | null = null;\n const { stepState } = this.props;\n const { currentStep, stepIndex, steps } = stepState;\n\n let shouldShowLastStep = false;\n let shouldShowBackButton = false;\n let isStepValid = false;\n let showStepValidation = false;\n if (stepIndex > -1 && currentStep?.type !== 'CONFIRMATION') {\n selectedStep = this.props.stepMapping[Number(currentStep?.stepId)];\n\n shouldShowLastStep = false;\n shouldShowBackButton = this.props.stepState.stepIndex > 0;\n isStepValid = currentStep?.isValid ?? false;\n showStepValidation = stepState.showValidation;\n } else if (\n currentStep?.type === 'CONFIRMATION' &&\n stepIndex === steps.length\n ) {\n shouldShowLastStep = true;\n }\n\n return html`\n <div class=${styles.stepsWrap}>\n <div class=${styles.stepsContainer}>\n <${StepNavigation}\n steps=${this.props.steps?.map((el) => ({\n label: el.title,\n logoUrl: el.activity.app.icon_url,\n }))}\n currentStepIndex=${-1}\n completedTillIndex=${-1}\n ><//>\n </div>\n <div class=${styles.stepContainer}>\n <div class=${styles.stepInfo}>\n ${shouldShowLastStep\n ? html`\n <svg\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"11.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M17.2209 9.16699L11.3907 15.8337L8.33203 12.3361\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n <div>Confirmation</div>\n `\n : html`\n <!-- <img src=${selectedStep?.step.activity.app.icon_url} />\n <div>${selectedStep?.step.title}</div> -->\n `}\n </div>\n\n <div class=${styles.top}>\n ${shouldShowLastStep\n ? html`\n <div class=${styles.save}>\n Your integration is ready to be enabled. Click “Save” to\n continue.\n </div>\n `\n : html`\n ${selectedStep &&\n html`\n ${currentStep?.type === 'AUTH'\n ? html`\n <div class=${styles.stepWrap}>\n <${AuthSelector}\n stepId=${selectedStep.step.id}\n apiHandler=${this.context.apiHandler}\n showErrors=${showStepValidation}\n onAuthSelected=${(\n authId: number,\n isVerified: boolean,\n override: boolean,\n ) =>\n this.handleAuthSelected(\n authId,\n Number(selectedStep?.step.id),\n isVerified,\n override,\n )}\n >\n <//>\n </div>\n `\n : html`\n <${Step}\n step=${selectedStep?.step}\n stepType=${currentStep?.type}\n showStepValidation=${showStepValidation}\n apiHandler=${this.context.apiHandler}\n eventEmitter=${this.context.eventEmitter}\n />\n `}\n `}\n `}\n </div>\n <div class=${styles.bottom}>\n <div class=${styles.buttons}>\n ${shouldShowBackButton &&\n html`\n <${Button}\n label=\"Back\"\n onClick=${() => this.props.gotoPreviousStep()}\n type=${ButtonTypes.SECONDARY}\n ><//>\n `}\n ${shouldShowLastStep\n ? html`\n <${Button}\n label=\"Save\"\n isLoading=${this.state.loading}\n onClick=${() => this.createIntegration()}\n ><//>\n `\n : html`\n <${Button}\n label=\"Next\"\n disabled=${!isStepValid}\n onClick=${() =>\n isStepValid\n ? this.props.gotoNextStep()\n : this.props.showStepValidationState()}\n ><//>\n `}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n}\n\nexport default connect<StepsPropsType, StepsStateType, StoreType, unknown>(\n ['stepState', 'genericData', 'stepMapping', 'stepDataMapping'],\n actionFunctions,\n)(Steps);\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { TemplateResponse } from '@/interfaces';\nimport Steps from '@/features/templates/Steps';\nimport { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { Loader } from '@/components/Loader';\nimport { IntegrySDKEvents } from '@/types';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\nimport { notEmpty } from '@/types/utils';\n\nimport styles from './styles.module.scss';\n\ninterface TemplateFormProps extends StoreType {\n templateId: number;\n bundleId: number;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n}\n\ninterface TemplateState {\n loading: boolean;\n template: TemplateResponse | null;\n}\n\nclass TemplateForm extends Component<TemplateFormProps, TemplateState> {\n constructor() {\n super();\n this.state = {\n loading: true,\n template: null,\n };\n }\n\n componentDidMount() {\n this.props.apiHandler\n .getTemplate(this.props.templateId)\n .then((data) => {\n if (data)\n Promise.all(\n data.steps.map((el) =>\n this.props.apiHandler.getTemplateStep(Number(el.id)),\n ),\n )\n .then((res) => {\n this.setState({ template: data, loading: false });\n this.props.setSteps(res.filter(notEmpty));\n this.props.setStepMapping(res.filter(notEmpty));\n this.props.setParentChildMapping(res.filter(notEmpty));\n this.props.setGenericData({\n templateId: Number(this.props.templateId),\n bundleId: Number(this.props.bundleId),\n });\n })\n .catch((err) => console.error(err));\n })\n .catch((err) => {\n throw new Error(err);\n });\n }\n\n render() {\n const { template } = this.state;\n return html`\n <div>\n ${this.state.loading\n ? html`<${Loader} //>`\n : html`\n <div class=${styles.header}>\n <img src=${template?.branding_app.icon_url} width=\"40\" />\n <div>\n <div class=${styles.name}>${template?.name}</div>\n <div class=${styles.description}>\n ${template?.description}\n </div>\n </div>\n </div>\n\n <${Steps}\n steps=${template?.steps}\n apiHandler=${this.props.apiHandler}\n eventEmitter=${this.props.eventEmitter}\n />\n `}\n </div>\n `;\n }\n}\n\nexport default connect<TemplateFormProps, TemplateState, StoreType, unknown>(\n '',\n actionFunctions,\n)(TemplateForm);\n","import { html, Component } from 'htm/preact';\nimport { TemplateListingRenderModes } from '@/types';\n\nimport style from './styles.module.scss';\n\nexport type TemplateProps = {\n imgUrl: string;\n name: string;\n description: string;\n tags: string;\n layout: TemplateListingRenderModes;\n onClick: () => void;\n};\n\ntype TemplateStateType = {\n templateName: string;\n};\n\nclass Template extends Component<\n TemplateProps,\n TemplateStateType & Record<string, unknown>\n> {\n constructor(props: TemplateProps) {\n super(props);\n this.state = {\n templateName: this.props.name,\n };\n }\n\n // Adding the this argument restricts binding\n static handleClick(this: HTMLButtonElement, event: MouseEvent) {\n event.preventDefault();\n if (event.target instanceof HTMLElement) {\n console.info(event.target.localName);\n }\n }\n\n handleClick = () => {\n console.info(this.props.name);\n };\n\n render() {\n return html`\n <div\n onclick=${this.props.onClick}\n class=\"${this.props.layout === TemplateListingRenderModes.LIST\n ? style.template_list_view\n : style.template_grid_view} ${'integry-container_Template'}\"\n >\n <div>\n <img src=${this.props.imgUrl} />\n <p class=${style.name}>${this.state.templateName}</p>\n <p class=${style.description}>${this.props.description}</p>\n </div>\n ${this.props.tags.length > 0 &&\n html`\n <div class=${style.tags}>\n ${this.props.tags\n .split(',')\n .map((el) => html` <div class=${style.tag}>${el}</div> `)}\n </div>\n `}\n </div>\n `;\n }\n}\n\nexport { Template };\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nclass Modal extends Component<ModalProps> {\n render() {\n const { isOpen } = this.props;\n return html`\n <div\n class=${`${styles.modal} ${isOpen ? `${styles.open}` : ''}`}\n aria-labelledby=\"modal-title\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div class=${styles.modalContainer}>\n <div class=${styles.inset} aria-hidden=\"true\"></div>\n\n <span class=${styles.span} aria-hidden=\"true\"></span>\n\n <div\n class=${`${styles.contentWrap} ${isOpen ? `${styles.open}` : ''}`}\n >\n <div class=${styles.content}>\n <div\n onclick=${this.props.onClose}\n class=${styles.close}\n >\n <svg\n width=\"20\"\n height=\"22\"\n viewBox=\"0 0 20 22\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.2426 16.1822L5.75732 6.86328\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M14.2426 6.86328L5.75732 16.1822\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n ${this.props.isOpen && html` ${this.props.children} `}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n}\n\nexport { Modal };\n","import { html, Component } from 'htm/preact';\nimport { Provider } from 'unistore/preact';\nimport { Store } from 'unistore';\nimport TemplatesView from '@/features/templates/TemplatesView';\nimport TemplateForm from '@/features/templates/TemplateForm';\nimport { Template } from '@/features/templates/Template';\nimport { Modal } from '@/components/Modal';\nimport AppContext from '@/contexts/AppContext';\nimport { TemplateListingRenderModes } from '@/types';\nimport { createSDKStore, initialState } from '@/store';\nimport { State } from '@/types/store';\nimport { UserConfig } from '@/interfaces';\n\n// import '../../styles/index.scss';\nimport styles from './styles.module.scss';\n\ninterface ContainerProps {\n bundleId: string;\n userConfig?: UserConfig;\n layout: TemplateListingRenderModes;\n}\n\ninterface ContainerState {\n isModalOpen: boolean;\n templateId: number | null;\n}\n\nclass Container extends Component<ContainerProps, ContainerState> {\n static contextType = AppContext;\n\n templateComponent: typeof Template | undefined;\n\n templateListComponent: typeof TemplatesView | undefined;\n\n store: Store<State>;\n\n constructor(props: ContainerProps) {\n super(props);\n this.state = {\n isModalOpen: false,\n templateId: null,\n };\n this.store = createSDKStore();\n this.store.setState({\n userConfig: props.userConfig,\n });\n }\n\n componentWillMount() {\n // this.templateComponent = this.props.customTemplates?.template || Template;\n this.templateComponent = Template;\n\n // if (this.props.customTemplates?.templateList) {\n // this.templateListComponent = this.props.customTemplates.templateList;\n // } else this.templateListComponent = TemplatesView;\n this.templateListComponent = TemplatesView;\n }\n\n onTemplateClick = (templateId: number) => {\n this.setState({ isModalOpen: true, templateId });\n };\n\n render() {\n return html`\n <>\n <${Provider} store=${this.store}>\n <div class=\"${styles['integry-container']} ${'integry-container'}\">\n <${this.templateListComponent}\n layout=${this.props.layout}\n bundleId=${this.props.bundleId}\n templateContainerTemplate=${this.templateComponent}\n apiHandler=${this.context.apiHandler}\n eventEmitter=${this.context.eventEmitter}\n onTemplateClick=${this.onTemplateClick}\n >\n </div>\n <${Modal} \n isOpen=${this.state.isModalOpen} \n onClose=${() => {\n this.store.setState(initialState);\n this.setState({\n isModalOpen: false,\n templateId: null,\n });\n }}\n > \n <${TemplateForm} \n apiHandler=${this.context.apiHandler}\n templateId=${this.state.templateId}\n bundleId=${this.props.bundleId} \n />\n <//>\n <//>\n </>\n `;\n }\n}\n\nexport { Container };\n","import { EventSet } from '../types';\nimport EventRunnerAbstract from './abstract';\n\nexport default class EventRunnerDefault<\n ESet extends EventSet,\n EventName extends keyof ESet\n> extends EventRunnerAbstract<ESet, EventName> {\n run(_eventName: EventName, ...args: Parameters<ESet[EventName]>): void {\n this.handler.apply(null, args);\n }\n}\n","import { EventSet, EventEmitterType, HandlerRunner } from '../types';\n\nexport default abstract class EventRunnerAbstract<\n ESet extends EventSet,\n EventName extends keyof ESet\n> implements HandlerRunner<ESet, EventName> {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n protected emitter: EventEmitterType<ESet>,\n protected handler: ESet[EventName],\n ) {}\n\n getHandler(): ESet[EventName] {\n return this.handler;\n }\n\n abstract run(\n eventName: EventName,\n ...args: Parameters<ESet[EventName]>\n ): void;\n}\n","import superPropBase from \"./superPropBase.js\";\nexport default function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","import { EventSet, EventEmitterType } from '../types';\nimport EventRunnerDefault from './default';\n\nexport default class EventRunnerNTimes<\n ESet extends EventSet,\n EventName extends keyof ESet\n> extends EventRunnerDefault<ESet, EventName> {\n private i = 0;\n\n constructor(\n emitter: EventEmitterType<ESet>,\n handler: ESet[EventName],\n private total = 1,\n ) {\n super(emitter, handler);\n if (this.total < 1) {\n throw new Error(`{total} can not be less than 1`);\n }\n }\n\n run(eventName: EventName, ...args: Parameters<ESet[EventName]>): void {\n super.run(eventName, ...args);\n // eslint-disable-next-line no-plusplus\n if (++this.i >= this.total) {\n this.emitter.off(eventName, this.handler);\n }\n }\n}\n","// https://github.com/infinitum11/inf-ee\n\nimport EventRunnerDefault from './runners/default';\nimport EventRunnerNTimes from './runners/ntimes';\nimport {\n EventListenerStorage,\n EventSet,\n EventEmitterType,\n HandlerRunner,\n} from './types';\n\nexport class EventEmitter<ESet extends EventSet>\n implements EventEmitterType<EventSet> {\n private events: EventListenerStorage<ESet> = Object.create(null);\n\n on<EventName extends keyof ESet>(\n eventName: EventName,\n handler: ESet[EventName],\n ): void {\n this.addEventListener(eventName, new EventRunnerDefault(this, handler));\n }\n\n once<EventName extends keyof ESet>(\n eventName: EventName,\n handler: ESet[EventName],\n ): void {\n this.addEventListener(eventName, new EventRunnerNTimes(this, handler, 1));\n }\n\n off<EventName extends keyof ESet>(\n eventName: EventName,\n handler: ESet[EventName],\n ): void {\n const events = this.events[eventName];\n if (!events?.length) {\n return;\n }\n this.events[eventName] = events.filter((h) => h.getHandler() !== handler);\n }\n\n offAll(): void {\n Object.keys(this.events).forEach((eventName) => {\n const events = this.events[eventName];\n if (events) {\n events.length = 0;\n }\n });\n this.events = Object.create(null);\n }\n\n emit<EventName extends keyof ESet>(\n eventName: EventName,\n ...args: Parameters<ESet[EventName]>\n ): void {\n const events = this.events[eventName];\n if (events) {\n events.forEach((handler) => handler.run(eventName, ...args));\n }\n }\n\n private addEventListener<EventName extends keyof ESet>(\n eventName: EventName,\n runner: HandlerRunner<ESet, EventName>,\n ) {\n const events = this.events[eventName];\n if (Array.isArray(events)) {\n events.push(runner);\n } else {\n this.events[eventName] = [runner];\n }\n }\n}\n","import { html, render } from 'htm/preact';\nimport { Provider } from 'unistore/preact';\n\nimport { IntegryAPI } from '@/modules/api';\nimport {\n InitConfig,\n ConfigWithObject,\n ConfigWithUrlParams,\n APIConfig,\n PreviewPayload,\n} from '@/interfaces/index';\n\nimport { HMAC } from '@/extensions/HMAC';\n\n// builtin templates\nimport Wrapper from '@/features/appdir/Wrapper';\nimport { Container } from '@/features/common/Container';\n// import { Template } from '@/features/templates/Template';\n// import TemplatesView from '@/features/templates/TemplatesView';\n// import { TemplateSearch } from '@/features/templates/TemplateSearch';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport AppContext from '@/contexts/AppContext';\n\nimport {\n IntegrySDKEvents,\n TemplateFormRenderModes,\n TemplateListingRenderModes,\n} from '@/types';\n\nimport { createSDKStore } from '@/store';\nimport isBrowser from '@/utils/isBrowser';\n\n// const Widgets = { Template, TemplatesView, TemplateSearch };\nconst Helpers = { getAuthHash: HMAC };\n\n// eslint-disable-next-line no-underscore-dangle\nconst __buildVersion__ = '';\n\n/**\n * Integry JS SDK\n */\nexport class IntegryJS {\n static SDK_VERSION = __buildVersion__;\n\n private config: ConfigWithObject & ConfigWithUrlParams;\n\n private apiHandler: IntegryAPI;\n\n // private templateContainer: HTMLElement | null;\n\n // private renderMode: TemplateFormRenderModes | null = null;\n\n eventEmitter = new EventEmitter<IntegrySDKEvents>();\n\n // allow customers to use template tagging\n // static html = html;\n\n // static Component = Component;\n\n static RenderModes: typeof TemplateFormRenderModes = TemplateFormRenderModes;\n\n // static Widgets: {\n // Template: typeof Template;\n // TemplatesView: typeof TemplatesView;\n // TemplateSearch: typeof TemplateSearch;\n // };\n\n static Helpers: {\n getAuthHash: (key: string, message: string) => Promise<string>;\n };\n\n constructor(config: ConfigWithObject | ConfigWithUrlParams) {\n let integryAPIParams: APIConfig;\n\n let apiConfig;\n\n if (config.env === 'staging') {\n apiConfig = {\n oauthVerifyPath: 'auth/verify',\n endpointsUrl: 'https://integry-app.appspot.com',\n baseUrl: 'https://beta.integry.io',\n baseUrlv2: 'https://beta.integry.io/v2',\n apiKey: config.xIntegryConfig?.appAuth.apiKey,\n };\n } else {\n apiConfig = {\n oauthVerifyPath: 'auth/verify',\n endpointsUrl: 'https://integry-app.appspot.com',\n baseUrl: 'https://app.integry.io',\n baseUrlv2: 'https://app.integry.io/v2',\n apiKey: config.xIntegryConfig?.appAuth.apiKey,\n };\n }\n\n if ('appKey' in config) {\n integryAPIParams = {\n ...config,\n ...apiConfig,\n appKey: config.appKey,\n hash: config.hash,\n userId: config.userId,\n };\n this.config = {\n ...config,\n ...apiConfig,\n appKey: config.appKey,\n hash: config.hash,\n userId: config.userId,\n bundleId: config.bundleId,\n userConfig: config.userConfig,\n };\n } else {\n const urlparams = this.getAuthParamsFromUrl() || {};\n integryAPIParams = {\n ...apiConfig,\n ...urlparams,\n };\n this.config = {\n ...apiConfig,\n ...urlparams,\n userConfig: config.userConfig,\n };\n }\n this.apiHandler = new IntegryAPI(integryAPIParams);\n\n // this.templateContainer = null;\n }\n\n /**\n *\n * @param length Length of string to randomly generate\n * @returns {string} Returns a random string\n */\n private getRandomTemplateId = (length: number): string => {\n const result = [];\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i += 1) {\n result.push(\n characters.charAt(Math.floor(Math.random() * charactersLength)),\n );\n }\n return `x-integry-modal-${result.join('')}`;\n };\n\n private getAuthParamsFromUrl = (): ConfigWithObject => {\n const urlParams =\n isBrowser() && new URLSearchParams(window.location.search);\n if (urlParams) {\n const userId = urlParams.get('user_id');\n const appKey = urlParams.get('app_key');\n const hash = urlParams.get('hash');\n const bundleId = urlParams.get('bundle_id');\n if (!userId || !appKey || !hash || !bundleId) {\n throw new Error(\n `The following auth variables are undefined: ${\n !userId ? 'userId' : ''\n } ${!appKey ? 'appKey' : ''} ${!hash ? 'hash' : ''} ${\n !bundleId ? 'bundleId' : ''\n }`,\n );\n }\n return {\n userId,\n appKey,\n hash,\n bundleId,\n };\n }\n return {\n userId: '',\n appKey: '',\n hash: '',\n bundleId: '',\n };\n };\n\n /**\n * Prints version number of this SDK version\n */\n public printVersion = (): void => {\n console.info(`@integry/sdk@${IntegryJS.SDK_VERSION}`);\n };\n\n public getTemplatesList = async () =>\n this.apiHandler.getTemplateListing(this.config.bundleId);\n\n /**\n *\n * @param renderMode\n * @param templateContainerId\n * @returns {HTMLElement | null}\n */\n private setupTemplateFormDestination = (\n renderMode: TemplateFormRenderModes,\n templateContainerId?: string,\n ): HTMLElement | null => {\n let el: HTMLElement | null = null;\n\n if (templateContainerId) {\n if (\n renderMode === TemplateFormRenderModes.MODAL ||\n renderMode === TemplateFormRenderModes.INLINE\n ) {\n throw new Error(\n 'The `templateContainerId` property is unsupported when render mode is set to \"MODAL\" or \"INLINE\"',\n );\n }\n el = document.getElementById(templateContainerId);\n if (!el) {\n console.warn(\n `The template form render target with id ${templateContainerId} was not found`,\n );\n // throw new Error('The template form render target was not found');\n }\n }\n\n switch (renderMode) {\n case TemplateFormRenderModes.MODAL:\n el = document.createElement('div');\n el.id = this.getRandomTemplateId(8);\n document.body.appendChild(el);\n return el;\n case TemplateFormRenderModes.INLINE:\n return null;\n case TemplateFormRenderModes.DETACHED:\n return el;\n case TemplateFormRenderModes.CUSTOM:\n return el;\n default:\n throw new Error(\n `Unsupported renderMode ${renderMode} configuration, please provide one of ${JSON.stringify(\n Object.keys(TemplateFormRenderModes),\n )}`,\n );\n }\n };\n\n /**\n * Render the template form we ship\n * @param templateId\n */\n public renderTemplateForm = (\n templateId: string,\n templateContainerId: string,\n ): void => {\n const targetEl = document.getElementById(templateContainerId);\n if (!targetEl) {\n console.warn(\n `Integry template form render target with id ${templateContainerId} was not found`,\n );\n return;\n }\n const store = createSDKStore();\n\n render(\n html`\n <${AppContext.Provider}\n value=${{\n apiHandler: this.apiHandler,\n eventEmitter: this.eventEmitter,\n integrationId: this.config.integrationId,\n isPreviewMode: false,\n isEditMode: !!this.config.integrationId,\n }}\n >\n <${Provider} store=${store}>\n <${Wrapper}\n bundleId=${this.config.bundleId}\n templateId=${templateId}\n >\n <//>\n <//>\n <//>\n `,\n targetEl,\n );\n };\n\n /**\n * Render the template form we ship\n * @param templateId\n */\n public renderPreview = (params: PreviewPayload): void => {\n const { templateData, metadata, previewContainerId } = params;\n const targetEl = document.getElementById(previewContainerId);\n if (!targetEl) {\n console.warn(\n `Integry template form render target with id ${previewContainerId} was not found`,\n );\n return;\n }\n const store = createSDKStore();\n\n render(\n html`\n <${AppContext.Provider}\n value=${{\n apiHandler: this.apiHandler,\n eventEmitter: this.eventEmitter,\n isPreviewMode: true,\n }}\n >\n <${Provider} store=${store}>\n <${Wrapper}\n bundleId=${this.config.bundleId}\n isPreviewMode=${true}\n templatePreviewData=${templateData}\n previewMetadata=${metadata}\n >\n <//>\n <//>\n <//>\n `,\n targetEl,\n );\n };\n\n /**\n *\n * @param initConfig\n */\n public init = (initConfig: InitConfig) => {\n const { containerId, templateContainerId, renderMode } = initConfig;\n\n const target = document.getElementById(containerId);\n\n if (!renderMode) {\n throw new Error('Template form render mode needs to be defined');\n }\n\n this.setupTemplateFormDestination(renderMode, templateContainerId);\n\n if (target) {\n const layout =\n (target.getAttribute(\n 'x-integry-layout',\n ) as TemplateListingRenderModes) || TemplateListingRenderModes.LIST;\n // this.renderMode = renderMode;\n\n render(\n html`\n <${AppContext.Provider}\n value=${{\n apiHandler: this.apiHandler,\n eventEmitter: this.eventEmitter,\n isPreviewMode: false,\n }}\n >\n <${Container}\n bundleId=${this.config.bundleId}\n userConfig=${this.config.userConfig}\n layout=${layout}\n >\n <//>\n <//>\n `,\n target,\n );\n } else {\n console.warn(\n `Integry SDK render target with id ${containerId} was not found`,\n );\n // throw new Error('The render target was not found');\n }\n };\n\n /**\n * Destroy SDK instance and cleanup store\n */\n public destroy = () => {\n try {\n this.eventEmitter.offAll();\n } catch (error) {\n console.error('There was an error unsubscribing from all events');\n }\n };\n}\n\nexport { Helpers };\n","import { HMAC } from '@/extensions/HMAC';\n\n// import { Template } from '@/features/templates/Template';\n// import TemplatesView from '@/features/templates/TemplatesView';\n// import { TemplateSearch } from '@/features/templates/TemplateSearch';\nimport { IntegryJS } from './index';\n\n// IntegryJS.Widgets = { Template, TemplatesView, TemplateSearch };\nIntegryJS.Helpers = { getAuthHash: HMAC };\n\nexport default IntegryJS;\n"],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","_unsupportedIterableToArray","o","minLen","arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","from","test","_toConsumableArray","isArray","arrayWithoutHoles","iter","Symbol","iterator","iterableToArray","unsupportedIterableToArray","TypeError","nonIterableSpread","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","this","args","arguments","apply","err","undefined","_typeof","obj","Op","hasOwn","hasOwnProperty","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","method","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","isGeneratorFunction","genFun","ctor","displayName","AsyncIterator","PromiseImpl","invoke","result","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","mark","setPrototypeOf","__proto__","awrap","async","keys","object","reverse","pop","message","k","g","str","Uint8Array","unescape","encodeURIComponent","map","c","charCodeAt","m","crypto","subtle","importKey","hash","sign","s","b","padStart","join","_taggedTemplateLiteral","strings","raw","freeze","defineProperties","_classCallCheck","instance","Constructor","_defineProperty","defineProperty","enumerable","configurable","writable","EMPTY_OBJ","EMPTY_ARR","IS_NON_DIMENSIONAL","t","r","e","u","h","p","a","assign","Map","get","set","replace","l","bind","url","options","request","XMLHttpRequest","all","headers","response","ok","status","statusText","responseURL","text","responseText","json","JSON","parse","blob","Blob","clone","entries","toLowerCase","has","const","open","onload","getAllResponseHeaders","onerror","withCredentials","credentials","setRequestHeader","send","body","_assertThisInitialized","ReferenceError","_setPrototypeOf","_inherits","subClass","superClass","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_construct","Parent","Class","isNativeReflectConstruct","Function","_wrapNativeSuper","_cache","indexOf","Wrapper","IntegryAPIError","errorMessage","_this","statusCode","ResponseHandler","debugMode","parsedResponse","console","log","data","IntegryAPI","config","templateId","URL","baseUrlv2","addUrlSearchParams","app_key","appKey","user_id","userId","self_api_key","apiKey","fetch","authorizationTypeId","baseUrl","stepId","authId","oauthVerifyPath","authorization_id","endpointData","bundleId","activate","stringify","integrationId","integrationIds","_objectWithoutProperties","source","excluded","target","sourceKeys","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_slicedToArray","arrayWithHoles","_i","_s","_e","_arr","_n","_d","iterableToArrayLimit","nonIterableRest","paramList","objKey","searchParams","append","currentIndex","currentComponent","prevRaf","afterPaintEffects","oldBeforeRender","_render","oldAfterDiff","diffed","oldCommit","_commit","oldBeforeUnmount","unmount","getHookState","index","_hook","hooks","__hooks","_list","_pendingEffects","useState","initialState","reducer","init","hookState","_component","_value","invokeOrReturn","nextValue","action","setState","useReducer","useEffect","callback","argsChanged","_args","useRef","initialValue","useMemo","current","factory","_factory","useCallback","useContext","provider","_id","_defaultValue","sub","props","flushAfterPaintEffects","some","component","_parentDom","invokeCleanup","invokeEffect","hook","_cleanup","oldArgs","newArgs","f","_defineProperties","descriptor","_createClass","protoProps","staticProps","vnode","requestAnimationFrame","raf","clearTimeout","timeout","cancelAnimationFrame","setTimeout","window","commitQueue","_renderCallbacks","filter","cb","StructError","failure","failures","cached","rest","path","msg","_cached","createContext","let","stepState","steps","currentStep","stepIndex","showValidation","allStepsCompleted","genericData","templateApp","isPreviewMode","stepMapping","stepDataMapping","parentChildMapping","actionFunctions","storeSnapshot","setSteps","templateSteps","parsedSteps","itemIndex","element","activity","auth_required","hide_authorization","id","title","app","iconUrl","icon_url","isCompleted","isCurrentlyOpen","requiredFields","invalidFields","isValid","is_visible","template_fields","hasVisibleTemplateFields","el","is_required","field","default_value","reduce","setIntegrationData","selectedAuthData","template_step","authorization","Number","visibleStepsData","app_user_data","stepMappingCopy","stepDataMappingCopy","parsedStepsCopy","template_field","integrationFieldId","isDynamic","objectValue","integrationStepId","isAuthVerified","selectedAuthId","showStepValidationState","hideStepValidationState","gotoNextStep","newIndex","step","updatedStep","gotoPreviousStep","gotoStepInPreview","previewMetadata","stepIndexToNavigateTo","findIndex","gotoStep","oldStepIndex","stepToNavigateTo","_updatedStep","verifyStepValidity","fieldId","isRequired","getStepState","getState","setGenericData","setTemplateApp","setStepMapping","shouldAutoVerifyAuth","authorization_type","authorizations","_step$authorization_t2","step_authorization","_step$authorization_t4","authorizationId","userIdentity","user_identity","authType","disableLink","disable_link","isErrored","isVerified","acc","curr","machineName","activity_field","_curr$activity_field","machine_name","isVisible","setActivityOutputData","activityOutputData","setDynamicFieldData","dynamicFieldData","setParentChildMapping","_curr$activity_field3","childFields","child_fields","_curr$activity_field5","parentFields","parent_fields","_curr$activity_field7","addAuthorization","params","authData","removeAuthorization","toggleVerifyAuthorizationFlag","isVerifying","authObjIndex","toggleDeleteAuthorizationFlag","isDeleting","setStepAuthId","setStepAuthorization","fieldsToReset","override","stepFromMapping","latestStepState","didFetchStatus","resetCustomMappingData","dynamicFieldId","_step$step$template_f","stepData","setStepFieldData","setStepMappingData","newVal","val","_state$stepDataMappin","_state$stepDataMappin3","createSDKStore","store","extension","__REDUX_DEVTOOLS_EXTENSION__","top","ignoreState","devtools","connect","subscribe","payload","actionName","warn","createStore","TemplatePreviewDataType","number","string","description","color","publishing_status","category","array","app_type","optional","action_url","nullable","created_at","date","tags","branding_app","button_text","is_wizard","boolean","size","weight","endpoint","total_fields","activity_output","activity_output_url","dynamic_field_data_endpoint","app_user","app_user_id","integration_count","is_sandbox_enabled","authorization_url_sandbox","is_hidden","summary","placeholder","is_dynamic","data_src","data_src_endpoint","dynamic_field_src","auto_machine_name","dynamic_field_src_endpoint","regex","is_searchable","child_field","child_field_value","long_description","regex_msg","allow_multiple_authorizations","is_self_step","auth_description","is_custom_machine_name","POSITIVE_INFINITY","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","Loader","html","styles","notEmpty","classNames","classes","argType","inner","module","exports","default","HintWrap","hint","hintWidth","setHintWidth","position","getBoundingClientRect","width","left","targetBoundingRect","rootBoundingRect","bottom","height","template","content","Hint","attribute","setContent","containerElement","setContainerElement","setTargetBoundingRect","onRefChange","node","addEventListener","Element","hasAttribute","getAttribute","dismissOnClick","children","LoaderDot","ThreeDotLoader","ButtonTypes","Button","label","PRIMARY","backgroundColor","disabled","tooltip","isLoading","onClick","restOfProps","cx","SECONDARY","LINK","borderColor","ErrorPage","errorPayload","onDismiss","stack","useElementSize","elementRef","eventName","handler","savedHandler","setSize","updateSize","offsetWidth","offsetHeight","targetElement","eventListener","event","removeEventListener","TickMark","FinalTickMark","NavItem","logoUrl","isActive","isDisabled","isLastStep","showArrow","Component","useOnClickOutside","listener","HTMLElement","contains","CollapsedSteps","currentStepIndex","changeStep","collapseRef","dotsRef","showCollapsed","setShowCollapsed","wrapRef","AppContext","useElementResize","debouncedWidth","delay","debouncedValue","setDebouncedValue","timer","useDebounce","setParsedSteps","widthToUse","composedArray","idx","parent","maxWidth","Radio","isChecked","onChange","preventDefault","currentTarget","HTMLDivElement","ErrorMessage","Label","includes","Resend","AuthorizationRow","handleChange","handleReverify","handleDelete","AuthSelector","authIndex","auth","onAuthSelected","apiHandler","verifyOAuth","res","catch","finally","deleteAuth","messageEvent","activity_name","already_exists","selectedStep","windowName","win","w","y","outerHeight","screenY","x","outerWidth","screenX","openPopupWindow","getAuthUrl","fetched","isBrowser","onAuthResponseReceived","getAuthStatus","verifyAuth","prevProps","showErrors","_this2","openAuthWindow","getError","getOwnPropertyDescriptor","arrayPop","unapply","stringReplace","match","stringTrim","String","trim","typeErrorCreate","ListBoxItem","isSelected","ListBox","items","passedItems","isOpen","showStepValidation","responseMapper","input","setItems","loading","setLoading","isDropdownOpen","setIsDropdownOpen","dropdownRef","endpointUrl","callDynamicDataEndpoint","toggleDropdown","getSelectedItem","Checkbox","HTMLInputElement","changedId","checked","LargeLoader","Select","ariaLabel","showUnselectedValue","unselectedText","HTMLSelectElement","newValue","rootDataLoading","setRootDataLoading","dynamicDataLoading","setDynamicDataLoading","fieldsRef","setFieldsRef","dynamicItems","setDynamicItems","dynamicListId","setDynamicListId","dynamicFieldIdRef","ele","dynamicFieldToRender","templateFields","textFieldsToRender","isNotDynamic","mappingField","valuesMapField","valuesMap","_mappingField$parentF","parentFieldId","setRootStepData","fetchDynamicFieldData","getVisibleFieldsDataOnRootStep","fields","currentItem","triggerStepId","additionalData","templateField","dynamicEndpoint","_templateField$activi","fieldsData","_props$genericData$te","_props$genericData$te2","selectVal","parsedVal","slug","_ele$value","_props$dynamicFieldDa","sample","_props$activityOutput2","item","rowIndex","activityOutputObject","_props$activityOutput","arrayIndex","onMappingValueSelected","BaseInput","control","Input","inputValue","DateInput","PasswordInput","passwordShown","setPasswordShown","togglePasswordVisiblity","isShown","TextArea","showCopyButton","HTMLTextAreaElement","navigator","clipboard","writeText","setAttribute","select","execCommand","removeChild","copyStringToClipboard","RadioGroup","selectedItemIndex","dataSrcEndpoint","preSelectedItem","selectedItemRef","selectedItem","setSelectedItem","setError","parsedOptions","setParsedOptions","Step","valid","parentField","fieldInfo","parentFieldData","stepObject","shouldBeShown","areParentValuesFilled","anyVisibleFields","isAuthSelected","dynamicField","doParentFieldsHaveValues","stepIsOfType","selectedStepData","shouldShowStep","_this2$props$stepMapp","fieldDynamicData","shouldShowMapping","textFieldParentHasValues","dataSrc","_el$activity_field","_el$activity_field2","_el$activity_field3","_","selected","__html","DOMPurify","sanitize","MappingUI","getMappingDataInput","Steps","_this$props$genericDa2","notification_email","bundle_id","tField","getPayload","saveIntegration","integration","postSaveOrCreate","triggerStep","returnedStep","_triggerStep$step","returned_data","parsedData","is_webhook_url","postSave","postSaveData","integrationData","dismiss","updateIntegration","eventEmitter","emit","dependentSteps","selectedAuthStep","prevStepState","newStepState","_newStepState$steps$n2","stepType","_newStepState$steps$n4","shouldShowLastStep","shouldShowBackButton","isStepValid","_this$props$stepState2","_this$props$stepState4","_selectedStep","_this$props$stepState6","_this$props$stepState8","isEditMode","handleAuthSelected","_selectedStep2","_selectedStep3","createIntegration","templateData","setTemplateData","customWrapper","templatePreviewData","validationErr","setValidationErr","errState","componentDidCatch","useErrorBoundary","sdkError","resetSdkError","assert","templateTitle","templateDescription","getTemplate","getTemplateStep","getIntegrationById","StepNavigation","_templateData$steps","root","UMD","isNode","preparedCache","preparedSearchCache","noResults","total","matchesSimple","matchesStrict","cleanup","clear","defaultScoreFn","max","score","getValue","prop","tmp","segs","split","isObj","fastpriorityqueue","add","poll","peek","replaceTop","q","fuzzysortNew","instanceOptions","fuzzysort","single","search","getPreparedSearch","getPrepared","allowTypo","algorithm","algorithmNoTypo","go","targets","searchLowerCode","prepareSearch","threshold","limit","resultsLen","limitedCount","targetsLen","scoreFn","keysLen","objResults","keyI","_targetLowerCodes","_nextBeginningIndexes","indexes","results","goAsync","canceled","iCurrent","startMs","Date","now","setImmediate","cancel","highlight","hOpen","hClose","highlighted","matchesIndex","opened","targetLen","matchesBest","char","substr","prepare","prepareLowerCodes","prepareSlow","prepareNextBeginningIndexes","targetPrepared","searchPrepared","searchLowerCodes","prepared","targetLowerCodes","searchLen","searchI","targetI","typoSimpleI","matchesSimpleLen","typoStrictI","successStrict","matchesStrictLen","nextBeginningIndexes","firstPossibleI","matchesBestLen","lastTargetI","strLen","lowerCodes","lower","prepareBeginningIndexes","beginningIndexes","beginningIndexesLen","wasUpper","wasAlphanum","targetCode","isUpper","isAlphanum","isBeginning","lastIsBeginning","lastIsBeginningI","new","TemplateSearch","onInput","resultCount","Tab","activeTab","TabBar","preSelectedTab","setActiveTab","onClickTabItem","child","Toggle","isToggled","TemplateFormRenderModes","TemplateListingRenderModes","IntegrationsList","toggleIntegration","deleteIntegration","integrations","task_execution","runs_count","last_execution_at","seconds","Math","floor","getTime","interval","find","count","isInteger","timeAgo","timezone","active","onIntegrationDelete","TemplatesView","query","filteredTemplates","templates","keysResult","nameResult","tagsResult","Infinity","onTemplateClick","getTemplateListing","userConfig","availableFlowsLabel","_this3","filterTemplates","layout","LIST","templateContainerTemplate","myFlowsLabel","localName","_this$props$stepState","defaultProps","completedTillIndex","stepsWrap","stepsContainer","_this$props$steps","stepContainer","stepInfo","save","stepWrap","_selectedStep4","buttons","TemplateForm","Template","templateName","imgUrl","Modal","onClose","Container","isModalOpen","templateComponent","templateListComponent","Provider","EventRunnerDefault","_eventName","emitter","_get","property","receiver","base","superPropBase","desc","EventRunnerNTimes","off","EventEmitter","events","getHandler","run","runner","IntegryJS","integryAPIParams","apiConfig","characters","charactersLength","random","urlParams","URLSearchParams","location","SDK_VERSION","renderMode","templateContainerId","MODAL","INLINE","getElementById","getRandomTemplateId","DETACHED","CUSTOM","targetEl","render","metadata","previewContainerId","initConfig","containerId","setupTemplateFormDestination","offAll","env","endpointsUrl","xIntegryConfig","_config$xIntegryConfi","appAuth","_config$xIntegryConfi2","urlparams","getAuthParamsFromUrl","Helpers","getAuthHash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/@babel/runtime/regenerator/index.js","../../src/extensions/HMAC.ts","../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../node_modules/preact/dist/preact.module.js","../../node_modules/htm/dist/htm.mjs","../../node_modules/htm/preact/index.mjs","../../node_modules/unfetch/dist/unfetch.module.js","../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../node_modules/@babel/runtime/helpers/esm/construct.js","../../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../../src/extensions/IntegryAPIError.ts","../../src/modules/api/responseHandler.ts","../../src/modules/api/index.ts","../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../node_modules/preact/hooks/dist/hooks.module.js","../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../node_modules/superstruct/lib/index.es.js","../../src/contexts/AppContext.ts","../../node_modules/unistore/dist/unistore.es.js","../../node_modules/unistore/devtools.js","../../src/store/initialState.ts","../../src/store/actionFunctions.ts","../../src/store/index.ts","../../src/interfaces/index.ts","../../node_modules/style-inject/dist/style-inject.es.js","../../src/components/Loader/index.ts","../../src/types/utils.ts","../../node_modules/classnames/index.js","../../src/components/Tooltip/index.ts","../../src/components/ThreeDotLoader/index.ts","../../src/components/Button/index.ts","../../src/components/ErrorPage/index.ts","../../src/hooks/useElementResize.ts","../../src/hooks/useEventListener.ts","../../src/features/appdir/StepNavigation/NavItem.ts","../../src/hooks/useOnClickOutside.ts","../../src/features/appdir/StepNavigation/CollapsedSteps.ts","../../src/features/appdir/StepNavigation/index.ts","../../src/hooks/useDebounce.ts","../../src/components/RadioGroup/Radio.ts","../../src/components/ErrorMessage/index.ts","../../src/components/Label/index.ts","../../src/utils/isBrowser.ts","../../src/features/common/AuthSelector/index.ts","../../src/utils/isAuthMessage.ts","../../src/utils/popup.ts","../../node_modules/dompurify/dist/purify.js","../../src/components/Listbox/ListBoxItem.ts","../../src/components/Listbox/index.ts","../../src/components/CheckboxGroup/Checkbox.ts","../../src/components/LargeLoader/index.ts","../../src/components/BasicSelect/index.ts","../../src/features/common/MappingUI/index.ts","../../src/components/Input/BaseInput/index.ts","../../src/components/Input/Input/index.ts","../../src/components/Input/DateInput/index.ts","../../src/components/Input/PasswordInput/index.ts","../../src/components/TextArea/index.ts","../../src/utils/copyToClipboard.ts","../../src/components/RadioGroup/index.ts","../../src/features/templates/Step/index.ts","../../src/features/appdir/Steps/index.ts","../../src/features/appdir/Wrapper/index.ts","../../node_modules/fuzzysort/fuzzysort.js","../../src/features/templates/TemplateSearch/index.ts","../../src/components/TabBar/Tab.ts","../../src/components/TabBar/index.ts","../../src/components/Toggle/index.ts","../../src/types/index.ts","../../src/features/integrations/IntegrationsList/index.ts","../../src/utils/datetime.ts","../../src/features/templates/TemplatesView/index.ts","../../src/features/common/StepNavigation/NavItem.ts","../../src/features/common/StepNavigation/index.ts","../../src/features/templates/Steps/index.ts","../../src/features/templates/TemplateForm/index.ts","../../src/features/templates/Template/index.ts","../../src/components/Modal/index.ts","../../src/features/common/Container/index.ts","../../src/modules/event-emitter/runners/default.ts","../../src/modules/event-emitter/runners/abstract.ts","../../node_modules/@babel/runtime/helpers/esm/get.js","../../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../../src/modules/event-emitter/runners/ntimes.ts","../../src/modules/event-emitter/index.ts","../../src/index.ts","../../src/index.umd.ts"],"sourcesContent":["export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\"use strict\";\n\nvar Op = Object.prototype;\nvar hasOwn = Op.hasOwnProperty;\nvar undefined; // More compressible than void 0.\nvar $Symbol = typeof Symbol === \"function\" ? Symbol : {};\nvar iteratorSymbol = $Symbol.iterator || \"@@iterator\";\nvar asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\nvar toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\nfunction wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n}\n\n// Try/catch helper to minimize deoptimizations. Returns a completion\n// record like context.tryEntries[i].completion. This interface could\n// have been (and was previously) designed to take a closure to be\n// invoked without arguments, but in all the cases we care about we\n// already have an existing method we want to call, so there's no need\n// to create a new function object. We can even get away with assuming\n// the method takes exactly one argument, since that happens to be true\n// in every case, so we don't have to touch the arguments object. The\n// only additional allocation required is the completion record, which\n// has a stable shape and so hopefully should be cheap to allocate.\nfunction tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n}\n\nvar GenStateSuspendedStart = \"suspendedStart\";\nvar GenStateSuspendedYield = \"suspendedYield\";\nvar GenStateExecuting = \"executing\";\nvar GenStateCompleted = \"completed\";\n\n// Returning this object from the innerFn has the same effect as\n// breaking out of the dispatch switch statement.\nvar ContinueSentinel = {};\n\n// Dummy constructor functions that we use as the .constructor and\n// .constructor.prototype properties for functions that return Generator\n// objects. For full spec compliance, you may wish to configure your\n// minifier not to mangle the names of these two functions.\nfunction Generator() {}\nfunction GeneratorFunction() {}\nfunction GeneratorFunctionPrototype() {}\n\n// This is a polyfill for %IteratorPrototype% for environments that\n// don't natively support it.\nvar IteratorPrototype = {};\nIteratorPrototype[iteratorSymbol] = function () {\n return this;\n};\n\nvar getProto = Object.getPrototypeOf;\nvar NativeIteratorPrototype = getProto && getProto(getProto(values([])));\nif (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n}\n\nvar Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\nGeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\nGeneratorFunctionPrototype.constructor = GeneratorFunction;\nGeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n// Helper for defining the .next, .throw, and .return methods of the\n// Iterator interface in terms of a single ._invoke method.\nfunction defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n}\n\nfunction isGeneratorFunction (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n};\n\nfunction mark (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n};\n\n// Within the body of any async function, `await x` is transformed to\n// `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n// `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n// meant to be awaited.\nfunction awrap (arg) {\n return { __await: arg };\n};\n\nfunction AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n}\n\ndefineIteratorMethods(AsyncIterator.prototype);\nAsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n};\n\n// Note that simple async functions are implemented on top of\n// AsyncIterator objects; they just return a Promise for the value of\n// the final result produced by the iterator.\n function async (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n};\n\nfunction makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n}\n\n// Call delegate.iterator[context.method](context.arg) and handle the\n// result, either by returning a { value, done } result from the\n// delegate iterator, or by modifying context.method and context.arg,\n// setting context.delegate to null, and returning the ContinueSentinel.\nfunction maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n}\n\n// Define Generator.prototype.{next,throw,return} in terms of the\n// unified ._invoke helper method.\ndefineIteratorMethods(Gp);\n\nGp[toStringTagSymbol] = \"Generator\";\n\n// A Generator should always return itself as the iterator object when the\n// @@iterator function is called on it. Some browsers' implementations of the\n// iterator prototype chain incorrectly implement this, causing the Generator\n// object to not be returned from this call. This ensures that doesn't happen.\n// See https://github.com/facebook/regenerator/issues/274 for more details.\nGp[iteratorSymbol] = function() {\n return this;\n};\n\nGp.toString = function() {\n return \"[object Generator]\";\n};\n\nfunction pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n}\n\nfunction resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n}\n\nfunction Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n}\n\nfunction keys (object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n};\n\nfunction values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n}\n\nfunction doneResult() {\n return { value: undefined, done: true };\n}\n\nContext.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n};\n\n// Export a default namespace that plays well with Rollup\nexport default {\n wrap,\n isGeneratorFunction,\n AsyncIterator,\n mark,\n awrap,\n async,\n keys,\n values\n};\n","/**\n *\n * @param key Key to sign hash\n * @param message Message to hash\n * @returns {string}\n */\nexport async function HMAC(message: string, key: string): Promise<string> {\n const g = (str: string) =>\n new Uint8Array(\n [...unescape(encodeURIComponent(str))].map((c) => c.charCodeAt(0)),\n );\n const k = g(key);\n const m = g(message);\n const c = await crypto.subtle.importKey(\n 'raw',\n k,\n { name: 'HMAC', hash: 'SHA-256' },\n true,\n ['sign'],\n );\n const s = await crypto.subtle.sign('HMAC', c, m);\n return [...new Uint8Array(s)]\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n","export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","var n,l,u,t,i,o,r,f={},e=[],c=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord/i;function s(n,l){for(var u in l)n[u]=l[u];return n}function a(n){var l=n.parentNode;l&&l.removeChild(n)}function h(n,l,u){var t,i=arguments,o={};for(t in l)\"key\"!==t&&\"ref\"!==t&&(o[t]=l[t]);if(arguments.length>3)for(u=[u],t=3;t<arguments.length;t++)u.push(i[t]);if(null!=u&&(o.children=u),\"function\"==typeof n&&null!=n.defaultProps)for(t in n.defaultProps)void 0===o[t]&&(o[t]=n.defaultProps[t]);return v(n,o,l&&l.key,l&&l.ref)}function v(l,u,t,i){var o={type:l,props:u,key:t,ref:i,__k:null,__:null,__b:0,__e:null,__d:null,__c:null,constructor:void 0};return n.vnode&&n.vnode(o),o}function p(){return{}}function y(n){return n.children}function d(n,l){this.props=n,this.context=l}function m(n,l){if(null==l)return n.__?m(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?m(n):null}function w(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return w(n)}}function g(l){(!l.__d&&(l.__d=!0)&&1===u.push(l)||i!==n.debounceRendering)&&((i=n.debounceRendering)||t)(k)}function k(){var n,l,t,i,o,r,f;for(u.sort(function(n,l){return l.__v.__b-n.__v.__b});n=u.pop();)n.__d&&(t=void 0,i=void 0,r=(o=(l=n).__v).__e,(f=l.__P)&&(t=[],i=T(f,o,s({},o),l.__n,void 0!==f.ownerSVGElement,null,t,null==r?m(o):r),$(t,o),i!=r&&w(o)))}function _(n,l,u,t,i,o,r,c,s){var h,v,p,y,d,w,g,k=u&&u.__k||e,_=k.length;if(c==f&&(c=null!=o?o[0]:_?m(u,0):null),h=0,l.__k=b(l.__k,function(u){if(null!=u){if(u.__=l,u.__b=l.__b+1,null===(p=k[h])||p&&u.key==p.key&&u.type===p.type)k[h]=void 0;else for(v=0;v<_;v++){if((p=k[v])&&u.key==p.key&&u.type===p.type){k[v]=void 0;break}p=null}if(y=T(n,u,p=p||f,t,i,o,r,c,s),(v=u.ref)&&p.ref!=v&&(g||(g=[]),p.ref&&g.push(p.ref,null,u),g.push(v,u.__c||y,u)),null!=y){if(null==w&&(w=y),null!=u.__d)y=u.__d,u.__d=null;else if(o==p||y!=c||null==y.parentNode){n:if(null==c||c.parentNode!==n)n.appendChild(y);else{for(d=c,v=0;(d=d.nextSibling)&&v<_;v+=2)if(d==y)break n;n.insertBefore(y,c)}\"option\"==l.type&&(n.value=\"\")}c=y.nextSibling,\"function\"==typeof l.type&&(l.__d=y)}}return h++,u}),l.__e=w,null!=o&&\"function\"!=typeof l.type)for(h=o.length;h--;)null!=o[h]&&a(o[h]);for(h=_;h--;)null!=k[h]&&A(k[h],k[h]);if(g)for(h=0;h<g.length;h++)z(g[h],g[++h],g[++h])}function b(n,l,u){if(null==u&&(u=[]),null==n||\"boolean\"==typeof n)l&&u.push(l(null));else if(Array.isArray(n))for(var t=0;t<n.length;t++)b(n[t],l,u);else u.push(l?l(\"string\"==typeof n||\"number\"==typeof n?v(null,n,null,null):null!=n.__e||null!=n.__c?v(n.type,n.props,n.key,null):n):n);return u}function x(n,l,u,t,i){var o;for(o in u)o in l||P(n,o,null,u[o],t);for(o in l)i&&\"function\"!=typeof l[o]||\"value\"===o||\"checked\"===o||u[o]===l[o]||P(n,o,l[o],u[o],t)}function C(n,l,u){\"-\"===l[0]?n.setProperty(l,u):n[l]=\"number\"==typeof u&&!1===c.test(l)?u+\"px\":null==u?\"\":u}function P(n,l,u,t,i){var o,r,f,e,c;if(i?\"className\"===l&&(l=\"class\"):\"class\"===l&&(l=\"className\"),\"key\"===l||\"children\"===l);else if(\"style\"===l)if(o=n.style,\"string\"==typeof u)o.cssText=u;else{if(\"string\"==typeof t&&(o.cssText=\"\",t=null),t)for(r in t)u&&r in u||C(o,r,\"\");if(u)for(f in u)t&&u[f]===t[f]||C(o,f,u[f])}else\"o\"===l[0]&&\"n\"===l[1]?(e=l!==(l=l.replace(/Capture$/,\"\")),c=l.toLowerCase(),l=(c in n?c:l).slice(2),u?(t||n.addEventListener(l,N,e),(n.l||(n.l={}))[l]=u):n.removeEventListener(l,N,e)):\"list\"!==l&&\"tagName\"!==l&&\"form\"!==l&&\"type\"!==l&&!i&&l in n?n[l]=null==u?\"\":u:\"function\"!=typeof u&&\"dangerouslySetInnerHTML\"!==l&&(l!==(l=l.replace(/^xlink:?/,\"\"))?null==u||!1===u?n.removeAttributeNS(\"http://www.w3.org/1999/xlink\",l.toLowerCase()):n.setAttributeNS(\"http://www.w3.org/1999/xlink\",l.toLowerCase(),u):null==u||!1===u?n.removeAttribute(l):n.setAttribute(l,u))}function N(l){this.l[l.type](n.event?n.event(l):l)}function T(l,u,t,i,o,r,f,e,c){var a,h,v,p,m,w,g,k,x,C,P=u.type;if(void 0!==u.constructor)return null;(a=n.__b)&&a(u);try{n:if(\"function\"==typeof P){if(k=u.props,x=(a=P.contextType)&&i[a.__c],C=a?x?x.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(\"prototype\"in P&&P.prototype.render?u.__c=h=new P(k,C):(u.__c=h=new d(k,C),h.constructor=P,h.render=D),x&&x.sub(h),h.props=k,h.state||(h.state={}),h.context=C,h.__n=i,v=h.__d=!0,h.__h=[]),null==h.__s&&(h.__s=h.state),null!=P.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=s({},h.__s)),s(h.__s,P.getDerivedStateFromProps(k,h.__s))),p=h.props,m=h.state,v)null==P.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==P.getDerivedStateFromProps&&k!==p&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(k,C),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(k,h.__s,C)){for(h.props=k,h.state=h.__s,h.__d=!1,h.__v=u,u.__e=t.__e,u.__k=t.__k,h.__h.length&&f.push(h),a=0;a<u.__k.length;a++)u.__k[a]&&(u.__k[a].__=u);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(k,h.__s,C),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(p,m,w)})}h.context=C,h.props=k,h.state=h.__s,(a=n.__r)&&a(u),h.__d=!1,h.__v=u,h.__P=l,a=h.render(h.props,h.state,h.context),u.__k=b(null!=a&&a.type==y&&null==a.key?a.props.children:a),null!=h.getChildContext&&(i=s(s({},i),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(w=h.getSnapshotBeforeUpdate(p,m)),_(l,u,t,i,o,r,f,e,c),h.base=u.__e,h.__h.length&&f.push(h),g&&(h.__E=h.__=null),h.__e=null}else u.__e=j(t.__e,u,t,i,o,r,f,c);(a=n.diffed)&&a(u)}catch(l){n.__e(l,u,t)}return u.__e}function $(l,u){n.__c&&n.__c(u,l),l.some(function(u){try{l=u.__h,u.__h=[],l.some(function(n){n.call(u)})}catch(l){n.__e(l,u.__v)}})}function j(n,l,u,t,i,o,r,c){var s,a,h,v,p,y=u.props,d=l.props;if(i=\"svg\"===l.type||i,null==n&&null!=o)for(s=0;s<o.length;s++)if(null!=(a=o[s])&&(null===l.type?3===a.nodeType:a.localName===l.type)){n=a,o[s]=null;break}if(null==n){if(null===l.type)return document.createTextNode(d);n=i?document.createElementNS(\"http://www.w3.org/2000/svg\",l.type):document.createElement(l.type),o=null}if(null===l.type)null!=o&&(o[o.indexOf(n)]=null),y===d||c||n.data==d||(n.data=d);else if(l!==u){if(null!=o&&(o=e.slice.call(n.childNodes)),h=(y=u.props||f).dangerouslySetInnerHTML,v=d.dangerouslySetInnerHTML,!c){if(y===f)for(y={},p=0;p<n.attributes.length;p++)y[n.attributes[p].name]=n.attributes[p].value;(v||h)&&(v&&h&&v.__html==h.__html||(n.innerHTML=v&&v.__html||\"\"))}x(n,d,y,i,c),l.__k=l.props.children,v||_(n,l,u,t,\"foreignObject\"!==l.type&&i,o,r,f,c),c||(\"value\"in d&&void 0!==d.value&&d.value!==n.value&&(n.value=null==d.value?\"\":d.value),\"checked\"in d&&void 0!==d.checked&&d.checked!==n.checked&&(n.checked=d.checked))}return n}function z(l,u,t){try{\"function\"==typeof l?l(u):l.current=u}catch(l){n.__e(l,t)}}function A(l,u,t){var i,o,r;if(n.unmount&&n.unmount(l),(i=l.ref)&&(i.current&&i.current!==l.__e||z(i,null,u)),t||\"function\"==typeof l.type||(t=null!=(o=l.__e)),l.__e=l.__d=null,null!=(i=l.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(l){n.__e(l,u)}i.base=i.__P=null}if(i=l.__k)for(r=0;r<i.length;r++)i[r]&&A(i[r],u,t);null!=o&&a(o)}function D(n,l,u){return this.constructor(n,u)}function E(l,u,t){var i,r,c;n.__&&n.__(l,u),r=(i=t===o)?null:t&&t.__k||u.__k,l=h(y,null,[l]),c=[],T(u,(i?u:t||u).__k=l,r||f,f,void 0!==u.ownerSVGElement,t&&!i?[t]:r?null:e.slice.call(u.childNodes),c,t||f,i),$(c,l)}function H(n,l){E(n,l,o)}function I(n,l){return l=s(s({},n.props),l),arguments.length>2&&(l.children=e.slice.call(arguments,2)),v(n.type,l,l.key||n.key,l.ref||n.ref)}function L(n){var l={},u={__c:\"__cC\"+r++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var t,i=this;return this.getChildContext||(t=[],this.getChildContext=function(){return l[u.__c]=i,l},this.shouldComponentUpdate=function(l){n.value!==l.value&&t.some(function(n){n.context=l.value,g(n)})},this.sub=function(n){t.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){t.splice(t.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Consumer.contextType=u,u}n={__e:function(n,l){for(var u,t;l=l.__;)if((u=l.__c)&&!u.__)try{if(u.constructor&&null!=u.constructor.getDerivedStateFromError&&(t=!0,u.setState(u.constructor.getDerivedStateFromError(n))),null!=u.componentDidCatch&&(t=!0,u.componentDidCatch(n)),t)return g(u.__E=u)}catch(l){n=l}throw n}},l=function(n){return null!=n&&void 0===n.constructor},d.prototype.setState=function(n,l){var u;u=this.__s!==this.state?this.__s:this.__s=s({},this.state),\"function\"==typeof n&&(n=n(u,this.props)),n&&s(u,n),null!=n&&this.__v&&(this.__e=!1,l&&this.__h.push(l),g(this))},d.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),g(this))},d.prototype.render=y,u=[],t=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,o=f,r=0;export{E as render,H as hydrate,h as createElement,h,y as Fragment,p as createRef,l as isValidElement,d as Component,I as cloneElement,L as createContext,b as toChildArray,A as _unmount,n as options};\n//# sourceMappingURL=preact.module.js.map\n","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import{h as r,Component as o,render as t}from\"preact\";export{h,render,Component}from\"preact\";import e from\"htm\";var m=e.bind(r);export{m as html};\n","export default function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(s.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}\n//# sourceMappingURL=unfetch.module.js.map\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import { UnfetchResponse } from '../types';\n\n/**\n * Extend default Error class\n */\nclass IntegryAPIError extends Error {\n statusCode: number | undefined;\n\n response: UnfetchResponse | undefined;\n\n constructor(errorMessage: string, response?: UnfetchResponse) {\n super(errorMessage);\n this.name = this.constructor.name;\n this.statusCode = response?.status;\n this.response = response;\n }\n}\n\nexport { IntegryAPIError };\n","/* eslint-disable no-console */\n\nimport { UnfetchResponse } from '../../types';\nimport { IntegryAPIError } from '../../extensions/IntegryAPIError';\n\nexport const ResponseHandler = async <T>(\n response: UnfetchResponse,\n): Promise<{\n data: T | null;\n status: number;\n}> => {\n const debugMode = !!process.env.DEBUG;\n\n if (response.ok) {\n try {\n const parsedResponse: T = await response.json();\n if (debugMode) console.log(parsedResponse);\n return {\n data: parsedResponse,\n status: response.status,\n };\n } catch (error) {\n if (debugMode) console.log('Response is not in json');\n return {\n data: null,\n status: response.status,\n };\n }\n } else if (response.status === 405) {\n return {\n data: await response.json(),\n status: response.status,\n };\n }\n if (debugMode) console.log('Received a non-2xx status code');\n const error = new IntegryAPIError(response.statusText, response);\n return Promise.reject(error);\n};\n","/**\n * Simple API module\n */\n\nimport fetch from 'unfetch';\n\nimport {\n APIConfig,\n BundleResponse,\n IntegrationSaveResponse,\n IntegrationStatusResponse,\n SaveOrUpdateIntegrationBody,\n TemplateResponse,\n IntegrationResponse,\n TemplateStep,\n} from '@/interfaces';\n\nimport { ResponseHandler } from './responseHandler';\n\nclass IntegryAPI {\n private config: APIConfig;\n\n constructor(config: APIConfig) {\n this.config = config;\n }\n\n static addUrlSearchParams = (\n url: URL,\n paramList: Record<string, string | boolean | null>,\n ) =>\n Object.keys(paramList).map(\n (objKey) =>\n paramList[objKey] !== undefined &&\n url.searchParams.append(objKey, `${paramList[objKey]}`),\n );\n\n public getTemplate = async (\n templateId: number,\n ): Promise<TemplateResponse | null> => {\n const url = new URL(`${this.config.baseUrlv2}/template/${templateId}/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n self_api_key: this.config.apiKey || null,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<TemplateResponse>(data),\n );\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getAuthUrl = (authorizationTypeId: number): string => {\n const url = new URL(\n `${this.config.baseUrl}/auth/login/${authorizationTypeId}/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n return url.toString();\n };\n\n public getTemplateStep = async (\n stepId: number,\n ): Promise<TemplateStep | null> => {\n const url = new URL(`${this.config.baseUrl}/template_step/${stepId}/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n self_api_key: this.config.apiKey || null,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<TemplateStep>(data),\n );\n\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public verifyOAuth = async (authId: number): Promise<boolean | null> => {\n const url = new URL(\n `${this.config.baseUrl}/${this.config.oauthVerifyPath}`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n authorization_id: `${authId}`,\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), { method: 'POST' }).then(\n ResponseHandler,\n );\n return !!response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public deleteAuth = async (\n authId: number,\n ): Promise<{\n data: string | null;\n status: number;\n } | null> => {\n const url = new URL(`${this.config.baseUrl}/connected-accounts/${authId}`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n }).then((data) => ResponseHandler<string>(data));\n\n return {\n status: response.status,\n data: response.data,\n };\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public callDynamicDataEndpoint = async <T>(\n url: URL,\n endpointData: Record<string, string> = {},\n ): Promise<T | null> => {\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n ...endpointData,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<T>(data),\n );\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getTemplateListing = async (\n bundleId: string,\n ): Promise<BundleResponse | null> => {\n const url = new URL(`${this.config.baseUrl}/bundle/${bundleId}/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString()).then((data) =>\n ResponseHandler<BundleResponse>(data),\n );\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public saveIntegration = async (\n body: SaveOrUpdateIntegrationBody,\n ): Promise<IntegrationSaveResponse | null> => {\n const url = new URL(`${this.config.baseUrlv2}/integration/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n async: false,\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n activate: true,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then((data) => ResponseHandler<IntegrationSaveResponse>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public updateIntegration = async (\n integrationId: string,\n body: SaveOrUpdateIntegrationBody,\n ): Promise<boolean | null> => {\n const url = new URL(\n `${this.config.baseUrlv2}/integration/${integrationId}/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n async: false,\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n activate: true,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'PUT',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then((data) => ResponseHandler<boolean>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public deleteIntegration = async (\n integrationId: number,\n ): Promise<boolean | null> => {\n const url = new URL(\n `${this.config.baseUrl}/setup/template/${integrationId}/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n }).then((data) => ResponseHandler<boolean>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public toggleIntegration = async (\n integrationId: number,\n activate: boolean,\n ): Promise<string | null> => {\n const url = new URL(\n `${this.config.baseUrlv2}/integration/${integrationId}/${\n activate ? 'enable' : 'disable'\n }/`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'PUT',\n }).then((data) => ResponseHandler<string>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getIntegrationById = async (\n integrationId: number,\n ): Promise<IntegrationResponse | null> => {\n const url = new URL(\n `${this.config.baseUrlv2}/integration/${integrationId}`,\n );\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'GET',\n }).then((data) => ResponseHandler<IntegrationResponse>(data));\n return response.data;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n\n public getIntegrationStatuses = async (\n integrationIds: number[],\n ): Promise<IntegrationStatusResponse | null> => {\n const url = new URL(`${this.config.baseUrlv2}/integration_status/`);\n\n IntegryAPI.addUrlSearchParams(url, {\n app_key: this.config.appKey,\n hash: this.config.hash,\n user_id: this.config.userId,\n });\n\n try {\n const response = await fetch(url.toString(), {\n method: 'PUT',\n body: JSON.stringify(integrationIds),\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then(ResponseHandler);\n return response;\n } catch (error) {\n console.error(error);\n return null;\n }\n };\n}\n\nexport { IntegryAPI };\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import{options as n}from\"preact\";var t,u,r,i=[],o=n.__r,f=n.diffed,c=n.__c,e=n.unmount;function a(t){n.__h&&n.__h(u);var r=u.__H||(u.__H={t:[],u:[]});return t>=r.t.length&&r.t.push({}),r.t[t]}function v(n){return m(E,n)}function m(n,r,i){var o=a(t++);return o.__c||(o.__c=u,o.i=[i?i(r):E(void 0,r),function(t){var u=n(o.i[0],t);o.i[0]!==u&&(o.i[0]=u,o.__c.setState({}))}]),o.i}function p(n,r){var i=a(t++);x(i.o,r)&&(i.i=n,i.o=r,u.__H.u.push(i))}function l(n,r){var i=a(t++);x(i.o,r)&&(i.i=n,i.o=r,u.__h.push(i))}function d(n){return y(function(){return{current:n}},[])}function s(n,t,u){l(function(){\"function\"==typeof n?n(t()):n&&(n.current=t())},null==u?u:u.concat(n))}function y(n,u){var r=a(t++);return x(r.o,u)?(r.o=u,r.v=n,r.i=n()):r.i}function T(n,t){return y(function(){return n},t)}function w(n){var r=u.context[n.__c];if(!r)return n.__;var i=a(t++);return null==i.i&&(i.i=!0,r.sub(u)),r.props.value}function A(t,u){n.useDebugValue&&n.useDebugValue(u?u(t):t)}function F(n){var r=a(t++),i=v();return r.i=n,u.componentDidCatch||(u.componentDidCatch=function(n){r.i&&r.i(n),i[1](n)}),[i[0],function(){i[1](void 0)}]}function _(){i.some(function(n){n.__P&&(n.__H.u.forEach(g),n.__H.u.forEach(q),n.__H.u=[])}),i=[]}function g(n){n.m&&n.m()}function q(n){var t=n.i();\"function\"==typeof t&&(n.m=t)}function x(n,t){return!n||t.some(function(t,u){return t!==n[u]})}function E(n,t){return\"function\"==typeof t?t(n):t}n.__r=function(n){o&&o(n),t=0,(u=n.__c).__H&&(u.__H.u.forEach(g),u.__H.u.forEach(q),u.__H.u=[])},n.diffed=function(t){f&&f(t);var u=t.__c;if(u){var o=u.__H;o&&o.u.length&&(1!==i.push(u)&&r===n.requestAnimationFrame||((r=n.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),cancelAnimationFrame(t),setTimeout(n)},r=setTimeout(u,100);\"undefined\"!=typeof window&&(t=requestAnimationFrame(u))})(_))}},n.__c=function(n,t){t.some(function(n){n.__h.forEach(g),n.__h=n.__h.filter(function(n){return!n.i||q(n)})}),c&&c(n,t)},n.unmount=function(n){e&&e(n);var t=n.__c;if(t){var u=t.__H;u&&u.t.forEach(function(n){return n.m&&n.m()})}};export{v as useState,m as useReducer,p as useEffect,l as useLayoutEffect,d as useRef,s as useImperativeHandle,y as useMemo,T as useCallback,w as useContext,A as useDebugValue,F as useErrorBoundary};\n//# sourceMappingURL=hooks.module.js.map\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","/**\n * A `StructFailure` represents a single specific failure in validation.\n */\n\n/**\n * `StructError` objects are thrown (or returned) when validation fails.\n *\n * Validation logic is design to exit early for maximum performance. The error\n * represents the first error encountered during validation. For more detail,\n * the `error.failures` property is a generator function that can be run to\n * continue validation and receive all the failures in the data.\n */\nclass StructError extends TypeError {\n constructor(failure, failures) {\n let cached;\n const {\n message,\n ...rest\n } = failure;\n const {\n path\n } = failure;\n const msg = path.length === 0 ? message : \"At path: \" + path.join('.') + \" -- \" + message;\n super(msg);\n Object.assign(this, rest);\n this.name = this.constructor.name;\n\n this.failures = () => {\n var _cached;\n\n return (_cached = cached) != null ? _cached : cached = [failure, ...failures()];\n };\n }\n\n}\n\n/**\n * Check if a value is an iterator.\n */\nfunction isIterable(x) {\n return isObject(x) && typeof x[Symbol.iterator] === 'function';\n}\n/**\n * Check if a value is a plain object.\n */\n\n\nfunction isObject(x) {\n return typeof x === 'object' && x != null;\n}\n/**\n * Check if a value is a plain object.\n */\n\nfunction isPlainObject(x) {\n if (Object.prototype.toString.call(x) !== '[object Object]') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(x);\n return prototype === null || prototype === Object.prototype;\n}\n/**\n * Return a value as a printable string.\n */\n\nfunction print(value) {\n return typeof value === 'string' ? JSON.stringify(value) : \"\" + value;\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\n\nfunction shiftIterator(input) {\n const {\n done,\n value\n } = input.next();\n return done ? undefined : value;\n}\n/**\n * Convert a single validation result to a failure.\n */\n\nfunction toFailure(result, context, struct, value) {\n if (result === true) {\n return;\n } else if (result === false) {\n result = {};\n } else if (typeof result === 'string') {\n result = {\n message: result\n };\n }\n\n const {\n path,\n branch\n } = context;\n const {\n type\n } = struct;\n const {\n refinement,\n message = \"Expected a value of type `\" + type + \"`\" + (refinement ? \" with refinement `\" + refinement + \"`\" : '') + \", but received: `\" + print(value) + \"`\"\n } = result;\n return {\n value,\n type,\n refinement,\n key: path[path.length - 1],\n path,\n branch,\n ...result,\n message\n };\n}\n/**\n * Convert a validation result to an iterable of failures.\n */\n\nfunction* toFailures(result, context, struct, value) {\n if (!isIterable(result)) {\n result = [result];\n }\n\n for (const r of result) {\n const failure = toFailure(r, context, struct, value);\n\n if (failure) {\n yield failure;\n }\n }\n}\n/**\n * Check a value against a struct, traversing deeply into nested values, and\n * returning an iterator of failures or success.\n */\n\nfunction* run(value, struct, options = {}) {\n const {\n path = [],\n branch = [value],\n coerce = false,\n mask = false\n } = options;\n const ctx = {\n path,\n branch\n };\n\n if (coerce) {\n value = struct.coercer(value, ctx);\n\n if (mask && struct.type !== 'type' && isObject(struct.schema) && isObject(value) && !Array.isArray(value)) {\n for (const key in value) {\n if (struct.schema[key] === undefined) {\n delete value[key];\n }\n }\n }\n }\n\n let valid = true;\n\n for (const failure of struct.validator(value, ctx)) {\n valid = false;\n yield [failure, undefined];\n }\n\n for (let [k, v, s] of struct.entries(value, ctx)) {\n const ts = run(v, s, {\n path: k === undefined ? path : [...path, k],\n branch: k === undefined ? branch : [...branch, v],\n coerce,\n mask\n });\n\n for (const t of ts) {\n if (t[0]) {\n valid = false;\n yield [t[0], undefined];\n } else if (coerce) {\n v = t[1];\n\n if (k === undefined) {\n value = v;\n } else if (value instanceof Map) {\n value.set(k, v);\n } else if (value instanceof Set) {\n value.add(v);\n } else if (isObject(value)) {\n value[k] = v;\n }\n }\n }\n }\n\n if (valid) {\n for (const failure of struct.refiner(value, ctx)) {\n valid = false;\n yield [failure, undefined];\n }\n }\n\n if (valid) {\n yield [undefined, value];\n }\n}\n\n/**\n * `Struct` objects encapsulate the validation logic for a specific type of\n * values. Once constructed, you use the `assert`, `is` or `validate` helpers to\n * validate unknown input data against the struct.\n */\n\nclass Struct {\n constructor(props) {\n const {\n type,\n schema,\n validator,\n refiner,\n coercer = value => value,\n entries = function* () {}\n } = props;\n this.type = type;\n this.schema = schema;\n this.entries = entries;\n this.coercer = coercer;\n\n if (validator) {\n this.validator = (value, context) => {\n const result = validator(value, context);\n return toFailures(result, context, this, value);\n };\n } else {\n this.validator = () => [];\n }\n\n if (refiner) {\n this.refiner = (value, context) => {\n const result = refiner(value, context);\n return toFailures(result, context, this, value);\n };\n } else {\n this.refiner = () => [];\n }\n }\n /**\n * Assert that a value passes the struct's validation, throwing if it doesn't.\n */\n\n\n assert(value) {\n return assert(value, this);\n }\n /**\n * Create a value with the struct's coercion logic, then validate it.\n */\n\n\n create(value) {\n return create(value, this);\n }\n /**\n * Check if a value passes the struct's validation.\n */\n\n\n is(value) {\n return is(value, this);\n }\n /**\n * Mask a value, coercing and validating it, but returning only the subset of\n * properties defined by the struct's schema.\n */\n\n\n mask(value) {\n return mask(value, this);\n }\n /**\n * Validate a value with the struct's validation logic, returning a tuple\n * representing the result.\n *\n * You may optionally pass `true` for the `withCoercion` argument to coerce\n * the value before attempting to validate it. If you do, the result will\n * contain the coerced result when successful.\n */\n\n\n validate(value, options = {}) {\n return validate(value, this, options);\n }\n\n}\n/**\n * Assert that a value passes a struct, throwing if it doesn't.\n */\n\nfunction assert(value, struct) {\n const result = validate(value, struct);\n\n if (result[0]) {\n throw result[0];\n }\n}\n/**\n * Create a value with the coercion logic of struct and validate it.\n */\n\nfunction create(value, struct) {\n const result = validate(value, struct, {\n coerce: true\n });\n\n if (result[0]) {\n throw result[0];\n } else {\n return result[1];\n }\n}\n/**\n * Mask a value, returning only the subset of properties defined by a struct.\n */\n\nfunction mask(value, struct) {\n const result = validate(value, struct, {\n coerce: true,\n mask: true\n });\n\n if (result[0]) {\n throw result[0];\n } else {\n return result[1];\n }\n}\n/**\n * Check if a value passes a struct.\n */\n\nfunction is(value, struct) {\n const result = validate(value, struct);\n return !result[0];\n}\n/**\n * Validate a value against a struct, returning an error if invalid, or the\n * value (with potential coercion) if valid.\n */\n\nfunction validate(value, struct, options = {}) {\n const tuples = run(value, struct, options);\n const tuple = shiftIterator(tuples);\n\n if (tuple[0]) {\n const error = new StructError(tuple[0], function* () {\n for (const t of tuples) {\n if (t[0]) {\n yield t[0];\n }\n }\n });\n return [error, undefined];\n } else {\n const v = tuple[1];\n return [undefined, v];\n }\n}\n\nfunction assign(...Structs) {\n const isType = Structs[0].type === 'type';\n const schemas = Structs.map(s => s.schema);\n const schema = Object.assign({}, ...schemas);\n return isType ? type(schema) : object(schema);\n}\n/**\n * Define a new struct type with a custom validation function.\n */\n\nfunction define(name, validator) {\n return new Struct({\n type: name,\n schema: null,\n validator\n });\n}\n/**\n * Create a new struct based on an existing struct, but the value is allowed to\n * be `undefined`. `log` will be called if the value is not `undefined`.\n */\n\nfunction deprecated(struct, log) {\n return new Struct({ ...struct,\n refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx),\n\n validator(value, ctx) {\n if (value === undefined) {\n return true;\n } else {\n log(value, ctx);\n return struct.validator(value, ctx);\n }\n }\n\n });\n}\n/**\n * Create a struct with dynamic validation logic.\n *\n * The callback will receive the value currently being validated, and must\n * return a struct object to validate it with. This can be useful to model\n * validation logic that changes based on its input.\n */\n\nfunction dynamic(fn) {\n return new Struct({\n type: 'dynamic',\n schema: null,\n\n *entries(value, ctx) {\n const struct = fn(value, ctx);\n yield* struct.entries(value, ctx);\n },\n\n validator(value, ctx) {\n const struct = fn(value, ctx);\n return struct.validator(value, ctx);\n },\n\n coercer(value, ctx) {\n const struct = fn(value, ctx);\n return struct.coercer(value, ctx);\n }\n\n });\n}\n/**\n * Create a struct with lazily evaluated validation logic.\n *\n * The first time validation is run with the struct, the callback will be called\n * and must return a struct object to use. This is useful for cases where you\n * want to have self-referential structs for nested data structures to avoid a\n * circular definition problem.\n */\n\nfunction lazy(fn) {\n let struct;\n return new Struct({\n type: 'lazy',\n schema: null,\n\n *entries(value, ctx) {\n var _struct;\n\n (_struct = struct) != null ? _struct : struct = fn();\n yield* struct.entries(value, ctx);\n },\n\n validator(value, ctx) {\n var _struct2;\n\n (_struct2 = struct) != null ? _struct2 : struct = fn();\n return struct.validator(value, ctx);\n },\n\n coercer(value, ctx) {\n var _struct3;\n\n (_struct3 = struct) != null ? _struct3 : struct = fn();\n return struct.coercer(value, ctx);\n }\n\n });\n}\n/**\n * Create a new struct based on an existing object struct, but excluding\n * specific properties.\n *\n * Like TypeScript's `Omit` utility.\n */\n\nfunction omit(struct, keys) {\n const {\n schema\n } = struct;\n const subschema = { ...schema\n };\n\n for (const key of keys) {\n delete subschema[key];\n }\n\n return object(subschema);\n}\n/**\n * Create a new struct based on an existing object struct, but with all of its\n * properties allowed to be `undefined`.\n *\n * Like TypeScript's `Partial` utility.\n */\n\nfunction partial(struct) {\n const schema = struct instanceof Struct ? { ...struct.schema\n } : { ...struct\n };\n\n for (const key in schema) {\n schema[key] = optional(schema[key]);\n }\n\n return object(schema);\n}\n/**\n * Create a new struct based on an existing object struct, but only including\n * specific properties.\n *\n * Like TypeScript's `Pick` utility.\n */\n\nfunction pick(struct, keys) {\n const {\n schema\n } = struct;\n const subschema = {};\n\n for (const key of keys) {\n subschema[key] = schema[key];\n }\n\n return object(subschema);\n}\n/**\n * Define a new struct type with a custom validation function.\n *\n * @deprecated This function has been renamed to `define`.\n */\n\nfunction struct(name, validator) {\n console.warn('superstruct@0.11 - The `struct` helper has been renamed to `define`.');\n return define(name, validator);\n}\n\n/**\n * Ensure that any value passes validation.\n */\n\nfunction any() {\n return define('any', () => true);\n}\nfunction array(Element) {\n return new Struct({\n type: 'array',\n schema: Element,\n\n *entries(value) {\n if (Element && Array.isArray(value)) {\n for (const [i, v] of value.entries()) {\n yield [i, v, Element];\n }\n }\n },\n\n coercer(value) {\n return Array.isArray(value) ? value.slice() : value;\n },\n\n validator(value) {\n return Array.isArray(value) || \"Expected an array value, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a boolean.\n */\n\nfunction boolean() {\n return define('boolean', value => {\n return typeof value === 'boolean';\n });\n}\n/**\n * Ensure that a value is a valid `Date`.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\n\nfunction date() {\n return define('date', value => {\n return value instanceof Date && !isNaN(value.getTime()) || \"Expected a valid `Date` object, but received: \" + print(value);\n });\n}\nfunction enums(values) {\n const schema = {};\n const description = values.map(v => print(v)).join();\n\n for (const key of values) {\n schema[key] = key;\n }\n\n return new Struct({\n type: 'enums',\n schema,\n\n validator(value) {\n return values.includes(value) || \"Expected one of `\" + description + \"`, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a function.\n */\n\nfunction func() {\n return define('func', value => {\n return typeof value === 'function' || \"Expected a function, but received: \" + print(value);\n });\n}\n/**\n * Ensure that a value is an instance of a specific class.\n */\n\nfunction instance(Class) {\n return define('instance', value => {\n return value instanceof Class || \"Expected a `\" + Class.name + \"` instance, but received: \" + print(value);\n });\n}\n/**\n * Ensure that a value is an integer.\n */\n\nfunction integer() {\n return define('integer', value => {\n return typeof value === 'number' && !isNaN(value) && Number.isInteger(value) || \"Expected an integer, but received: \" + print(value);\n });\n}\nfunction intersection(Structs) {\n return new Struct({\n type: 'intersection',\n schema: null,\n\n *entries(value, ctx) {\n for (const S of Structs) {\n yield* S.entries(value, ctx);\n }\n },\n\n *validator(value, ctx) {\n for (const S of Structs) {\n yield* S.validator(value, ctx);\n }\n },\n\n *refiner(value, ctx) {\n for (const S of Structs) {\n yield* S.refiner(value, ctx);\n }\n }\n\n });\n}\nfunction literal(constant) {\n const description = print(constant);\n const t = typeof constant;\n return new Struct({\n type: 'literal',\n schema: t === 'string' || t === 'number' || t === 'boolean' ? constant : null,\n\n validator(value) {\n return value === constant || \"Expected the literal `\" + description + \"`, but received: \" + print(value);\n }\n\n });\n}\nfunction map(Key, Value) {\n return new Struct({\n type: 'map',\n schema: null,\n\n *entries(value) {\n if (Key && Value && value instanceof Map) {\n for (const [k, v] of value.entries()) {\n yield [k, k, Key];\n yield [k, v, Value];\n }\n }\n },\n\n coercer(value) {\n return value instanceof Map ? new Map(value) : value;\n },\n\n validator(value) {\n return value instanceof Map || \"Expected a `Map` object, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that no value ever passes validation.\n */\n\nfunction never() {\n return define('never', () => false);\n}\n/**\n * Augment an existing struct to allow `null` values.\n */\n\nfunction nullable(struct) {\n return new Struct({ ...struct,\n validator: (value, ctx) => value === null || struct.validator(value, ctx),\n refiner: (value, ctx) => value === null || struct.refiner(value, ctx)\n });\n}\n/**\n * Ensure that a value is a number.\n */\n\nfunction number() {\n return define('number', value => {\n return typeof value === 'number' && !isNaN(value) || \"Expected a number, but received: \" + print(value);\n });\n}\nfunction object(schema) {\n const knowns = schema ? Object.keys(schema) : [];\n const Never = never();\n return new Struct({\n type: 'object',\n schema: schema ? schema : null,\n\n *entries(value) {\n if (schema && isObject(value)) {\n const unknowns = new Set(Object.keys(value));\n\n for (const key of knowns) {\n unknowns.delete(key);\n yield [key, value[key], schema[key]];\n }\n\n for (const key of unknowns) {\n yield [key, value[key], Never];\n }\n }\n },\n\n validator(value) {\n return isObject(value) || \"Expected an object, but received: \" + print(value);\n },\n\n coercer(value) {\n return isObject(value) ? { ...value\n } : value;\n }\n\n });\n}\n/**\n * Augment a struct to allow `undefined` values.\n */\n\nfunction optional(struct) {\n return new Struct({ ...struct,\n validator: (value, ctx) => value === undefined || struct.validator(value, ctx),\n refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx)\n });\n}\n/**\n * Ensure that a value is an object with keys and values of specific types, but\n * without ensuring any specific shape of properties.\n *\n * Like TypeScript's `Record` utility.\n */\n\nfunction record(Key, Value) {\n return new Struct({\n type: 'record',\n schema: null,\n\n *entries(value) {\n if (isObject(value)) {\n for (const k in value) {\n const v = value[k];\n yield [k, k, Key];\n yield [k, v, Value];\n }\n }\n },\n\n validator(value) {\n return isObject(value) || \"Expected an object, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a `RegExp`.\n *\n * Note: this does not test the value against the regular expression! For that\n * you need to use the `pattern()` refinement.\n */\n\nfunction regexp() {\n return define('regexp', value => {\n return value instanceof RegExp;\n });\n}\nfunction set(Element) {\n return new Struct({\n type: 'set',\n schema: null,\n\n *entries(value) {\n if (Element && value instanceof Set) {\n for (const v of value) {\n yield [v, v, Element];\n }\n }\n },\n\n coercer(value) {\n return value instanceof Set ? new Set(value) : value;\n },\n\n validator(value) {\n return value instanceof Set || \"Expected a `Set` object, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value is a string.\n */\n\nfunction string() {\n return define('string', value => {\n return typeof value === 'string' || \"Expected a string, but received: \" + print(value);\n });\n}\nfunction tuple(Elements) {\n const Never = never();\n return new Struct({\n type: 'tuple',\n schema: null,\n\n *entries(value) {\n if (Array.isArray(value)) {\n const length = Math.max(Elements.length, value.length);\n\n for (let i = 0; i < length; i++) {\n yield [i, value[i], Elements[i] || Never];\n }\n }\n },\n\n validator(value) {\n return Array.isArray(value) || \"Expected an array, but received: \" + print(value);\n }\n\n });\n}\n/**\n * Ensure that a value has a set of known properties of specific types.\n *\n * Note: Unrecognized properties are allowed and untouched. This is similar to\n * how TypeScript's structural typing works.\n */\n\nfunction type(schema) {\n const keys = Object.keys(schema);\n return new Struct({\n type: 'type',\n schema,\n\n *entries(value) {\n if (isObject(value)) {\n for (const k of keys) {\n yield [k, value[k], schema[k]];\n }\n }\n },\n\n validator(value) {\n return isObject(value) || \"Expected an object, but received: \" + print(value);\n }\n\n });\n}\nfunction union(Structs) {\n const description = Structs.map(s => s.type).join(' | ');\n return new Struct({\n type: 'union',\n schema: null,\n\n coercer(value, ctx) {\n const firstMatch = Structs.find(s => {\n const [e] = s.validate(value, {\n coerce: true\n });\n return !e;\n }) || unknown();\n return firstMatch.coercer(value, ctx);\n },\n\n validator(value, ctx) {\n const failures = [];\n\n for (const S of Structs) {\n const [...tuples] = run(value, S, ctx);\n const [first] = tuples;\n\n if (!first[0]) {\n return [];\n } else {\n for (const [failure] of tuples) {\n if (failure) {\n failures.push(failure);\n }\n }\n }\n }\n\n return [\"Expected the value to satisfy a union of `\" + description + \"`, but received: \" + print(value), ...failures];\n }\n\n });\n}\n/**\n * Ensure that any value passes validation, without widening its type to `any`.\n */\n\nfunction unknown() {\n return define('unknown', () => true);\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n *\n * This allows you to transform input data before validating it, to increase the\n * likelihood that it passes validation—for example for default values, parsing\n * different formats, etc.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\n\nfunction coerce(struct, condition, coercer) {\n return new Struct({ ...struct,\n coercer: (value, ctx) => {\n return is(value, condition) ? struct.coercer(coercer(value, ctx), ctx) : struct.coercer(value, ctx);\n }\n });\n}\n/**\n * Augment a struct to replace `undefined` values with a default.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\n\nfunction defaulted(struct, fallback, options = {}) {\n return coerce(struct, unknown(), x => {\n const f = typeof fallback === 'function' ? fallback() : fallback;\n\n if (x === undefined) {\n return f;\n }\n\n if (!options.strict && isPlainObject(x) && isPlainObject(f)) {\n const ret = { ...x\n };\n let changed = false;\n\n for (const key in f) {\n if (ret[key] === undefined) {\n ret[key] = f[key];\n changed = true;\n }\n }\n\n if (changed) {\n return ret;\n }\n }\n\n return x;\n });\n}\n/**\n * Augment a struct to trim string inputs.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\n\nfunction trimmed(struct) {\n return coerce(struct, string(), x => x.trim());\n}\n\n/**\n * Ensure that a string, array, map, or set is empty.\n */\n\nfunction empty(struct) {\n const expected = \"Expected an empty \" + struct.type;\n return refine(struct, 'empty', value => {\n if (value instanceof Map || value instanceof Set) {\n const {\n size\n } = value;\n return size === 0 || expected + \" but received one with a size of `\" + size + \"`\";\n } else {\n const {\n length\n } = value;\n return length === 0 || expected + \" but received one with a length of `\" + length + \"`\";\n }\n });\n}\n/**\n * Ensure that a number or date is below a threshold.\n */\n\nfunction max(struct, threshold, options = {}) {\n const {\n exclusive\n } = options;\n return refine(struct, 'max', value => {\n return exclusive ? value < threshold : value <= threshold || \"Expected a \" + struct.type + \" less than \" + (exclusive ? '' : 'or equal to ') + threshold + \" but received `\" + value + \"`\";\n });\n}\n/**\n * Ensure that a number or date is above a threshold.\n */\n\nfunction min(struct, threshold, options = {}) {\n const {\n exclusive\n } = options;\n return refine(struct, 'min', value => {\n return exclusive ? value > threshold : value >= threshold || \"Expected a \" + struct.type + \" greater than \" + (exclusive ? '' : 'or equal to ') + threshold + \" but received `\" + value + \"`\";\n });\n}\n/**\n * Ensure that a string matches a regular expression.\n */\n\nfunction pattern(struct, regexp) {\n return refine(struct, 'pattern', value => {\n return regexp.test(value) || \"Expected a \" + struct.type + \" matching `/\" + regexp.source + \"/` but received \\\"\" + value + \"\\\"\";\n });\n}\n/**\n * Ensure that a string, array, number, date, map, or set has a size (or length, or time) between `min` and `max`.\n */\n\nfunction size(struct, min, max = min) {\n const expected = \"Expected a \" + struct.type;\n const of = min === max ? \"of `\" + min + \"`\" : \"between `\" + min + \"` and `\" + max + \"`\";\n return refine(struct, 'size', value => {\n if (typeof value === 'number' || value instanceof Date) {\n return min <= value && value <= max || expected + \" \" + of + \" but received `\" + value + \"`\";\n } else if (value instanceof Map || value instanceof Set) {\n const {\n size\n } = value;\n return min <= size && size <= max || expected + \" with a size \" + of + \" but received one with a size of `\" + size + \"`\";\n } else {\n const {\n length\n } = value;\n return min <= length && length <= max || expected + \" with a length \" + of + \" but received one with a length of `\" + length + \"`\";\n }\n });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n *\n * The refiner function is guaranteed to receive a value of the struct's type,\n * because the struct's existing validation will already have passed. This\n * allows you to layer additional validation on top of existing structs.\n */\n\nfunction refine(struct, name, refiner) {\n return new Struct({ ...struct,\n\n *refiner(value, ctx) {\n yield* struct.refiner(value, ctx);\n const result = refiner(value, ctx);\n const failures = toFailures(result, ctx, struct, value);\n\n for (const failure of failures) {\n yield { ...failure,\n refinement: name\n };\n }\n }\n\n });\n}\n\nexport { Struct, StructError, any, array, assert, assign, boolean, coerce, create, date, defaulted, define, deprecated, dynamic, empty, enums, func, instance, integer, intersection, is, lazy, literal, map, mask, max, min, never, nullable, number, object, omit, optional, partial, pattern, pick, record, refine, regexp, set, size, string, struct, trimmed, tuple, type, union, unknown, validate };\n//# sourceMappingURL=index.es.js.map\n","import { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { IntegrySDKEvents } from '@/types';\nimport { createContext } from 'preact';\n\nexport default createContext<{\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n integrationId?: number;\n isPreviewMode: boolean;\n isEditMode: boolean;\n} | null>(null);\n","function n(n,t){for(var r in t)n[r]=t[r];return n}export default function(t){var r=[];function u(n){for(var t=[],u=0;u<r.length;u++)r[u]===n?n=null:t.push(r[u]);r=t}function e(u,e,f){t=e?u:n(n({},t),u);for(var i=r,o=0;o<i.length;o++)i[o](t,f)}return t=t||{},{action:function(n){function r(t){e(t,!1,n)}return function(){for(var u=arguments,e=[t],f=0;f<arguments.length;f++)e.push(u[f]);var i=n.apply(this,e);if(null!=i)return i.then?i.then(r):r(i)}},setState:e,subscribe:function(n){return r.push(n),function(){u(n)}},unsubscribe:u,getState:function(){return t}}}\n//# sourceMappingURL=unistore.es.js.map\n","module.exports = function unistoreDevTools(store) {\n\tvar extension = window.__REDUX_DEVTOOLS_EXTENSION__ || window.top.__REDUX_DEVTOOLS_EXTENSION__;\n\tvar ignoreState = false;\n\n\tif (!extension) {\n\t\tconsole.warn('Please install/enable Redux devtools extension');\n\t\tstore.devtools = null;\n\n\t\treturn store;\n\t}\n\n\tif (!store.devtools) {\n\t\tstore.devtools = extension.connect();\n\t\tstore.devtools.subscribe(function (message) {\n\t\t\tif (message.type === 'DISPATCH' && message.state) {\n\t\t\t\tignoreState = (message.payload.type === 'JUMP_TO_ACTION' || message.payload.type === 'JUMP_TO_STATE');\n\t\t\t\tstore.setState(JSON.parse(message.state), true);\n\t\t\t}\n\t\t});\n\t\tstore.devtools.init(store.getState());\n\t\tstore.subscribe(function (state, action) {\n\t\t\tvar actionName = action && action.name || 'setState';\n\n\t\t\tif (!ignoreState) {\n\t\t\t\tstore.devtools.send(actionName, state);\n\t\t\t} else {\n\t\t\t\tignoreState = false;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn store;\n}\n","import { State } from '@/types/store';\n\nexport const initialState: State = {\n stepState: {\n steps: [],\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: 0,\n showValidation: false,\n allStepsCompleted: false,\n },\n genericData: {\n bundleId: null,\n templateId: null,\n templateApp: null,\n isPreviewMode: false,\n },\n stepMapping: {},\n stepDataMapping: {},\n parentChildMapping: {},\n integrations: [],\n templates: [],\n showSetupModal: false,\n fetchingIntegrations: false,\n fetchingTemplates: false,\n};\n","import { Store } from 'unistore';\n\nimport {\n BundleResponse,\n IntegrationResponse,\n PreviewMetadata,\n TemplateStep,\n} from '@/interfaces';\nimport { StepStateStep, State } from '@/types/store';\nimport { Authorization } from '@/types';\nimport { initialState } from '@/store/initialState';\n\nexport const actionFunctions = (storeSnapshot: Store<State>) => ({\n setStoreState(state: State, partialUpdate: Partial<State>): Partial<State> {\n return {\n ...state,\n ...partialUpdate,\n };\n },\n setBaseData(state: State, bundleResponse: BundleResponse): Partial<State> {\n return {\n ...state,\n integrations: bundleResponse.integrations,\n templates: bundleResponse.templates,\n };\n },\n\n setSteps(state: State, templateSteps: TemplateStep[]): Partial<State> {\n const parsedSteps: StepStateStep[] = [];\n let itemIndex = -1;\n templateSteps.forEach((element) => {\n if (element.activity.auth_required && !element.hide_authorization) {\n itemIndex += 1;\n // step has auth required so split into two.\n parsedSteps.push({\n stepId: element.id,\n title: `Connect ${element.activity.app.name}`,\n iconUrl: element.activity.app.icon_url,\n isCompleted: false,\n isCurrentlyOpen: false,\n type: 'AUTH',\n requiredFields: [element.id], // auth if required will always be named like this\n invalidFields: {\n [element.id]: '',\n },\n isValid: false,\n itemIndex,\n });\n } else {\n // auth is implicit so we will select the first available auth\n }\n\n if (element.is_visible) {\n // check if we need to show the config step at all\n if (element.template_fields.length > 0) {\n // step has template fields with atleast one visible\n const hasVisibleTemplateFields =\n element.template_fields.filter((el) => el.is_visible).length > 0;\n\n // check which of these are required\n const requiredFields = element.template_fields\n .filter((el) => el.is_required && el.is_visible)\n .map((field) => field.id);\n\n // check if no default value is provided\n const invalidFields = element.template_fields\n .filter((el) => el.is_required && !el.default_value)\n .reduce((prev, field) => ({ ...prev, [field.id]: '' }), {});\n\n const isValid = !(Object.keys(invalidFields).length > 0);\n\n if (hasVisibleTemplateFields) {\n itemIndex += 1;\n parsedSteps.push({\n stepId: element.id,\n title: element.title,\n iconUrl: element.activity.app.icon_url,\n isCompleted: false,\n isCurrentlyOpen: false,\n type: 'CONFIGURATION',\n requiredFields,\n invalidFields,\n isValid,\n itemIndex,\n });\n }\n }\n }\n });\n\n return {\n ...state,\n stepState: {\n steps: parsedSteps,\n currentStep: parsedSteps[0],\n stepIndex: 0,\n showValidation: false,\n allStepsCompleted: false,\n },\n };\n },\n\n setIntegrationData(state: State, data: IntegrationResponse): Partial<State> {\n const { stepDataMapping, stepMapping } = state;\n\n const selectedAuthData = data.steps.reduce(\n (\n prev: Record<\n number,\n {\n authId: number | null;\n stepId: number;\n }\n >,\n next,\n ) => {\n if (stepMapping[next.template_step]) {\n // add this data in return\n return {\n ...prev,\n [next.template_step]: {\n authId: next.authorization ? Number(next.authorization) : null,\n stepId: next.id,\n },\n };\n }\n return prev;\n },\n {},\n );\n\n const visibleStepsData = data.steps.reduce(\n (\n prev: Record<\n number,\n {\n id: number;\n value: string;\n template_field: number;\n }[]\n >,\n next,\n ) => {\n if (stepDataMapping[next.template_step]) {\n // add this data in return\n return {\n ...prev,\n [next.template_step]: next.app_user_data,\n };\n }\n return prev;\n },\n {},\n );\n\n const stepMappingCopy = { ...stepMapping };\n const stepDataMappingCopy = { ...stepDataMapping };\n const parsedStepsCopy = state.stepState.steps.map((el) => ({\n ...el,\n isCompleted: true,\n }));\n\n Object.keys(visibleStepsData).forEach((stepId) => {\n stepDataMappingCopy[Number(stepId)] = {\n ...stepDataMapping[Number(stepId)],\n ...visibleStepsData[Number(stepId)].reduce((prev, next) => {\n if (stepDataMapping[Number(stepId)])\n return {\n ...prev,\n [next.template_field]: {\n ...stepDataMapping[Number(stepId)][next.template_field],\n integrationFieldId: next.id,\n value: stepDataMapping[Number(stepId)][next.template_field]\n .isDynamic\n ? null\n : next.value,\n objectValue: stepDataMapping[Number(stepId)][\n next.template_field\n ].isDynamic\n ? JSON.parse(next.value || '{}')\n : null,\n },\n };\n return prev;\n }, {}),\n };\n });\n\n Object.keys(selectedAuthData).forEach((stepId) => {\n stepMappingCopy[Number(stepId)] = {\n ...stepMappingCopy[Number(stepId)],\n integrationStepId: selectedAuthData[Number(stepId)].stepId,\n isAuthVerified: true,\n selectedAuthId: selectedAuthData[Number(stepId)].authId,\n };\n });\n\n return {\n ...state,\n stepMapping: stepMappingCopy,\n stepDataMapping: stepDataMappingCopy,\n stepState: {\n ...state.stepState,\n steps: parsedStepsCopy,\n currentStep: parsedStepsCopy[0],\n stepIndex: 0,\n showValidation: false,\n allStepsCompleted: true,\n },\n };\n },\n\n showStepValidationState(state: State): Partial<State> {\n const { stepState } = state;\n return {\n stepState: {\n ...stepState,\n showValidation: true,\n },\n };\n },\n\n hideStepValidationState(state: State): Partial<State> {\n const { stepState } = state;\n return {\n stepState: {\n ...stepState,\n showValidation: false,\n },\n };\n },\n\n gotoNextStep(state: State): Partial<State> {\n const { stepState } = state;\n if (stepState) {\n const newIndex = Number(stepState.stepIndex) + 1;\n const step = stepState.steps[Number(stepState.stepIndex) + 1];\n const updatedStep = {\n ...stepState.steps[state.stepState.stepIndex],\n isCompleted: true,\n };\n if (!step) {\n // last step reached\n return {\n stepState: {\n ...stepState,\n steps: [\n ...stepState.steps.slice(0, stepState.stepIndex),\n updatedStep,\n ...stepState.steps.slice(stepState.stepIndex + 1),\n ],\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: newIndex,\n allStepsCompleted: true,\n showValidation: false,\n },\n };\n }\n\n return {\n stepState: {\n ...stepState,\n steps: [\n ...stepState.steps.slice(0, stepState.stepIndex),\n updatedStep,\n ...stepState.steps.slice(stepState.stepIndex + 1),\n ],\n currentStep: {\n ...step,\n },\n stepIndex: newIndex,\n showValidation: false,\n },\n };\n }\n return state;\n },\n\n gotoPreviousStep(state: State): Partial<State> {\n if (state.stepState) {\n const newIndex = Number(state.stepState.stepIndex) - 1;\n const step = state.stepState.steps[Number(state.stepState.stepIndex) - 1];\n\n return {\n stepState: {\n ...state.stepState,\n currentStep: step,\n stepIndex: newIndex,\n showValidation: !step.isValid,\n },\n };\n }\n return state;\n },\n\n gotoStepInPreview: (\n state: State,\n previewMetadata: PreviewMetadata,\n ): Partial<State> => {\n const { stepState } = state;\n const { stepId, type } = previewMetadata;\n\n if (stepId && type !== 'CONFIRMATION') {\n // go to a particular step\n const stepIndexToNavigateTo = stepState.steps.findIndex(\n (el) => el.stepId === stepId && el.type === type,\n );\n if (stepIndexToNavigateTo > -1)\n return {\n stepState: {\n ...state.stepState,\n currentStep: stepState.steps[stepIndexToNavigateTo],\n stepIndex: stepIndexToNavigateTo,\n allStepsCompleted: false,\n },\n };\n }\n\n if (!stepId && type === 'CONFIRMATION') {\n return {\n stepState: {\n ...stepState,\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: stepState.steps.length,\n allStepsCompleted: true,\n },\n };\n }\n return state;\n },\n\n gotoStep: (state: State, stepIndex: number): Partial<State> => {\n const { stepState } = state;\n const { stepIndex: oldStepIndex } = stepState;\n if (stepState) {\n const currentStep = stepState.steps[oldStepIndex];\n const stepToNavigateTo = stepState.steps[stepIndex];\n\n if (state.genericData.isPreviewMode) {\n // we can go to any step in preview mode\n if (stepIndex === stepState.steps.length) {\n return {\n stepState: {\n ...stepState,\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: stepState.steps.length,\n allStepsCompleted: true,\n },\n };\n }\n return {\n stepState: {\n ...state.stepState,\n currentStep: {\n ...stepToNavigateTo,\n },\n stepIndex,\n allStepsCompleted: false,\n },\n };\n }\n\n // navigate directly to confirmation page if all steps are completed\n if (stepState.allStepsCompleted && stepIndex === stepState.steps.length) {\n return {\n stepState: {\n ...stepState,\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex: stepState.steps.length,\n allStepsCompleted: true,\n },\n };\n }\n\n // navigate to confirmation from final step\n if (\n currentStep &&\n currentStep.isValid &&\n oldStepIndex === stepState.steps.length - 1 &&\n stepIndex === stepState.steps.length\n ) {\n const updatedStep = {\n ...stepState.steps[oldStepIndex],\n isCompleted: true,\n };\n return {\n stepState: {\n ...stepState,\n steps: [\n ...stepState.steps.slice(0, oldStepIndex),\n updatedStep,\n ...stepState.steps.slice(oldStepIndex + 1),\n ],\n currentStep: {\n type: 'CONFIRMATION',\n },\n stepIndex,\n allStepsCompleted: true,\n },\n };\n }\n // navigate to a step if it is completed\n if (stepToNavigateTo && stepToNavigateTo.isCompleted) {\n return {\n stepState: {\n ...state.stepState,\n currentStep: {\n ...stepToNavigateTo,\n },\n stepIndex,\n showValidation: !stepToNavigateTo.isValid,\n },\n };\n }\n if (\n // clicking on next step with current completed\n currentStep &&\n currentStep.isValid &&\n stepIndex === oldStepIndex + 1\n ) {\n const updatedStep = {\n ...stepState.steps[oldStepIndex],\n isCompleted: true,\n };\n return {\n stepState: {\n ...state.stepState,\n steps: [\n ...stepState.steps.slice(0, oldStepIndex),\n updatedStep,\n ...stepState.steps.slice(oldStepIndex + 1),\n ],\n currentStep: {\n ...stepToNavigateTo,\n },\n stepIndex,\n },\n };\n }\n }\n return state;\n },\n\n verifyStepValidity(state: State, stepId: number) {\n const { stepDataMapping } = state;\n const element = stepDataMapping[stepId];\n\n const fieldsData = Object.keys(element).map((fieldId) => {\n const ele = element[Number(fieldId)];\n return ele;\n });\n\n const invalid = fieldsData.filter(\n (el) => el.isRequired && !el.value && !el.objectValue,\n );\n\n const isValid = !(invalid.length > 0);\n return {\n stepState: {\n ...state.stepState,\n currentStep: {\n ...state.stepState.currentStep,\n isValid,\n },\n },\n };\n },\n\n getStepState() {\n return storeSnapshot.getState().stepState;\n },\n\n setGenericData(\n state: State,\n genericData: Partial<{\n templateId: number;\n bundleId: number;\n isPreviewMode: boolean;\n }>,\n ): Partial<State> {\n return {\n genericData: {\n ...state.genericData,\n ...genericData,\n },\n };\n },\n\n setTemplateApp(\n state: State,\n data: {\n name: string;\n iconUrl: string;\n },\n ): Partial<State> {\n return {\n genericData: {\n ...state.genericData,\n templateApp: {\n name: data.name,\n iconUrl: data.iconUrl,\n },\n },\n };\n },\n\n setStepMapping(state: State, steps: TemplateStep[]): Partial<State> {\n const stepMapping = steps.reduce((prev, step) => {\n let selectedAuthId = null;\n let shouldAutoVerifyAuth = false;\n if (step.hide_authorization || state.genericData.isPreviewMode) {\n shouldAutoVerifyAuth = true;\n selectedAuthId = step.authorization_type.authorizations[0]?.id ?? null;\n } else if (step.step_authorization || state.stepMapping[step.id]) {\n selectedAuthId = state.stepMapping[step.id].selectedAuthId;\n }\n return {\n ...prev,\n [step.id]: {\n step,\n authorizations:\n step.authorization_type.authorizations?.map((el) => ({\n authorizationId: el.id,\n userIdentity: el.user_identity,\n authType: el.authorization_type,\n disableLink: el.disable_link,\n isErrored: false,\n isVerified: shouldAutoVerifyAuth,\n })) ?? [],\n isAuthVerified: shouldAutoVerifyAuth,\n selectedAuthId,\n },\n };\n }, {});\n\n const stepDataMapping = steps.reduce(\n (prev, step) => ({\n ...prev,\n [step.id]: {\n ...state.stepDataMapping[step.id],\n ...step.template_fields.reduce(\n (acc, curr) => ({\n ...acc,\n [curr.id]: {\n fieldId: curr.id,\n value:\n !curr.is_visible || curr.default_value // set default value if step is not visible on SDK\n ? curr.default_value\n : (state.stepDataMapping[step.id] && // set empty if initializing, or existing if already set\n state.stepDataMapping[step.id][curr.id] &&\n state.stepDataMapping[step.id][curr.id].value) ||\n '',\n machineName: curr.activity_field?.machine_name,\n isRequired: curr.is_required,\n isVisible: curr.is_visible,\n isDynamic: curr.activity_field?.type === 'DYNAMIC',\n },\n }),\n {},\n ),\n },\n }),\n {},\n );\n\n return {\n stepMapping: {\n ...state.stepMapping,\n ...stepMapping,\n },\n stepDataMapping: {\n ...state.stepDataMapping,\n ...stepDataMapping,\n },\n genericData: {\n ...state.genericData,\n templateApp: {\n name: steps.length > 0 ? steps[0].activity.app.name : '',\n iconUrl: steps.length > 0 ? steps[0].activity.app.icon_url : '',\n },\n },\n };\n },\n\n setActivityOutputData(\n state: State,\n data: {\n activityOutputData: {\n value: string;\n text: string;\n }[];\n },\n ): Partial<State> {\n return {\n ...state,\n activityOutputData: data.activityOutputData,\n };\n },\n\n setDynamicFieldData(\n state: State,\n data: {\n dynamicFieldData: {\n [fieldId: string]: (string | Record<string, string>)[];\n };\n },\n ): Partial<State> {\n return {\n ...state,\n dynamicFieldData: Object.keys(data.dynamicFieldData).reduce(\n (prev, next) => ({\n ...prev,\n [`{${next}}`]: data.dynamicFieldData[next],\n }),\n {},\n ),\n };\n },\n\n setParentChildMapping(state: State, steps: TemplateStep[]): Partial<State> {\n const parentChildMapping = steps.reduce(\n (prev, step) => ({\n ...prev,\n [step.id]: {\n ...state.parentChildMapping[step.id],\n ...step.template_fields.reduce((acc, curr) => {\n if (curr.activity_field)\n return {\n ...acc,\n [curr.activity_field?.machine_name]: {\n fieldId: curr.id,\n childFields: curr.activity_field?.child_fields\n ? JSON.parse(curr.activity_field?.child_fields ?? '[]')\n : null,\n parentFields: curr.activity_field?.parent_fields\n ? JSON.parse(curr.activity_field?.parent_fields ?? '[]')\n : null,\n },\n };\n return acc;\n }, {}),\n },\n }),\n {},\n );\n\n return {\n parentChildMapping: {\n ...state.parentChildMapping,\n ...parentChildMapping,\n },\n };\n },\n\n addAuthorization(\n state: State,\n params: {\n stepId: number;\n authData: Authorization;\n },\n ): Partial<State> {\n const { stepId, authData } = params;\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: [\n ...state.stepMapping[stepId].authorizations,\n authData,\n ],\n },\n },\n };\n },\n\n removeAuthorization(\n state: State,\n params: {\n stepId: number;\n authId: number;\n },\n ): Partial<State> {\n const { stepId, authId } = params;\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: state.stepMapping[stepId].authorizations.filter(\n (el) => el.authorizationId !== authId,\n ),\n },\n },\n };\n },\n\n toggleVerifyAuthorizationFlag(\n state: State,\n params: {\n stepId: number;\n authId: number;\n isVerifying: boolean;\n },\n ): Partial<State> {\n const { stepId, authId, isVerifying } = params;\n const authObjIndex = state.stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === authId,\n );\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: [\n ...state.stepMapping[stepId].authorizations.slice(0, authObjIndex),\n {\n ...state.stepMapping[stepId].authorizations[authObjIndex],\n isVerifying,\n },\n ...state.stepMapping[stepId].authorizations.slice(authObjIndex + 1),\n ],\n },\n },\n };\n },\n\n toggleDeleteAuthorizationFlag(\n state: State,\n params: {\n stepId: number;\n authId: number;\n isDeleting: boolean;\n error: string;\n },\n ): Partial<State> {\n const { stepId, authId, isDeleting, error } = params;\n const authObjIndex = state.stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === authId,\n );\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n authorizations: [\n ...state.stepMapping[stepId].authorizations.slice(0, authObjIndex),\n {\n ...state.stepMapping[stepId].authorizations[authObjIndex],\n isDeleting,\n error,\n },\n ...state.stepMapping[stepId].authorizations.slice(authObjIndex + 1),\n ],\n },\n },\n };\n },\n\n setStepAuthId(\n state: State,\n params: { stepId: number; authId: number },\n ): Partial<State> {\n const { stepId, authId } = params;\n return {\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n selectedAuthId: authId,\n },\n },\n };\n },\n\n setStepAuthorization(\n state: State,\n stepId: number,\n selectedAuthId: number | null,\n isVerified: boolean,\n fieldsToReset: number[],\n override: boolean,\n ): Partial<State> {\n const step = state.stepState.steps[state.stepState.stepIndex];\n const stepFromMapping = state.stepMapping[stepId];\n const latestStepState = storeSnapshot.getState().stepState;\n if (\n step.type !== 'CONFIRMATION' &&\n latestStepState.currentStep?.type !== 'CONFIRMATION' &&\n latestStepState.currentStep?.stepId === stepId\n ) {\n const { invalidFields } = step;\n if (isVerified) delete invalidFields[stepId];\n const updatedStep = {\n ...state.stepState.steps[state.stepState.stepIndex],\n invalidFields,\n isValid: Object.keys(invalidFields).length < 1,\n isCompleted: stepFromMapping.selectedAuthId !== null || isVerified,\n };\n const authObjIndex = state.stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === selectedAuthId,\n );\n\n return {\n stepState: {\n ...state.stepState,\n steps: [\n ...state.stepState.steps.slice(0, state.stepState.stepIndex),\n updatedStep,\n ...state.stepState.steps.slice(state.stepState.stepIndex + 1),\n ],\n currentStep: updatedStep,\n showValidation: !isVerified && !stepFromMapping.selectedAuthId,\n },\n stepMapping: {\n ...state.stepMapping,\n [stepId]: {\n ...state.stepMapping[stepId],\n selectedAuthId: isVerified\n ? selectedAuthId\n : state.stepMapping[stepId].selectedAuthId,\n authorizations: [\n ...state.stepMapping[stepId].authorizations.slice(\n 0,\n authObjIndex,\n ),\n {\n ...state.stepMapping[stepId].authorizations[authObjIndex],\n isVerified,\n isVerifying: false,\n didFetchStatus: true,\n error: '',\n },\n ...state.stepMapping[stepId].authorizations.slice(\n authObjIndex + 1,\n ),\n ],\n },\n },\n // reset all values for the dependent fields of auth\n stepDataMapping: override\n ? state.stepDataMapping\n : {\n ...state.stepDataMapping,\n [stepId]: {\n ...state.stepDataMapping[stepId],\n ...fieldsToReset.reduce(\n (acc, curr) => ({\n ...acc,\n [curr]: {\n ...state.stepDataMapping[stepId][curr],\n value: '',\n },\n }),\n {},\n ),\n },\n },\n };\n }\n return state;\n },\n\n resetCustomMappingData(state: State, stepId: number): Partial<State> {\n const step = state.stepMapping[stepId];\n const dynamicFieldId = step.step.template_fields.filter(\n (el) => el.activity_field?.type === 'DYNAMIC',\n )[0]?.id;\n\n if (dynamicFieldId) {\n const stepData = state.stepDataMapping[stepId][dynamicFieldId];\n if (stepData) stepData.objectValue = {};\n return {\n stepDataMapping: {\n ...state.stepDataMapping,\n [stepId]: {\n ...state.stepDataMapping[stepId],\n [dynamicFieldId]: stepData,\n },\n },\n };\n }\n return state;\n },\n\n setStepFieldData(\n state: State,\n data: {\n stepId: number;\n fieldId: number;\n value: string;\n isRequired: boolean;\n },\n ): Partial<State> {\n const { stepId, fieldId, value, isRequired } = data;\n const step = state.stepState.steps[state.stepState.stepIndex];\n if (step.type !== 'CONFIRMATION') {\n const { invalidFields } = step;\n\n if (value) {\n // since this field was filled, it is no longer invalid\n delete invalidFields[fieldId];\n } else if (isRequired) {\n invalidFields[fieldId] = null;\n }\n\n const updatedStep = {\n ...state.stepState.steps[state.stepState.stepIndex],\n invalidFields,\n isValid: Object.keys(invalidFields).length < 1,\n };\n\n return {\n stepState: {\n ...state.stepState,\n steps: [\n ...state.stepState.steps.slice(0, state.stepState.stepIndex),\n updatedStep,\n ...state.stepState.steps.slice(state.stepState.stepIndex + 1),\n ],\n currentStep: updatedStep,\n allStepsCompleted: false,\n },\n stepDataMapping: {\n ...state.stepDataMapping,\n [stepId]: {\n ...state.stepDataMapping[stepId],\n [fieldId]: {\n ...state.stepDataMapping[stepId][fieldId],\n value,\n },\n },\n },\n };\n }\n return state;\n },\n\n setStepMappingData(\n state: State,\n data: {\n stepId: number;\n fieldId: number;\n id: string;\n value: string | null;\n },\n ): Partial<State> {\n const val = state.stepDataMapping[data.stepId][data.fieldId]?.objectValue;\n let newVal;\n if (data.value) {\n newVal = {\n ...(state.stepDataMapping[data.stepId][data.fieldId]?.objectValue ??\n {}),\n ...{ [data.id]: data.value },\n };\n } else if (val) {\n delete val[data.id];\n newVal = val;\n if (Object.keys(newVal).length === 0) newVal = null;\n }\n if (newVal)\n return {\n stepDataMapping: {\n ...state.stepDataMapping,\n [data.stepId]: {\n ...state.stepDataMapping[data.stepId],\n [data.fieldId]: {\n ...state.stepDataMapping[data.stepId][data.fieldId],\n objectValue: newVal,\n },\n },\n },\n };\n return state;\n },\n resetTemplateFields(state: State): State {\n return {\n ...state,\n stepMapping: initialState.stepMapping,\n stepDataMapping: initialState.stepDataMapping,\n stepState: initialState.stepState,\n showSetupModal: initialState.showSetupModal,\n parentChildMapping: initialState.parentChildMapping,\n genericData: {\n ...state.genericData,\n templateApp: initialState.genericData.templateApp,\n templateId: initialState.genericData.templateId,\n },\n };\n },\n reset(): State {\n return initialState;\n },\n});\n","import createStore, { Store } from 'unistore';\nimport devtools from 'unistore/devtools';\n\nimport { initialState } from '@/store/initialState';\n\nimport { State } from '../types/store';\nimport { actionFunctions } from './actionFunctions';\n\nconst createSDKStore = (): Store<State> => {\n const createStoreWrapper = () => createStore<State>(initialState);\n // const store = createStoreWrapper();\n const store = devtools(createStoreWrapper());\n return store;\n};\n\nexport { createSDKStore, actionFunctions, initialState };\n","import { Authorization, TemplateFormRenderModes } from '@/types';\nimport {\n array,\n boolean,\n date,\n Describe,\n nullable,\n number,\n object,\n optional,\n size,\n string,\n} from 'superstruct';\n\nexport interface UserConfig {\n availableFlowsLabel?: string;\n myFlowsLabel?: string;\n}\n\nexport interface SDKConfig {\n env?: 'staging' | 'production';\n debug?: boolean;\n integrationId?: number;\n xIntegryConfig?: {\n appAuth: {\n apiKey: string;\n };\n };\n userConfig?: UserConfig;\n}\n\nexport interface ConfigWithObject extends SDKConfig {\n appKey: string;\n hash: string;\n userId: string;\n bundleId: string;\n}\n\nexport interface ConfigWithUrlParams extends SDKConfig {\n useUrlParams?: boolean;\n}\n\nexport interface APIConfig {\n baseUrl: string;\n baseUrlv2: string;\n endpointsUrl: string;\n appKey: string;\n hash: string;\n userId: string;\n oauthVerifyPath: string;\n apiKey?: string;\n}\n\nexport interface Template {\n id: number;\n name: string;\n description: string;\n can_add_integration: boolean;\n integration_count: number;\n app: {\n icon_url: string;\n category: string[];\n tags: string;\n };\n branding_app: {\n icon_url: string;\n category: string[];\n tags: string;\n };\n}\n\nexport interface Integration {\n name: string;\n branding_app: {\n icon_url: string;\n category: string[];\n tags: string;\n };\n id: number;\n runs_count: number;\n bundle_instance: number;\n created: Date;\n delete_link: string;\n disable_link: string;\n edit_link: string;\n enable_link: string;\n icon_url: string;\n is_visible: number;\n last_modified: Date;\n status: string;\n template: number;\n task_execution: {\n integration_created_at: Date;\n last_execution_at: {\n date: Date;\n timezone: string;\n timezone_type: number;\n } | null;\n status: string | null;\n };\n}\n\nexport interface IntegrationSaveResponse {\n id: number;\n connected_account_id: number;\n is_visible: number | boolean;\n name: string;\n bundle_name: string;\n bundle_instance_id: number;\n status: string;\n template: number;\n steps: {\n id: number;\n template_step: number;\n returned_data: string | null;\n }[];\n}\n\nexport interface BundleResponse {\n templates: Template[];\n integrations: Integration[];\n}\n\ntype SaveIntegrationRequestStep = {\n id: number;\n authorization: number;\n template_step: number;\n app_user_data: {\n id: number;\n value: string;\n template_field: number;\n }[];\n};\n\nexport interface SaveOrUpdateIntegrationBody {\n id?: number;\n name: string;\n notification_email: string;\n template: number;\n bundle_id: number;\n bundle_instance_id?: number;\n steps: SaveIntegrationRequestStep[];\n}\n\nexport interface IntegrationStatusResponse {\n [integrationId: number]: {\n name: string;\n status: string;\n template_id: number;\n tooltip: string | null;\n task_execution: {\n integration_created_at: string;\n last_execution_at: string | null;\n status: string | null;\n };\n };\n}\n\ntype App = {\n id: number;\n name: string;\n description: string;\n icon_url: string;\n color: string;\n publishing_status: string;\n category: string[];\n app_type?: string;\n action_url?: string | null;\n created_at?: Date;\n tags: string;\n};\n\ntype Activity = {\n id: number;\n name: string;\n type: string;\n endpoint: string;\n auth_required: boolean;\n total_fields: number;\n app: App;\n activity_output: string | null;\n activity_output_url: string | null;\n dynamic_field_data_endpoint: string | null;\n};\n\ntype AuthorizationType = {\n id: number;\n type: string;\n authorizations: Authorization[];\n provider: string;\n is_sandbox_enabled: boolean;\n authorization_url_sandbox: string;\n};\n\nexport type IntegryStep = {\n id: number;\n weight: number;\n title: string;\n is_visible: boolean;\n activity: Activity;\n hide_authorization: boolean;\n};\n\nexport interface TemplateResponse {\n id: number;\n name: string;\n description: string;\n app: App;\n branding_app: App;\n button_text: string | null;\n is_wizard: boolean;\n steps: IntegryStep[];\n publishing_status: string;\n level?: number;\n parent_id?: number;\n}\n\nexport interface TemplateField {\n id: number;\n is_required: boolean;\n is_hidden: boolean;\n default_value: string | null;\n weight: number;\n description: string;\n summary: string | null;\n activity_field: {\n id: number;\n machine_name: string;\n type: string;\n title: string;\n description: string;\n weight: number;\n is_required: boolean;\n child_fields: string | null;\n is_dynamic: boolean;\n data_src: string | null;\n data_src_endpoint: number | null;\n parent_fields: string | null;\n dynamic_field_src: string | null;\n default_value: string | null;\n auto_machine_name: string;\n dynamic_field_src_endpoint: number | null;\n regex: string | null;\n is_searchable: boolean;\n } | null;\n title: string | null;\n type: string;\n placeholder: string | null;\n // manual_template: unknown | null;\n child_field: string | null;\n child_field_value: string | null;\n // template_fields: unknown[];\n button_text: string | null;\n // field_actions: unknown[];\n icon_url: string | null;\n long_description: string | null;\n regex: string | null;\n regex_msg: string | null;\n is_visible: boolean;\n}\n\nexport interface TemplateStep {\n id: number;\n weight: number;\n title: string;\n is_visible: boolean;\n activity: Activity;\n authorization_type: AuthorizationType;\n template_fields: TemplateField[];\n // step_instance: unknown | null;\n allow_multiple_authorizations: boolean;\n step_authorization: number | null;\n button_text: string | null;\n is_self_step: boolean;\n summary: string | null;\n auth_description: string | null;\n hide_authorization: boolean;\n // step_condition: unknown | null;\n machine_name: string | null;\n is_custom_machine_name: boolean;\n}\n\nexport interface InitConfig {\n containerId: string;\n templateContainerId?: string;\n renderMode: TemplateFormRenderModes;\n}\n\nexport interface IntegrationResponse {\n id: number;\n guid: string;\n name: string;\n notification_email: string;\n bundle_name: string;\n template: number;\n template_detail: {\n id: number;\n name: string;\n description: string;\n };\n steps: {\n id: number;\n endpoint: string | null;\n authorization: string | number | null;\n app_user_data: {\n id: number;\n value: string;\n template_field: number;\n }[];\n template_step: number;\n returned_data: null | string;\n verb?: string | null;\n }[];\n is_visible: number;\n parent_integration: number | null;\n status: string;\n task_execution: {\n last_execution_at: string | null;\n status: string | null;\n integration_created_at: string;\n };\n created: string;\n last_modified: string;\n}\n\nexport interface TemplatePreviewData {\n id: number;\n name: string;\n description: string;\n app: App;\n branding_app: App;\n button_text: string | null;\n is_wizard: boolean;\n publishing_status: string;\n level?: number;\n parent_id?: number;\n steps: TemplateStep[];\n}\n\nexport const TemplatePreviewDataType: Describe<TemplatePreviewData> = object({\n id: number(),\n name: string(),\n description: string(),\n app: object({\n id: number(),\n name: string(),\n description: string(),\n icon_url: string(),\n color: string(),\n publishing_status: string(),\n category: array(string()),\n app_type: optional(string()),\n action_url: nullable(optional(string())),\n created_at: optional(date()),\n tags: string(),\n }),\n branding_app: object({\n id: number(),\n name: string(),\n description: string(),\n icon_url: string(),\n color: string(),\n publishing_status: string(),\n category: array(string()),\n app_type: optional(string()),\n action_url: nullable(optional(string())),\n created_at: optional(date()),\n tags: string(),\n }),\n button_text: nullable(string()),\n is_wizard: boolean(),\n publishing_status: string(),\n steps: size(\n array(\n object({\n id: number(),\n weight: number(),\n title: string(),\n is_visible: boolean(),\n activity: object({\n id: number(),\n name: string(),\n type: string(),\n endpoint: string(),\n auth_required: boolean(),\n total_fields: number(),\n app: object({\n id: number(),\n name: string(),\n description: string(),\n icon_url: string(),\n color: string(),\n publishing_status: string(),\n category: array(string()),\n app_type: optional(string()),\n action_url: nullable(optional(string())),\n created_at: optional(date()),\n tags: string(),\n }),\n activity_output: nullable(string()),\n activity_output_url: nullable(string()),\n dynamic_field_data_endpoint: nullable(string()),\n }),\n authorization_type: object({\n id: number(),\n type: string(),\n authorizations: array(\n object({\n id: number(),\n authorization_type: string(),\n app_user: optional(number()),\n app_user_id: optional(number()),\n disable_link: optional(string()),\n integration_count: optional(number()),\n user_identity: string(),\n }),\n ),\n provider: string(),\n is_sandbox_enabled: boolean(),\n authorization_url_sandbox: string(),\n }),\n template_fields: array(\n object({\n id: number(),\n is_required: boolean(),\n is_hidden: boolean(),\n default_value: nullable(string()),\n weight: number(),\n description: string(),\n summary: nullable(string()),\n placeholder: nullable(string()),\n activity_field: nullable(\n object({\n id: number(),\n machine_name: string(),\n type: string(),\n title: string(),\n description: string(),\n weight: number(),\n is_required: boolean(),\n child_fields: nullable(string()),\n is_dynamic: boolean(),\n data_src: nullable(string()),\n data_src_endpoint: nullable(number()),\n parent_fields: nullable(string()),\n dynamic_field_src: nullable(string()),\n default_value: nullable(string()),\n auto_machine_name: string(),\n dynamic_field_src_endpoint: nullable(number()),\n regex: nullable(string()),\n is_searchable: boolean(),\n }),\n ),\n title: nullable(string()),\n type: string(),\n // manual_template: unknown | null;\n child_field: nullable(string()),\n child_field_value: nullable(string()),\n // template_fields: unknown[];\n button_text: nullable(string()),\n // field_actions: unknown[];\n icon_url: nullable(string()),\n long_description: nullable(string()),\n regex: nullable(string()),\n regex_msg: nullable(string()),\n is_visible: boolean(),\n }),\n ),\n // step_instance: unknown | null;\n allow_multiple_authorizations: boolean(),\n step_authorization: nullable(number()),\n button_text: nullable(string()),\n is_self_step: boolean(),\n summary: nullable(string()),\n auth_description: nullable(string()),\n hide_authorization: boolean(),\n // step_condition: unknown | null;\n machine_name: nullable(string()),\n is_custom_machine_name: boolean(),\n }),\n ),\n 0,\n Number.POSITIVE_INFINITY,\n ),\n});\n\nexport interface PreviewMetadata {\n stepId: number | null;\n type: 'AUTH' | 'CONFIGURATION' | 'CONFIRMATION' | 'SECTION';\n}\n\nexport interface PreviewPayload {\n templateData: TemplatePreviewData;\n metadata: PreviewMetadata;\n previewContainerId: string;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\nconst Loader = () => html`\n <svg\n class=${styles.loader}\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.13037 0.179352C7.57047 -0.168051 5.94039 -0.00810102 4.47777 0.635883C3.01515 1.27987 1.79647 2.37421 0.999409 3.75937C0.202348 5.14453 -0.131421 6.74808 0.0467641 8.33623C0.224949 9.92438 0.90577 11.4141 1.98997 12.5882C3.07417 13.7623 4.50506 14.5593 6.07402 14.8632C7.64298 15.167 9.26799 14.9618 10.7121 14.2773C12.1562 13.5929 13.344 12.4651 14.1022 11.0582C14.8604 9.65144 15.1494 8.03922 14.9271 6.45665L14.1844 6.56098C14.3845 7.9853 14.1243 9.43629 13.442 10.7024C12.7596 11.9685 11.6906 12.9836 10.3909 13.5996C9.09119 14.2156 7.62869 14.4003 6.21662 14.1269C4.80455 13.8534 3.51675 13.136 2.54097 12.0794C1.56519 11.0227 0.952454 9.68194 0.792088 8.2526C0.631721 6.82327 0.932113 5.38008 1.64947 4.13343C2.36682 2.88679 3.46363 1.90188 4.77999 1.32229C6.09635 0.742709 7.56343 0.598754 8.96733 0.911417L9.13037 0.179352Z\"\n fill=\"#E0E0E0\"\n />\n <path\n d=\"M14.93 6.47755C14.7207 4.95709 14.0501 3.53742 13.0085 2.41017C11.9669 1.28292 10.6046 0.50235 9.10537 0.173829L8.94483 0.906446C10.2941 1.20212 11.5202 1.90462 12.4577 2.91915C13.3951 3.93368 13.9987 5.21138 14.187 6.57979L14.93 6.47755Z\"\n fill=\"#ADADAD\"\n />\n </svg>\n`;\n\nexport { Loader };\n","/**\n * Utility types\n */\n\nexport type OrNull<Type> = Type | null;\n\nexport type OneOrMany<Type> = Type | Type[];\n\nexport type OneOrManyOrNull<Type> = OrNull<OneOrMany<Type>>;\n\nexport type Merge<A, B> = {\n [K in keyof (A | B)]: K extends keyof B ? B[K] : A[K];\n};\n\nexport function notEmpty<TValue>(\n value: TValue | null | undefined,\n): value is TValue {\n return value !== null && value !== undefined;\n}\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * Modified version of https://github.com/rschristian/preact-hint\n * for Preact with htm with added support for:\n * 1. bottom position\n * 2. dismissing popup on click of target element\n */\n\nimport { html } from 'htm/preact';\nimport type { ComponentChild, VNode } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\nimport styles from './styles.module.scss';\n\ninterface Props {\n children: ComponentChild | ComponentChild[];\n dismissOnClick?: boolean;\n position?: 'top' | 'bottom';\n attribute?: string;\n template?: (content: string) => VNode;\n}\n\ninterface HintProps {\n content: string;\n position: 'top' | 'bottom';\n template?: (content: string) => VNode;\n rootBoundingRect: ClientRect;\n targetBoundingRect: ClientRect;\n}\n\nexport function HintWrap(props: HintProps): VNode {\n const hint = useRef<HTMLSpanElement | null>(null);\n // Render way off-screen to prevent rubber banding from initial (and unavoidable) render.\n const [hintWidth, setHintWidth] = useState(10000);\n\n const { position } = props;\n\n useEffect(() => {\n if (hint.current) {\n setHintWidth(hint.current.getBoundingClientRect().width);\n }\n }, [hint]);\n\n return html`\n <div\n class=\"${`${styles['preact-hint']} ${\n position === 'top'\n ? styles['preact-hint__top']\n : styles['preact-hint__bottom']\n }`}\"\n style=${{\n ...{\n left:\n props.targetBoundingRect.left -\n props.rootBoundingRect.left -\n hintWidth / 2 +\n props.targetBoundingRect.width / 2,\n },\n ...(position === 'top'\n ? {\n bottom:\n props.rootBoundingRect.height -\n props.targetBoundingRect.top +\n props.rootBoundingRect.top +\n 2,\n }\n : {\n top:\n props.rootBoundingRect.height -\n props.targetBoundingRect.top +\n props.rootBoundingRect.top +\n 2,\n }),\n }}\n >\n <pre class=${styles['preact-hint__content']} ref=${hint}>\n ${props.template ? props.template(props.content) : props.content}\n </pre\n >\n </div>\n `;\n}\n\nexport const Hint = (props: Props): VNode => {\n const { position = 'bottom', attribute = 'data-hint' } = props;\n const [content, setContent] = useState<string>('');\n const [\n containerElement,\n setContainerElement,\n ] = useState<HTMLDivElement | null>(null);\n const [\n targetBoundingRect,\n setTargetBoundingRect,\n ] = useState<ClientRect | null>(null);\n\n const onRefChange = useCallback(\n (node: HTMLDivElement | null) => {\n setContainerElement(node);\n if (containerElement) {\n containerElement.addEventListener('mouseover', (e) => {\n if (e.target instanceof Element && e.target.hasAttribute(attribute)) {\n setContent(e.target.getAttribute(attribute) || '');\n setTargetBoundingRect(e.target.getBoundingClientRect());\n }\n });\n containerElement.addEventListener('mouseout', (e) => {\n if (e.target instanceof Element && e.target.hasAttribute(attribute)) {\n setContent('');\n setTargetBoundingRect(null);\n }\n });\n if (props.dismissOnClick)\n containerElement.addEventListener('click', () => {\n setContent('');\n setTargetBoundingRect(null);\n });\n }\n },\n [containerElement],\n );\n\n return html`\n <div ref=${onRefChange} style=\"position: relative\">\n ${content &&\n containerElement &&\n targetBoundingRect &&\n html` <${HintWrap}\n content=${content}\n position=${position}\n template=${props.template}\n rootBoundingRect=${containerElement?.getBoundingClientRect()}\n targetBoundingRect=${targetBoundingRect}\n />`}\n ${props.children}\n </div>\n `;\n};\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ThreeDotLoaderProps {\n size?: number;\n color?: string;\n}\nconst LoaderDot = (props: { color: string; size: number }) => html`\n <svg\n width=${props.size}\n height=${props.size}\n viewBox=\"0 0 ${props.size} ${props.size}\"\n fill=${props.color}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"${props.size / 2}\"\n cy=${props.size / 2}\n r=${props.size / 2}\n fill=${props.color}\n />\n </svg>\n`;\n\nconst ThreeDotLoader = (props: ThreeDotLoaderProps) => {\n const { size = 6, color = '#fff' } = props;\n\n return html`\n <div class=${styles.loader}>\n <${LoaderDot} size=${size} color=${color} />\n <${LoaderDot} size=${size} color=${color} />\n <${LoaderDot} size=${size} color=${color} />\n </div>\n `;\n};\n\nexport { ThreeDotLoader };\n","import { html } from 'htm/preact';\nimport cx from 'classnames';\n\nimport { Hint } from '@/components/Tooltip';\nimport { ThreeDotLoader } from '@/components/ThreeDotLoader';\n\nimport styles from './styles.module.scss';\n\nexport enum ButtonTypes {\n PRIMARY = 'primary',\n SECONDARY = 'secondary',\n LINK = 'link',\n}\n\nexport interface ButtonProps {\n label: string;\n type?: ButtonTypes;\n color?: string;\n dismissOnClick?: boolean;\n position?: 'top' | 'bottom';\n tooltip?: string;\n isLoading?: boolean;\n disabled?: boolean;\n backgroundColor: string;\n onClick: (e: MouseEvent) => void;\n}\n\n/**\n * Button component\n *\n */\nexport const Button = (props: ButtonProps) => {\n const {\n label,\n type = ButtonTypes.PRIMARY,\n color = null,\n backgroundColor = null,\n disabled = false,\n tooltip,\n dismissOnClick = true,\n isLoading = false,\n position = 'bottom',\n onClick = undefined,\n ...restOfProps\n } = props;\n\n return html`\n <${Hint} dismissOnClick=${dismissOnClick} position=${position}>\n <button\n type=\"button\"\n onclick=${onClick}\n data-hint=${tooltip || null}\n class=${cx(styles.button, {\n [styles.buttonPrimary]: type === ButtonTypes.PRIMARY,\n [styles.buttonSecondary]: type === ButtonTypes.SECONDARY,\n [styles.buttonLink]: type === ButtonTypes.LINK,\n [styles.disabled]: disabled,\n })}\n style=${{\n backgroundColor:\n type === ButtonTypes.PRIMARY ? backgroundColor : null,\n borderColor: type === ButtonTypes.PRIMARY ? backgroundColor : color,\n color,\n }}\n ${{ ...restOfProps }}\n >\n ${isLoading ? html`<${ThreeDotLoader} />` : label}\n </button>\n <//>\n `;\n};\n","import { html } from 'htm/preact';\nimport { StructError } from 'superstruct';\nimport { Button } from '../Button';\n\nimport styles from './styles.module.scss';\n\ninterface ErrorPageProps {\n title: string;\n description: string;\n errorPayload: Error | StructError | null;\n onDismiss?: () => void;\n}\n\n/**\n * ErrorPage component\n *\n */\nconst ErrorPage = (props: ErrorPageProps) => {\n const { title, description, errorPayload, onDismiss = null } = props;\n\n return html`\n <div class=\"${styles.errorPageWrapper}\">\n <div class=${styles.errorTitle}>${title}</div>\n <div class=${styles.errorDescription}>${description}</div>\n ${errorPayload &&\n html`\n <div class=${styles.errorContainer}>\n <pre class=${styles.errorPayload}>${errorPayload.message}</pre>\n <pre class=${styles.errorPayload}>${errorPayload.stack}</pre>\n </div>\n `}\n ${onDismiss &&\n html`\n <div>\n <${Button} label=\"Dismiss\" onClick=${onDismiss} />\n </div>\n `}\n </div>\n `;\n};\n\nexport { ErrorPage, ErrorPageProps };\n","import { RefObject } from 'preact';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\n\nimport useEventListener from './useEventListener';\n\ninterface Size {\n width: number;\n height: number;\n}\n\nfunction useElementSize<T extends HTMLElement = HTMLDivElement>(\n elementRef: RefObject<T>,\n): Size {\n const [size, setSize] = useState<Size>({\n width: 0,\n height: 0,\n });\n\n // Prevent too many rendering using useCallback\n const updateSize = useCallback(() => {\n const node = elementRef?.current;\n if (node) {\n setSize({\n width: node.offsetWidth || 0,\n height: node.offsetHeight || 0,\n });\n }\n }, [elementRef]);\n\n // Initial size on mount\n useEffect(() => {\n updateSize();\n }, []);\n\n useEventListener('resize', updateSize);\n\n return size;\n}\n\nexport default useElementSize;\n","import { RefObject } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\n\nfunction useEventListener<T extends HTMLElement = HTMLDivElement>(\n eventName: keyof WindowEventMap,\n handler: (event: Event) => void,\n element?: RefObject<T>,\n) {\n // Create a ref that stores handler\n const savedHandler: RefObject<(event: Event) => void> = useRef<\n (event: Event) => void\n >();\n\n useEffect(() => {\n // Define the listening target\n const targetElement: T | Window = element?.current || window;\n if (!(targetElement && targetElement.addEventListener)) {\n return;\n }\n\n // Update saved handler if necessary\n if (savedHandler.current !== handler) {\n savedHandler.current = handler;\n }\n\n // Create event listener that calls handler function stored in ref\n const eventListener = (event: Event) => {\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!savedHandler?.current) {\n savedHandler.current(event);\n }\n };\n\n targetElement.addEventListener(eventName, eventListener);\n\n // Remove event listener on cleanup\n // eslint-disable-next-line consistent-return\n return () => {\n targetElement.removeEventListener(eventName, eventListener);\n };\n }, [eventName, element, handler]);\n}\n\nexport default useEventListener;\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ntype NavItemProps = {\n label: string;\n logoUrl?: string;\n isDisabled?: boolean;\n isActive?: boolean;\n isCompleted?: boolean;\n isLastStep?: boolean;\n showArrow?: boolean;\n onClick?(): void;\n};\n\nconst TickMark = html` <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <rect opacity=\"0.7\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#2ECC71\" />\n <path\n d=\"M9.23107 6.34619L6.96066 8.94234L5.76953 7.58033\"\n stroke=\"white\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n</svg>`;\n\nconst FinalTickMark = html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"7.5\"\n cy=\"7.5\"\n r=\"6.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10.3333 5.5L6.83522 9.5L5 7.40148\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n`;\n\nclass NavItem extends Component<NavItemProps> {\n render() {\n const {\n logoUrl,\n isActive = false,\n isCompleted = false,\n isDisabled = false,\n isLastStep = false,\n onClick = () => null,\n showArrow = true,\n } = this.props;\n return html`\n <div\n class=${`${styles.navItem} ${isDisabled ? styles.disabled : ''} ${\n isActive ? styles.active : ''\n }`}\n onclick=${onClick}\n tabindex=\"-1\"\n role=\"button\"\n >\n <div class=${styles.navItemContent}>\n <div class=${styles.imgContainer}>\n ${!(isCompleted && !isActive)\n ? html`<img src=${logoUrl} />`\n : TickMark}\n ${isLastStep && FinalTickMark}\n </div>\n <p>${this.props.label}</p>\n ${!isLastStep &&\n showArrow &&\n html`\n <div class=${styles.arrow}>\n <svg\n width=\"6\"\n height=\"11\"\n viewBox=\"0 0 6 11\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.917969 1.33366L5.08464 5.50033L0.917969 9.66699\"\n stroke=\"#999999\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n `}\n </div>\n </div>\n `;\n }\n}\n\nexport { NavItem, NavItemProps };\n","/**\n * https://usehooks.com/useOnClickOutside/\n */\n\nimport { RefObject } from 'preact';\nimport { useEffect } from 'preact/hooks';\n\nexport function useOnClickOutside(\n ref: RefObject<HTMLDivElement>,\n handler: (event: MouseEvent | TouchEvent) => unknown,\n) {\n useEffect(\n () => {\n const listener = (event: MouseEvent | TouchEvent) => {\n // Do nothing if clicking ref's element or descendent elements\n if (event.target instanceof HTMLElement) {\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n }\n handler(event);\n };\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n },\n // Add ref and handler to effect dependencies\n // It's worth noting that because passed in handler is a new ...\n // ... function on every render that will cause this effect ...\n // ... callback/cleanup to run every render. It's not a big deal ...\n // ... but to optimize you can wrap handler in useCallback before ...\n // ... passing it into this hook.\n [ref, handler],\n );\n}\n","import { html } from 'htm/preact';\nimport { useRef, useState } from 'preact/hooks';\nimport { StepStateStep } from '@/types/store';\nimport { useOnClickOutside } from '@/hooks/useOnClickOutside';\n\nimport { NavItem } from './NavItem';\n\nimport styles from './styles.module.scss';\n\ninterface CollapsedStepsProps {\n isPreviewMode?: boolean;\n currentStepIndex: number;\n changeStep(index: number): void;\n steps: StepStateStep[];\n}\n\nconst CollapsedSteps = (props: CollapsedStepsProps) => {\n const { steps, currentStepIndex, isPreviewMode, changeStep } = props;\n\n const collapseRef = useRef<HTMLDivElement>();\n const dotsRef = useRef<HTMLDivElement>();\n\n const [showCollapsed, setShowCollapsed] = useState(false);\n\n useOnClickOutside(collapseRef, () =>\n showCollapsed ? setShowCollapsed(false) : null,\n );\n\n // useEffect(() => {\n // const onMouseOver = () => {\n // setShowCollapsed(true);\n // };\n // const onMouseLeave = () => {\n // setShowCollapsed(false);\n // };\n // dotsRef.current?.addEventListener('mouseenter', onMouseOver);\n // collapseRef.current?.addEventListener('mouseleave', onMouseLeave);\n\n // return () => {\n // dotsRef.current?.removeEventListener('mouseenter', onMouseOver);\n // collapseRef.current?.removeEventListener('mouseleave', onMouseLeave);\n // };\n // }, []);\n\n return html`\n <div class=${styles.collapse}>\n <div\n class=${styles.dots}\n ref=${dotsRef}\n onclick=${() => setShowCollapsed(true)}\n >\n <svg\n width=\"16\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M3.60039 9.83213C4.26313 9.83213 4.80039 9.29487 4.80039 8.63213C4.80039 7.96939 4.26313 7.43213 3.60039 7.43213C2.93765 7.43213 2.40039 7.96939 2.40039 8.63213C2.40039 9.29487 2.93765 9.83213 3.60039 9.83213Z\"\n fill=\"#333333\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.60039 9.83213C8.26313 9.83213 8.80039 9.29487 8.80039 8.63213C8.80039 7.96939 8.26313 7.43213 7.60039 7.43213C6.93765 7.43213 6.40039 7.96939 6.40039 8.63213C6.40039 9.29487 6.93765 9.83213 7.60039 9.83213Z\"\n fill=\"#333333\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.6004 9.83213C12.2631 9.83213 12.8004 9.29487 12.8004 8.63213C12.8004 7.96939 12.2631 7.43213 11.6004 7.43213C10.9376 7.43213 10.4004 7.96939 10.4004 8.63213C10.4004 9.29487 10.9376 9.83213 11.6004 9.83213Z\"\n fill=\"#333333\"\n />\n </svg>\n </div>\n <div\n ref=${collapseRef}\n class=\"${styles.popup} ${showCollapsed ? styles.show : ''}\"\n >\n ${steps.map(\n (el) => html`<div class=${styles.stepItem}>\n <${NavItem}\n label=${el.type !== 'CONFIRMATION' ? el.title : 'Confirmation'}\n logoUrl=${el.type !== 'CONFIRMATION' && el.iconUrl}\n isCompleted=${!isPreviewMode && el.isCompleted}\n isActive=${el.type !== 'CONFIRMATION' &&\n currentStepIndex === el.itemIndex}\n isDisabled=${(isPreviewMode &&\n Number(currentStepIndex) !== el.itemIndex) ||\n Number(currentStepIndex) < el.itemIndex}\n isLastStep=${false}\n showArrow=${false}\n onClick=${() => {\n setShowCollapsed(false);\n changeStep(el.itemIndex);\n }}\n />\n </div>`,\n )}\n </div>\n <div class=${styles.arrow}>\n <svg\n width=\"6\"\n height=\"11\"\n viewBox=\"0 0 6 11\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.917969 1.33366L5.08464 5.50033L0.917969 9.66699\"\n stroke=\"#999999\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n </div>\n `;\n};\n\nexport { CollapsedSteps };\n","/* eslint-disable no-console */\nimport { html } from 'htm/preact';\nimport { useContext, useState, useEffect, useRef } from 'preact/hooks';\nimport { connect } from 'unistore/preact';\nimport { StepStateStep, StoreType } from '@/types/store';\n\nimport AppContext from '@/contexts/AppContext';\nimport { actionFunctions } from '@/store';\nimport useElementResize from '@/hooks/useElementResize';\nimport useDebounce from '@/hooks/useDebounce';\n\nimport { NavItem } from './NavItem';\nimport { CollapsedSteps } from './CollapsedSteps';\n\nimport styles from './styles.module.scss';\n\nexport type StepNavigationProps = StoreType;\n\ninterface ParsedStep {\n type: 'VISIBLE' | 'COLLAPSED';\n steps: StepStateStep[];\n}\n\nconst StepNavigation = (props: StepNavigationProps) => {\n const MAX_STEP_WIDTH = 220;\n\n const wrapRef = useRef<HTMLDivElement>();\n\n const {\n gotoStep,\n stepState: {\n stepIndex: currentStepIndex,\n steps,\n currentStep: step,\n allStepsCompleted,\n },\n } = props;\n const context = useContext(AppContext);\n\n const { width } = useElementResize(wrapRef);\n\n const debouncedWidth = useDebounce(width, 150);\n\n const [parsedSteps, setParsedSteps] = useState<ParsedStep[]>([]);\n\n useEffect(() => {\n let widthToUse = 0;\n // immediately use width and then use debounded value\n if (debouncedWidth === 0) widthToUse = width;\n else widthToUse = debouncedWidth;\n\n let composedArray: ParsedStep[] = [];\n\n if (wrapRef.current) {\n // console.log('Width of step container:', debouncedWidth);\n // console.log('Max width:', MAX_STEP_WIDTH);\n // console.log('Number of steps:', steps.length);\n\n const stepsToShow = widthToUse / MAX_STEP_WIDTH;\n // console.log('step_width / MAX_WIDTH:', stepsToShow);\n\n let itemIndex = -1;\n\n if (stepsToShow <= steps.length) {\n // const canShowComfortably = Math.floor(stepsToShow);\n // console.log(\n // 'Collapsed state enabled since we can only show:',\n // canShowComfortably,\n // );\n if (steps.length <= 2) {\n // simple template with upto 2 steps, always show all\n // console.log(\n // 'Simple template with upto three steps, always show all three',\n // );\n // first and second, and confirmation step are always shown.\n composedArray.push({\n type: 'VISIBLE',\n steps: steps.map((el) => {\n itemIndex += 1;\n return {\n ...el,\n itemIndex,\n };\n }),\n });\n } else if (steps.length > 2) {\n itemIndex += 1;\n\n // now we have to check logic\n // console.log(\n // 'Template has more than 3 steps, checking collapse states',\n // );\n // if index is not first or last\n // always show first step\n composedArray.push({\n type: 'VISIBLE',\n steps: [{ ...steps[0], itemIndex }],\n });\n\n if (currentStepIndex !== 0 && currentStepIndex !== steps.length) {\n // check middle cases\n if (currentStepIndex > 1) {\n // console.log('More steps on the left exist');\n composedArray.push({\n type: 'COLLAPSED',\n steps: steps.slice(1, currentStepIndex).map((el) => {\n itemIndex += 1;\n return { ...el, itemIndex };\n }),\n });\n }\n\n // add the current step in every case\n composedArray.push({\n type: 'VISIBLE',\n steps: [\n { ...steps[currentStepIndex], itemIndex: currentStepIndex },\n ],\n });\n itemIndex += 1;\n\n if (steps.length - currentStepIndex > 1) {\n // console.log('More steps on the right exist');\n composedArray.push({\n type: 'COLLAPSED',\n steps: steps\n .slice(currentStepIndex + 1, steps.length)\n .map((el) => {\n itemIndex += 1;\n return {\n ...el,\n itemIndex,\n };\n }),\n });\n }\n } else {\n // console.log('Show first, last, collapsed steps in middle');\n composedArray.push({\n type: 'COLLAPSED',\n steps: steps.slice(1, steps.length).map((el) => {\n itemIndex += 1;\n return { ...el, itemIndex };\n }),\n });\n }\n }\n } else {\n // console.log('Showing all');\n composedArray = [\n {\n type: 'VISIBLE',\n steps: steps.map((el, idx) => ({\n ...el,\n itemIndex: idx,\n })),\n },\n ];\n }\n }\n // console.log({\n // composedArray,\n // });\n setParsedSteps(composedArray);\n }, [steps, width, debouncedWidth, currentStepIndex]);\n\n const changeStep = (stepIndex: number) => {\n gotoStep(stepIndex);\n };\n\n return html`\n <div class=${styles.navigation} ref=${wrapRef}>\n ${parsedSteps.map((parent) => {\n if (parent.type === 'VISIBLE') {\n return parent.steps.map(\n (el) => html`\n <div\n class=${styles.stepItem}\n style=${{\n maxWidth: MAX_STEP_WIDTH,\n }}\n >\n <${NavItem}\n label=${el.type !== 'CONFIRMATION'\n ? el.title\n : 'Confirmation'}\n logoUrl=${el.type !== 'CONFIRMATION' && el.iconUrl}\n isCompleted=${!context?.isPreviewMode && el.isCompleted}\n isActive=${step?.type !== 'CONFIRMATION' &&\n el.type !== 'CONFIRMATION' &&\n currentStepIndex === el.itemIndex}\n isDisabled=${!allStepsCompleted &&\n ((context?.isPreviewMode &&\n Number(currentStepIndex) !== el.itemIndex) ||\n Number(currentStepIndex) < el.itemIndex)}\n isLastStep=${el.itemIndex === steps.length}\n onClick=${() => changeStep(el.itemIndex)}\n />\n </div>\n `,\n );\n }\n if (parent.type === 'COLLAPSED') {\n return html`\n <${CollapsedSteps}\n isPreviewMode=${context?.isPreviewMode}\n currentStepIndex=${currentStepIndex}\n changeStep=${changeStep}\n steps=${parent.steps}\n />\n `;\n }\n return html`<></>`;\n })}\n ${parsedSteps.length > 0 &&\n html`\n <${NavItem}\n label=\"Confirmation\"\n logoUrl=\"\"\n isCompleted=${true}\n isActive=${step !== undefined && currentStepIndex === steps.length}\n isDisabled=${!allStepsCompleted &&\n step !== undefined &&\n currentStepIndex !== steps.length}\n isLastStep=${true}\n onClick=${() => changeStep(steps.length ?? 0)}\n />\n `}\n </div>\n `;\n};\n\nexport default connect<StepNavigationProps, unknown, StoreType, unknown>(\n 'stepState',\n actionFunctions,\n)(StepNavigation);\n","import { useEffect, useState } from 'preact/hooks';\n\nfunction useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nexport default useDebounce;\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\nexport interface RadioProps extends HTMLInputElement {\n description?: string;\n value: string;\n isChecked?: boolean;\n onChange?: (id: string) => void;\n}\n\n/**\n * Radio component\n *\n */\nexport const Radio = (props: RadioProps) => {\n const {\n id,\n description = null,\n value,\n isChecked = false,\n onChange = () => null,\n } = props;\n\n const handleRadioChange = (e: MouseEvent) => {\n e.preventDefault();\n if (e.currentTarget instanceof HTMLDivElement) {\n onChange(id);\n }\n };\n\n return html`\n <div class=${styles.radio}>\n <input\n id=${value}\n type=\"radio\"\n name=${id}\n value=${value}\n checked=${isChecked}\n />\n <div onclick=${handleRadioChange}>\n <label for=${value}>\n <div class=${styles.button}>\n ${isChecked\n ? html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14 7.5C14 11.0899 11.0899 14 7.5 14C3.91015 14 1 11.0899 1 7.5C1 3.91015 3.91015 1 7.5 1C11.0899 1 14 3.91015 14 7.5Z\"\n fill=\"white\"\n stroke=\"#5F4D86\"\n stroke-width=\"2\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.5 11C9.433 11 11 9.433 11 7.5C11 5.567 9.433 4 7.5 4C5.567 4 4 5.567 4 7.5C4 9.433 5.567 11 7.5 11Z\"\n fill=\"#5F4D86\"\n />\n </svg>\n `\n : html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14 7.5C14 11.0899 11.0899 14 7.5 14C3.91015 14 1 11.0899 1 7.5C1 3.91015 3.91015 1 7.5 1C11.0899 1 14 3.91015 14 7.5Z\"\n fill=\"white\"\n stroke=\"#E2E0DB\"\n stroke-width=\"2\"\n />\n </svg>\n `}\n </div>\n <div>\n <div class=${styles.text}>${value}</div>\n ${description &&\n html`<div class=${styles.description}>${description}</div>`}\n </div>\n </label>\n </div>\n </div>\n `;\n};\n","import { FunctionComponent } from 'preact';\nimport { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\n/**\n * ErrorMessage component\n *\n */\nconst ErrorMessage: FunctionComponent = (props) => {\n const { children } = props;\n\n return html` <div class=${styles.errorMessage}>${children}</div> `;\n};\n\nexport { ErrorMessage };\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface LabelProps {\n title: string;\n description?: string;\n isRequired?: boolean;\n}\n\nconst Label = (props: LabelProps) => {\n const { title, description, isRequired = false } = props;\n return html`\n <div class=${styles.label}>\n <label>\n <div>\n ${title}\n ${isRequired && html`<span class=${styles.required}>*</span>`}\n </div>\n ${description && html`<div>${description}</div>`}\n </label>\n </div>\n `;\n};\n\nexport { Label, LabelProps };\n","export default () => ![typeof window, typeof document].includes('undefined');\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\n\nimport { Loader } from '@/components/Loader';\nimport { IntegryAPI } from '@/modules/api';\nimport { Radio } from '@/components/RadioGroup/Radio';\nimport { Button, ButtonTypes } from '@/components/Button';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { Label } from '@/components/Label';\nimport { Authorization, StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\nimport isBrowser from '@/utils/isBrowser';\nimport AppContext from '@/contexts/AppContext';\n\nimport { openPopupWindow } from '@/utils/popup';\nimport { AuthData, isAuthMessage } from '@/utils/isAuthMessage';\n\nimport styles from './styles.module.scss';\n\ninterface AuthSelectorPropsType extends StoreType {\n stepId: number;\n apiHandler: IntegryAPI;\n showErrors?: boolean;\n onAuthSelected(\n authId: number | null,\n isVerified: boolean,\n override: boolean,\n ): void;\n}\n\ninterface AuthSelectorStateType {\n isLoading: boolean;\n fetched: boolean;\n}\n\nconst Resend = () => html`\n <svg\n class=${styles.resend}\n width=\"13\"\n height=\"15\"\n viewBox=\"0 0 13 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.8403 5.34L10.1453 6.345C10.5053 6.96 10.7003 7.68 10.7003 8.445C10.7003 10.77 8.81031 12.645 6.50031 12.645C4.19031 12.645 2.30031 10.755 2.30031 8.445C2.30031 6.135 4.19031 4.245 6.50031 4.245V6.15L11.1053 3.27L6.50031 0.375V2.28C3.09531 2.28 0.320312 5.055 0.320312 8.46C0.320313 11.85 3.09531 14.625 6.50031 14.625C9.90531 14.625 12.6803 11.85 12.6803 8.445C12.6803 7.32 12.3653 6.255 11.8403 5.34Z\"\n fill=\"#8D8D8D\"\n />\n </svg>\n`;\n\nconst AuthorizationRow = (props: {\n id: string;\n value: string;\n isChecked?: boolean;\n isLoading: boolean;\n isDeleting?: boolean;\n error?: string;\n status: 'VERIFYING' | 'CONNECTED' | 'ERROR' | 'IDLE' | null;\n handleChange?: (id: string) => void;\n handleReverify?: () => void;\n handleDelete?: () => void;\n}) => {\n const {\n id,\n value,\n isChecked,\n status = 'IDLE',\n isDeleting = false,\n handleChange,\n handleReverify,\n handleDelete = () => null,\n error,\n } = props;\n return html`\n <div class=${styles.checkboxRow}>\n <${Radio}\n id=${id}\n value=${value}\n isChecked=${isChecked}\n onChange=${handleChange}\n />\n <div class=${styles.statusWrap}>\n <div class=${styles.status}>\n <div>\n ${status === 'VERIFYING' &&\n !isDeleting &&\n html`<div class=${styles.statusOrange} />\n Verifying <${Loader} /> `}\n </div>\n <div>\n ${status === 'CONNECTED' &&\n !error &&\n !isDeleting &&\n html`<div class=${styles.statusGreen} />\n Connected`}\n </div>\n <div>\n ${status === 'ERROR' &&\n !isDeleting &&\n html`<div class=${styles.statusRed} />\n Failed\n <div onclick=${handleReverify}><${Resend} /></div>`}\n </div>\n ${isDeleting && html`<${Loader} />`}\n ${error &&\n !isDeleting &&\n !(status === 'VERIFYING') &&\n html`<div class=${styles.error}>${error}</div>`}\n </div>\n <div class=${styles.deleteIcon} onclick=${handleDelete}>\n ${!(status === 'VERIFYING' || isDeleting) &&\n html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M1.5 4.1999H13.65\" stroke=\"#F05C42\" />\n <path\n d=\"M11.6254 5.5498V6.2248L10.9504 13.6498H4.20039L3.52539 6.2248V5.5498\"\n stroke=\"#F05C42\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M5.55078 3.525V2.175C5.55078 1.80221 5.85299 1.5 6.22578 1.5H8.92578C9.29857 1.5 9.60078 1.80221 9.60078 2.175V3.525\"\n stroke=\"#F05C42\"\n />\n </svg>\n `}\n </div>\n </div>\n </div>\n `;\n};\n\nclass AuthSelector extends Component<\n AuthSelectorPropsType,\n AuthSelectorStateType\n> {\n static contextType = AppContext;\n\n constructor(props: AuthSelectorPropsType) {\n super(props);\n this.state = {\n isLoading: false,\n fetched: false,\n };\n }\n\n componentDidMount() {\n if (isBrowser())\n window.addEventListener('message', this.onAuthResponseReceived);\n\n // in preview mode, auto-verify the auth we pass\n const { stepId, stepMapping } = this.props;\n const auth = stepMapping[stepId].selectedAuthId;\n const authIndex = stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === auth,\n );\n // auth is selected but is in idle state\n if (\n stepMapping[stepId].selectedAuthId &&\n this.getAuthStatus(stepMapping[stepId].authorizations[authIndex]) ===\n 'IDLE'\n ) {\n this.verifyAuth(authIndex, true);\n }\n }\n\n componentDidUpdate(prevProps: AuthSelectorPropsType) {\n const { stepId, stepMapping } = this.props;\n const step = stepMapping[stepId];\n const auth = step.selectedAuthId;\n\n const authIndex = stepMapping[stepId].authorizations.findIndex(\n (el) => el.authorizationId === auth,\n );\n // verify auth whenever we select a new one\n if (auth !== prevProps.stepMapping[stepId].selectedAuthId && authIndex) {\n this.verifyAuth(authIndex);\n }\n if (\n step.authorizations.length ===\n prevProps.stepMapping[stepId].authorizations.length + 1\n ) {\n // auth was added so we verify\n this.verifyAuth(step.authorizations.length - 1);\n }\n }\n\n componentWillUnmount() {\n if (isBrowser())\n window.removeEventListener('message', this.onAuthResponseReceived);\n }\n\n private verifyAuth = (authIndex: number, override?: boolean) => {\n const { stepId } = this.props;\n const auth = this.props.stepMapping[stepId].authorizations[authIndex];\n\n if (!auth) return;\n\n if (auth.isVerified) {\n this.props.onAuthSelected(auth.authorizationId, true, !!override);\n return;\n }\n\n this.props.toggleVerifyAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isVerifying: true,\n });\n this.setState({ isLoading: true });\n\n this.props.apiHandler\n .verifyOAuth(auth.authorizationId)\n .then((res) => {\n if (res) {\n this.props.onAuthSelected(auth.authorizationId, true, !!override);\n } else {\n this.props.onAuthSelected(auth.authorizationId, false, !!override);\n }\n })\n .catch((err) => console.error(err))\n .finally(() => {\n this.props.toggleVerifyAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isVerifying: false,\n });\n this.setState({ isLoading: false });\n });\n };\n\n private deleteAuth = (authIndex: number) => {\n const { stepId } = this.props;\n const auth = this.props.stepMapping[stepId].authorizations[authIndex];\n\n this.props.toggleDeleteAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isDeleting: true,\n error: '',\n });\n\n this.props.apiHandler\n .deleteAuth(auth.authorizationId)\n .then((res) => {\n if (res?.status === 200) {\n this.props.removeAuthorization({\n stepId,\n authId: auth.authorizationId,\n });\n } else if (res?.status === 405) {\n // we have a deletion error\n this.props.toggleDeleteAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isDeleting: false,\n error: `${res.data}`,\n });\n } else {\n this.props.toggleDeleteAuthorizationFlag({\n stepId,\n authId: auth.authorizationId,\n isDeleting: false,\n error: 'An unexpected error occurred',\n });\n }\n })\n .catch((err) => {\n console.error(err);\n });\n };\n\n private onAuthResponseReceived = (messageEvent: MessageEvent<AuthData>) => {\n if (isAuthMessage(messageEvent) && messageEvent.data.activity_name) {\n console.info(messageEvent.data);\n if (this.props.stepId) {\n if (!messageEvent.data.already_exists) {\n this.props.addAuthorization({\n stepId: this.props.stepId,\n authData: {\n authorizationId: messageEvent.data.authorization_id,\n userIdentity: messageEvent.data.user_identity,\n disableLink: '',\n authType: '',\n isVerified: false,\n didFetchStatus: false,\n isVerifying: false,\n isDeleting: false,\n error: '',\n },\n });\n } else {\n this.props.setStepAuthId({\n stepId: this.props.stepId,\n authId: Number(messageEvent.data.authorization_id),\n });\n }\n }\n }\n };\n\n private getAuthStatus = (auth: Authorization) => {\n if (!auth) return null;\n let status = 'IDLE';\n if (auth.isVerified && auth.didFetchStatus) status = 'CONNECTED';\n if (!auth.isVerified && auth.didFetchStatus) status = 'ERROR';\n if (auth.isVerifying) status = 'VERIFYING';\n return status;\n };\n\n private getError = () => {\n const { stepId } = this.props;\n const step = this.props.stepMapping[stepId];\n if (!step.authorizations) {\n return `Please add a valid ${step.step.activity.app.name} account`;\n }\n return `Please select a valid ${step.step.activity.app.name} account`;\n };\n\n public openAuthWindow = () => {\n const { stepMapping, stepId } = this.props;\n const selectedStep = stepMapping[stepId].step;\n if (selectedStep) {\n const url = this.context.apiHandler.getAuthUrl(\n selectedStep.authorization_type.id,\n );\n openPopupWindow(url, 'Auth Window', window, 800, 600);\n }\n };\n\n render() {\n const { stepId, showErrors = false } = this.props;\n const step = this.props.stepMapping[stepId];\n const { authorizations } = step;\n\n return html`\n <div class=${styles.authSelectorWrap}>\n <${Label}\n title=\"Connect account\"\n description=${`Select your ${step.step.activity.app.name} account`}\n isRequired=${true}\n />\n <div class=${styles.rows}>\n ${authorizations.map(\n (el, index) => html`<${AuthorizationRow}\n id=${el.authorizationId}\n value=${el.userIdentity}\n status=${this.getAuthStatus(el)}\n isChecked=${el.authorizationId === step.selectedAuthId}\n isDeleting=${el.isDeleting}\n error=${el.error}\n handleChange=${() => this.verifyAuth(index)}\n handleReverify=${() => this.verifyAuth(index)}\n handleDelete=${() => this.deleteAuth(index)}\n />`,\n )}\n </div>\n <div class=${showErrors ? `${styles.error}` : ''}>\n <${Button}\n onClick=${() => this.openAuthWindow()}\n label=${`Add ${step.step.activity.app.name} account`}\n type=${ButtonTypes.SECONDARY}\n disabled=${this.state.isLoading}\n >\n <//>\n </div>\n ${showErrors && html`<${ErrorMessage}>${this.getError()}<//>`}\n </div>\n `;\n }\n}\n\nexport default connect<\n AuthSelectorPropsType,\n AuthSelectorStateType,\n StoreType,\n unknown\n>(\n ['stepMapping'],\n actionFunctions,\n)(AuthSelector);\n","interface AuthData {\n activity_name: string;\n already_exists: boolean;\n authorization_id: number;\n user_identity: string;\n}\n\nfunction isAuthMessage(\n msg: MessageEvent<AuthData>,\n): msg is MessageEvent<AuthData> {\n return (msg as MessageEvent<AuthData>) !== undefined;\n}\n\nexport { isAuthMessage, AuthData };\n","/**\n *\n * @param url Url to open in this popup window\n * @param windowName Given name\n * @param win Original window reference\n * @param w Width in px\n * @param h Height in px\n * @returns Reference to the newly created popup window\n */\nfunction openPopupWindow(\n url: string,\n windowName: string,\n win: Window,\n w: number,\n h: number,\n): Window | null {\n if (win.top) {\n const y = win.top.outerHeight / 2 + win.top.screenY - h / 2;\n const x = win.top.outerWidth / 2 + win.top.screenX - w / 2;\n return win.open(\n url,\n windowName,\n `toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=${w}, height=${h}, top=${y}, left=${x}`,\n );\n }\n return null;\n}\n\nexport { openPopupWindow };\n","/*! @license DOMPurify 2.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.1/LICENSE */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.DOMPurify = factory());\n}(this, function () { 'use strict';\n\n function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n var hasOwnProperty = Object.hasOwnProperty,\n setPrototypeOf = Object.setPrototypeOf,\n isFrozen = Object.isFrozen,\n getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze,\n seal = Object.seal,\n create = Object.create; // eslint-disable-line import/no-mutable-exports\n\n var _ref = typeof Reflect !== 'undefined' && Reflect,\n apply = _ref.apply,\n construct = _ref.construct;\n\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n\n if (!construct) {\n construct = function construct(Func, args) {\n return new (Function.prototype.bind.apply(Func, [null].concat(_toConsumableArray(args))))();\n };\n }\n\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n\n var regExpTest = unapply(RegExp.prototype.test);\n\n var typeErrorCreate = unconstruct(TypeError);\n\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return apply(func, thisArg, args);\n };\n }\n\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return construct(func, args);\n };\n }\n\n /* Add properties to a lookup table */\n function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n }\n\n /* Shallow clone an object */\n function clone(object) {\n var newObject = create(null);\n\n var property = void 0;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n }\n\n /* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n }\n\n var html = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n var svg = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n\n var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'feimage', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n\n var mathMl = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n\n var text = freeze(['#text']);\n\n var html$1 = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n\n var svg$1 = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n\n var mathMl$1 = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n\n var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n var MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n var ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html$$1) {\n return html$$1;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '2.3.1';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n var originalDocument = window.document;\n\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n Element = window.Element,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n Text = window.Text,\n Comment = window.Comment,\n DOMParser = window.DOMParser,\n trustedTypes = window.trustedTypes;\n\n\n var ElementPrototype = Element.prototype;\n\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML('') : '';\n\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n createDocumentFragment = _document.createDocumentFragment,\n getElementsByTagName = _document.getElementsByTagName;\n var importNode = originalDocument.importNode;\n\n\n var documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n\n var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,\n ERB_EXPR$$1 = ERB_EXPR,\n DATA_ATTR$$1 = DATA_ATTR,\n ARIA_ATTR$$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(html), _toConsumableArray$1(svg), _toConsumableArray$1(svgFilters), _toConsumableArray$1(mathMl), _toConsumableArray$1(text)));\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray$1(html$1), _toConsumableArray$1(svg$1), _toConsumableArray$1(mathMl$1), _toConsumableArray$1(xml)));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with <html>... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n var RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify.\n *\n * This defaults to `true` starting DOMPurify 2.2.0. Note that setting it to `false`\n * might cause XSS from attacks hidden in closed shadowroots in case the browser\n * supports Declarative Shadow: DOM https://web.dev/declarative-shadow-dom/\n */\n var RETURN_DOM_IMPORT = true;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n var RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n var SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n var IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n var USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = null;\n var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n var NAMESPACE = HTML_NAMESPACE;\n var IS_EMPTY_INPUT = false;\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT !== false; // Default true\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(text)));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html);\n addToSet(ALLOWED_ATTR, html$1);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl);\n addToSet(ALLOWED_ATTR, mathMl$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n\n var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n var ALL_SVG_TAGS = addToSet({}, svg);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n\n var ALL_MATHML_TAGS = addToSet({}, mathMl);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template'\n };\n }\n\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erronously deleted from\n // HTML namespace.\n var commonSvgAndHTMLElements = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG or MathML). Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n var _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n var _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n var doc = void 0;\n var leadingWhitespace = void 0;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, 'text/html');\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n var body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n var _isClobbered = function _isClobbered(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n\n if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function') {\n return true;\n }\n\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n var _isNode = function _isNode(object) {\n return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? object instanceof Node : object && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content = void 0;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (stringMatch(currentNode.nodeName, /[\\u0080-\\uFFFF]/)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n var tagName = stringToLowerCase(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (!_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Mitigate a problem with templates inside select */\n if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n var childCount = childNodes.length;\n\n for (var i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR$$1, ' ');\n content = stringReplace(content, ERB_EXPR$$1, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$$1, stringReplace(value, ATTR_WHITESPACE$$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$$1, stringReplace(value, ATTR_WHITESPACE$$1, ''))) ; else if (!value) ; else {\n return false;\n }\n\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr = void 0;\n var value = void 0;\n var lcName = void 0;\n var l = void 0;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n var attributes = currentNode.attributes;\n\n /* Check if we have attributes; if not we might have a text node */\n\n if (!attributes) {\n return;\n }\n\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n var _attr = attr,\n name = _attr.name,\n namespaceURI = _attr.namespaceURI;\n\n value = stringTrim(attr.value);\n lcName = stringToLowerCase(name);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR$$1, ' ');\n value = stringReplace(value, ERB_EXPR$$1, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n var lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode = void 0;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n var body = void 0;\n var importedNode = void 0;\n var currentNode = void 0;\n var oldNode = void 0;\n var returnNode = void 0;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw typeErrorCreate('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) ; else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : emptyHTML;\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$$1, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR$$1, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n var lcTag = stringToLowerCase(tag);\n var lcName = stringToLowerCase(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n }\n\n var purify = createDOMPurify();\n\n return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ListBoxItemProps {\n value: string;\n id: string;\n isSelected?: boolean;\n onClick(): void;\n}\n\nconst ListBoxItem = (props: ListBoxItemProps) => {\n const { id, value, isSelected, onClick } = props;\n return html`\n <span\n class=${`${styles.listboxItem} ${isSelected ? styles.selected : ''}`}\n data-value=${id}\n onclick=${onClick}\n >\n ${isSelected &&\n html`\n <svg\n width=\"7\"\n height=\"7\"\n viewBox=\"0 0 7 7\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"#333\"\n >\n <path\n d=\"M6.33333 1.5L2.83522 5.5L1 3.40148\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n `}\n ${value}\n </span>\n `;\n};\n\nexport { ListBoxItem, ListBoxItemProps };\n","import { html } from 'htm/preact';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\n\nimport { Label } from '@/components/Label';\nimport { useOnClickOutside } from '@/hooks/useOnClickOutside';\nimport { ThreeDotLoader } from '@/components/ThreeDotLoader';\nimport { IntegryAPI } from '@/modules/api';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { ListBoxItem, ListBoxItemProps } from './ListBoxItem';\n\nimport styles from './styles.module.scss';\n\ninterface ListBoxProps {\n title: string;\n description: string;\n items: Omit<ListBoxItemProps, 'onClick'>[];\n value?: string;\n onChange(val: string): void;\n isOpen?: boolean;\n isDynamic?: boolean;\n endpointUrl?: string;\n placeholder: string | null;\n isRequired?: boolean;\n showStepValidation?: boolean;\n responseMapper?(input: unknown): Omit<ListBoxItemProps, 'onClick'>[];\n apiHandler: IntegryAPI;\n endpointData: string;\n}\n\nconst ListBox = (props: ListBoxProps) => {\n const {\n title,\n description,\n items: passedItems = [],\n value = null,\n isOpen = false,\n isDynamic = false,\n endpointData,\n isRequired = false,\n placeholder,\n onChange = () => null,\n showStepValidation = false,\n responseMapper = (input: { id: string; value: string }[]) => input,\n } = props;\n\n const [items, setItems] = useState<Omit<ListBoxItemProps, 'onClick'>[]>(\n passedItems,\n );\n const [loading, setLoading] = useState(\n isDynamic && !passedItems.length && !value,\n );\n\n const [isDropdownOpen, setIsDropdownOpen] = useState(isOpen);\n\n const dropdownRef = useRef<HTMLDivElement>();\n\n useOnClickOutside(\n dropdownRef,\n () => isDropdownOpen && setIsDropdownOpen(false),\n );\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { apiHandler, isDynamic, endpointUrl } = props;\n if (isDynamic && endpointUrl) {\n setLoading(true);\n let data;\n try {\n data = JSON.parse(endpointData);\n } catch (error) {\n data = '';\n }\n apiHandler\n .callDynamicDataEndpoint<\n {\n id: string;\n value: string;\n }[]\n >(new URL(endpointUrl), data)\n .then((res) => {\n setLoading(false);\n if (res) {\n setItems(responseMapper(res));\n }\n });\n }\n }, [endpointData]);\n\n const toggleDropdown = () => {\n setIsDropdownOpen((prev) => !prev);\n };\n\n const onEnterClicked = () => {\n toggleDropdown();\n };\n\n const getSelectedItem = useMemo(() => {\n const index = items.findIndex((el) => el.id === value);\n return index > -1 ? items[index].value : 'Please Select...';\n }, [items, value]);\n\n return html`\n <div ref=${dropdownRef} class=\"${styles.listboxGroupWrapper}\">\n <fieldset>\n ${title &&\n html`\n <${Label}\n title=${title}\n description=${description}\n isRequired=${isRequired}\n />\n `}\n <div class=${styles.listbox}>\n <div\n class=${`${styles.customSelect} ${\n isDropdownOpen ? styles.open : ''\n }`}\n >\n <div\n class=${`${styles.customSelectTrigger} ${\n showStepValidation &&\n !value &&\n isRequired &&\n !isDropdownOpen &&\n styles.error\n }`}\n role=\"button\"\n tabindex=${0}\n onclick=${toggleDropdown}\n onkeyup=${(e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onEnterClicked();\n }\n }}\n >\n <span class=${value && styles.selected}>\n ${loading\n ? html`Loading`\n : html`\n ${items.length > 0\n ? html`\n ${value\n ? html`${getSelectedItem}`\n : html`${placeholder || 'Please Select...'}`}\n `\n : html`No options`}\n `}\n </span>\n\n <div ref=${dropdownRef} style=\"display: flex;\">\n ${loading\n ? html`<${ThreeDotLoader} color=\"#ababab\"><//>`\n : html`\n <div\n class=${`${styles.arrow} ${\n isDropdownOpen ? styles.close : ''\n }`}\n >\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11 1.5L6 6.5L1 1.5\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n `}\n </div>\n </div>\n <div class=${styles.customOptions}>\n ${items.length > 0 &&\n !loading &&\n html`\n ${items.map(\n (el) => html`\n <${ListBoxItem}\n key=${el.id}\n id=${el.id}\n value=${el.value}\n isSelected=${value === el.id}\n onClick=${() => {\n onChange(el.id);\n setIsDropdownOpen(false);\n }}\n ><//>\n `,\n )}\n `}\n </div>\n </div>\n ${showStepValidation &&\n !value &&\n !isDropdownOpen &&\n isRequired &&\n html` <${ErrorMessage}>Please select an option</${ErrorMessage}>`}\n </div>\n </fieldset>\n </div>\n `;\n};\n\nexport { ListBox, ListBoxProps };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '@/components/ErrorMessage';\n\nimport styles from './styles.module.scss';\n\nexport interface CheckboxProps extends Partial<HTMLInputElement> {\n label: { id: number; value: string }[];\n name: string;\n description?: string;\n value: string;\n isChecked?: boolean;\n isRequired?: boolean;\n showStepValidation?: boolean;\n handleChange?: (id: string, value: boolean) => void;\n}\n\n/**\n * Checkbox component\n *\n */\nexport const Checkbox = (props: CheckboxProps) => {\n const {\n label,\n name,\n description = null,\n value,\n isRequired = false,\n isChecked = false,\n showStepValidation = false,\n handleChange = () => null,\n } = props;\n\n const handleCheckboxChange = (e: MouseEvent) => {\n if (e.target instanceof HTMLInputElement) {\n const { id: changedId, checked } = e.target;\n handleChange(changedId, checked);\n }\n };\n\n return html`\n <div class=${styles.checkboxWrap}>\n <div class=${styles.checkbox}>\n <label for=${name}>\n <input\n id=${name}\n type=\"checkbox\"\n name=${name}\n value=${value}\n checked=${isChecked}\n onclick=${handleCheckboxChange}\n />\n <div class=${styles.button}>\n ${isChecked\n ? html`\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.86364 15.5L10 13.4923L17.5 6.49357L15.3485 4.5L7.86364 11.4987L4.63636 8.50129L2.5 10.4949L5.71212 13.4923L7.86364 15.5Z\"\n fill=\"#5F4D86\"\n />\n <path\n d=\"M0 0V-2H-2V0H0ZM20 0H22V-2H20V0ZM20 20V22H22V20H20ZM0 20H-2V22H0V20ZM0 2H20V-2H0V2ZM18 0V20H22V0H18ZM20 18H0V22H20V18ZM2 20V0H-2V20H2Z\"\n fill=\"#5F4D86\"\n />\n </svg>\n `\n : html`\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 0V-2H-2V0H0ZM20 0H22V-2H20V0ZM20 20V22H22V20H20ZM0 20H-2V22H0V20ZM0 2H20V-2H0V2ZM18 0V20H22V0H18ZM20 18H0V22H20V18ZM2 20V0H-2V20H2Z\"\n fill=\"#5F4D86\"\n />\n </svg>\n `}\n </div>\n <div>\n <div class=${styles.text}>\n ${label.map((data) => html`${data.value}`)}\n </div>\n ${description &&\n html`<div class=${styles.description}>${description}</div>`}\n </div>\n </label>\n </div>\n ${showStepValidation &&\n !value &&\n isRequired &&\n html` <${ErrorMessage}>Please select an option</${ErrorMessage}>`}\n </div>\n `;\n};\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\nconst LargeLoader = () => html`\n <svg\n class=${styles.loader}\n width=\"26\"\n height=\"25\"\n viewBox=\"0 0 26 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.7173 0.29892C13.1175 -0.280085 10.4006 -0.0135017 7.96294 1.0598C5.52524 2.13311 3.49412 3.95702 2.16568 6.26562C0.837246 8.57421 0.280965 11.2468 0.57794 13.8937C0.874915 16.5406 2.00962 19.0235 3.81662 20.9803C5.62362 22.9371 8.00843 24.2656 10.6234 24.772C13.2383 25.2784 15.9466 24.9363 18.3535 23.7956C20.7604 22.6548 22.74 20.7751 24.0036 18.4304C25.2673 16.0857 25.749 13.3987 25.3785 10.7611L24.1406 10.935C24.4741 13.3088 24.0406 15.7272 22.9033 17.8374C21.766 19.9476 19.9844 21.6393 17.8182 22.666C15.652 23.6927 13.2145 24.0006 10.861 23.5448C8.50758 23.089 6.36125 21.8934 4.73495 20.1323C3.10866 18.3711 2.08742 16.1366 1.82015 13.7543C1.55287 11.3721 2.05352 8.96679 3.24911 6.88905C4.44471 4.81132 6.27272 3.1698 8.46665 2.20382C10.6606 1.23785 13.1057 0.997923 15.4456 1.51903L15.7173 0.29892Z\"\n fill=\"#EFEFEF\"\n />\n <path\n d=\"M25.3833 10.7959C25.0346 8.26181 23.9168 5.8957 22.1808 4.01695C20.4449 2.13819 18.1743 0.83725 15.6756 0.289715L15.4081 1.51074C17.6569 2.00353 19.7004 3.17437 21.2628 4.86525C22.8251 6.55613 23.8311 8.68563 24.145 10.9663L25.3833 10.7959Z\"\n fill=\"#C4C4C4\"\n />\n </svg>\n`;\n\nexport { LargeLoader };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '../ErrorMessage';\n\nimport styles from './styles.module.scss';\n\ninterface SelectProps {\n ariaLabel: string;\n options: { label: string; key: string }[];\n placeholder: string;\n value?: string;\n showUnselectedValue?: boolean;\n unselectedText?: string;\n isRequired?: boolean;\n showStepValidation?: boolean;\n onChange?: (index: number) => void;\n}\n\n/**\n * Input component\n *\n */\nconst Select = (props: SelectProps) => {\n const {\n placeholder,\n ariaLabel,\n value,\n options = [],\n showUnselectedValue = false,\n unselectedText = 'Select a value',\n isRequired = false,\n showStepValidation = false,\n onChange = () => null,\n } = props;\n\n const handleInputChange = (e: MouseEvent) => {\n if (e.currentTarget instanceof HTMLSelectElement) {\n const { value: newValue } = e.currentTarget;\n const val = options.findIndex((el) => `${el.key}` === `${newValue}`);\n onChange(val);\n }\n };\n\n return html`\n <div class=${styles.selectWrapper}>\n <select\n aria-label=${ariaLabel}\n onchange=${handleInputChange}\n class=${value && styles.selectedVal}\n >\n ${showUnselectedValue &&\n html` <option value=\"\">${unselectedText}</option> `}\n ${value === undefined &&\n html`\n <option value=\"\" disabled selected hidden>${placeholder}</option>\n `}\n ${options.map(\n (el) => html`\n <option value=${el.key} selected=${value === el.key}>\n ${el.label}\n </option>\n `,\n )}\n </select>\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11 1.5L6 6.5L1 1.5\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n ${isRequired &&\n !value &&\n showStepValidation &&\n html`<${ErrorMessage}>Please map this required field<//>`}\n `;\n};\n\nexport { Select, SelectProps };\n","import { html } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { useContext, useEffect, useRef, useState } from 'preact/hooks';\nimport { TemplateField } from '@/interfaces';\nimport AppContext from '@/contexts/AppContext';\nimport { StoreType } from '@/types/store';\nimport { LargeLoader } from '@/components/LargeLoader';\nimport { actionFunctions } from '@/store';\nimport { Label } from '@/components/Label';\nimport { Select } from '@/components/BasicSelect';\n\nimport styles from './styles.module.scss';\n\nexport type MappingUiProps = {\n stepId: number;\n templateFields: TemplateField[];\n showStepValidation?: boolean;\n endpointData: {\n authId: number;\n fieldsData: Record<string, string | number>;\n };\n} & StoreType;\n\ninterface DynamicDataItem {\n fieldId: number;\n id: string | null;\n title: string | null;\n type: string;\n isNotDynamic?: boolean;\n}\n\nconst MappingUI = (props: MappingUiProps) => {\n const [loading, setLoading] = useState<boolean>(true);\n const [rootDataLoading, setRootDataLoading] = useState<boolean>(false);\n const [dynamicDataLoading, setDynamicDataLoading] = useState<boolean>(false);\n const [fieldsRef, setFieldsRef] = useState<number[]>([]);\n const [dynamicItems, setDynamicItems] = useState<DynamicDataItem[]>([]);\n const [dynamicListId, setDynamicListId] = useState('');\n\n const context = useContext(AppContext);\n\n const dynamicFieldIdRef = useRef('');\n\n useEffect(() => {\n if (dynamicItems.length > 0) {\n // eslint-disable-next-line array-callback-return\n dynamicItems.map((el, index) => {\n const ele = props.stepDataMapping[props.stepId][el.fieldId];\n if (!ele.isDynamic && ele.value) {\n const parsedValue = ele.value.slice(1, -1);\n if (parsedValue) setFieldsRef((prev) => [...prev, index]);\n } else if (ele.isDynamic && ele.objectValue && el.id) {\n const parsedValues = ele.objectValue || {};\n if (parsedValues[el.id]) {\n setFieldsRef((prev) => [...prev, index]);\n }\n }\n });\n }\n }, [dynamicItems]);\n\n useEffect(() => {\n const dynamicFieldToRender = props.templateFields.filter(\n (el) => el.activity_field && el.activity_field.type === 'DYNAMIC',\n )[0];\n\n if (dynamicFieldToRender) setDynamicListId(`${dynamicFieldToRender.id}`);\n const textFieldsToRender = props.templateFields\n .filter(\n (el) =>\n el.activity_field &&\n el.activity_field.type === 'TEXTFIELD' &&\n el.is_visible,\n )\n .map((el) => ({\n fieldId: el.id,\n id: el.activity_field && el.activity_field.machine_name,\n title: el.activity_field && el.activity_field.title,\n type: 'text',\n isNotDynamic: true,\n }));\n\n if (dynamicFieldToRender.activity_field) {\n const mappingField =\n props.parentChildMapping[props.stepId][\n dynamicFieldToRender.activity_field.machine_name\n ];\n\n let valuesMapField = '';\n if (mappingField) {\n const valuesMap = mappingField.parentFields?.reduce((prev, next) => {\n const parentFieldId =\n props.parentChildMapping[props.stepId][next].fieldId;\n return {\n ...prev,\n [parentFieldId]:\n props.stepDataMapping[props.stepId][parentFieldId].value,\n };\n }, {});\n valuesMapField = JSON.stringify(valuesMap);\n }\n\n if (valuesMapField !== dynamicFieldIdRef.current) {\n setLoading(true);\n setRootDataLoading(true);\n setDynamicDataLoading(true);\n // eslint-disable-next-line no-use-before-define\n setRootStepData();\n\n // eslint-disable-next-line no-use-before-define\n fetchDynamicFieldData(dynamicFieldToRender)\n ?.then((res) => {\n setLoading(false);\n // props.resetCustomMappingData(props.stepId);\n setFieldsRef([]);\n dynamicFieldIdRef.current = valuesMapField;\n if (Array.isArray(res)) {\n setDynamicItems([\n ...textFieldsToRender,\n ...res.map((el) => ({\n ...el,\n fieldId: dynamicFieldToRender.id,\n })),\n ]);\n } else {\n setDynamicItems(textFieldsToRender);\n }\n })\n .catch((err) => console.error(err));\n }\n }\n }, [props.stepDataMapping[props.stepId]]);\n\n const getVisibleFieldsDataOnRootStep = (\n stepId: number,\n ): {\n [machineName: string]: string;\n } => {\n const fields = props.stepDataMapping[stepId];\n const requiredFieldsWithValues = Object.keys(fields)\n .filter((el) => fields[Number(el)].value)\n .reduce((prev, curr) => {\n const currentItem = fields[Number(curr)];\n return {\n ...prev,\n [currentItem.machineName]: currentItem.value,\n };\n }, {});\n\n return requiredFieldsWithValues;\n };\n\n const setRootStepData = async () => {\n const triggerStepId = props.stepState.steps[0].stepId;\n const additionalData = getVisibleFieldsDataOnRootStep(triggerStepId);\n\n let stepData;\n if (triggerStepId) {\n stepData = props.stepMapping[triggerStepId].step;\n if (\n stepData.activity.type === 'TRIGGER' ||\n stepData.activity.type === 'QUERY' ||\n stepData.activity.type === 'ADAPTER'\n ) {\n if (stepData.activity.activity_output_url) {\n setRootDataLoading(true);\n context?.apiHandler\n .callDynamicDataEndpoint<\n {\n text: string;\n value: string;\n }[]\n >(new URL(stepData.activity.activity_output_url), {\n authorization_id: `${props.stepMapping[triggerStepId].selectedAuthId}`,\n ...additionalData,\n })\n .then((res) => {\n setRootDataLoading(false);\n if (res)\n props.setActivityOutputData({\n activityOutputData: res,\n });\n });\n } else {\n setRootDataLoading(false);\n }\n if (stepData.activity.dynamic_field_data_endpoint) {\n setDynamicDataLoading(true);\n context?.apiHandler\n .callDynamicDataEndpoint<{\n [fieldId: string]: (string | Record<string, string>)[];\n }>(new URL(stepData.activity.dynamic_field_data_endpoint), {\n authorization_id: `${props.stepMapping[triggerStepId].selectedAuthId}`,\n ...additionalData,\n })\n .then((res) => {\n setDynamicDataLoading(false);\n if (res)\n props.setDynamicFieldData({\n dynamicFieldData: res,\n });\n });\n } else {\n setDynamicDataLoading(false);\n }\n }\n }\n };\n\n const fetchDynamicFieldData = (templateField: TemplateField) => {\n const dynamicEndpoint = `${templateField.activity_field?.dynamic_field_src}`;\n return context?.apiHandler.callDynamicDataEndpoint<DynamicDataItem[]>(\n new URL(dynamicEndpoint),\n {\n authorization_id: `${props.endpointData.authId}`,\n ...props.endpointData.fieldsData,\n },\n );\n };\n\n const onMappingValueSelected = (\n index: number,\n item: DynamicDataItem,\n isRequired: boolean,\n rowIndex: number,\n ) => {\n const activityOutputObject = props.activityOutputData?.[index];\n const arrayIndex = fieldsRef.findIndex((el) => el === rowIndex);\n if (index < 0) {\n setFieldsRef((prev) => prev.filter((el) => el !== rowIndex));\n if (item.isNotDynamic) {\n props.setStepFieldData({\n stepId: `${props.stepId}`,\n fieldId: `${item.fieldId}`,\n value: '',\n isRequired,\n });\n } else if (dynamicListId) {\n props.setStepMappingData({\n stepId: props.stepId,\n fieldId: Number(dynamicListId),\n id: `${item.id}`,\n value: null,\n });\n }\n } else if (activityOutputObject) {\n if (arrayIndex < 0) {\n setFieldsRef((prev) => [...prev, rowIndex]);\n }\n if (item.isNotDynamic) {\n props.setStepFieldData({\n stepId: `${props.stepId}`,\n fieldId: `${item.fieldId}`,\n value: `{${activityOutputObject.value}}`,\n isRequired,\n });\n } else if (dynamicListId) {\n props.setStepMappingData({\n stepId: props.stepId,\n fieldId: Number(dynamicListId),\n id: `${item.id}`,\n value: `{${activityOutputObject.value}}`,\n });\n }\n }\n };\n\n return html`\n <div>\n <${Label}\n title=\"Map data\"\n description=\"Please map fields you want to use from both apps\"\n />\n <div>\n ${loading || rootDataLoading || dynamicDataLoading\n ? html`<div class=${styles.loader}><${LargeLoader} /></div>`\n : html`\n <div class=${styles.mappingWrap}>\n <div class=${styles.mappingRow}>\n <div class=${styles.mappingHeaderItem}>\n <img\n src=${props.stepMapping[props.stepId].step.activity.app\n .icon_url}\n />\n <div>\n ${`${\n props.stepMapping[props.stepId].step.activity.app.name\n } Field`}\n </div>\n </div>\n <div class=${styles.sampleData}>Sample Data</div>\n <div class=${styles.mappingHeaderItem}>\n <img src=${props.genericData.templateApp?.iconUrl} />\n <div>${props.genericData.templateApp?.name} Field</div>\n </div>\n </div>\n ${dynamicItems.map((el, itemIndex) => {\n const slug = el.id || '';\n const ele = props.stepDataMapping[props.stepId][el.fieldId];\n let selectVal;\n let parsedVal: string | Record<string, string | number>;\n if (ele.isDynamic) {\n parsedVal = ele.objectValue as Record<\n string,\n string | number\n >;\n } else {\n parsedVal = ele.value?.slice(1, -1) as string;\n }\n if (!ele.isDynamic && parsedVal) {\n selectVal = parsedVal;\n } else if (\n el.id &&\n ele.isDynamic &&\n ele.objectValue &&\n (parsedVal as Record<string, string | number>)[slug]\n ) {\n selectVal = `${\n (parsedVal as Record<string, string | number>)[slug]\n }`.slice(1, -1);\n }\n return html`\n <div class=${styles.mappingRow}>\n <div class=${styles.title}>\n ${el.title}${ele?.isRequired && html`<span>*</span>`}\n </div>\n <div class=${styles.sampleData}>\n ${props.dynamicFieldData &&\n selectVal &&\n props.dynamicFieldData[\n `{${selectVal}}`\n ]?.map((sample: string | Record<string, string>) =>\n sample ? html`<pre>${sample}</pre>` : html``,\n )}\n </div>\n <div class=${styles.selectBox}>\n <${Select}\n ariaLabel=\"Map a value\"\n placeholder=\"Please map a value\"\n options=${props.activityOutputData?.map((item) => ({\n key: item.value,\n label: item.text,\n }))}\n value=${selectVal}\n isRequired=${ele?.isRequired}\n showStepValidation=${props.showStepValidation}\n showUnselectedValue=${true}\n unselectedText=\"Skip\"\n onChange=${(index: number) =>\n onMappingValueSelected(\n index,\n el,\n ele?.isRequired ?? false,\n itemIndex,\n )}\n ><//>\n </div>\n </div>\n `;\n })}\n <div class=${styles.mappingInfo}>\n <div>\n <span>Mapped</span>\n <span\n >${fieldsRef.length}${' '}\n field${fieldsRef.length !== 1 ? 's' : ''}</span\n >\n </div>\n <div>\n <span>Ignored</span>\n <span\n >${dynamicItems.length - fieldsRef.length}${' '}\n field${dynamicItems.length - fieldsRef.length !== 1\n ? 's'\n : ''}</span\n >\n </div>\n </div>\n </div>\n `}\n </div>\n </div>\n `;\n};\n\nexport default connect<MappingUiProps, unknown, StoreType, unknown>(\n [\n 'stepState',\n 'genericData',\n 'stepMapping',\n 'activityOutputData',\n 'dynamicFieldData',\n 'stepDataMapping',\n 'parentChildMapping',\n ],\n actionFunctions,\n)(MappingUI);\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface BaseInputProps extends Partial<HTMLInputElement> {\n placeholder: string;\n value: string;\n control?: Component;\n handleChange?: (id: string) => void;\n}\n\n/**\n * BaseInput component\n *\n */\nconst BaseInput = (props: BaseInputProps) => {\n const {\n placeholder,\n value,\n type = 'text',\n control,\n handleChange = () => null,\n } = props;\n\n const handleInputChange = (e: MouseEvent) => {\n if (e.currentTarget instanceof HTMLInputElement) {\n const { value: newValue } = e.currentTarget;\n handleChange(newValue);\n }\n };\n\n const handleDateChange = (e: InputEvent) => {\n if (\n e.currentTarget instanceof HTMLInputElement &&\n e.currentTarget.type === 'date'\n ) {\n const { value: newValue } = e.currentTarget;\n handleChange(newValue);\n }\n };\n\n return html`\n <div class=${styles.inputWrapper}>\n <input\n type=${type}\n placeholder=${placeholder}\n value=${value}\n onkeyup=${handleInputChange}\n onchange=${handleDateChange}\n />\n ${control && html`<${control} //>`}\n </div>\n `;\n};\n\nexport { BaseInput, BaseInputProps };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { Label } from '@/components/Label';\n\nimport { BaseInput } from '../BaseInput';\nimport styles from './styles.module.scss';\n\ninterface InputProps {\n title: string;\n description: string;\n placeholder: string;\n value?: string;\n isRequired?: boolean;\n showStepValidation?: boolean;\n onChange?: (val: string) => void;\n}\n\n/**\n * Input component\n *\n */\nconst Input = (props: InputProps) => {\n const {\n title,\n description,\n placeholder,\n value,\n showStepValidation = false,\n isRequired = false,\n onChange = () => null,\n } = props;\n\n const handleChange = (inputValue: string) => {\n onChange(inputValue);\n };\n\n return html`\n <div class=\"${styles.inputGroupWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <${BaseInput}\n type=\"text\"\n placeholder=${placeholder}\n handleChange=${handleChange}\n value=${value}\n ><//>\n </fieldset>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a value<//>`}\n </div>\n `;\n};\n\nexport { Input, InputProps };\n","import { html } from 'htm/preact';\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { Label } from '@/components/Label';\nimport { BaseInput } from '../BaseInput';\n\nimport styles from './styles.module.scss';\n\ninterface DateInputProps {\n title: string;\n description: string;\n placeholder: string;\n showStepValidation?: boolean;\n isRequired?: boolean;\n value?: string;\n onChange?: (val: string) => void;\n}\n\n/**\n * DateInput component\n *\n */\nconst DateInput = (props: DateInputProps) => {\n const {\n title,\n description,\n placeholder,\n value,\n showStepValidation = false,\n isRequired = false,\n onChange = () => null,\n } = props;\n\n return html`\n <div class=\"${styles.dateGroupWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <${BaseInput}\n type=\"date\"\n placeholder=${placeholder}\n handleChange=${onChange}\n value=${value}\n control=${() => html` <div\n role=\"button\"\n class=${styles.visibilityToggle}\n onclick=${() => {\n if (value) onChange('');\n }}\n >\n ${!value\n ? html`\n <svg\n width=\"25\"\n height=\"26\"\n viewBox=\"0 0 25 26\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M16.9543 5.5464H19.335L19.3349 5.54639C20.6491 5.54639 21.7156 6.61204 21.7156 7.92812L21.7147 19.8323C21.7147 21.1466 20.6482 22.2131 19.334 22.2131H5.04866C3.73449 22.2131 2.66797 21.1466 2.66797 19.8323V7.92719C2.66797 6.61296 3.73444 5.54639 5.04866 5.54639L7.42936 5.5473V4.35641C7.42936 3.69791 7.96262 3.16553 8.62019 3.16553C9.27777 3.16553 9.81102 3.69791 9.81102 4.35641V5.5464L14.5717 5.5473V4.35641C14.5717 3.69791 15.105 3.16553 15.7626 3.16553C16.4201 3.16553 16.9534 3.69791 16.9534 4.35641L16.9543 5.5464ZM4.04688 20.8324H20.3369L20.3358 8.7124H4.04688V20.8324Z\"\n fill=\"#999999\"\n />\n </svg>\n `\n : html`\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M9 0C13.9673 0 18 4.03275 18 9C18 13.9673 13.9673 18 9 18C4.03275 18 0 13.9673 0 9C0 4.03275 4.03275 0 9 0ZM9 0.75C13.5533 0.75 17.25 4.44675 17.25 9C17.25 13.5533 13.5533 17.25 9 17.25C4.44675 17.25 0.75 13.5533 0.75 9C0.75 4.44675 4.44675 0.75 9 0.75ZM9 8.46975L12.9697 4.5L13.5 5.03025L9.53025 9L13.5 12.9697L12.9697 13.5L9 9.53025L5.03025 13.5L4.5 12.9697L8.46975 9L4.5 5.03025L5.03025 4.5L9 8.46975Z\"\n fill=\"black\"\n />\n </svg>\n `}\n </div>`}\n ><//>\n </fieldset>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a date<//>`}\n </div>\n `;\n};\n\nexport { DateInput, DateInputProps };\n","import { html } from 'htm/preact';\nimport { useState } from 'preact/hooks';\n\nimport { ErrorMessage } from '@/components/ErrorMessage';\nimport { BaseInput } from '../BaseInput';\nimport { Label } from '../../Label';\n\nimport styles from './styles.module.scss';\n\ninterface PasswordInputProps {\n id: string;\n title: string;\n description: string;\n placeholder: string;\n showStepValidation?: boolean;\n isRequired?: boolean;\n value?: string;\n onChange?: (val: string) => void;\n}\n\n/**\n * Input component\n *\n */\nconst PasswordInput = (props: PasswordInputProps) => {\n const {\n title,\n description,\n placeholder,\n value,\n showStepValidation = false,\n isRequired = false,\n onChange = () => null,\n } = props;\n\n const [passwordShown, setPasswordShown] = useState(false);\n\n const togglePasswordVisiblity = () => {\n setPasswordShown((isShown) => !isShown);\n };\n\n return html`\n <div class=\"${styles.passwordInputWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <${BaseInput}\n type=${passwordShown ? 'text' : 'password'}\n placeholder=${placeholder}\n handleChange=${onChange}\n value=${value}\n control=${() => html`\n <div\n class=${styles.visibilityToggle}\n onclick=${togglePasswordVisiblity}\n >\n ${!passwordShown\n ? html` <svg\n width=\"20\"\n height=\"12\"\n viewBox=\"0 0 20 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M0.183387 6.51359C0.35582 6.72918 4.47535 11.6704 9.71968 11.6704V11.6704C14.964 11.6704 19.0836 6.72924 19.256 6.51357C19.5005 6.21515 19.5005 5.78535 19.256 5.48691V5.48615C19.0835 5.27523 14.964 0.330078 9.71968 0.330078C4.47535 0.330078 0.355766 5.27507 0.183387 5.48693C-0.0611291 5.78535 -0.0611291 6.21515 0.183387 6.51359ZM9.71968 10.0499C6.1643 10.0499 3.04855 7.1924 1.90266 6.00018C3.04632 4.80579 6.1643 1.95044 9.71968 1.95044C13.2751 1.95044 16.3908 4.80797 17.5367 6.00018C16.393 7.19458 13.2751 10.0499 9.71968 10.0499Z\"\n fill=\"#999999\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M6.94922 8.29099C7.55668 8.89849 8.3806 9.24021 9.24022 9.24021C10.0998 9.24021 10.9237 8.89845 11.5312 8.29099C12.1387 7.68353 12.4804 6.85956 12.4804 5.99999C12.4804 5.14041 12.1387 4.31648 11.5312 3.70898C10.9238 3.10148 10.0998 2.75977 9.24022 2.75977C8.38064 2.75977 7.55672 3.10152 6.94922 3.70898C6.34172 4.31644 6 5.14041 6 5.99999C6 6.85956 6.34176 7.68349 6.94922 8.29099ZM7.7435 5.3803C7.99408 4.77431 8.58488 4.38021 9.24022 4.38021C9.67002 4.38021 10.0816 4.55031 10.3854 4.85481C10.6899 5.15856 10.86 5.57015 10.86 5.99995C10.86 6.65529 10.4659 7.24607 9.85987 7.49667C9.25464 7.74727 8.5583 7.60905 8.09509 7.14508C7.63111 6.68186 7.49289 5.98552 7.7435 5.3803Z\"\n fill=\"#999999\"\n />\n </svg>`\n : html` <svg\n width=\"20\"\n height=\"12\"\n viewBox=\"0 0 20 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M0.183387 6.51359C0.35582 6.72918 4.47535 11.6704 9.71968 11.6704V11.6704C14.964 11.6704 19.0836 6.72924 19.256 6.51357C19.5005 6.21515 19.5005 5.78535 19.256 5.48691V5.48615C19.0835 5.27523 14.964 0.330078 9.71968 0.330078C4.47535 0.330078 0.355766 5.27507 0.183387 5.48693C-0.0611291 5.78535 -0.0611291 6.21515 0.183387 6.51359ZM9.71968 10.0499C6.1643 10.0499 3.04855 7.1924 1.90266 6.00018C3.04632 4.80579 6.1643 1.95044 9.71968 1.95044C13.2751 1.95044 16.3908 4.80797 17.5367 6.00018C16.393 7.19458 13.2751 10.0499 9.71968 10.0499Z\"\n fill=\"#333333\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M6.94922 8.29099C7.55668 8.89849 8.3806 9.24021 9.24022 9.24021C10.0998 9.24021 10.9237 8.89845 11.5312 8.29099C12.1387 7.68353 12.4804 6.85956 12.4804 5.99999C12.4804 5.14041 12.1387 4.31648 11.5312 3.70898C10.9238 3.10148 10.0998 2.75977 9.24022 2.75977C8.38064 2.75977 7.55672 3.10152 6.94922 3.70898C6.34172 4.31644 6 5.14041 6 5.99999C6 6.85956 6.34176 7.68349 6.94922 8.29099ZM7.7435 5.3803C7.99408 4.77431 8.58488 4.38021 9.24022 4.38021C9.67002 4.38021 10.0816 4.55031 10.3854 4.85481C10.6899 5.15856 10.86 5.57015 10.86 5.99995C10.86 6.65529 10.4659 7.24607 9.85987 7.49667C9.25464 7.74727 8.5583 7.60905 8.09509 7.14508C7.63111 6.68186 7.49289 5.98552 7.7435 5.3803Z\"\n fill=\"#333333\"\n />\n </svg>`}\n </div>\n `}\n ><//>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a value<//>`}\n </fieldset>\n </div>\n `;\n};\n\nexport { PasswordInput, PasswordInputProps };\n","import { copyStringToClipboard } from '@/utils/copyToClipboard';\nimport { html } from 'htm/preact';\nimport { ErrorMessage } from '../ErrorMessage';\nimport { Label } from '../Label';\n\nimport styles from './styles.module.scss';\n\ninterface TextAreaProps {\n title: string;\n description: string;\n placeholder: string;\n value?: string;\n showStepValidation?: boolean;\n isRequired?: boolean;\n showCopyButton?: boolean;\n onChange?: (val: string) => void;\n}\n\n/**\n * TextArea component\n *\n */\nconst TextArea = (props: TextAreaProps) => {\n const {\n title,\n description,\n value,\n placeholder,\n onChange = () => null,\n showStepValidation = false,\n showCopyButton = false,\n isRequired = false,\n } = props;\n\n const handleInputChange = (e: InputEvent) => {\n if (e.currentTarget instanceof HTMLTextAreaElement) {\n const { value: newValue } = e.currentTarget;\n onChange(newValue);\n }\n };\n\n const onCopy = () => {\n copyStringToClipboard(value || '');\n };\n\n return html`\n <div class=\"${styles.textareaInputWrapper}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <textarea\n placeholder=${placeholder}\n value=${value}\n oninput=${handleInputChange}\n />\n ${showCopyButton &&\n html`\n <div onclick=${onCopy} class=${styles.copyButton}>\n <svg\n width=\"12\"\n height=\"15\"\n viewBox=\"0 0 12 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.75\"\n y=\"1\"\n width=\"7.5\"\n height=\"9.5\"\n rx=\"0.75\"\n stroke=\"#999999\"\n stroke-width=\"1.5\"\n />\n <rect\n x=\"3.75\"\n y=\"4.5\"\n width=\"7.5\"\n height=\"9.5\"\n rx=\"0.75\"\n fill=\"#E4E4E4\"\n stroke=\"#999999\"\n stroke-width=\"1.5\"\n />\n </svg>\n </div>\n `}\n </fieldset>\n ${showStepValidation &&\n isRequired &&\n html`${ErrorMessage}>Please enter a value<//>`}\n </div>\n `;\n};\n\nexport { TextArea, TextAreaProps };\n","export const copyStringToClipboard = (str: string) => {\n if (!navigator.clipboard) {\n // Create new element\n const el = document.createElement('textarea');\n // Set value (string to be copied)\n el.value = str;\n // Set non-editable to avoid focus and move outside of view\n el.setAttribute('readonly', '');\n\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n document.body.appendChild(el);\n // Select text inside element\n el.select();\n // Copy text to clipboard\n document.execCommand('copy');\n // Remove temporary element\n document.body.removeChild(el);\n } else {\n navigator.clipboard.writeText(str).catch(() => {\n console.error('Could not copy to clipboard'); // error\n });\n }\n};\n","import { html } from 'htm/preact';\nimport { useContext, useEffect, useRef, useState } from 'preact/hooks';\n\nimport AppContext from '@/contexts/AppContext';\nimport { Radio } from './Radio';\nimport { Label } from '../Label';\nimport { ErrorMessage } from '../ErrorMessage';\n\nimport styles from './styles.module.scss';\nimport { ThreeDotLoader } from '../ThreeDotLoader';\n\ninterface RadioItem {\n id: string;\n value: string;\n}\n\nexport interface RadioGroupProps {\n title: string;\n description: string;\n isDynamic: boolean;\n dataSrcEndpoint?: string;\n ariaLabel: string;\n selectedItemIndex?: number;\n options: RadioItem[];\n isRequired?: boolean;\n showStepValidation?: boolean;\n onChange?: (selected: string) => void;\n}\n\n/**\n * RadioGroup component\n *\n */\nexport const RadioGroup = (props: RadioGroupProps) => {\n const {\n options,\n title,\n description,\n ariaLabel,\n selectedItemIndex = null,\n isDynamic,\n dataSrcEndpoint,\n isRequired = false,\n showStepValidation = false,\n onChange = () => null,\n } = props;\n\n if (\n selectedItemIndex !== null &&\n (selectedItemIndex < 0 || selectedItemIndex >= options.length)\n )\n throw new Error('Iniital item index out of bounds');\n\n const [loading, setLoading] = useState(isDynamic);\n\n const preSelectedItem =\n selectedItemIndex !== null ? options[selectedItemIndex].value : '';\n\n const selectedItemRef = useRef(preSelectedItem);\n\n const [selectedItem, setSelectedItem] = useState(preSelectedItem);\n const [error, setError] = useState<string | null>(null);\n\n const handleChange = (inputValue: string) => {\n setSelectedItem(inputValue);\n };\n\n const [parsedOptions, setParsedOptions] = useState<\n { id: string; value: string }[]\n >([]);\n\n const context = useContext(AppContext);\n\n useEffect(() => {\n if (isDynamic) {\n if (dataSrcEndpoint) {\n // call dynamic endpoint\n context?.apiHandler\n .callDynamicDataEndpoint<{ id: string; value: string }[]>(\n new URL(dataSrcEndpoint),\n )\n .then((res) => {\n if (res) setParsedOptions(res);\n else setError(`Error loading radio options`);\n })\n .catch((err) => {\n console.error(err);\n setError('Error loading radio options');\n })\n .finally(() => setLoading(false));\n } else {\n setParsedOptions(options);\n }\n } else\n throw new Error(\n 'Checkbox group with dynamic source has no data src endpoint',\n );\n }, []);\n\n useEffect(() => {\n if (selectedItemRef.current !== selectedItem) onChange(selectedItem);\n }, [selectedItem]);\n\n return html`\n <div class=\"${styles.radioGroup}\">\n <fieldset>\n <${Label} title=${title} description=${description} //>\n <div role=\"group\" aria-labelledby=${ariaLabel}>\n ${loading\n ? html`<div style=\"margin-top: 20px\">\n <${ThreeDotLoader} color=\"#999\" />\n </div>`\n : html`\n ${error\n ? html`<div style=\"margin-top: 20px\">\n <${ErrorMessage}>${error}<//>\n </div>`\n : html`\n ${parsedOptions.map(\n (el) =>\n html`\n <${Radio}\n id=${el.id}\n value=${el.value}\n isChecked=${selectedItem === el.id}\n onChange=${handleChange}\n ><//>\n `,\n )}\n `}\n `}\n </div>\n </fieldset>\n ${showStepValidation &&\n !selectedItem &&\n isRequired &&\n html` <${ErrorMessage}>Please select an option</${ErrorMessage}>`}\n </div>\n `;\n};\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport DOMPurify from 'dompurify';\nimport { IntegrySDKEvents } from '@/types';\nimport { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { ListBox } from '@/components/Listbox';\nimport { Loader } from '@/components/Loader';\nimport { IntegryStep, TemplateField } from '@/interfaces';\nimport { actionFunctions } from '@/store';\nimport { Checkbox } from '@/components/CheckboxGroup/Checkbox';\nimport MappingUI from '@/features/common/MappingUI';\nimport { Label } from '@/components/Label';\nimport { Button } from '@/components/Button';\nimport { StoreType } from '@/types/store';\nimport { DateInput, Input, PasswordInput } from '@/components/Input';\nimport { TextArea } from '@/components/TextArea';\nimport { RadioGroup } from '@/components/RadioGroup';\n\nimport styles from './styles.module.scss';\n\ninterface StepPropsType extends StoreType {\n step: IntegryStep;\n stepType: 'AUTH' | 'CONFIGURATION' | 'SECTION';\n showStepValidation: boolean;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n}\n\ninterface StepStateType {\n loading: boolean;\n}\n\nclass Step extends Component<StepPropsType, StepStateType> {\n constructor(props: StepPropsType) {\n super(props);\n this.state = {\n loading: false,\n };\n }\n\n componentDidMount() {\n this.props.verifyStepValidity(this.props.step.id);\n }\n\n private getVisibleFieldsDataOnRootStep = (): {\n [machineName: string]: string;\n } => {\n const fields = this.props.stepDataMapping[this.props.step.id];\n const requiredFieldsWithValues = Object.keys(fields)\n .filter((el) => fields[Number(el)].value)\n .reduce((prev, curr) => {\n const currentItem = fields[Number(curr)];\n return {\n ...prev,\n [currentItem.machineName]: currentItem.value,\n };\n }, {});\n\n return requiredFieldsWithValues;\n };\n\n private areParentValuesFilled = (stepId: number, parentFields: string[]) => {\n let valid = true;\n // check if all parent fields have their values set\n for (let index = 0; index < parentFields.length; index += 1) {\n const val = parentFields[index];\n const { fieldId } = this.props.parentChildMapping[stepId][val];\n const parentField =\n this.props.stepDataMapping[stepId] &&\n this.props.stepDataMapping[stepId][fieldId];\n if (!(parentField && parentField.value)) {\n valid = false;\n break;\n }\n }\n return valid;\n };\n\n private doParentFieldsHaveValues = (stepId: number, machineName: string) => {\n let valid = true;\n const fieldInfo = this.props.parentChildMapping[stepId][machineName];\n\n if (fieldInfo && fieldInfo.parentFields)\n // check if all parent fields have their values set\n for (let index = 0; index < fieldInfo.parentFields.length; index += 1) {\n const parentField = this.props.parentChildMapping[stepId][\n fieldInfo.parentFields[index]\n ];\n const parentFieldData =\n this.props.stepDataMapping[stepId] &&\n this.props.stepDataMapping[stepId][parentField.fieldId];\n if (!(parentFieldData && parentFieldData.value)) {\n valid = false;\n break;\n }\n }\n return valid;\n };\n\n private shouldShowStep = (field: TemplateField) => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n\n if (field.type === 'BUTTON' || field.type === 'HTML') return true;\n\n if (stepObject && field.activity_field) {\n const shouldBeShown = !field.is_hidden;\n // const isAuthSelected = stepObject.selectedAuthId;\n const isAuthSelected = true;\n\n const { parentFields } = this.props.parentChildMapping[stepId][\n field.activity_field.machine_name\n ];\n\n let isValid = true;\n if (parentFields) {\n isValid = this.areParentValuesFilled(stepId, parentFields);\n }\n\n return shouldBeShown && isAuthSelected && isValid;\n }\n return false;\n };\n\n private stepIsOfType = (fields: string[]) => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n return fields.indexOf(stepObject.step.activity.type) > -1;\n };\n\n private textFieldParentHasValues = () => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n\n const anyVisibleFields = stepObject.step.template_fields.filter(\n (el) => el.is_visible,\n );\n\n const isAuthSelected = stepObject.selectedAuthId;\n\n const dynamicField = anyVisibleFields.filter(\n (el) => el.activity_field && el.activity_field.type === 'DYNAMIC',\n )[0];\n\n if (!dynamicField) {\n return true;\n }\n\n if (\n anyVisibleFields.length > 0 &&\n dynamicField &&\n dynamicField.activity_field &&\n isAuthSelected &&\n this.doParentFieldsHaveValues(\n stepId,\n dynamicField.activity_field.machine_name,\n )\n ) {\n return true;\n }\n return false;\n };\n\n private shouldShowMapping = () => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n if (this.stepIsOfType(['ADAPTER', 'ACTION'])) {\n const anyVisibleFields = stepObject.step.template_fields.filter(\n (el) => el.is_visible,\n );\n\n // console.log({ anyVisibleFields });\n\n const isAuthSelected = stepObject.selectedAuthId;\n\n // console.log({ isAuthSelected });\n\n const dynamicField = anyVisibleFields.filter(\n (el) => el.activity_field && el.activity_field.type === 'DYNAMIC',\n )[0];\n\n // console.log({ dynamicField });\n\n if (!dynamicField) {\n return false;\n }\n\n if (\n anyVisibleFields.length > 0 &&\n isAuthSelected &&\n dynamicField &&\n dynamicField.activity_field &&\n this.doParentFieldsHaveValues(\n stepId,\n dynamicField.activity_field.machine_name,\n )\n ) {\n return true;\n }\n }\n return false;\n };\n\n private getMappingDataInput = () => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n return {\n authId: stepObject.selectedAuthId,\n fieldsData: this.getVisibleFieldsDataOnRootStep(),\n };\n };\n\n private fieldDynamicData = (field: TemplateField) => {\n const stepId = this.props.step.id;\n const stepObject = this.props.stepMapping && this.props.stepMapping[stepId];\n if (stepObject && field.activity_field) {\n const { parentFields } = this.props.parentChildMapping[stepId][\n field.activity_field.machine_name\n ];\n if (parentFields) {\n const { fieldId } = this.props.parentChildMapping[stepId][\n parentFields[0]\n ];\n if (fieldId) {\n return {\n [parentFields[0]]: this.props.stepDataMapping[stepId][fieldId]\n .value,\n };\n }\n }\n }\n return null;\n };\n\n render() {\n const {\n step,\n stepMapping,\n stepDataMapping,\n setStepFieldData,\n showStepValidation,\n } = this.props;\n const selectedStep = stepMapping[step.id] && stepMapping[step.id].step;\n const selectedStepData = stepDataMapping && stepDataMapping[step.id];\n\n return html`\n ${this.state.loading\n ? html`<${Loader} //>`\n : html`\n ${selectedStep\n ? html`\n <div class=${styles.stepsWrap}>\n ${selectedStep.template_fields.map((el) => {\n if (this.shouldShowStep(el) && el.activity_field) {\n switch (el.activity_field.type) {\n case 'SELECT':\n return html`\n <div class=${styles.stepWrap}>\n <${ListBox}\n key=${el.activity_field.id}\n apiHandler=${this.props.apiHandler}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n showStepValidation=${showStepValidation}\n placeholder=${el.placeholder}\n isRequired=${el.is_required}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n endpointUrl=${el.activity_field.data_src}\n isDynamic=${el.activity_field.is_dynamic}\n endpointData=${JSON.stringify({\n authorization_id:\n this.props.stepMapping &&\n this.props.stepMapping[this.props.step.id]\n ?.selectedAuthId,\n ...this.fieldDynamicData(el),\n })}\n ><//>\n </div>\n `;\n case 'TEXTFIELD':\n return (\n !this.shouldShowMapping() &&\n this.textFieldParentHasValues() &&\n html`\n <div class=${styles.stepWrap}>\n <${Input}\n id=${el.activity_field.id}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n ><//>\n </div>\n `\n );\n case 'CHECKBOX': {\n let dataSrc:\n | Record<string, string>[]\n | string\n | null = el.activity_field?.data_src;\n if (!dataSrc || dataSrc === '') {\n // use title as checkbox label\n dataSrc = [\n {\n id: el.activity_field.machine_name,\n value: el.activity_field.title,\n },\n ];\n } else {\n try {\n dataSrc = JSON.parse(\n el.activity_field?.data_src ?? '[]',\n );\n } catch (error) {\n console.error(\n 'Error parsing value: ',\n el.activity_field?.data_src,\n );\n }\n }\n return html`\n <div class=${styles.stepWrap}>\n <${Label}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n isRequired=${el.is_required}\n />\n <${Checkbox}\n label=${dataSrc}\n name=${el.activity_field.machine_name}\n value=${selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value === '1'}\n isChecked=${selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value === '1'}\n isRequired=${el.is_required}\n showStepValidation=${showStepValidation}\n handleChange=${(_: string, val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val ? '1' : '0',\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n }\n case 'DYNAMIC':\n return html``;\n case 'PASSWORD':\n return html`\n <div class=${styles.stepWrap}>\n <${PasswordInput}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n case 'TEXTAREA':\n return html`\n <div class=${styles.stepWrap}>\n <${TextArea}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n case 'DATE':\n return html`\n <div class=${styles.stepWrap}>\n <${DateInput}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n value=${(selectedStepData &&\n selectedStepData[el.id] &&\n selectedStepData[el.id].value) ||\n ''}\n placeholder=${el.placeholder ||\n 'Please enter a value'}\n showStepValidation=${showStepValidation}\n isRequired=${el.is_required}\n onChange=${(val: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: val,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n case 'RADIO':\n return html`\n <div class=${styles.stepWrap}>\n <${RadioGroup}\n title=${el.title || el.activity_field.title}\n description=${el.description ||\n el.activity_field.description}\n isDynamic=${el.activity_field.is_dynamic}\n isRequired=${el.is_required}\n showStepValidation=${showStepValidation}\n dataSrcEndpoint=${el.activity_field.is_dynamic\n ? el.activity_field.data_src\n : null}\n onChange=${(selected: string) => {\n setStepFieldData({\n stepId: `${step.id}`,\n fieldId: `${el.id}`,\n value: selected,\n isRequired: el.is_required,\n });\n this.props.verifyStepValidity(step.id);\n }}\n />\n </div>\n `;\n default:\n return html` <div\n class=${`${styles.stepWrap} ${styles.unsupported}`}\n >\n Field: ${el.activity_field.type} is currently not\n supported\n </div>`;\n }\n } else {\n switch (el.type) {\n case 'HTML':\n return html`\n <div\n style=\"margin-bottom: 2rem;\"\n dangerouslySetInnerHTML=${{\n __html: DOMPurify(window).sanitize(\n el.default_value,\n ),\n }}\n />\n `;\n case 'BUTTON':\n return html`\n <div style=\"margin-bottom: 2rem;\">\n <${Button} label=${el.title} />\n </div>\n `;\n default:\n break;\n }\n }\n return html``;\n })}\n ${this.shouldShowMapping() &&\n html`\n <div class=${styles.stepWrap}>\n <${MappingUI}\n stepId=${selectedStep.id}\n templateFields=${selectedStep.template_fields}\n showStepValidation=${showStepValidation}\n endpointData=${this.getMappingDataInput()}\n ><//>\n </div>\n `}\n </div>\n `\n : html`Step data could not be loaded`}\n `}\n `;\n }\n}\n\nexport default connect<StepPropsType, StepStateType, StoreType, unknown>(\n ['stepMapping', 'stepDataMapping', 'parentChildMapping'],\n actionFunctions,\n)(Step);\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { IntegrationSaveResponse, TemplateStep } from '@/interfaces';\nimport { Button, ButtonTypes } from '@/components/Button';\nimport { StoreType } from '@/types/store';\nimport AuthSelector from '@/features/common/AuthSelector';\nimport AppContext from '@/contexts/AppContext';\nimport Step from '@/features/templates/Step';\nimport { actionFunctions } from '@/store';\nimport { TextArea } from '@/components/TextArea';\n\nimport styles from './styles.module.scss';\n\nexport type StepsPropsType = StoreType;\n\ntype StepsStateType = {\n selectedAuthStep: number | null;\n loading: boolean;\n postSave: boolean;\n postSaveData: Record<string, string | number | boolean> | null;\n integrationData: IntegrationSaveResponse | null;\n};\n\nclass Steps extends Component<\n StepsPropsType,\n StepsStateType & Record<string, unknown>\n> {\n static contextType = AppContext;\n\n constructor(props: StepsPropsType) {\n super(props);\n this.state = {\n loading: false,\n selectedAuthStep: null,\n postSave: false,\n postSaveData: null,\n integrationData: null,\n };\n }\n\n componentDidUpdate(prevProps: StepsPropsType) {\n const { stepState: prevStepState } = prevProps;\n const { stepState: newStepState } = this.props;\n if (prevStepState.stepIndex !== newStepState.stepIndex)\n this.context.eventEmitter.emit('did-change-step', {\n stepId: newStepState.steps[newStepState.stepIndex]?.stepId ?? null,\n stepType:\n newStepState.steps[newStepState.stepIndex]?.type ?? 'CONFIRMATION',\n });\n }\n\n private getPayload = () => {\n const { stepMapping, stepDataMapping } = this.props;\n if (this.context.isPreviewMode) {\n return null;\n }\n this.setState({ loading: true });\n const payload = {\n name: this.props.genericData.templateApp?.name ?? 'My new flow',\n notification_email: '',\n template: Number(this.props.genericData.templateId),\n bundle_id: Number(this.props.genericData.bundleId),\n steps: Object.keys(stepMapping).map((el) => ({\n id: stepMapping[el].integrationStepId || stepMapping[el].step.id,\n authorization: Number(stepMapping[el].selectedAuthId) || null,\n template_step: stepMapping[el].step.id,\n app_user_data: stepMapping[el].step.template_fields.map((tField) => ({\n id:\n stepDataMapping[stepMapping[el].step.id][tField.id]\n .integrationFieldId || tField.id,\n value:\n (stepDataMapping[stepMapping[el].step.id][tField.id].value ||\n stepDataMapping[stepMapping[el].step.id][tField.id].value ===\n '') &&\n !stepDataMapping[stepMapping[el].step.id][tField.id].objectValue\n ? `${stepDataMapping[stepMapping[el].step.id][tField.id].value}`\n : JSON.stringify(\n stepDataMapping[stepMapping[el].step.id][tField.id]\n .objectValue,\n ),\n template_field: tField.id,\n })),\n })),\n };\n return payload;\n };\n\n private createIntegration = () => {\n const payload = this.getPayload();\n if (payload)\n this.context.apiHandler\n .saveIntegration(payload)\n .then((integration: IntegrationSaveResponse) => {\n this.postSaveOrCreate(integration);\n })\n .catch((err: unknown) => console.error(err));\n };\n\n private postSaveOrCreate = (integration: IntegrationSaveResponse) => {\n const { stepMapping } = this.props;\n const triggerStep = Object.keys(stepMapping)\n .map((stepId) => stepMapping[stepId])\n .filter(\n (el) =>\n el &&\n el.step &&\n el.step.activity &&\n el.step.activity.type === 'TRIGGER',\n )[0];\n const returnedStep = integration.steps.filter(\n (el) => el.template_step === triggerStep?.step?.id,\n )[0];\n if (returnedStep && returnedStep.returned_data) {\n try {\n const parsedData = JSON.parse(returnedStep.returned_data);\n if (parsedData.is_webhook_url && parsedData.endpoint) {\n this.setState({\n postSave: true,\n postSaveData: parsedData,\n integrationData: integration,\n });\n }\n } catch (error) {\n console.error(error);\n }\n } else {\n this.setState(\n {\n integrationData: integration,\n },\n () => {\n this.dismiss();\n },\n );\n }\n this.setState({ loading: false });\n };\n\n private updateIntegration = () => {\n const payload = this.getPayload();\n if (payload)\n this.context.apiHandler\n .updateIntegration(this.context.integrationId, {\n ...payload,\n id: `${this.context.integrationId}`,\n })\n .then((integration: IntegrationSaveResponse) => {\n this.postSaveOrCreate(integration);\n })\n .catch((err: unknown) => console.error(err));\n };\n\n private dismiss = () => {\n const { integrationData } = this.state;\n if (integrationData) {\n this.context.eventEmitter.emit('did-save-integration', {\n integrationId: integrationData.id,\n name: integrationData.name,\n templateId: integrationData.template,\n status: integrationData.status,\n });\n }\n };\n\n private handleAuthSelected = (\n authId: number,\n stepId: number,\n isVerified: boolean,\n override: boolean,\n ) => {\n const dependentSteps = this.props.stepMapping[stepId].step.template_fields\n .filter((el) => el.activity_field && el.activity_field.is_dynamic)\n .map((el) => el.id);\n // reset all dynamic steps if auth changes\n this.props.setStepAuthorization(\n stepId,\n authId,\n isVerified,\n dependentSteps,\n override,\n );\n };\n\n render() {\n let selectedStep: {\n step: TemplateStep;\n selectedAuthId: number | null;\n } | null = null;\n const { stepState, stepMapping } = this.props;\n const { postSave, postSaveData } = this.state;\n const { currentStep, stepIndex, steps } = stepState;\n\n let shouldShowLastStep = false;\n let shouldShowBackButton = false;\n let isStepValid = false;\n let showStepValidation = false;\n if (stepIndex > -1 && currentStep?.type !== 'CONFIRMATION') {\n selectedStep = stepMapping[Number(currentStep?.stepId)];\n\n shouldShowLastStep = false;\n shouldShowBackButton = stepState.stepIndex > 0;\n isStepValid = currentStep?.isValid ?? false;\n showStepValidation = stepState.showValidation;\n } else if (\n currentStep?.type === 'CONFIRMATION' &&\n stepIndex === steps.length\n ) {\n shouldShowBackButton = true;\n shouldShowLastStep = true;\n }\n\n return html`\n <div class=${styles.stepsWrap}>\n <div class=${styles.stepContainer}>\n <div class=${styles.stepInfo}>\n ${currentStep &&\n html`\n ${shouldShowLastStep\n ? html`\n <div class=${styles.header}>\n <div class=${styles.name}>\n <svg\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"11.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M17.2209 9.16699L11.3907 15.8337L8.33203 12.3361\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n <div>\n ${postSaveData && postSave\n ? `Flow ${\n this.context?.integrationId\n ? 'updated'\n : 'created'\n } successfully`\n : 'Confirm and activate'}\n </div>\n </div>\n <div class=${styles.steps}>\n ${`Step ${\n (this.props.stepState?.stepIndex ?? 0) + 1\n } / ${(this.props.stepState?.steps.length ?? 0) + 1}`}\n </div>\n </div>\n `\n : html`\n <div class=${styles.header}>\n <div class=${styles.name}>\n <img src=${selectedStep?.step.activity.app.icon_url} />\n <div>\n ${currentStep?.type !== 'CONFIRMATION' &&\n currentStep?.title}\n </div>\n </div>\n <div class=${styles.steps}>\n ${`Step ${\n (this.props.stepState?.stepIndex ?? 0) + 1\n } / ${(this.props.stepState?.steps.length ?? 0) + 1}`}\n </div>\n </div>\n `}\n `}\n </div>\n\n <div class=${styles.top}>\n ${currentStep\n ? html`\n ${shouldShowLastStep\n ? html`\n ${!postSave && !postSaveData\n ? html`\n <div class=${styles.save}>\n ${this.context.isEditMode\n ? 'Your integration is ready to be updated. Click “Update” to continue.'\n : 'Your integration is ready to be enabled. Click “Save” to continue.'}\n </div>\n `\n : html`\n <div class=${styles.postSave}>\n <${TextArea}\n title=\"Webhook URL\"\n description=\"Please use the following webhook url to send data\"\n value=${postSaveData?.endpoint}\n showCopyButton=${true}\n />\n </div>\n `}\n `\n : html`\n ${selectedStep &&\n html`\n ${currentStep?.type === 'AUTH'\n ? html`\n <div class=${styles.authWrap}>\n <${AuthSelector}\n stepId=${selectedStep.step.id}\n apiHandler=${this.context.apiHandler}\n showErrors=${showStepValidation}\n onAuthSelected=${(\n authId: number,\n isVerified: boolean,\n override: boolean,\n ) =>\n this.handleAuthSelected(\n authId,\n Number(selectedStep?.step.id),\n isVerified,\n override,\n )}\n >\n <//>\n </div>\n `\n : html`\n <${Step}\n step=${selectedStep?.step}\n stepType=${currentStep?.type}\n showStepValidation=${showStepValidation}\n apiHandler=${this.context.apiHandler}\n eventEmitter=${this.context.eventEmitter}\n />\n `}\n `}\n `}\n `\n : html`This template has no configured steps`}\n </div>\n ${currentStep &&\n html`\n <div class=${styles.bottom}>\n <div class=${styles.buttons}>\n ${shouldShowBackButton &&\n !postSave &&\n !postSaveData &&\n html`\n <${Button}\n label=\"Back\"\n onClick=${() => this.props.gotoPreviousStep()}\n type=${ButtonTypes.SECONDARY}\n ><//>\n `}\n ${shouldShowLastStep\n ? html`\n ${!postSave && !postSaveData\n ? html`\n ${this.context.isEditMode\n ? html`\n <${Button}\n label=\"Update\"\n isLoading=${this.state.loading}\n onClick=${() => this.updateIntegration()}\n ><//>\n `\n : html`\n <${Button}\n label=\"Save\"\n disabled=${this.context.isPreviewMode}\n tooltip=${this.context.isPreviewMode\n ? 'Integration setup will have to be\\ndone in \"Live View\"'\n : null}\n isLoading=${this.state.loading}\n onClick=${() => this.createIntegration()}\n ><//>\n `}\n `\n : html`\n <${Button}\n label=\"Continue\"\n onClick=${() => this.dismiss()}\n ><//>\n `}\n `\n : html`\n <${Button}\n label=\"Next\"\n disabled=${!isStepValid}\n onClick=${() =>\n isStepValid\n ? this.props.gotoNextStep()\n : this.props.showStepValidationState()}\n ><//>\n `}\n </div>\n </div>\n `}\n </div>\n </div>\n `;\n }\n}\n\nexport default connect<StepsPropsType, StepsStateType, StoreType, unknown>(\n ['stepState', 'genericData', 'stepMapping', 'stepDataMapping'],\n actionFunctions,\n)(Steps);\n","import { html } from 'htm/preact';\nimport {\n useContext,\n useEffect,\n useErrorBoundary,\n useState,\n} from 'preact/hooks';\nimport { assert, StructError } from 'superstruct';\nimport { connect } from 'unistore/preact';\n\nimport AppContext from '@/contexts/AppContext';\nimport { actionFunctions } from '@/store';\nimport { StoreType } from '@/types/store';\nimport {\n TemplateResponse,\n TemplatePreviewData,\n PreviewMetadata,\n TemplatePreviewDataType,\n} from '@/interfaces';\nimport { Loader } from '@/components/Loader';\nimport { notEmpty } from '@/types/utils';\nimport { ErrorPage } from '@/components/ErrorPage';\n\nimport StepNavigation from '../StepNavigation';\nimport Steps from '../Steps';\n\nimport styles from './styles.module.scss';\n\nexport interface WrapperProps extends StoreType {\n bundleId: string;\n templateId?: string;\n templatePreviewData?: TemplatePreviewData;\n isPreviewMode?: boolean;\n previewMetadata?: PreviewMetadata;\n customWrapper?: preact.VNode<Record<string, never>>;\n}\n\n/**\n * Wrapper component\n *\n */\nconst Wrapper = (props: WrapperProps) => {\n const [loading, setLoading] = useState<boolean>(false);\n const [templateData, setTemplateData] = useState<TemplateResponse | null>(\n null,\n );\n const {\n templateId,\n bundleId,\n customWrapper,\n templatePreviewData,\n previewMetadata,\n } = props;\n\n const [validationErr, setValidationErr] = useState<StructError | null>(null);\n\n const [sdkError, resetSdkError] = useErrorBoundary(() => {\n // log something here\n });\n\n const context = useContext(AppContext);\n\n // reset store when unmounting preview\n useEffect(\n () => () => {\n props.reset();\n },\n [],\n );\n\n useEffect(() => {\n if (sdkError) console.error(sdkError);\n }, [sdkError]);\n\n useEffect(() => {\n setLoading(true);\n if (context?.isPreviewMode && previewMetadata) {\n // setup state using preview data\n if (!templatePreviewData)\n throw new Error('Preview data was not provided');\n try {\n assert(templatePreviewData, TemplatePreviewDataType);\n } catch (error) {\n console.error(error);\n setLoading(false);\n setValidationErr(error as StructError);\n return;\n }\n const { steps, ...template } = templatePreviewData;\n setTemplateData(templatePreviewData);\n props.setGenericData({\n templateId: Number(template.id),\n bundleId: Number(bundleId),\n isPreviewMode: context.isPreviewMode,\n });\n props.setSteps(steps.filter(notEmpty));\n props.setStepMapping(steps.filter(notEmpty));\n props.setParentChildMapping(steps.filter(notEmpty));\n props.gotoStepInPreview(previewMetadata);\n context.eventEmitter.emit('did-load-preview', {\n templateId: Number(template.id),\n templateTitle: template.name,\n templateDescription: template.description,\n });\n setLoading(false);\n return;\n }\n if (templateId) {\n context?.apiHandler.getTemplate(Number(templateId)).then((data) => {\n setTemplateData(data);\n if (data)\n Promise.all(\n data.steps.map((el) =>\n context.apiHandler.getTemplateStep(Number(el.id)),\n ),\n )\n .then(async (res) => {\n if (res) {\n props.setGenericData({\n templateId: Number(templateId),\n bundleId: Number(bundleId),\n });\n props.setSteps(res.filter(notEmpty));\n props.setStepMapping(res.filter(notEmpty));\n props.setParentChildMapping(res.filter(notEmpty));\n if (context.integrationId) {\n const integrationData = await context.apiHandler.getIntegrationById(\n context.integrationId,\n );\n if (integrationData)\n props.setIntegrationData(integrationData);\n else\n throw new Error(\n `Error fetching integration data for ID ${context.integrationId}`,\n );\n }\n context.eventEmitter.emit('did-load-template', {\n templateId: Number(templateId),\n templateTitle: data.name,\n templateDescription: data.description,\n });\n setLoading(false);\n }\n })\n .catch((err) => console.error(err));\n });\n } else throw new Error('Template ID not found');\n }, [templateId]);\n\n if (customWrapper) {\n return html`${customWrapper}`;\n }\n\n return html`\n <div class=\"${styles.wrap} ${'integry-container'}\">\n ${sdkError || validationErr\n ? html`\n <${ErrorPage}\n title=${validationErr\n ? 'Validation error'\n : 'An unexpected error occurred'}\n description=${validationErr\n ? 'There was an error validating the preview payload:'\n : 'Please review the following stacktrace:'}\n errorPayload=${validationErr || sdkError}\n onDismiss=${validationErr ? null : resetSdkError}\n />\n `\n : html`\n <div>\n ${!loading &&\n templateData &&\n html`\n <${StepNavigation}\n steps=${templateData.steps?.map((el) => ({\n label: el.title,\n logoUrl: el.activity.app.icon_url,\n }))}\n ><//>\n `}\n </div>\n <div class=${styles.main}>\n ${loading &&\n html`<div style=\"display: flex; justify-content: center;\">\n <${Loader} />\n </div>`}\n ${!loading &&\n templateData &&\n html` <${Steps} steps=${templateData.steps}><//> `}\n </div>\n `}\n </div>\n `;\n};\n\nexport default connect<WrapperProps, unknown, StoreType, unknown>(\n [''],\n actionFunctions,\n)(Wrapper);\n","/*\r\nWHAT: SublimeText-like Fuzzy Search\r\n\r\nUSAGE:\r\n fuzzysort.single('fs', 'Fuzzy Search') // {score: -16}\r\n fuzzysort.single('test', 'test') // {score: 0}\r\n fuzzysort.single('doesnt exist', 'target') // null\r\n\r\n fuzzysort.go('mr', ['Monitor.cpp', 'MeshRenderer.cpp'])\r\n // [{score: -18, target: \"MeshRenderer.cpp\"}, {score: -6009, target: \"Monitor.cpp\"}]\r\n\r\n fuzzysort.highlight(fuzzysort.single('fs', 'Fuzzy Search'), '<b>', '</b>')\r\n // <b>F</b>uzzy <b>S</b>earch\r\n*/\r\n\r\n// UMD (Universal Module Definition) for fuzzysort\r\n;(function(root, UMD) {\r\n if(typeof define === 'function' && define.amd) define([], UMD)\r\n else if(typeof module === 'object' && module.exports) module.exports = UMD()\r\n else root.fuzzysort = UMD()\r\n})(this, function UMD() { function fuzzysortNew(instanceOptions) {\r\n\r\n var fuzzysort = {\r\n\r\n single: function(search, target, options) {\r\n if(!search) return null\r\n if(!isObj(search)) search = fuzzysort.getPreparedSearch(search)\r\n\r\n if(!target) return null\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo\r\n : instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo\r\n : true\r\n var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo\r\n return algorithm(search, target, search[0])\r\n // var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991\r\n // var result = algorithm(search, target, search[0])\r\n // if(result === null) return null\r\n // if(result.score < threshold) return null\r\n // return result\r\n },\r\n\r\n go: function(search, targets, options) {\r\n if(!search) return noResults\r\n search = fuzzysort.prepareSearch(search)\r\n var searchLowerCode = search[0]\r\n\r\n var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991\r\n var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991\r\n var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo\r\n : instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo\r\n : true\r\n var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo\r\n var resultsLen = 0; var limitedCount = 0\r\n var targetsLen = targets.length\r\n\r\n // This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys]\r\n\r\n // options.keys\r\n if(options && options.keys) {\r\n var scoreFn = options.scoreFn || defaultScoreFn\r\n var keys = options.keys\r\n var keysLen = keys.length\r\n for(var i = targetsLen - 1; i >= 0; --i) { var obj = targets[i]\r\n var objResults = new Array(keysLen)\r\n for (var keyI = keysLen - 1; keyI >= 0; --keyI) {\r\n var key = keys[keyI]\r\n var target = getValue(obj, key)\r\n if(!target) { objResults[keyI] = null; continue }\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n objResults[keyI] = algorithm(search, target, searchLowerCode)\r\n }\r\n objResults.obj = obj // before scoreFn so scoreFn can use it\r\n var score = scoreFn(objResults)\r\n if(score === null) continue\r\n if(score < threshold) continue\r\n objResults.score = score\r\n if(resultsLen < limit) { q.add(objResults); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(score > q.peek().score) q.replaceTop(objResults)\r\n }\r\n }\r\n\r\n // options.key\r\n } else if(options && options.key) {\r\n var key = options.key\r\n for(var i = targetsLen - 1; i >= 0; --i) { var obj = targets[i]\r\n var target = getValue(obj, key)\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n\r\n // have to clone result so duplicate targets from different obj can each reference the correct obj\r\n result = {target:result.target, _targetLowerCodes:null, _nextBeginningIndexes:null, score:result.score, indexes:result.indexes, obj:obj} // hidden\r\n\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n }\r\n\r\n // no keys\r\n } else {\r\n for(var i = targetsLen - 1; i >= 0; --i) { var target = targets[i]\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n }\r\n }\r\n\r\n if(resultsLen === 0) return noResults\r\n var results = new Array(resultsLen)\r\n for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n results.total = resultsLen + limitedCount\r\n return results\r\n },\r\n\r\n goAsync: function(search, targets, options) {\r\n var canceled = false\r\n var p = new Promise(function(resolve, reject) {\r\n if(!search) return resolve(noResults)\r\n search = fuzzysort.prepareSearch(search)\r\n var searchLowerCode = search[0]\r\n\r\n var q = fastpriorityqueue()\r\n var iCurrent = targets.length - 1\r\n var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991\r\n var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991\r\n var allowTypo = options && options.allowTypo!==undefined ? options.allowTypo\r\n : instanceOptions && instanceOptions.allowTypo!==undefined ? instanceOptions.allowTypo\r\n : true\r\n var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo\r\n var resultsLen = 0; var limitedCount = 0\r\n function step() {\r\n if(canceled) return reject('canceled')\r\n\r\n var startMs = Date.now()\r\n\r\n // This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys]\r\n\r\n // options.keys\r\n if(options && options.keys) {\r\n var scoreFn = options.scoreFn || defaultScoreFn\r\n var keys = options.keys\r\n var keysLen = keys.length\r\n for(; iCurrent >= 0; --iCurrent) { var obj = targets[iCurrent]\r\n var objResults = new Array(keysLen)\r\n for (var keyI = keysLen - 1; keyI >= 0; --keyI) {\r\n var key = keys[keyI]\r\n var target = getValue(obj, key)\r\n if(!target) { objResults[keyI] = null; continue }\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n objResults[keyI] = algorithm(search, target, searchLowerCode)\r\n }\r\n objResults.obj = obj // before scoreFn so scoreFn can use it\r\n var score = scoreFn(objResults)\r\n if(score === null) continue\r\n if(score < threshold) continue\r\n objResults.score = score\r\n if(resultsLen < limit) { q.add(objResults); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(score > q.peek().score) q.replaceTop(objResults)\r\n }\r\n\r\n if(iCurrent%1000/*itemsPerCheck*/ === 0) {\r\n if(Date.now() - startMs >= 10/*asyncInterval*/) {\r\n isNode?setImmediate(step):setTimeout(step)\r\n return\r\n }\r\n }\r\n }\r\n\r\n // options.key\r\n } else if(options && options.key) {\r\n var key = options.key\r\n for(; iCurrent >= 0; --iCurrent) { var obj = targets[iCurrent]\r\n var target = getValue(obj, key)\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n\r\n // have to clone result so duplicate targets from different obj can each reference the correct obj\r\n result = {target:result.target, _targetLowerCodes:null, _nextBeginningIndexes:null, score:result.score, indexes:result.indexes, obj:obj} // hidden\r\n\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n\r\n if(iCurrent%1000/*itemsPerCheck*/ === 0) {\r\n if(Date.now() - startMs >= 10/*asyncInterval*/) {\r\n isNode?setImmediate(step):setTimeout(step)\r\n return\r\n }\r\n }\r\n }\r\n\r\n // no keys\r\n } else {\r\n for(; iCurrent >= 0; --iCurrent) { var target = targets[iCurrent]\r\n if(!target) continue\r\n if(!isObj(target)) target = fuzzysort.getPrepared(target)\r\n\r\n var result = algorithm(search, target, searchLowerCode)\r\n if(result === null) continue\r\n if(result.score < threshold) continue\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result.score > q.peek().score) q.replaceTop(result)\r\n }\r\n\r\n if(iCurrent%1000/*itemsPerCheck*/ === 0) {\r\n if(Date.now() - startMs >= 10/*asyncInterval*/) {\r\n isNode?setImmediate(step):setTimeout(step)\r\n return\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(resultsLen === 0) return resolve(noResults)\r\n var results = new Array(resultsLen)\r\n for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n results.total = resultsLen + limitedCount\r\n resolve(results)\r\n }\r\n\r\n isNode?setImmediate(step):step()\r\n })\r\n p.cancel = function() { canceled = true }\r\n return p\r\n },\r\n\r\n highlight: function(result, hOpen, hClose) {\r\n if(result === null) return null\r\n if(hOpen === undefined) hOpen = '<b>'\r\n if(hClose === undefined) hClose = '</b>'\r\n var highlighted = ''\r\n var matchesIndex = 0\r\n var opened = false\r\n var target = result.target\r\n var targetLen = target.length\r\n var matchesBest = result.indexes\r\n for(var i = 0; i < targetLen; ++i) { var char = target[i]\r\n if(matchesBest[matchesIndex] === i) {\r\n ++matchesIndex\r\n if(!opened) { opened = true\r\n highlighted += hOpen\r\n }\r\n\r\n if(matchesIndex === matchesBest.length) {\r\n highlighted += char + hClose + target.substr(i+1)\r\n break\r\n }\r\n } else {\r\n if(opened) { opened = false\r\n highlighted += hClose\r\n }\r\n }\r\n highlighted += char\r\n }\r\n\r\n return highlighted\r\n },\r\n\r\n prepare: function(target) {\r\n if(!target) return\r\n return {target:target, _targetLowerCodes:fuzzysort.prepareLowerCodes(target), _nextBeginningIndexes:null, score:null, indexes:null, obj:null} // hidden\r\n },\r\n prepareSlow: function(target) {\r\n if(!target) return\r\n return {target:target, _targetLowerCodes:fuzzysort.prepareLowerCodes(target), _nextBeginningIndexes:fuzzysort.prepareNextBeginningIndexes(target), score:null, indexes:null, obj:null} // hidden\r\n },\r\n prepareSearch: function(search) {\r\n if(!search) return\r\n return fuzzysort.prepareLowerCodes(search)\r\n },\r\n\r\n\r\n\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n\r\n\r\n\r\n getPrepared: function(target) {\r\n if(target.length > 999) return fuzzysort.prepare(target) // don't cache huge targets\r\n var targetPrepared = preparedCache.get(target)\r\n if(targetPrepared !== undefined) return targetPrepared\r\n targetPrepared = fuzzysort.prepare(target)\r\n preparedCache.set(target, targetPrepared)\r\n return targetPrepared\r\n },\r\n getPreparedSearch: function(search) {\r\n if(search.length > 999) return fuzzysort.prepareSearch(search) // don't cache huge searches\r\n var searchPrepared = preparedSearchCache.get(search)\r\n if(searchPrepared !== undefined) return searchPrepared\r\n searchPrepared = fuzzysort.prepareSearch(search)\r\n preparedSearchCache.set(search, searchPrepared)\r\n return searchPrepared\r\n },\r\n\r\n algorithm: function(searchLowerCodes, prepared, searchLowerCode) {\r\n var targetLowerCodes = prepared._targetLowerCodes\r\n var searchLen = searchLowerCodes.length\r\n var targetLen = targetLowerCodes.length\r\n var searchI = 0 // where we at\r\n var targetI = 0 // where you at\r\n var typoSimpleI = 0\r\n var matchesSimpleLen = 0\r\n\r\n // very basic fuzzy match; to remove non-matching targets ASAP!\r\n // walk through target. find sequential matches.\r\n // if all chars aren't found then exit\r\n for(;;) {\r\n var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesSimple[matchesSimpleLen++] = targetI\r\n ++searchI; if(searchI === searchLen) break\r\n searchLowerCode = searchLowerCodes[typoSimpleI===0?searchI : (typoSimpleI===searchI?searchI+1 : (typoSimpleI===searchI-1?searchI-1 : searchI))]\r\n }\r\n\r\n ++targetI; if(targetI >= targetLen) { // Failed to find searchI\r\n // Check for typo or exit\r\n // we go as far as possible before trying to transpose\r\n // then we transpose backwards until we reach the beginning\r\n for(;;) {\r\n if(searchI <= 1) return null // not allowed to transpose first char\r\n if(typoSimpleI === 0) { // we haven't tried to transpose yet\r\n --searchI\r\n var searchLowerCodeNew = searchLowerCodes[searchI]\r\n if(searchLowerCode === searchLowerCodeNew) continue // doesn't make sense to transpose a repeat char\r\n typoSimpleI = searchI\r\n } else {\r\n if(typoSimpleI === 1) return null // reached the end of the line for transposing\r\n --typoSimpleI\r\n searchI = typoSimpleI\r\n searchLowerCode = searchLowerCodes[searchI + 1]\r\n var searchLowerCodeNew = searchLowerCodes[searchI]\r\n if(searchLowerCode === searchLowerCodeNew) continue // doesn't make sense to transpose a repeat char\r\n }\r\n matchesSimpleLen = searchI\r\n targetI = matchesSimple[matchesSimpleLen - 1] + 1\r\n break\r\n }\r\n }\r\n }\r\n\r\n var searchI = 0\r\n var typoStrictI = 0\r\n var successStrict = false\r\n var matchesStrictLen = 0\r\n\r\n var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n if(nextBeginningIndexes === null) nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target)\r\n var firstPossibleI = targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n // Our target string successfully matched all characters in sequence!\r\n // Let's try a more advanced and strict test to improve the score\r\n // only count it as a match if it's consecutive or a beginning character!\r\n if(targetI !== targetLen) for(;;) {\r\n if(targetI >= targetLen) {\r\n // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n if(searchI <= 0) { // We failed to push chars forward for a better match\r\n // transpose, starting from the beginning\r\n ++typoStrictI; if(typoStrictI > searchLen-2) break\r\n if(searchLowerCodes[typoStrictI] === searchLowerCodes[typoStrictI+1]) continue // doesn't make sense to transpose a repeat char\r\n targetI = firstPossibleI\r\n continue\r\n }\r\n\r\n --searchI\r\n var lastMatch = matchesStrict[--matchesStrictLen]\r\n targetI = nextBeginningIndexes[lastMatch]\r\n\r\n } else {\r\n var isMatch = searchLowerCodes[typoStrictI===0?searchI : (typoStrictI===searchI?searchI+1 : (typoStrictI===searchI-1?searchI-1 : searchI))] === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesStrict[matchesStrictLen++] = targetI\r\n ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n ++targetI\r\n } else {\r\n targetI = nextBeginningIndexes[targetI]\r\n }\r\n }\r\n }\r\n\r\n { // tally up the score & keep track of matches for highlighting later\r\n if(successStrict) { var matchesBest = matchesStrict; var matchesBestLen = matchesStrictLen }\r\n else { var matchesBest = matchesSimple; var matchesBestLen = matchesSimpleLen }\r\n var score = 0\r\n var lastTargetI = -1\r\n for(var i = 0; i < searchLen; ++i) { var targetI = matchesBest[i]\r\n // score only goes down if they're not consecutive\r\n if(lastTargetI !== targetI - 1) score -= targetI\r\n lastTargetI = targetI\r\n }\r\n if(!successStrict) {\r\n score *= 1000\r\n if(typoSimpleI !== 0) score += -20/*typoPenalty*/\r\n } else {\r\n if(typoStrictI !== 0) score += -20/*typoPenalty*/\r\n }\r\n score -= targetLen - searchLen\r\n prepared.score = score\r\n prepared.indexes = new Array(matchesBestLen); for(var i = matchesBestLen - 1; i >= 0; --i) prepared.indexes[i] = matchesBest[i]\r\n\r\n return prepared\r\n }\r\n },\r\n\r\n algorithmNoTypo: function(searchLowerCodes, prepared, searchLowerCode) {\r\n var targetLowerCodes = prepared._targetLowerCodes\r\n var searchLen = searchLowerCodes.length\r\n var targetLen = targetLowerCodes.length\r\n var searchI = 0 // where we at\r\n var targetI = 0 // where you at\r\n var matchesSimpleLen = 0\r\n\r\n // very basic fuzzy match; to remove non-matching targets ASAP!\r\n // walk through target. find sequential matches.\r\n // if all chars aren't found then exit\r\n for(;;) {\r\n var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesSimple[matchesSimpleLen++] = targetI\r\n ++searchI; if(searchI === searchLen) break\r\n searchLowerCode = searchLowerCodes[searchI]\r\n }\r\n ++targetI; if(targetI >= targetLen) return null // Failed to find searchI\r\n }\r\n\r\n var searchI = 0\r\n var successStrict = false\r\n var matchesStrictLen = 0\r\n\r\n var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n if(nextBeginningIndexes === null) nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target)\r\n var firstPossibleI = targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n // Our target string successfully matched all characters in sequence!\r\n // Let's try a more advanced and strict test to improve the score\r\n // only count it as a match if it's consecutive or a beginning character!\r\n if(targetI !== targetLen) for(;;) {\r\n if(targetI >= targetLen) {\r\n // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n if(searchI <= 0) break // We failed to push chars forward for a better match\r\n\r\n --searchI\r\n var lastMatch = matchesStrict[--matchesStrictLen]\r\n targetI = nextBeginningIndexes[lastMatch]\r\n\r\n } else {\r\n var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesStrict[matchesStrictLen++] = targetI\r\n ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n ++targetI\r\n } else {\r\n targetI = nextBeginningIndexes[targetI]\r\n }\r\n }\r\n }\r\n\r\n { // tally up the score & keep track of matches for highlighting later\r\n if(successStrict) { var matchesBest = matchesStrict; var matchesBestLen = matchesStrictLen }\r\n else { var matchesBest = matchesSimple; var matchesBestLen = matchesSimpleLen }\r\n var score = 0\r\n var lastTargetI = -1\r\n for(var i = 0; i < searchLen; ++i) { var targetI = matchesBest[i]\r\n // score only goes down if they're not consecutive\r\n if(lastTargetI !== targetI - 1) score -= targetI\r\n lastTargetI = targetI\r\n }\r\n if(!successStrict) score *= 1000\r\n score -= targetLen - searchLen\r\n prepared.score = score\r\n prepared.indexes = new Array(matchesBestLen); for(var i = matchesBestLen - 1; i >= 0; --i) prepared.indexes[i] = matchesBest[i]\r\n\r\n return prepared\r\n }\r\n },\r\n\r\n prepareLowerCodes: function(str) {\r\n var strLen = str.length\r\n var lowerCodes = [] // new Array(strLen) sparse array is too slow\r\n var lower = str.toLowerCase()\r\n for(var i = 0; i < strLen; ++i) lowerCodes[i] = lower.charCodeAt(i)\r\n return lowerCodes\r\n },\r\n prepareBeginningIndexes: function(target) {\r\n var targetLen = target.length\r\n var beginningIndexes = []; var beginningIndexesLen = 0\r\n var wasUpper = false\r\n var wasAlphanum = false\r\n for(var i = 0; i < targetLen; ++i) {\r\n var targetCode = target.charCodeAt(i)\r\n var isUpper = targetCode>=65&&targetCode<=90\r\n var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57\r\n var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum\r\n wasUpper = isUpper\r\n wasAlphanum = isAlphanum\r\n if(isBeginning) beginningIndexes[beginningIndexesLen++] = i\r\n }\r\n return beginningIndexes\r\n },\r\n prepareNextBeginningIndexes: function(target) {\r\n var targetLen = target.length\r\n var beginningIndexes = fuzzysort.prepareBeginningIndexes(target)\r\n var nextBeginningIndexes = [] // new Array(targetLen) sparse array is too slow\r\n var lastIsBeginning = beginningIndexes[0]\r\n var lastIsBeginningI = 0\r\n for(var i = 0; i < targetLen; ++i) {\r\n if(lastIsBeginning > i) {\r\n nextBeginningIndexes[i] = lastIsBeginning\r\n } else {\r\n lastIsBeginning = beginningIndexes[++lastIsBeginningI]\r\n nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning\r\n }\r\n }\r\n return nextBeginningIndexes\r\n },\r\n\r\n cleanup: cleanup,\r\n new: fuzzysortNew,\r\n }\r\n return fuzzysort\r\n} // fuzzysortNew\r\n\r\n// This stuff is outside fuzzysortNew, because it's shared with instances of fuzzysort.new()\r\nvar isNode = typeof require !== 'undefined' && typeof window === 'undefined'\r\n// var MAX_INT = Number.MAX_SAFE_INTEGER\r\n// var MIN_INT = Number.MIN_VALUE\r\nvar preparedCache = new Map()\r\nvar preparedSearchCache = new Map()\r\nvar noResults = []; noResults.total = 0\r\nvar matchesSimple = []; var matchesStrict = []\r\nfunction cleanup() { preparedCache.clear(); preparedSearchCache.clear(); matchesSimple = []; matchesStrict = [] }\r\nfunction defaultScoreFn(a) {\r\n var max = -9007199254740991\r\n for (var i = a.length - 1; i >= 0; --i) {\r\n var result = a[i]; if(result === null) continue\r\n var score = result.score\r\n if(score > max) max = score\r\n }\r\n if(max === -9007199254740991) return null\r\n return max\r\n}\r\n\r\n// prop = 'key' 2.5ms optimized for this case, seems to be about as fast as direct obj[prop]\r\n// prop = 'key1.key2' 10ms\r\n// prop = ['key1', 'key2'] 27ms\r\nfunction getValue(obj, prop) {\r\n var tmp = obj[prop]; if(tmp !== undefined) return tmp\r\n var segs = prop\r\n if(!Array.isArray(prop)) segs = prop.split('.')\r\n var len = segs.length\r\n var i = -1\r\n while (obj && (++i < len)) obj = obj[segs[i]]\r\n return obj\r\n}\r\n\r\nfunction isObj(x) { return typeof x === 'object' } // faster as a function\r\n\r\n// Hacked version of https://github.com/lemire/FastPriorityQueue.js\r\nvar fastpriorityqueue=function(){var r=[],o=0,e={};function n(){for(var e=0,n=r[e],c=1;c<o;){var f=c+1;e=c,f<o&&r[f].score<r[c].score&&(e=f),r[e-1>>1]=r[e],c=1+(e<<1)}for(var a=e-1>>1;e>0&&n.score<r[a].score;a=(e=a)-1>>1)r[e]=r[a];r[e]=n}return e.add=function(e){var n=o;r[o++]=e;for(var c=n-1>>1;n>0&&e.score<r[c].score;c=(n=c)-1>>1)r[n]=r[c];r[n]=e},e.poll=function(){if(0!==o){var e=r[0];return r[0]=r[--o],n(),e}},e.peek=function(e){if(0!==o)return r[0]},e.replaceTop=function(o){r[0]=o,n()},e};\r\nvar q = fastpriorityqueue() // reuse this, except for async, it needs to make its own\r\n\r\nreturn fuzzysortNew()\r\n}) // UMD\r\n\r\n// TODO: (performance) wasm version!?\r\n\r\n// TODO: (performance) layout memory in an optimal way to go fast by avoiding cache misses\r\n\r\n// TODO: (performance) preparedCache is a memory leak\r\n\r\n// TODO: (like sublime) backslash === forwardslash\r\n\r\n// TODO: (performance) i have no idea how well optizmied the allowing typos algorithm is\r\n","import { html, Component } from 'htm/preact';\nimport styles from './styles.module.scss';\n\ninterface SearchState {\n value: string;\n}\n\ninterface SearchProps {\n initialValue?: string;\n placeholder: string;\n resultCount: number;\n onChange: (val: string) => void;\n}\n\nexport class TemplateSearch extends Component<SearchProps, SearchState> {\n constructor(props: SearchProps) {\n super(props);\n this.state = {\n value: this.props.initialValue || '',\n };\n }\n\n onInput = (e: Event) => {\n if (e.target instanceof HTMLInputElement) {\n const { value } = e.target;\n this.setState({ value });\n this.props.onChange(value);\n }\n };\n\n render() {\n return html`\n <div class=${styles.search} ${'integry-search'}>\n <input\n placeholder=${this.props.placeholder || 'Search...'}\n value=${this.state.value}\n oninput=${this.onInput}\n />\n <div class=${styles.resultCount}>${this.props.resultCount} results</div>\n </div>\n `;\n }\n}\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface TabProps {\n activeTab: string;\n label: string;\n onClick(label: string): void;\n}\n\nconst Tab = (props: TabProps) => {\n const { label, activeTab, onClick } = props;\n\n const onClickHandler = () => {\n onClick(label);\n };\n\n return html`\n <li\n class=${`${styles.tab} ${activeTab === label ? styles.tabactive : ''}`}\n onclick=${onClickHandler}\n >\n ${label}\n </li>\n `;\n};\n\nexport { Tab, TabProps };\n","import { html } from 'htm/preact';\nimport { VNode } from 'preact';\nimport { useState } from 'preact/hooks';\n\nimport { Tab } from './Tab';\n\nimport styles from './styles.module.scss';\n\ninterface TabBarProps {\n preSelectedTab?: string;\n children: VNode<{ label: string }>[];\n}\n\nconst TabBar = (props: TabBarProps) => {\n const { preSelectedTab, children } = props;\n\n if (!Array.isArray(children) || children.length < 2) {\n throw new Error('Tab Bar must have at least two children');\n }\n\n // either select preselected if specified, or the first tab\n const [activeTab, setActiveTab] = useState<string>(\n preSelectedTab || children[0].props.label,\n );\n\n const onClickTabItem = (label: string) => {\n setActiveTab(label);\n };\n\n return html`\n <div>\n <ol class=${styles.nav}>\n ${children.map((child) => {\n const { label } = child.props;\n return html`\n <${Tab}\n activeTab=${activeTab}\n key=${label}\n label=${label}\n onClick=${onClickTabItem}\n >\n <//>\n `;\n })}\n </ol>\n <div className=\"tab-content\">\n ${children.map((child) => {\n if (child.props.label !== activeTab) return undefined;\n return child.props.children;\n })}\n </div>\n </div>\n `;\n};\n\nexport { TabBar, TabBarProps };\n","import { html } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ToggleProps {\n id: string;\n value: boolean;\n onChange: (val: boolean) => void;\n}\n\n/**\n * Toggle component\n *\n */\nconst Toggle = (props: ToggleProps) => {\n const { id, value: isToggled, onChange } = props;\n\n const handleChange = () => {\n onChange(!isToggled);\n };\n\n return html`\n <div class=${styles.toggle}>\n <div class=${`${styles.inner} ${isToggled ? styles.toggled : ''} `}>\n <label for=${id} class=${`${isToggled ? styles.toggled : ''} `}></label>\n <input type=\"checkbox\" id=${id} onclick=${handleChange} />\n </div>\n </div>\n `;\n};\n\nexport { Toggle, ToggleProps };\n","export type IntegrySDKEvents = {\n 'should-load-template': ({ templateId }: { templateId: number }) => void;\n 'did-load-template': (data: {\n templateId: number;\n templateTitle: string;\n templateDescription: string;\n }) => void;\n 'did-save-integration': (data: {\n integrationId: number;\n name: string;\n templateId: number;\n status: string;\n }) => void;\n 'did-load-preview': (data: {\n templateId: number;\n templateTitle: string;\n templateDescription: string;\n }) => void;\n 'did-change-step': (data: {\n stepId: number;\n stepType: 'AUTH' | 'CONFIGURATION' | 'SECTION' | 'CONFIRMATION';\n }) => void;\n};\n\nexport enum TemplateFormRenderModes {\n MODAL = 'MODAL',\n INLINE = 'INLINE',\n DETACHED = 'DETACHED',\n CUSTOM = 'CUSTOM',\n}\n\nexport enum TemplateListingRenderModes {\n GRID = 'GRID',\n LIST = 'LIST',\n}\n\nexport type Authorization = {\n id: number;\n authorization_type: string;\n app_user?: number;\n app_user_id?: number;\n disable_link?: string;\n integration_count?: number;\n user_identity: string;\n};\n\nexport type UnfetchResponse = {\n ok: boolean;\n statusText: string;\n status: number;\n url: string;\n text: () => Promise<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n json: () => Promise<any>;\n blob: () => Promise<Blob>;\n clone: () => UnfetchResponse;\n headers: {\n keys: () => string[];\n entries: () => Array<[string, string]>;\n get: (key: string) => string | undefined;\n has: (key: string) => boolean;\n };\n};\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\n\nimport { timeAgo } from '@/utils/datetime';\nimport { Toggle } from '@/components/Toggle';\nimport { ListBox } from '@/components/Listbox';\nimport { Integration } from '@/interfaces';\nimport { IntegryAPI } from '@/modules/api';\nimport { StoreType } from '@/types/store';\nimport { Loader } from '@/components/Loader';\nimport { actionFunctions } from '@/store';\n\nimport style from './styles.module.scss';\n\ntype Props = {\n integrations: Integration[];\n apiHandler: IntegryAPI;\n} & StoreType;\n\nclass IntegrationsList extends Component<Props> {\n private toggleIntegration = (integrationId: number, activate: boolean) => {\n this.props.apiHandler\n .toggleIntegration(integrationId, activate)\n .then((res) => {\n console.info(res);\n })\n .catch((err) => console.error(err));\n };\n\n private onIntegrationDelete = (integrationId: number) => {\n this.props.apiHandler\n .deleteIntegration(integrationId)\n .then((res) => {\n console.info(res);\n })\n .catch((err) => console.error(err));\n };\n\n render() {\n return html`\n ${this.props.fetchingIntegrations\n ? html`<${Loader}/ >`\n : html`\n <div>\n <div class=${style.topbar}>\n <!-- <h2 class=${style.header}>My Flows</h2> -->\n <!-- <${ListBox} items=${[\n { id: 'sort', value: 'Sort' },\n ]} value=\"sort\" //> -->\n </div>\n <div class=${style.row}>\n <div class=\"flex w-12\">Status</div>\n <div class=\"flex w-12\"></div>\n <div class=\"flex-1 pl-4\">Integration Name</div>\n <div class=\"w-24\">Runs</div>\n <div class=\"w-40\">Last Activity</div>\n <div class=\"w-16\"></div>\n <div class=\"flex w-6\"></div>\n </div>\n <div class=${style.integrations}>\n ${this.props.integrations.length < 1 && html`No integrations`}\n ${this.props.integrations.map(\n (el) => html`\n <div\n class=\"${style.integration} ${'integry_container_Integration'}\"\n >\n <div class=${style.row}>\n <div class=\"flex w-12\">\n ${el.task_execution.status !== 'fail'\n ? html`\n <svg\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"12.5\"\n fill=\"#2ECC71\"\n />\n <path\n d=\"M17.2209 9.16699L11.3907 15.8337L8.33203 12.3361\"\n stroke=\"white\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n `\n : html`<svg\n width=\"22\"\n height=\"25\"\n viewBox=\"0 0 25 27\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"12.5\"\n fill=\"#E26154\"\n />\n <g filter=\"url(#filter0_d)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.1886 8.05792C11.1209 7.32574 11.7556 6.61621 12.4701 6.61621C13.2413 6.61621 13.8535 7.32568 13.7963 8.05792L13.3542 13.5234C13.3206 14.0117 12.8896 14.3955 12.4019 14.3605C11.9713 14.3255 11.6422 13.9535 11.6196 13.5234L11.1886 8.05792ZM11.1836 16.9743C11.1836 16.3124 11.7654 15.7737 12.4835 15.7737C13.2189 15.7737 13.8007 16.3124 13.8 16.9743V17.2052C13.8 17.8671 13.2015 18.3902 12.4835 18.3902C11.7647 18.3902 11.1836 17.8671 11.1836 17.2052V16.9743Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <filter\n id=\"filter0_d\"\n x=\"7.18359\"\n y=\"6.61621\"\n width=\"10.6164\"\n height=\"19.7739\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood\n flood-opacity=\"0\"\n result=\"BackgroundImageFix\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"4\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow\"\n result=\"shape\"\n />\n </filter>\n </defs>\n </svg> `}\n </div>\n <div class=\"flex w-12\">\n <img src=${el.icon_url} />\n </div>\n <div class=\"flex-1 pl-4\">${el.name}</div>\n <div class=\"w-24\">${el.runs_count}</div>\n <div class=\"w-40\">\n ${el.task_execution.last_execution_at\n ? timeAgo(\n new Date(\n `${el.task_execution.last_execution_at.date} ${el.task_execution.last_execution_at.timezone}`,\n ),\n )\n : 'Never run'}\n </div>\n <div class=\"w-16\">\n <${Toggle}\n id=${el.id}\n value=${el.status === 'ACTIVE'}\n onChange=${(active: boolean) =>\n this.toggleIntegration(el.id, active)}\n >\n <//>\n </div>\n <div\n class=\"flex w-6 cursor-pointer\"\n onclick=${() => this.onIntegrationDelete(el.id)}\n >\n <svg\n width=\"12\"\n height=\"15\"\n viewBox=\"0 0 12 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 4.16667H12\"\n stroke=\"#F05C42\"\n stroke-width=\"1.2\"\n />\n <path\n d=\"M10 5.5V6.16667L9.33333 13.5H2.66667L2 6.16667V5.5\"\n stroke=\"#F05C42\"\n stroke-width=\"1.2\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M4 3.5V2.16667C4 1.79848 4.29848 1.5 4.66667 1.5H7.33333C7.70152 1.5 8 1.79848 8 2.16667V3.5\"\n stroke=\"#F05C42\"\n stroke-width=\"1.2\"\n />\n </svg>\n </div>\n </div>\n </div>\n `,\n )}\n </div>\n </div>\n `}\n `;\n }\n}\n\nexport default connect<Props, unknown, StoreType, unknown>(\n ['fetchingIntegrations'],\n actionFunctions,\n)(IntegrationsList);\n","/**\n *\n * @param length Array length to generate\n * @returns String array like ['00', '01', '02' ...]\n */\nfunction generateDoubleDigitStringArr(length: number): string[] {\n return Array.from({ length }, (_, i) => {\n if (i < 10) return `0${i}`;\n return `${i + 1}`;\n });\n}\n\n/**\n *\n * @param date Input date\n * @returns {string} Date string formatted as YYYY-MM-DD\n */\nfunction getDateFormat(date: Date): string {\n return new Date(date.getTime() - date.getTimezoneOffset() * 60000)\n .toISOString()\n .split('T')[0];\n}\n\nconst timeAgo = (date: Date) => {\n const intervals = [\n { label: 'year', seconds: 31536000 },\n { label: 'month', seconds: 2592000 },\n { label: 'day', seconds: 86400 },\n { label: 'hour', seconds: 3600 },\n { label: 'minute', seconds: 60 },\n { label: 'A few second', seconds: 0 },\n ];\n\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000);\n const interval = intervals.find((i) => i.seconds < seconds);\n if (interval) {\n let count = Math.floor(seconds / interval.seconds);\n if (!Number.isInteger(count)) count = 0;\n return `${count > 0 ? count : ''} ${interval.label}${\n count !== 1 ? 's' : ''\n } ago`;\n }\n return `Cannot be formatted with interval ${interval}`;\n};\n\nexport { generateDoubleDigitStringArr, getDateFormat, timeAgo };\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport fuzzysort from 'fuzzysort';\n\nimport { Template as TemplateType } from '@/interfaces';\nimport { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { TemplateSearch } from '@/features/templates/TemplateSearch';\nimport { Loader } from '@/components/Loader';\nimport { TabBar } from '@/components/TabBar';\n\nimport IntegrationsList from '@/features/integrations/IntegrationsList';\nimport { IntegrySDKEvents, TemplateListingRenderModes } from '@/types';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\n\nimport style from './styles.module.scss';\n\ntype Props = {\n bundleId: string;\n layout: TemplateListingRenderModes;\n templateContainerTemplate: Component;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n onTemplateClick?: (templateId: number) => void;\n} & StoreType;\n\ntype State = {\n loading: boolean;\n filteredTemplates: TemplateType[];\n};\n\nclass TemplatesView extends Component<Props, State> {\n constructor() {\n super();\n this.state = {\n loading: false,\n filteredTemplates: [],\n };\n }\n\n // Adding the this argument restricts binding\n static handleClick(this: HTMLButtonElement, event: MouseEvent) {\n event.preventDefault();\n if (event.target instanceof HTMLElement) {\n console.info(event.target.localName);\n }\n }\n\n componentDidMount() {\n this.setState({ loading: true });\n this.props.setStoreState({\n fetchingIntegrations: true,\n fetchingTemplates: true,\n });\n this.props.apiHandler\n .getTemplateListing(this.props.bundleId)\n .then((data) => {\n if (data) {\n this.props.setBaseData(data);\n this.setState({\n loading: false,\n filteredTemplates: data.templates,\n });\n }\n });\n }\n\n filterTemplates = (query: string) => {\n if (query) {\n this.setState({\n filteredTemplates: fuzzysort\n .go(query, this.props.templates, {\n keys: ['name', 'branding_app.tags'],\n scoreFn: (keysResult) => {\n const nameResult = keysResult[0];\n const tagsResult = keysResult[1];\n // assign higher score to name result\n const score = Math.max(\n nameResult ? nameResult.score + 100 : -Infinity,\n tagsResult ? tagsResult.score : -Infinity,\n );\n return score;\n },\n })\n .map((el) => el.obj),\n });\n } else {\n this.setState({ filteredTemplates: this.props.templates });\n }\n };\n\n onTemplateClick = (templateId: number) => {\n this.props.setGenericData({\n templateId,\n });\n if (this.props.onTemplateClick) {\n this.props.onTemplateClick(templateId);\n }\n };\n\n render() {\n return html`\n <div>\n ${this.state.loading\n ? html` <${Loader} //> `\n : html`\n <${TabBar}>\n <div\n label=${this.props.userConfig?.availableFlowsLabel ||\n 'Available Flows'}\n >\n <!-- <h2 class=${style.header}>Available Flows</h2> -->\n <div>\n <${TemplateSearch}\n resultCount=${this.state.filteredTemplates.length}\n onChange=${(val: string) => this.filterTemplates(val)}\n >\n <//>\n </div>\n <div\n class=\"${this.props.layout ===\n TemplateListingRenderModes.LIST\n ? style.template_list\n : style.template_grid} ${'integry-container_TemplatesView'}\"\n >\n ${this.state.filteredTemplates.map(\n (template) =>\n html`\n <${this.props.templateContainerTemplate}\n name=${template.name}\n description=${template.description}\n layout=${this.props.layout}\n tags=${template.branding_app.tags}\n imgUrl=${template.branding_app.icon_url}\n onClick=${() => this.onTemplateClick(template.id)}\n >\n <//>\n `,\n )}\n </div>\n </div>\n <div label=${this.props.userConfig?.myFlowsLabel || 'My Flows'}>\n <${IntegrationsList} apiHandler=${this.props.apiHandler}\n integrations=${this.props.integrations} //>\n </div>\n <//>\n `}\n </div>\n `;\n }\n}\n\nexport default connect<Props, State, StoreType, unknown>(\n ['userConfig', 'integrations', 'templates'],\n actionFunctions,\n)(TemplatesView);\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ntype NavItemProps = {\n label: string;\n logoUrl?: string;\n isDisabled?: boolean;\n isActive?: boolean;\n isCompleted?: boolean;\n isLastStep?: boolean;\n onClick?(): void;\n};\n\nconst TickMark = html` <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <rect opacity=\"0.7\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#2ECC71\" />\n <path\n d=\"M9.23107 6.34619L6.96066 8.94234L5.76953 7.58033\"\n stroke=\"white\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n</svg>`;\n\nconst FinalTickMark = html`\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"7.5\"\n cy=\"7.5\"\n r=\"6.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10.3333 5.5L6.83522 9.5L5 7.40148\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n`;\n\nclass NavItem extends Component<NavItemProps> {\n render() {\n const {\n logoUrl,\n isActive = false,\n isCompleted = false,\n isDisabled = false,\n isLastStep = false,\n onClick = () => null,\n } = this.props;\n return html`\n <div\n class=${`${styles.navItem} ${isDisabled ? styles.disabled : ''} ${\n isActive ? styles.active : ''\n }`}\n onclick=${onClick}\n tabindex=\"-1\"\n role=\"button\"\n >\n <div class=${styles.navItemContent}>\n <div class=${styles.imgContainer}>\n ${isLastStep\n ? FinalTickMark\n : html`\n ${!(isCompleted && !isActive)\n ? html`<img src=${logoUrl} />`\n : TickMark}\n `}\n </div>\n <div>${this.props.label}</div>\n </div>\n </div>\n `;\n }\n}\n\nexport { NavItem, NavItemProps };\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\n\nimport { NavItem, NavItemProps } from './NavItem';\n\nimport styles from './styles.module.scss';\n\nexport type StepNavigationProps = {\n steps: NavItemProps[];\n currentStepIndex?: number;\n completedTillIndex?: number;\n} & StoreType;\n\ntype StepNavigationState = {\n templateName: string;\n};\n\nclass StepNavigation extends Component<\n StepNavigationProps,\n StepNavigationState\n> {\n changeStep = (stepIndex: number) => {\n this.props.gotoStep(stepIndex);\n };\n\n render() {\n const { stepState } = this.props;\n const step = stepState?.currentStep;\n\n return html`\n <div class=${styles.navigation}>\n <div>\n ${this.props.stepState &&\n html`\n ${this.props.stepState?.steps.map(\n (el, idx) =>\n html` <${NavItem}\n label=${el.type !== 'CONFIRMATION'\n ? el.title\n : 'Confirmation'}\n logoUrl=${el.type !== 'CONFIRMATION' && el.iconUrl}\n isCompleted=${el.isCompleted}\n isActive=${step?.type !== 'CONFIRMATION' &&\n el.type !== 'CONFIRMATION' &&\n stepState.stepIndex === idx}\n isDisabled=${Number(stepState?.stepIndex) < idx}\n isLastStep=${false}\n onClick=${() => this.changeStep(idx)}\n />`,\n )}\n `}\n <${NavItem}\n label=\"Confirmation\"\n isCompleted=${true}\n isActive=${step !== undefined &&\n stepState?.stepIndex === stepState?.steps.length}\n isDisabled=${step !== undefined &&\n stepState?.stepIndex !== stepState?.steps.length}\n isLastStep=${true}\n onClick=${() => this.changeStep(stepState?.steps.length ?? 0)}\n />\n </div>\n </div>\n `;\n }\n}\n\nStepNavigation.defaultProps = {\n currentStepIndex: -1,\n completedTillIndex: -1,\n};\n\nexport default connect<\n StepNavigationProps,\n StepNavigationState,\n StoreType,\n unknown\n>(\n 'stepState',\n actionFunctions,\n)(StepNavigation);\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { BundleResponse, IntegryStep, TemplateStep } from '@/interfaces';\nimport Step from '@/features/templates/Step';\nimport { Button, ButtonTypes } from '@/components/Button';\nimport { IntegryAPI } from '@/modules/api';\nimport StepNavigation from '@/features/common/StepNavigation';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport AppContext from '@/contexts/AppContext';\nimport AuthSelector from '@/features/common/AuthSelector';\nimport { IntegrySDKEvents, TemplateListingRenderModes } from '@/types';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\n\nimport styles from './styles.module.scss';\n\nexport type StepsPropsType = {\n steps: IntegryStep[];\n layout: TemplateListingRenderModes;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n} & StoreType;\n\ntype StepsStateType = {\n selectedAuthStep: number | null;\n loading: boolean;\n};\n\nclass Steps extends Component<\n StepsPropsType,\n StepsStateType & Record<string, unknown>\n> {\n static contextType = AppContext;\n\n constructor(props: StepsPropsType) {\n super(props);\n this.state = {\n loading: false,\n selectedAuthStep: null,\n };\n }\n\n private refetchIntegrations = () => {\n this.props.setStoreState({\n fetchingIntegrations: true,\n });\n this.context.apiHandler\n .getTemplateListing(this.props.genericData.bundleId)\n .then((data: BundleResponse) => {\n if (data) {\n this.props.setBaseData(data);\n }\n })\n .finally(() => {\n this.props.setStoreState({\n fetchingIntegrations: false,\n });\n });\n };\n\n private createIntegration = () => {\n const { stepMapping, stepDataMapping } = this.props;\n console.info(stepMapping);\n this.setState({ loading: true });\n const payload = {\n name: this.props.genericData.templateApp?.name ?? 'My new flow',\n notification_email: '',\n template: Number(this.props.genericData.templateId),\n bundle_id: Number(this.props.genericData.bundleId),\n steps: Object.keys(stepMapping).map((el) => ({\n id: stepMapping[el].step.id,\n authorization: Number(stepMapping[el].selectedAuthId),\n template_step: stepMapping[el].step.id,\n app_user_data: stepMapping[el].step.template_fields.map((tField) => ({\n id: tField.id,\n value:\n (stepDataMapping[stepMapping[el].step.id][tField.id].value ||\n stepDataMapping[stepMapping[el].step.id][tField.id].value ===\n '') &&\n !stepDataMapping[stepMapping[el].step.id][tField.id].objectValue\n ? `${stepDataMapping[stepMapping[el].step.id][tField.id].value}`\n : JSON.stringify(\n stepDataMapping[stepMapping[el].step.id][tField.id]\n .objectValue,\n ),\n template_field: tField.id,\n })),\n })),\n };\n\n this.context.apiHandler\n .saveIntegration(payload)\n .then(() => {\n this.props.resetTemplateFields();\n this.refetchIntegrations();\n this.setState({ loading: false });\n })\n .catch((err: unknown) => console.error(err));\n };\n\n private handleAuthSelected = (\n authId: number,\n stepId: number,\n isVerified: boolean,\n override: boolean,\n ) => {\n const dependentSteps = this.props.stepMapping[stepId].step.template_fields\n .filter((el) => el.activity_field && el.activity_field.is_dynamic)\n .map((el) => el.id);\n // reset all dynamic steps if auth changes\n this.props.setStepAuthorization(\n stepId,\n authId,\n isVerified,\n dependentSteps,\n override,\n );\n };\n\n render() {\n let selectedStep: {\n step: TemplateStep;\n selectedAuthId: number | null;\n } | null = null;\n const { stepState } = this.props;\n const { currentStep, stepIndex, steps } = stepState;\n\n let shouldShowLastStep = false;\n let shouldShowBackButton = false;\n let isStepValid = false;\n let showStepValidation = false;\n if (stepIndex > -1 && currentStep?.type !== 'CONFIRMATION') {\n selectedStep = this.props.stepMapping[Number(currentStep?.stepId)];\n\n shouldShowLastStep = false;\n shouldShowBackButton = this.props.stepState.stepIndex > 0;\n isStepValid = currentStep?.isValid ?? false;\n showStepValidation = stepState.showValidation;\n } else if (\n currentStep?.type === 'CONFIRMATION' &&\n stepIndex === steps.length\n ) {\n shouldShowLastStep = true;\n }\n\n return html`\n <div class=${styles.stepsWrap}>\n <div class=${styles.stepsContainer}>\n <${StepNavigation}\n steps=${this.props.steps?.map((el) => ({\n label: el.title,\n logoUrl: el.activity.app.icon_url,\n }))}\n currentStepIndex=${-1}\n completedTillIndex=${-1}\n ><//>\n </div>\n <div class=${styles.stepContainer}>\n <div class=${styles.stepInfo}>\n ${shouldShowLastStep\n ? html`\n <svg\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"11.75\"\n fill=\"white\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M17.2209 9.16699L11.3907 15.8337L8.33203 12.3361\"\n stroke=\"#2ECC71\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n <div>Confirmation</div>\n `\n : html`\n <!-- <img src=${selectedStep?.step.activity.app.icon_url} />\n <div>${selectedStep?.step.title}</div> -->\n `}\n </div>\n\n <div class=${styles.top}>\n ${shouldShowLastStep\n ? html`\n <div class=${styles.save}>\n Your integration is ready to be enabled. Click “Save” to\n continue.\n </div>\n `\n : html`\n ${selectedStep &&\n html`\n ${currentStep?.type === 'AUTH'\n ? html`\n <div class=${styles.stepWrap}>\n <${AuthSelector}\n stepId=${selectedStep.step.id}\n apiHandler=${this.context.apiHandler}\n showErrors=${showStepValidation}\n onAuthSelected=${(\n authId: number,\n isVerified: boolean,\n override: boolean,\n ) =>\n this.handleAuthSelected(\n authId,\n Number(selectedStep?.step.id),\n isVerified,\n override,\n )}\n >\n <//>\n </div>\n `\n : html`\n <${Step}\n step=${selectedStep?.step}\n stepType=${currentStep?.type}\n showStepValidation=${showStepValidation}\n apiHandler=${this.context.apiHandler}\n eventEmitter=${this.context.eventEmitter}\n />\n `}\n `}\n `}\n </div>\n <div class=${styles.bottom}>\n <div class=${styles.buttons}>\n ${shouldShowBackButton &&\n html`\n <${Button}\n label=\"Back\"\n onClick=${() => this.props.gotoPreviousStep()}\n type=${ButtonTypes.SECONDARY}\n ><//>\n `}\n ${shouldShowLastStep\n ? html`\n <${Button}\n label=\"Save\"\n isLoading=${this.state.loading}\n onClick=${() => this.createIntegration()}\n ><//>\n `\n : html`\n <${Button}\n label=\"Next\"\n disabled=${!isStepValid}\n onClick=${() =>\n isStepValid\n ? this.props.gotoNextStep()\n : this.props.showStepValidationState()}\n ><//>\n `}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n}\n\nexport default connect<StepsPropsType, StepsStateType, StoreType, unknown>(\n ['stepState', 'genericData', 'stepMapping', 'stepDataMapping'],\n actionFunctions,\n)(Steps);\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport { TemplateResponse } from '@/interfaces';\nimport Steps from '@/features/templates/Steps';\nimport { IntegryAPI } from '@/modules/api';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport { Loader } from '@/components/Loader';\nimport { IntegrySDKEvents } from '@/types';\nimport { StoreType } from '@/types/store';\nimport { actionFunctions } from '@/store';\nimport { notEmpty } from '@/types/utils';\n\nimport styles from './styles.module.scss';\n\ninterface TemplateFormProps extends StoreType {\n templateId: number;\n bundleId: number;\n apiHandler: IntegryAPI;\n eventEmitter: EventEmitter<IntegrySDKEvents>;\n}\n\ninterface TemplateState {\n loading: boolean;\n template: TemplateResponse | null;\n}\n\nclass TemplateForm extends Component<TemplateFormProps, TemplateState> {\n constructor() {\n super();\n this.state = {\n loading: true,\n template: null,\n };\n }\n\n componentDidMount() {\n this.props.apiHandler\n .getTemplate(this.props.templateId)\n .then((data) => {\n if (data)\n Promise.all(\n data.steps.map((el) =>\n this.props.apiHandler.getTemplateStep(Number(el.id)),\n ),\n )\n .then((res) => {\n this.setState({ template: data, loading: false });\n this.props.setSteps(res.filter(notEmpty));\n this.props.setStepMapping(res.filter(notEmpty));\n this.props.setParentChildMapping(res.filter(notEmpty));\n this.props.setGenericData({\n templateId: Number(this.props.templateId),\n bundleId: Number(this.props.bundleId),\n });\n })\n .catch((err) => console.error(err));\n })\n .catch((err) => {\n throw new Error(err);\n });\n }\n\n render() {\n const { template } = this.state;\n return html`\n <div>\n ${this.state.loading\n ? html`<${Loader} //>`\n : html`\n <div class=${styles.header}>\n <img src=${template?.branding_app.icon_url} width=\"40\" />\n <div>\n <div class=${styles.name}>${template?.name}</div>\n <div class=${styles.description}>\n ${template?.description}\n </div>\n </div>\n </div>\n\n <${Steps}\n steps=${template?.steps}\n apiHandler=${this.props.apiHandler}\n eventEmitter=${this.props.eventEmitter}\n />\n `}\n </div>\n `;\n }\n}\n\nexport default connect<TemplateFormProps, TemplateState, StoreType, unknown>(\n '',\n actionFunctions,\n)(TemplateForm);\n","import { html, Component } from 'htm/preact';\nimport { TemplateListingRenderModes } from '@/types';\n\nimport style from './styles.module.scss';\n\nexport type TemplateProps = {\n imgUrl: string;\n name: string;\n description: string;\n tags: string;\n layout: TemplateListingRenderModes;\n onClick: () => void;\n};\n\ntype TemplateStateType = {\n templateName: string;\n};\n\nclass Template extends Component<\n TemplateProps,\n TemplateStateType & Record<string, unknown>\n> {\n constructor(props: TemplateProps) {\n super(props);\n this.state = {\n templateName: this.props.name,\n };\n }\n\n // Adding the this argument restricts binding\n static handleClick(this: HTMLButtonElement, event: MouseEvent) {\n event.preventDefault();\n if (event.target instanceof HTMLElement) {\n console.info(event.target.localName);\n }\n }\n\n handleClick = () => {\n console.info(this.props.name);\n };\n\n render() {\n return html`\n <div\n onclick=${this.props.onClick}\n class=\"${this.props.layout === TemplateListingRenderModes.LIST\n ? style.template_list_view\n : style.template_grid_view} ${'integry-container_Template'}\"\n >\n <div>\n <img src=${this.props.imgUrl} />\n <p class=${style.name}>${this.state.templateName}</p>\n <p class=${style.description}>${this.props.description}</p>\n </div>\n ${this.props.tags.length > 0 &&\n html`\n <div class=${style.tags}>\n ${this.props.tags\n .split(',')\n .map((el) => html` <div class=${style.tag}>${el}</div> `)}\n </div>\n `}\n </div>\n `;\n }\n}\n\nexport { Template };\n","import { html, Component } from 'htm/preact';\n\nimport styles from './styles.module.scss';\n\ninterface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nclass Modal extends Component<ModalProps> {\n render() {\n const { isOpen } = this.props;\n return html`\n <div\n class=${`${styles.modal} ${isOpen ? `${styles.open}` : ''}`}\n aria-labelledby=\"modal-title\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div class=${styles.modalContainer}>\n <div class=${styles.inset} aria-hidden=\"true\"></div>\n\n <span class=${styles.span} aria-hidden=\"true\"></span>\n\n <div\n class=${`${styles.contentWrap} ${isOpen ? `${styles.open}` : ''}`}\n >\n <div class=${styles.content}>\n <div\n onclick=${this.props.onClose}\n class=${styles.close}\n >\n <svg\n width=\"20\"\n height=\"22\"\n viewBox=\"0 0 20 22\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.2426 16.1822L5.75732 6.86328\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M14.2426 6.86328L5.75732 16.1822\"\n stroke=\"#999999\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n ${this.props.isOpen && html` ${this.props.children} `}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n}\n\nexport { Modal };\n","import { html, Component } from 'htm/preact';\nimport { connect } from 'unistore/preact';\nimport TemplatesView from '@/features/templates/TemplatesView';\nimport TemplateForm from '@/features/templates/TemplateForm';\nimport { Template } from '@/features/templates/Template';\nimport { Modal } from '@/components/Modal';\nimport AppContext from '@/contexts/AppContext';\nimport { TemplateListingRenderModes } from '@/types';\nimport { actionFunctions } from '@/store';\nimport { StoreType } from '@/types/store';\nimport { UserConfig } from '@/interfaces';\n\nimport styles from './styles.module.scss';\n\ninterface ContainerProps extends StoreType {\n bundleId: string;\n userConfig?: UserConfig;\n layout: TemplateListingRenderModes;\n}\n\ninterface ContainerState {\n templateId: number | null;\n}\n\nclass Container extends Component<ContainerProps, ContainerState> {\n static contextType = AppContext;\n\n templateComponent: typeof Template | undefined;\n\n templateListComponent: typeof TemplatesView | undefined;\n\n constructor(props: ContainerProps) {\n super(props);\n this.state = {\n templateId: null,\n };\n }\n\n componentWillMount() {\n // this.templateComponent = this.props.customTemplates?.template || Template;\n this.templateComponent = Template;\n\n // if (this.props.customTemplates?.templateList) {\n // this.templateListComponent = this.props.customTemplates.templateList;\n // } else this.templateListComponent = TemplatesView;\n this.templateListComponent = TemplatesView;\n }\n\n onTemplateClick = (templateId: number) => {\n this.props.setStoreState({ showSetupModal: true });\n this.setState({ templateId });\n };\n\n render() {\n return html`\n <>\n <div class=\"${styles['integry-container']} ${'integry-container'}\">\n <${this.templateListComponent}\n layout=${this.props.layout}\n bundleId=${this.props.bundleId}\n templateContainerTemplate=${this.templateComponent}\n apiHandler=${this.context.apiHandler}\n eventEmitter=${this.context.eventEmitter}\n onTemplateClick=${this.onTemplateClick}\n >\n </div>\n <${Modal} \n isOpen=${this.props.showSetupModal} \n onClose=${() => {\n this.props.resetTemplateFields();\n this.setState({\n templateId: null,\n });\n }}\n > \n <${TemplateForm} \n apiHandler=${this.context.apiHandler}\n templateId=${this.state.templateId}\n bundleId=${this.props.bundleId} \n />\n <//>\n </>\n `;\n }\n}\n\nexport default connect<ContainerProps, ContainerState, StoreType, unknown>(\n ['userConfig', 'integrations', 'templates', 'showSetupModal'],\n actionFunctions,\n)(Container);\n","import { EventSet } from '../types';\nimport EventRunnerAbstract from './abstract';\n\nexport default class EventRunnerDefault<\n ESet extends EventSet,\n EventName extends keyof ESet\n> extends EventRunnerAbstract<ESet, EventName> {\n run(_eventName: EventName, ...args: Parameters<ESet[EventName]>): void {\n this.handler.apply(null, args);\n }\n}\n","import { EventSet, EventEmitterType, HandlerRunner } from '../types';\n\nexport default abstract class EventRunnerAbstract<\n ESet extends EventSet,\n EventName extends keyof ESet\n> implements HandlerRunner<ESet, EventName> {\n // eslint-disable-next-line no-useless-constructor\n constructor(\n protected emitter: EventEmitterType<ESet>,\n protected handler: ESet[EventName],\n ) {}\n\n getHandler(): ESet[EventName] {\n return this.handler;\n }\n\n abstract run(\n eventName: EventName,\n ...args: Parameters<ESet[EventName]>\n ): void;\n}\n","import superPropBase from \"./superPropBase.js\";\nexport default function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","import { EventSet, EventEmitterType } from '../types';\nimport EventRunnerDefault from './default';\n\nexport default class EventRunnerNTimes<\n ESet extends EventSet,\n EventName extends keyof ESet\n> extends EventRunnerDefault<ESet, EventName> {\n private i = 0;\n\n constructor(\n emitter: EventEmitterType<ESet>,\n handler: ESet[EventName],\n private total = 1,\n ) {\n super(emitter, handler);\n if (this.total < 1) {\n throw new Error(`{total} can not be less than 1`);\n }\n }\n\n run(eventName: EventName, ...args: Parameters<ESet[EventName]>): void {\n super.run(eventName, ...args);\n // eslint-disable-next-line no-plusplus\n if (++this.i >= this.total) {\n this.emitter.off(eventName, this.handler);\n }\n }\n}\n","// https://github.com/infinitum11/inf-ee\n\nimport EventRunnerDefault from './runners/default';\nimport EventRunnerNTimes from './runners/ntimes';\nimport {\n EventListenerStorage,\n EventSet,\n EventEmitterType,\n HandlerRunner,\n} from './types';\n\nexport class EventEmitter<ESet extends EventSet>\n implements EventEmitterType<EventSet> {\n private events: EventListenerStorage<ESet> = Object.create(null);\n\n on<EventName extends keyof ESet>(\n eventName: EventName,\n handler: ESet[EventName],\n ): void {\n this.addEventListener(eventName, new EventRunnerDefault(this, handler));\n }\n\n once<EventName extends keyof ESet>(\n eventName: EventName,\n handler: ESet[EventName],\n ): void {\n this.addEventListener(eventName, new EventRunnerNTimes(this, handler, 1));\n }\n\n off<EventName extends keyof ESet>(\n eventName: EventName,\n handler: ESet[EventName],\n ): void {\n const events = this.events[eventName];\n if (!events?.length) {\n return;\n }\n this.events[eventName] = events.filter((h) => h.getHandler() !== handler);\n }\n\n offAll(): void {\n Object.keys(this.events).forEach((eventName) => {\n const events = this.events[eventName];\n if (events) {\n events.length = 0;\n }\n });\n this.events = Object.create(null);\n }\n\n emit<EventName extends keyof ESet>(\n eventName: EventName,\n ...args: Parameters<ESet[EventName]>\n ): void {\n const events = this.events[eventName];\n if (events) {\n events.forEach((handler) => handler.run(eventName, ...args));\n }\n }\n\n private addEventListener<EventName extends keyof ESet>(\n eventName: EventName,\n runner: HandlerRunner<ESet, EventName>,\n ) {\n const events = this.events[eventName];\n if (Array.isArray(events)) {\n events.push(runner);\n } else {\n this.events[eventName] = [runner];\n }\n }\n}\n","import { html, render } from 'htm/preact';\nimport { Provider } from 'unistore/preact';\n\nimport { IntegryAPI } from '@/modules/api';\nimport {\n InitConfig,\n ConfigWithObject,\n ConfigWithUrlParams,\n APIConfig,\n PreviewPayload,\n} from '@/interfaces/index';\n\nimport { HMAC } from '@/extensions/HMAC';\n\n// builtin templates\nimport Wrapper from '@/features/appdir/Wrapper';\nimport Container from '@/features/common/Container';\n// import { Template } from '@/features/templates/Template';\n// import TemplatesView from '@/features/templates/TemplatesView';\n// import { TemplateSearch } from '@/features/templates/TemplateSearch';\nimport { EventEmitter } from '@/modules/event-emitter';\nimport AppContext from '@/contexts/AppContext';\n\nimport {\n IntegrySDKEvents,\n TemplateFormRenderModes,\n TemplateListingRenderModes,\n} from '@/types';\n\nimport { createSDKStore } from '@/store';\nimport isBrowser from '@/utils/isBrowser';\n\n// const Widgets = { Template, TemplatesView, TemplateSearch };\nconst Helpers = { getAuthHash: HMAC };\n\n// eslint-disable-next-line no-underscore-dangle\nconst __buildVersion__ = '';\n\n/**\n * Integry JS SDK\n */\nexport class IntegryJS {\n static SDK_VERSION = __buildVersion__;\n\n private config: ConfigWithObject & ConfigWithUrlParams;\n\n private apiHandler: IntegryAPI;\n\n // private templateContainer: HTMLElement | null;\n\n // private renderMode: TemplateFormRenderModes | null = null;\n\n eventEmitter = new EventEmitter<IntegrySDKEvents>();\n\n // allow customers to use template tagging\n // static html = html;\n\n // static Component = Component;\n\n static RenderModes: typeof TemplateFormRenderModes = TemplateFormRenderModes;\n\n // static Widgets: {\n // Template: typeof Template;\n // TemplatesView: typeof TemplatesView;\n // TemplateSearch: typeof TemplateSearch;\n // };\n\n static Helpers: {\n getAuthHash: (key: string, message: string) => Promise<string>;\n };\n\n constructor(config: ConfigWithObject | ConfigWithUrlParams) {\n let integryAPIParams: APIConfig;\n\n let apiConfig;\n\n if (config.env === 'staging') {\n apiConfig = {\n oauthVerifyPath: 'auth/verify',\n endpointsUrl: 'https://integry-app.appspot.com',\n baseUrl: 'https://beta.integry.io',\n baseUrlv2: 'https://beta.integry.io/v2',\n apiKey: config.xIntegryConfig?.appAuth.apiKey,\n };\n } else {\n apiConfig = {\n oauthVerifyPath: 'auth/verify',\n endpointsUrl: 'https://integry-app.appspot.com',\n baseUrl: 'https://app.integry.io',\n baseUrlv2: 'https://app.integry.io/v2',\n apiKey: config.xIntegryConfig?.appAuth.apiKey,\n };\n }\n\n if ('appKey' in config) {\n integryAPIParams = {\n ...config,\n ...apiConfig,\n appKey: config.appKey,\n hash: config.hash,\n userId: config.userId,\n };\n this.config = {\n ...config,\n ...apiConfig,\n appKey: config.appKey,\n hash: config.hash,\n userId: config.userId,\n bundleId: config.bundleId,\n userConfig: config.userConfig,\n };\n } else {\n const urlparams = this.getAuthParamsFromUrl() || {};\n integryAPIParams = {\n ...apiConfig,\n ...urlparams,\n };\n this.config = {\n ...apiConfig,\n ...urlparams,\n userConfig: config.userConfig,\n };\n }\n this.apiHandler = new IntegryAPI(integryAPIParams);\n\n // this.templateContainer = null;\n }\n\n /**\n *\n * @param length Length of string to randomly generate\n * @returns {string} Returns a random string\n */\n private getRandomTemplateId = (length: number): string => {\n const result = [];\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i += 1) {\n result.push(\n characters.charAt(Math.floor(Math.random() * charactersLength)),\n );\n }\n return `x-integry-modal-${result.join('')}`;\n };\n\n private getAuthParamsFromUrl = (): ConfigWithObject => {\n const urlParams =\n isBrowser() && new URLSearchParams(window.location.search);\n if (urlParams) {\n const userId = urlParams.get('user_id');\n const appKey = urlParams.get('app_key');\n const hash = urlParams.get('hash');\n const bundleId = urlParams.get('bundle_id');\n if (!userId || !appKey || !hash || !bundleId) {\n throw new Error(\n `The following auth variables are undefined: ${\n !userId ? 'userId' : ''\n } ${!appKey ? 'appKey' : ''} ${!hash ? 'hash' : ''} ${\n !bundleId ? 'bundleId' : ''\n }`,\n );\n }\n return {\n userId,\n appKey,\n hash,\n bundleId,\n };\n }\n return {\n userId: '',\n appKey: '',\n hash: '',\n bundleId: '',\n };\n };\n\n /**\n * Prints version number of this SDK version\n */\n public printVersion = (): void => {\n console.info(`@integry/sdk@${IntegryJS.SDK_VERSION}`);\n };\n\n public getTemplatesList = async () =>\n this.apiHandler.getTemplateListing(this.config.bundleId);\n\n /**\n *\n * @param renderMode\n * @param templateContainerId\n * @returns {HTMLElement | null}\n */\n private setupTemplateFormDestination = (\n renderMode: TemplateFormRenderModes,\n templateContainerId?: string,\n ): HTMLElement | null => {\n let el: HTMLElement | null = null;\n\n if (templateContainerId) {\n if (\n renderMode === TemplateFormRenderModes.MODAL ||\n renderMode === TemplateFormRenderModes.INLINE\n ) {\n throw new Error(\n 'The `templateContainerId` property is unsupported when render mode is set to \"MODAL\" or \"INLINE\"',\n );\n }\n el = document.getElementById(templateContainerId);\n if (!el) {\n console.warn(\n `The template form render target with id ${templateContainerId} was not found`,\n );\n // throw new Error('The template form render target was not found');\n }\n }\n\n switch (renderMode) {\n case TemplateFormRenderModes.MODAL:\n el = document.createElement('div');\n el.id = this.getRandomTemplateId(8);\n document.body.appendChild(el);\n return el;\n case TemplateFormRenderModes.INLINE:\n return null;\n case TemplateFormRenderModes.DETACHED:\n return el;\n case TemplateFormRenderModes.CUSTOM:\n return el;\n default:\n throw new Error(\n `Unsupported renderMode ${renderMode} configuration, please provide one of ${JSON.stringify(\n Object.keys(TemplateFormRenderModes),\n )}`,\n );\n }\n };\n\n /**\n * Render the template form we ship\n * @param templateId\n */\n public renderTemplateForm = (\n templateId: string,\n templateContainerId: string,\n ): void => {\n const targetEl = document.getElementById(templateContainerId);\n if (!targetEl) {\n console.warn(\n `Integry template form render target with id ${templateContainerId} was not found`,\n );\n return;\n }\n const store = createSDKStore();\n\n render(\n html`\n <${AppContext.Provider}\n value=${{\n apiHandler: this.apiHandler,\n eventEmitter: this.eventEmitter,\n integrationId: this.config.integrationId,\n isPreviewMode: false,\n isEditMode: !!this.config.integrationId,\n }}\n >\n <${Provider} store=${store}>\n <${Wrapper}\n bundleId=${this.config.bundleId}\n templateId=${templateId}\n >\n <//>\n <//>\n <//>\n `,\n targetEl,\n );\n };\n\n /**\n * Render the template form we ship\n * @param templateId\n */\n public renderPreview = (params: PreviewPayload): void => {\n const { templateData, metadata, previewContainerId } = params;\n const targetEl = document.getElementById(previewContainerId);\n if (!targetEl) {\n console.warn(\n `Integry template form render target with id ${previewContainerId} was not found`,\n );\n return;\n }\n const store = createSDKStore();\n\n render(\n html`\n <${AppContext.Provider}\n value=${{\n apiHandler: this.apiHandler,\n eventEmitter: this.eventEmitter,\n isPreviewMode: true,\n }}\n >\n <${Provider} store=${store}>\n <${Wrapper}\n bundleId=${this.config.bundleId}\n isPreviewMode=${true}\n templatePreviewData=${templateData}\n previewMetadata=${metadata}\n >\n <//>\n <//>\n <//>\n `,\n targetEl,\n );\n };\n\n /**\n *\n * @param initConfig\n */\n public init = (initConfig: InitConfig) => {\n const { containerId, templateContainerId, renderMode } = initConfig;\n\n const target = document.getElementById(containerId);\n\n if (!renderMode) {\n throw new Error('Template form render mode needs to be defined');\n }\n\n this.setupTemplateFormDestination(renderMode, templateContainerId);\n\n if (target) {\n const layout =\n (target.getAttribute(\n 'x-integry-layout',\n ) as TemplateListingRenderModes) || TemplateListingRenderModes.LIST;\n // this.renderMode = renderMode;\n\n const store = createSDKStore();\n store.setState({\n userConfig: this.config.userConfig,\n });\n\n render(\n html`\n <${AppContext.Provider}\n value=${{\n apiHandler: this.apiHandler,\n eventEmitter: this.eventEmitter,\n isPreviewMode: false,\n }}\n >\n <${Provider} store=${store}>\n <${Container}\n bundleId=${this.config.bundleId}\n userConfig=${this.config.userConfig}\n layout=${layout}\n >\n <//>\n <//>\n <//>\n `,\n target,\n );\n } else {\n console.warn(\n `Integry SDK render target with id ${containerId} was not found`,\n );\n // throw new Error('The render target was not found');\n }\n };\n\n /**\n * Destroy SDK instance and cleanup store\n */\n public destroy = () => {\n try {\n this.eventEmitter.offAll();\n } catch (error) {\n console.error('There was an error unsubscribing from all events');\n }\n };\n}\n\nexport { Helpers };\n","import { HMAC } from '@/extensions/HMAC';\n\n// import { Template } from '@/features/templates/Template';\n// import TemplatesView from '@/features/templates/TemplatesView';\n// import { TemplateSearch } from '@/features/templates/TemplateSearch';\nimport { IntegryJS } from './index';\n\n// IntegryJS.Widgets = { Template, TemplatesView, TemplateSearch };\nIntegryJS.Helpers = { getAuthHash: HMAC };\n\nexport default IntegryJS;\n"],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","_unsupportedIterableToArray","o","minLen","arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","from","test","_toConsumableArray","isArray","arrayWithoutHoles","iter","Symbol","iterator","iterableToArray","unsupportedIterableToArray","TypeError","nonIterableSpread","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","this","args","arguments","apply","err","undefined","_typeof","obj","Op","hasOwn","hasOwnProperty","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","method","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","isGeneratorFunction","genFun","ctor","displayName","AsyncIterator","PromiseImpl","invoke","result","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","mark","setPrototypeOf","__proto__","awrap","async","keys","object","reverse","pop","message","k","g","str","Uint8Array","unescape","encodeURIComponent","map","c","charCodeAt","m","crypto","subtle","importKey","hash","sign","s","b","padStart","join","_taggedTemplateLiteral","strings","raw","freeze","defineProperties","_classCallCheck","instance","Constructor","_defineProperty","defineProperty","enumerable","configurable","writable","EMPTY_OBJ","EMPTY_ARR","IS_NON_DIMENSIONAL","t","r","e","u","h","p","a","assign","Map","get","set","replace","l","bind","url","options","request","XMLHttpRequest","all","headers","response","ok","status","statusText","responseURL","text","responseText","json","JSON","parse","blob","Blob","clone","entries","toLowerCase","has","const","open","onload","getAllResponseHeaders","onerror","withCredentials","credentials","setRequestHeader","send","body","_assertThisInitialized","ReferenceError","_setPrototypeOf","_inherits","subClass","superClass","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_construct","Parent","Class","isNativeReflectConstruct","Function","_wrapNativeSuper","_cache","indexOf","Wrapper","IntegryAPIError","errorMessage","_this","statusCode","ResponseHandler","debugMode","parsedResponse","console","log","data","IntegryAPI","config","templateId","URL","baseUrlv2","addUrlSearchParams","app_key","appKey","user_id","userId","self_api_key","apiKey","fetch","authorizationTypeId","baseUrl","stepId","authId","oauthVerifyPath","authorization_id","endpointData","bundleId","activate","stringify","integrationId","integrationIds","_objectWithoutProperties","source","excluded","target","sourceKeys","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_slicedToArray","arrayWithHoles","_i","_s","_e","_arr","_n","_d","iterableToArrayLimit","nonIterableRest","paramList","objKey","searchParams","append","currentIndex","currentComponent","prevRaf","afterPaintEffects","oldBeforeRender","_render","oldAfterDiff","diffed","oldCommit","_commit","oldBeforeUnmount","unmount","getHookState","index","_hook","hooks","__hooks","_list","_pendingEffects","useState","initialState","reducer","init","hookState","_component","_value","invokeOrReturn","nextValue","action","setState","useReducer","useEffect","callback","argsChanged","_args","useRef","initialValue","useMemo","current","factory","_factory","useCallback","useContext","provider","_id","_defaultValue","sub","props","flushAfterPaintEffects","some","component","_parentDom","invokeCleanup","invokeEffect","hook","_cleanup","oldArgs","newArgs","f","_defineProperties","descriptor","_createClass","protoProps","staticProps","vnode","requestAnimationFrame","raf","clearTimeout","timeout","cancelAnimationFrame","setTimeout","window","commitQueue","_renderCallbacks","filter","cb","StructError","failure","failures","cached","rest","path","msg","_cached","createContext","let","stepState","steps","currentStep","stepIndex","showValidation","allStepsCompleted","genericData","templateApp","isPreviewMode","stepMapping","stepDataMapping","parentChildMapping","integrations","templates","showSetupModal","fetchingIntegrations","fetchingTemplates","actionFunctions","storeSnapshot","setStoreState","partialUpdate","setBaseData","bundleResponse","setSteps","templateSteps","parsedSteps","itemIndex","element","activity","auth_required","hide_authorization","id","title","app","iconUrl","icon_url","isCompleted","isCurrentlyOpen","requiredFields","invalidFields","isValid","is_visible","template_fields","hasVisibleTemplateFields","el","is_required","field","default_value","reduce","setIntegrationData","selectedAuthData","template_step","authorization","Number","visibleStepsData","app_user_data","stepMappingCopy","stepDataMappingCopy","parsedStepsCopy","template_field","integrationFieldId","isDynamic","objectValue","integrationStepId","isAuthVerified","selectedAuthId","showStepValidationState","hideStepValidationState","gotoNextStep","newIndex","step","updatedStep","gotoPreviousStep","gotoStepInPreview","previewMetadata","stepIndexToNavigateTo","findIndex","gotoStep","oldStepIndex","stepToNavigateTo","_updatedStep","verifyStepValidity","fieldId","isRequired","getStepState","getState","setGenericData","setTemplateApp","setStepMapping","shouldAutoVerifyAuth","authorization_type","authorizations","_step$authorization_t2","step_authorization","_step$authorization_t4","authorizationId","userIdentity","user_identity","authType","disableLink","disable_link","isErrored","isVerified","acc","curr","machineName","activity_field","_curr$activity_field","machine_name","isVisible","setActivityOutputData","activityOutputData","setDynamicFieldData","dynamicFieldData","setParentChildMapping","_curr$activity_field3","childFields","child_fields","_curr$activity_field5","parentFields","parent_fields","_curr$activity_field7","addAuthorization","params","authData","removeAuthorization","toggleVerifyAuthorizationFlag","isVerifying","authObjIndex","toggleDeleteAuthorizationFlag","isDeleting","setStepAuthId","setStepAuthorization","fieldsToReset","override","stepFromMapping","latestStepState","didFetchStatus","resetCustomMappingData","dynamicFieldId","_step$step$template_f","stepData","setStepFieldData","setStepMappingData","newVal","val","_state$stepDataMappin","_state$stepDataMappin3","resetTemplateFields","createSDKStore","store","extension","__REDUX_DEVTOOLS_EXTENSION__","top","ignoreState","devtools","connect","subscribe","payload","actionName","warn","createStore","TemplatePreviewDataType","number","string","description","color","publishing_status","category","array","app_type","optional","action_url","nullable","created_at","date","tags","branding_app","button_text","is_wizard","boolean","size","weight","endpoint","total_fields","activity_output","activity_output_url","dynamic_field_data_endpoint","app_user","app_user_id","integration_count","is_sandbox_enabled","authorization_url_sandbox","is_hidden","summary","placeholder","is_dynamic","data_src","data_src_endpoint","dynamic_field_src","auto_machine_name","dynamic_field_src_endpoint","regex","is_searchable","child_field","child_field_value","long_description","regex_msg","allow_multiple_authorizations","is_self_step","auth_description","is_custom_machine_name","POSITIVE_INFINITY","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","Loader","html","styles","notEmpty","classNames","classes","argType","inner","module","exports","default","HintWrap","hint","hintWidth","setHintWidth","position","getBoundingClientRect","width","left","targetBoundingRect","rootBoundingRect","bottom","height","template","content","Hint","attribute","setContent","containerElement","setContainerElement","setTargetBoundingRect","onRefChange","node","addEventListener","Element","hasAttribute","getAttribute","dismissOnClick","children","LoaderDot","ThreeDotLoader","ButtonTypes","Button","label","PRIMARY","backgroundColor","disabled","tooltip","isLoading","onClick","restOfProps","cx","SECONDARY","LINK","borderColor","ErrorPage","errorPayload","onDismiss","stack","useElementSize","elementRef","eventName","handler","savedHandler","setSize","updateSize","offsetWidth","offsetHeight","targetElement","eventListener","event","removeEventListener","TickMark","FinalTickMark","NavItem","logoUrl","isActive","isDisabled","isLastStep","showArrow","Component","useOnClickOutside","listener","HTMLElement","contains","CollapsedSteps","currentStepIndex","changeStep","collapseRef","dotsRef","showCollapsed","setShowCollapsed","wrapRef","AppContext","useElementResize","debouncedWidth","delay","debouncedValue","setDebouncedValue","timer","useDebounce","setParsedSteps","widthToUse","composedArray","idx","parent","maxWidth","Radio","isChecked","onChange","preventDefault","currentTarget","HTMLDivElement","ErrorMessage","Label","includes","Resend","AuthorizationRow","handleChange","handleReverify","handleDelete","AuthSelector","authIndex","auth","onAuthSelected","apiHandler","verifyOAuth","res","catch","finally","deleteAuth","messageEvent","activity_name","already_exists","selectedStep","windowName","win","w","y","outerHeight","screenY","x","outerWidth","screenX","openPopupWindow","getAuthUrl","fetched","isBrowser","onAuthResponseReceived","getAuthStatus","verifyAuth","prevProps","showErrors","_this2","openAuthWindow","getError","getOwnPropertyDescriptor","arrayPop","unapply","stringReplace","match","stringTrim","String","trim","typeErrorCreate","ListBoxItem","isSelected","ListBox","items","passedItems","isOpen","showStepValidation","responseMapper","input","setItems","loading","setLoading","isDropdownOpen","setIsDropdownOpen","dropdownRef","endpointUrl","callDynamicDataEndpoint","toggleDropdown","getSelectedItem","Checkbox","HTMLInputElement","changedId","checked","LargeLoader","Select","ariaLabel","showUnselectedValue","unselectedText","HTMLSelectElement","newValue","rootDataLoading","setRootDataLoading","dynamicDataLoading","setDynamicDataLoading","fieldsRef","setFieldsRef","dynamicItems","setDynamicItems","dynamicListId","setDynamicListId","dynamicFieldIdRef","ele","dynamicFieldToRender","templateFields","textFieldsToRender","isNotDynamic","mappingField","valuesMapField","valuesMap","_mappingField$parentF","parentFieldId","setRootStepData","fetchDynamicFieldData","getVisibleFieldsDataOnRootStep","fields","currentItem","triggerStepId","additionalData","templateField","dynamicEndpoint","_templateField$activi","fieldsData","_props$genericData$te","_props$genericData$te2","selectVal","parsedVal","slug","_ele$value","_props$dynamicFieldDa","sample","_props$activityOutput2","item","rowIndex","activityOutputObject","_props$activityOutput","arrayIndex","onMappingValueSelected","BaseInput","control","Input","inputValue","DateInput","PasswordInput","passwordShown","setPasswordShown","togglePasswordVisiblity","isShown","TextArea","showCopyButton","HTMLTextAreaElement","navigator","clipboard","writeText","setAttribute","select","execCommand","removeChild","copyStringToClipboard","RadioGroup","selectedItemIndex","dataSrcEndpoint","preSelectedItem","selectedItemRef","selectedItem","setSelectedItem","setError","parsedOptions","setParsedOptions","Step","valid","parentField","fieldInfo","parentFieldData","stepObject","shouldBeShown","areParentValuesFilled","anyVisibleFields","isAuthSelected","dynamicField","doParentFieldsHaveValues","stepIsOfType","selectedStepData","shouldShowStep","_this2$props$stepMapp","fieldDynamicData","shouldShowMapping","textFieldParentHasValues","dataSrc","_el$activity_field","_el$activity_field2","_el$activity_field3","_","selected","__html","DOMPurify","sanitize","MappingUI","getMappingDataInput","Steps","_this$props$genericDa2","notification_email","bundle_id","tField","getPayload","saveIntegration","integration","postSaveOrCreate","triggerStep","returnedStep","_triggerStep$step","returned_data","parsedData","is_webhook_url","postSave","postSaveData","integrationData","dismiss","updateIntegration","eventEmitter","emit","dependentSteps","selectedAuthStep","prevStepState","newStepState","_newStepState$steps$n2","stepType","_newStepState$steps$n4","shouldShowLastStep","shouldShowBackButton","isStepValid","_this$props$stepState2","_this$props$stepState4","_selectedStep","_this$props$stepState6","_this$props$stepState8","isEditMode","handleAuthSelected","_selectedStep2","_selectedStep3","createIntegration","templateData","setTemplateData","customWrapper","templatePreviewData","validationErr","setValidationErr","errState","componentDidCatch","useErrorBoundary","sdkError","resetSdkError","assert","templateTitle","templateDescription","getTemplate","getTemplateStep","getIntegrationById","StepNavigation","_templateData$steps","root","UMD","isNode","preparedCache","preparedSearchCache","noResults","total","matchesSimple","matchesStrict","cleanup","clear","defaultScoreFn","max","score","getValue","prop","tmp","segs","split","isObj","fastpriorityqueue","add","poll","peek","replaceTop","q","fuzzysortNew","instanceOptions","fuzzysort","single","search","getPreparedSearch","getPrepared","allowTypo","algorithm","algorithmNoTypo","go","targets","searchLowerCode","prepareSearch","threshold","limit","resultsLen","limitedCount","targetsLen","scoreFn","keysLen","objResults","keyI","_targetLowerCodes","_nextBeginningIndexes","indexes","results","goAsync","canceled","iCurrent","startMs","Date","now","setImmediate","cancel","highlight","hOpen","hClose","highlighted","matchesIndex","opened","targetLen","matchesBest","char","substr","prepare","prepareLowerCodes","prepareSlow","prepareNextBeginningIndexes","targetPrepared","searchPrepared","searchLowerCodes","prepared","targetLowerCodes","searchLen","searchI","targetI","typoSimpleI","matchesSimpleLen","typoStrictI","successStrict","matchesStrictLen","nextBeginningIndexes","firstPossibleI","matchesBestLen","lastTargetI","strLen","lowerCodes","lower","prepareBeginningIndexes","beginningIndexes","beginningIndexesLen","wasUpper","wasAlphanum","targetCode","isUpper","isAlphanum","isBeginning","lastIsBeginning","lastIsBeginningI","new","TemplateSearch","onInput","resultCount","Tab","activeTab","TabBar","preSelectedTab","setActiveTab","onClickTabItem","child","Toggle","isToggled","TemplateFormRenderModes","TemplateListingRenderModes","IntegrationsList","toggleIntegration","deleteIntegration","task_execution","runs_count","last_execution_at","seconds","Math","floor","getTime","interval","find","count","isInteger","timeAgo","timezone","active","onIntegrationDelete","TemplatesView","query","filteredTemplates","keysResult","nameResult","tagsResult","Infinity","onTemplateClick","getTemplateListing","userConfig","availableFlowsLabel","_this3","filterTemplates","layout","LIST","templateContainerTemplate","myFlowsLabel","localName","_this$props$stepState","defaultProps","completedTillIndex","refetchIntegrations","stepsWrap","stepsContainer","_this$props$steps","stepContainer","stepInfo","save","stepWrap","_selectedStep4","buttons","TemplateForm","Template","templateName","imgUrl","Modal","onClose","Container","templateComponent","templateListComponent","EventRunnerDefault","_eventName","emitter","_get","property","receiver","base","superPropBase","desc","EventRunnerNTimes","off","EventEmitter","events","getHandler","run","runner","IntegryJS","integryAPIParams","apiConfig","characters","charactersLength","random","urlParams","URLSearchParams","location","SDK_VERSION","renderMode","templateContainerId","MODAL","INLINE","getElementById","getRandomTemplateId","DETACHED","CUSTOM","targetEl","render","Provider","metadata","previewContainerId","initConfig","containerId","setupTemplateFormDestination","offAll","env","endpointsUrl","xIntegryConfig","_config$xIntegryConfi","appAuth","_config$xIntegryConfi2","urlparams","getAuthParamsFromUrl","Helpers","getAuthHash"],"mappings":"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"}
|