@speckle/ui-components 2.26.0 → 2.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.cjs","sources":["../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/identity.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_apply.js","../node_modules/lodash-es/noop.js","../node_modules/lodash-es/_shortOut.js","../node_modules/lodash-es/constant.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseSetToString.js","../node_modules/lodash-es/_setToString.js","../node_modules/lodash-es/_baseFindIndex.js","../node_modules/lodash-es/_baseIsNaN.js","../node_modules/lodash-es/_strictIndexOf.js","../node_modules/lodash-es/_baseIndexOf.js","../node_modules/lodash-es/_arrayIncludes.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_overRest.js","../node_modules/lodash-es/_baseRest.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_isFlattenable.js","../node_modules/lodash-es/_baseFlatten.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/lodash-es/clamp.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/isArrayLikeObject.js","../node_modules/lodash-es/_arrayIncludesWith.js","../node_modules/lodash-es/_baseDifference.js","../node_modules/lodash-es/difference.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/_baseValues.js","../node_modules/lodash-es/values.js","../node_modules/lodash-es/includes.js","../node_modules/lodash-es/_baseIntersection.js","../node_modules/lodash-es/_castArrayLikeObject.js","../node_modules/lodash-es/intersection.js","../node_modules/lodash-es/isBoolean.js","../node_modules/lodash-es/isNumber.js","../node_modules/lodash-es/isUndefined.js","../node_modules/lodash-es/throttle.js","../node_modules/lodash-es/_createSet.js","../node_modules/lodash-es/_baseUniq.js","../node_modules/lodash-es/uniq.js","../src/components/form/Button.vue","../src/components/common/text/Link.vue","../src/helpers/global/toast.ts","../src/components/global/ToastRenderer.vue","../src/helpers/global/accessibility.ts","../src/components/common/Badge.vue","../src/helpers/tailwind.ts","../src/composables/common/steps.ts","../src/components/common/steps/Number.vue","../src/components/common/steps/Bullet.vue","../src/components/common/animation/MouseIcon.vue","../src/components/common/animation/ClickIcon.vue","../src/components/common/animation/Instructional.vue","../src/components/global/icon/Play.vue","../src/components/common/VimeoEmbed.vue","../src/components/form/CardButton.vue","../src/components/form/Checkbox.vue","../src/components/form/Radio.vue","../src/components/form/RadioGroup.vue","../src/composables/form/textInput.ts","../src/components/form/TextArea.vue","../src/components/form/TextInput.vue","../src/helpers/common/validation.ts","../src/composables/layout/resize.ts","../src/composables/form/select.ts","../src/components/common/loading/Bar.vue","../src/composables/common/window.ts","../src/composables/layout/menu.ts","../src/components/form/select/Base.vue","../src/components/SourceAppBadge.vue","../src/components/form/select/SourceApps.vue","../src/components/form/select/Badges.vue","../src/components/form/select/Multi.vue","../src/components/form/Switch.vue","../src/components/form/ClipboardInput.vue","../src/components/form/CodeInput.vue","../src/helpers/form/input.ts","../src/composables/form/input.ts","../src/components/layout/Dialog.vue","../src/components/layout/DialogSection.vue","../src/components/layout/Disclosure.vue","../src/helpers/layout/components.ts","../src/components/layout/GridListToggle.vue","../src/components/global/icon/Check.vue","../src/components/layout/Menu.vue","../src/components/layout/tabs/Horizontal.vue","../src/components/layout/tabs/Vertical.vue","../src/components/layout/Table.vue","../src/components/InfiniteLoading.vue","../src/components/layout/Panel.vue","../src/components/layout/sidebar/Sidebar.vue","../src/components/layout/sidebar/Promo.vue","../src/components/layout/sidebar/menu/Menu.vue","../src/components/global/icon/Plus.vue","../src/components/global/icon/Edit.vue","../src/components/global/icon/ArrowFilled.vue","../src/components/layout/sidebar/menu/group/Group.vue","../src/components/layout/sidebar/menu/group/Item.vue","../src/components/common/Alert.vue","../src/composables/common/async.ts","../src/components/form/tags/ContextManager.vue","../src/components/form/Tags.vue","../src/composables/user/avatar.ts","../src/components/user/Avatar.vue","../src/components/user/AvatarGroup.vue","../src/components/common/loading/Icon.vue","../src/components/user/AvatarEditable.vue","../src/helpers/common/error.ts","../src/helpers/form/file.ts","../src/composables/form/fileUpload.ts","../src/components/form/file-upload/Zone.vue","../src/directives/accessibility.ts","../src/components/common/ProgressBar.vue","../src/components/common/PromoAlert.vue","../src/components/form/Range.vue","../src/components/form/DualRange.vue"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","import baseIndexOf from './_baseIndexOf.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport toInteger from './toInteger.js';\nimport values from './values.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nexport default includes;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseIntersection;\n","import isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nexport default castArrayLikeObject;\n","import arrayMap from './_arrayMap.js';\nimport baseIntersection from './_baseIntersection.js';\nimport baseRest from './_baseRest.js';\nimport castArrayLikeObject from './_castArrayLikeObject.js';\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n});\n\nexport default intersection;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nexport default isBoolean;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","<template>\n <Component\n :is=\"to ? linkComponent : 'button'\"\n :href=\"to\"\n :to=\"to\"\n :type=\"buttonType\"\n :external=\"external\"\n :class=\"buttonClasses\"\n :disabled=\"isDisabled\"\n role=\"button\"\n :style=\"\n color !== 'subtle' && !text\n ? `box-shadow: -1px 1px 4px 0px #0000000a inset; box-shadow: 0px 2px 2px 0px #0000000d;`\n : ''\n \"\n @click=\"onClick\"\n >\n <Component :is=\"finalLeftIcon\" v-if=\"finalLeftIcon\" :class=\"iconClasses\" />\n <slot v-if=\"!hideText\">Button</slot>\n <Component :is=\"iconRight\" v-if=\"iconRight || !loading\" :class=\"iconClasses\" />\n </Component>\n</template>\n<script setup lang=\"ts\">\nimport { isObjectLike } from '#lodash'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport { computed, resolveDynamicComponent } from 'vue'\nimport type { Nullable } from '@speckle/shared'\nimport type { FormButtonStyle, FormButtonSize } from '~~/src/helpers/form/button'\nimport { CommonLoadingIcon } from '~~/src/lib'\n\nconst emit = defineEmits<{\n /**\n * Emit MouseEvent on click\n */\n (e: 'click', val: MouseEvent): void\n}>()\n\nconst props = defineProps<{\n /**\n * URL to which to navigate - can be a relative (app) path or an absolute link for an external URL\n */\n to?: string\n /**\n * Choose from one of 3 button sizes\n */\n size?: FormButtonSize\n /**\n * If set, will make the button take up all available space horizontally\n */\n fullWidth?: boolean\n /**\n * Similar to \"link\", but without an underline and possibly in different colors\n */\n text?: boolean\n /**\n * Will remove paddings and background. Use for links.\n */\n link?: boolean\n /**\n * color:\n * primary: the default primary blue.\n * outline: foundation background and outline\n * subtle: no styling\n */\n color?: FormButtonStyle\n /**\n * Should rounded-full be added?:\n */\n rounded?: boolean\n /**\n * Whether the target location should be forcefully treated as an external URL\n * (for relative paths this will likely cause a redirect)\n */\n external?: boolean\n /**\n * Whether to disable the button so that it can't be pressed\n */\n disabled?: boolean\n /**\n * If set, will have type set to \"submit\" to enable it to submit any parent forms\n */\n submit?: boolean\n /**\n * Add icon to the left from the text\n */\n iconLeft?: Nullable<PropAnyComponent>\n /**\n * Add icon to the right from the text\n */\n iconRight?: Nullable<PropAnyComponent>\n /**\n * Hide default slot (when you want to show icons only)\n */\n hideText?: boolean\n /**\n * Customize component to be used when rendering links.\n *\n * The component will try to dynamically resolve NuxtLink and RouterLink and use those, if this is set to null.\n */\n linkComponent?: Nullable<PropAnyComponent>\n /**\n * Disables the button and shows a spinning loader\n */\n loading?: boolean\n}>()\n\nconst NuxtLink = resolveDynamicComponent('NuxtLink')\nconst RouterLink = resolveDynamicComponent('RouterLink')\n\nconst linkComponent = computed(() => {\n if (props.linkComponent) return props.linkComponent\n if (props.external) return 'a'\n if (isObjectLike(NuxtLink)) return NuxtLink\n if (isObjectLike(RouterLink)) return RouterLink\n return 'a'\n})\n\nconst buttonType = computed(() => {\n if (props.to) return undefined\n if (props.submit) return 'submit'\n return 'button'\n})\n\nconst isDisabled = computed(() => props.disabled || props.loading)\nconst finalLeftIcon = computed(() =>\n props.loading ? CommonLoadingIcon : props.iconLeft\n)\n\nconst bgAndBorderClasses = computed(() => {\n const classParts: string[] = []\n\n const colorsBgBorder = {\n subtle: [\n 'bg-transparent border-transparent text-foreground font-medium',\n 'hover:bg-primary-muted disabled:hover:bg-transparent focus-visible:border-foundation'\n ],\n outline: [\n 'bg-foundation border-outline-2 text-foreground font-medium',\n 'hover:bg-primary-muted disabled:hover:bg-foundation focus-visible:border-foundation'\n ],\n danger: [\n 'bg-danger border-danger-darker text-foundation font-medium',\n 'hover:bg-danger-darker disabled:hover:bg-danger focus-visible:border-foundation'\n ],\n primary: [\n 'bg-primary border-outline-1 text-foreground-on-primary font-semibold',\n 'hover:bg-primary-focus disabled:hover:bg-primary focus-visible:border-foundation'\n ]\n }\n\n if (props.rounded) {\n classParts.push('!rounded-full')\n }\n\n if (props.text || props.link) {\n switch (props.color) {\n case 'subtle':\n classParts.push('text-foreground')\n break\n case 'outline':\n classParts.push('text-foreground')\n break\n case 'danger':\n classParts.push('text-danger')\n break\n case 'primary':\n default:\n classParts.push('text-primary')\n break\n }\n } else {\n switch (props.color) {\n case 'subtle':\n classParts.push(...colorsBgBorder.subtle)\n break\n case 'outline':\n classParts.push(...colorsBgBorder.outline)\n break\n case 'danger':\n classParts.push(...colorsBgBorder.danger)\n break\n case 'primary':\n default:\n classParts.push(...colorsBgBorder.primary)\n break\n }\n }\n\n return classParts.join(' ')\n})\n\nconst sizeClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'h-6 text-body-2xs'\n case 'lg':\n return 'h-10 text-body-sm'\n default:\n case 'base':\n return 'h-8 text-body-xs'\n }\n})\n\nconst paddingClasses = computed(() => {\n if (props.text || props.link) {\n return 'p-0'\n }\n\n const hasIconLeft = !!props.iconLeft\n const hasIconRight = !!props.iconRight\n const hideText = props.hideText\n\n switch (props.size) {\n case 'sm':\n if (hideText) return 'w-6'\n if (hasIconLeft) return 'py-1 pr-2 pl-1'\n if (hasIconRight) return 'py-1 pl-2 pr-1'\n return 'px-2 py-1'\n case 'lg':\n if (hideText) return 'w-10'\n if (hasIconLeft) return 'py-2 pr-6 pl-4'\n if (hasIconRight) return 'py-2 pl-6 pr-4'\n return 'px-6 py-2'\n case 'base':\n default:\n if (hideText) return 'w-8'\n if (hasIconLeft) return 'py-0 pr-4 pl-2'\n if (hasIconRight) return 'py-0 pl-4 pr-2'\n return 'px-4 py-0'\n }\n})\n\nconst generalClasses = computed(() => {\n const baseClasses = [\n 'inline-flex justify-center items-center',\n 'text-center select-none whitespace-nowrap',\n 'outline outline-2 outline-transparent',\n 'transition duration-200 ease-in-out focus-visible:outline-outline-4'\n ]\n\n const additionalClasses = []\n\n if (!props.text && !props.link) {\n additionalClasses.push('rounded-md border')\n }\n\n if (props.fullWidth) {\n additionalClasses.push('w-full')\n } else if (!props.hideText) {\n additionalClasses.push('max-w-max')\n }\n if (isDisabled.value) {\n additionalClasses.push('cursor-not-allowed opacity-60')\n }\n\n return [...baseClasses, ...additionalClasses].join(' ')\n})\n\nconst buttonClasses = computed(() => {\n return [\n generalClasses.value,\n sizeClasses.value,\n bgAndBorderClasses.value,\n paddingClasses.value\n ].join(' ')\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = ['shrink-0']\n\n switch (props.size) {\n case 'sm':\n // Dont add padding to icon if hideText is true on sm size\n if (props.hideText) {\n classParts.push('h-4 w-4')\n } else {\n classParts.push('h-4 w-4 p-0.5')\n }\n break\n case 'lg':\n classParts.push('h-6 w-6 p-1')\n break\n case 'base':\n default:\n classParts.push('h-6 w-6 p-1')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst onClick = (e: MouseEvent) => {\n if (isDisabled.value) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n\n emit('click', e)\n}\n</script>\n","<template>\n <FormButton\n :link=\"underline\"\n :text=\"!underline\"\n :to=\"to\"\n :external=\"external\"\n :disabled=\"disabled\"\n :size=\"size\"\n :foreground-link=\"foregroundLink\"\n :icon-left=\"iconLeft\"\n :icon-right=\"iconRight\"\n :hide-text=\"hideText\"\n role=\"link\"\n @click.capture=\"onClick\"\n >\n <slot>Link</slot>\n </FormButton>\n</template>\n<script setup lang=\"ts\">\nimport FormButton from '~~/src/components/form/Button.vue'\nimport type { PropType } from 'vue'\nimport type { Nullable, Optional } from '@speckle/shared'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\n\ntype LinkSize = 'sm' | 'base' | 'lg'\nconst emit = defineEmits<{ (e: 'click', val: MouseEvent): void }>()\n\nconst props = defineProps({\n to: {\n type: String as PropType<Optional<string>>,\n required: false,\n default: undefined\n },\n external: {\n type: Boolean as PropType<Optional<boolean>>,\n required: false,\n default: undefined\n },\n disabled: {\n type: Boolean as PropType<Optional<boolean>>,\n required: false,\n default: undefined\n },\n size: {\n type: String as PropType<LinkSize>,\n default: 'base'\n },\n foregroundLink: {\n type: Boolean,\n default: false\n },\n /**\n * Add icon to the left from the text\n */\n iconLeft: {\n type: [Object, Function] as PropType<Nullable<PropAnyComponent>>,\n default: null\n },\n /**\n * Add icon to the right from the text\n */\n iconRight: {\n type: [Object, Function] as PropType<Nullable<PropAnyComponent>>,\n default: null\n },\n /**\n * Hide default slot (when you want to show icons only)\n */\n hideText: {\n type: Boolean,\n default: false\n },\n underline: {\n type: Boolean,\n default: false\n }\n})\n\nconst onClick = (e: MouseEvent) => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n\n emit('click', e)\n}\n</script>\n","export enum ToastNotificationType {\n Success,\n Warning,\n Danger,\n Info,\n Loading\n}\n\nexport type ToastNotification = {\n title?: string\n /**\n * Optionally provide extra text\n */\n description?: string\n type: ToastNotificationType\n /**\n * Optionally specify a CTA link on the right\n */\n cta?: {\n title: string\n url?: string\n onClick?: (e: MouseEvent) => void\n }\n /**\n * Whether or not the toast should disappear automatically after a while.\n * Defaults to true\n */\n autoClose?: boolean\n id?: string\n}\n","<template>\n <div\n aria-live=\"assertive\"\n class=\"pointer-events-none fixed top-0 right-0 left-0 bottom-0 flex items-end px-4 py-6 mt-10 sm:items-start sm:p-6 z-[60]\"\n >\n <div class=\"flex w-full flex-col items-center space-y-4 sm:items-end\">\n <!-- Notification panel, dynamically insert this into the live region when it needs to be displayed -->\n <Transition\n enter-active-class=\"transform ease-out duration-300 transition\"\n enter-from-class=\"translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2\"\n enter-to-class=\"translate-y-0 opacity-100 sm:translate-x-0\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"notification\"\n class=\"pointer-events-auto w-full max-w-[20rem] overflow-hidden rounded bg-foundation text-foreground shadow-lg border border-outline-2 p-3\"\n :class=\"{ 'pb-2': isTitleOnly }\"\n >\n <div class=\"flex space-x-2\">\n <div class=\"flex-shrink-0 mt-1\">\n <CheckCircleIcon\n v-if=\"notification.type === ToastNotificationType.Success\"\n class=\"text-success h-4 w-4\"\n aria-hidden=\"true\"\n />\n <XCircleIcon\n v-else-if=\"notification.type === ToastNotificationType.Danger\"\n class=\"text-danger h-4 w-4\"\n aria-hidden=\"true\"\n />\n <ExclamationCircleIcon\n v-else-if=\"notification.type === ToastNotificationType.Warning\"\n class=\"text-foreground-2 h-4 w-4\"\n aria-hidden=\"true\"\n />\n <InformationCircleIcon\n v-else-if=\"notification.type === ToastNotificationType.Info\"\n class=\"text-foreground-2 h-4 w-4\"\n aria-hidden=\"true\"\n />\n <CommonLoadingIcon\n v-else-if=\"notification.type === ToastNotificationType.Loading\"\n class=\"h-4 w-4 opacity-80\"\n />\n </div>\n <div class=\"w-full min-w-[10rem]\">\n <p\n v-if=\"notification.title\"\n class=\"text-foreground-2 font-medium text-body-xs\"\n >\n {{ notification.title }}\n </p>\n <p\n v-if=\"notification.description\"\n class=\"text-foreground-2 text-body-xs leading-snug\"\n >\n {{ notification.description }}\n </p>\n <div v-if=\"notification.cta\">\n <TextLink\n class=\"mt-1 color-primary\"\n :to=\"notification.cta.url\"\n size=\"sm\"\n @click=\"onCtaClick\"\n >\n {{ notification.cta.title }}\n </TextLink>\n </div>\n </div>\n <div class=\"ml-2 flex-shrink-0 mt-0.5\">\n <button\n type=\"button\"\n class=\"inline-flex rounded-md bg-foundation text-foreground-2 hover:text-foreground focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2\"\n @click=\"dismiss\"\n >\n <span class=\"sr-only\">Close</span>\n <XMarkIcon class=\"h-5 w-5\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport TextLink from '~~/src/components/common/text/Link.vue'\nimport {\n CheckCircleIcon,\n XCircleIcon,\n ExclamationCircleIcon,\n InformationCircleIcon,\n XMarkIcon\n} from '@heroicons/vue/20/solid'\nimport { computed } from 'vue'\nimport type { MaybeNullOrUndefined } from '@speckle/shared'\nimport { ToastNotificationType } from '~~/src/helpers/global/toast'\nimport type { ToastNotification } from '~~/src/helpers/global/toast'\nimport { CommonLoadingIcon } from '~~/src/lib'\n\nconst emit = defineEmits<{\n (e: 'update:notification', val: MaybeNullOrUndefined<ToastNotification>): void\n}>()\n\nconst props = defineProps<{\n notification: MaybeNullOrUndefined<ToastNotification>\n}>()\n\nconst isTitleOnly = computed(\n () => !props.notification?.description && !props.notification?.cta\n)\n\nconst dismiss = () => {\n emit('update:notification', null)\n}\n\nconst onCtaClick = (e: MouseEvent) => {\n props.notification?.cta?.onClick?.(e)\n dismiss()\n}\n</script>\n","const KEYBOARD_CLICK_CHAR = 'Enter'\n\n/**\n * Visible, non-interactive elements with click handlers must have at least one keyboard listener for accessibility.\n * You can wrap your click handler with this in @keypress, to run it when enter is pressed on the selected component\n * @deprecated Use vKeyboardClickable directive instead\n * See more: https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility/blob/main/docs/click-events-have-key-events.md\n */\nexport function keyboardClick(cb: (e: KeyboardEvent) => void) {\n return (e: KeyboardEvent) => {\n if (e.code !== KEYBOARD_CLICK_CHAR) return\n cb(e)\n }\n}\n","<template>\n <span :class=\"badgeClasses\">\n <svg v-if=\"dot\" :class=\"dotClasses\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n <span class=\"whitespace-nowrap\">\n <slot>Badge</slot>\n </span>\n <button v-if=\"iconLeft\" :class=\"iconClasses\" @click=\"onIconClick($event)\">\n <Component :is=\"iconLeft\" :class=\"['h-4 w-4', badgeDotIconColorClasses]\" />\n </button>\n </span>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\n\ntype BadgeSize = 'base' | 'lg'\ntype BadgeColors = 'primary' | 'secondary'\n\nconst emit = defineEmits<{\n (e: 'click-icon', v: MouseEvent): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n size?: BadgeSize\n color?: BadgeColors\n /**\n * Set text & bg color. Defaults to primary variation.\n */\n colorClasses?: string\n\n /**\n * Show dot to the right\n */\n dot?: boolean\n\n /**\n * Set dot/icon bg color. Defaults to primary variation.\n */\n dotIconColorClasses?: string\n\n /**\n * Optionally show icon to the left of the text\n */\n iconLeft?: PropAnyComponent\n\n /**\n * A more square, but still rounded look\n */\n rounded?: boolean\n\n /**\n * Track icon clicks\n */\n clickableIcon?: boolean\n }>(),\n {\n size: 'base',\n color: 'primary'\n }\n)\n\nconst badgeColorClasses = computed(() => {\n if (props.colorClasses) {\n return props.colorClasses\n } else if (props.color === 'secondary') {\n return 'bg-highlight-3 text-foreground-2'\n } else {\n return 'bg-info-lighter text-primary-focus dark:text-foreground'\n }\n})\n\nconst badgeDotIconColorClasses = computed(\n () => props.dotIconColorClasses || 'text-blue-400'\n)\n\nconst badgeClasses = computed(() => {\n const classParts: string[] = [\n 'inline-flex items-center select-none',\n badgeColorClasses.value,\n props.size === 'lg'\n ? 'px-3 py-0.5 text-body-2xs'\n : 'p-1 text-body-3xs text-body-3xs font-medium'\n ]\n\n if (props.rounded) {\n classParts.push('rounded')\n classParts.push(\n props.size === 'lg'\n ? 'px-2 py-0.5 text-body-2xs'\n : 'px-1.1 py-0.5 text-body-3xs font-medium'\n )\n } else {\n classParts.push('rounded-full')\n classParts.push(\n props.size === 'lg'\n ? 'px-2.5 py-0.5 text-body-2xs'\n : 'px-2.5 py-0.5 text-body-3xs font-medium'\n )\n }\n\n return classParts.join(' ')\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = [\n 'mt-0.5 ml-0.5 inline-flex h-4 w-4 flex-shrink-0 items-center justify-center rounded-full focus:outline-none'\n ]\n\n if (props.clickableIcon) {\n classParts.push('cursor-pointer')\n } else {\n classParts.push('cursor-default')\n }\n\n return classParts.join(' ')\n})\n\nconst dotClasses = computed(() => {\n const classParts: string[] = [\n '-ml-0.5 mr-1.5 h-2 w-2',\n badgeDotIconColorClasses.value\n ]\n\n return classParts.join(' ')\n})\n\nconst onIconClick = (e: MouseEvent) => {\n if (!props.clickableIcon) {\n e.stopPropagation()\n e.stopImmediatePropagation()\n e.preventDefault()\n return\n }\n\n emit('click-icon', e)\n}\n</script>\n","let junkVariable: string[] = []\n\n/**\n * If you use concatenation or variables to build tailwind classes, PurgeCSS won't pick up on them\n * during build and will not add them to the build. So you can use this function to just add string\n * literals of tailwind classes so PurgeCSS picks up on them.\n *\n * While you could just define an unused array of these classes, eslint/TS will bother you about the unused\n * variable so it's better to use this instead.\n */\nexport function markClassesUsed(classes: string[]) {\n // this doesn't do anything, except trick the compiler into thinking this isn't a pure\n // function so that the invocations aren't tree-shaken out\n junkVariable = junkVariable ? classes : classes.slice()\n}\n\n/**\n * Default tailwind breakpoint set. Each value is the minimum width (in pixels) expected for each breakpoint.\n */\nexport enum TailwindBreakpoints {\n sm = 640,\n md = 768,\n lg = 1024,\n xl = 1280,\n '2xl' = 1536\n}\n","import { computed } from 'vue'\nimport type { ToRefs } from 'vue'\nimport type {\n HorizontalOrVertical,\n StepCoreType\n} from '~~/src/helpers/common/components'\nimport { clamp } from '#lodash'\nimport { TailwindBreakpoints, markClassesUsed } from '~~/src/helpers/tailwind'\n\nexport type StepsPadding = 'base' | 'xs' | 'sm'\n\nexport function useStepsInternals(params: {\n props: ToRefs<{\n orientation?: HorizontalOrVertical\n steps: StepCoreType[]\n modelValue?: number\n goVerticalBelow?: TailwindBreakpoints\n nonInteractive?: boolean\n stepsPadding?: StepsPadding\n }>\n emit: {\n (e: 'update:modelValue', val: number): void\n }\n}) {\n const {\n props: {\n modelValue,\n steps,\n orientation,\n goVerticalBelow,\n nonInteractive,\n stepsPadding\n },\n emit\n } = params\n\n const finalOrientation = computed(\n (): HorizontalOrVertical =>\n orientation?.value === 'vertical' ? 'vertical' : 'horizontal'\n )\n\n const value = computed({\n get: () => clamp(modelValue?.value || 0, -1, steps.value.length),\n set: (newVal) => emit('update:modelValue', clamp(newVal, 0, steps.value.length))\n })\n\n const getStepDisplayValue = (step: number) => `${step + 1}`\n const isCurrentStep = (step: number) => step === value.value\n const isFinishedStep = (step: number) => step < value.value\n\n const switchStep = (newStep: number, e?: MouseEvent) => {\n if (nonInteractive?.value) {\n e?.preventDefault()\n e?.stopPropagation()\n e?.stopImmediatePropagation()\n return\n }\n\n value.value = newStep\n\n const stepObj = steps.value[value.value]\n stepObj?.onClick?.()\n }\n\n const listClasses = computed(() => {\n const classParts: string[] = ['flex']\n\n let paddingHorizontal: string\n let paddingVertical: string\n if (stepsPadding?.value === 'xs') {\n paddingHorizontal = 'space-x-2'\n paddingVertical = 'space-y-1'\n } else if (stepsPadding?.value === 'sm') {\n paddingHorizontal = 'space-x-4'\n paddingVertical = 'space-y-1'\n } else {\n paddingHorizontal = 'space-x-6'\n paddingVertical = 'space-y-4'\n }\n\n classParts.push('flex')\n if (finalOrientation.value === 'vertical' || goVerticalBelow?.value) {\n classParts.push(`flex-col ${paddingVertical} justify-center`)\n\n if (goVerticalBelow?.value === TailwindBreakpoints.sm) {\n classParts.push(\n `sm:flex-row sm:space-y-0 sm:justify-start sm:${paddingHorizontal} sm:items-center`\n )\n } else if (goVerticalBelow?.value === TailwindBreakpoints.md) {\n classParts.push(\n `md:flex-row md:space-y-0 md:justify-start md:${paddingHorizontal} md:items-center`\n )\n } else if (goVerticalBelow?.value === TailwindBreakpoints.lg) {\n classParts.push(\n `lg:flex-row lg:space-y-0 lg:justify-start lg:${paddingHorizontal} lg:items-center`\n )\n } else if (goVerticalBelow?.value === TailwindBreakpoints.xl) {\n classParts.push(\n `xl:flex-row xl:space-y-0 xl:justify-start xl:${paddingHorizontal} xl:items-center`\n )\n }\n } else {\n classParts.push(`flex-row ${paddingHorizontal} items-center`)\n }\n\n return classParts.join(' ')\n })\n\n const linkClasses = computed(() => {\n const classParts: string[] = ['flex items-center']\n\n if (!nonInteractive?.value) {\n classParts.push('cursor-pointer')\n }\n\n return classParts.join(' ')\n })\n\n return {\n value,\n isCurrentStep,\n isFinishedStep,\n switchStep,\n getStepDisplayValue,\n listClasses,\n linkClasses,\n orientation: finalOrientation\n }\n}\n\n// to allow for dynamic class building above:\nmarkClassesUsed([\n 'sm:space-x-6',\n 'md:space-x-6',\n 'lg:space-x-6',\n 'xl:space-x-6',\n 'sm:space-x-2',\n 'md:space-x-2',\n 'lg:space-x-2',\n 'xl:space-x-2',\n 'sm:space-x-4',\n 'md:space-x-4',\n 'lg:space-x-4',\n 'xl:space-x-4'\n])\n","<template>\n <nav class=\"flex justify-center\" :aria-label=\"ariaLabel || 'Progress steps'\">\n <ol :class=\"listClasses\">\n <li v-for=\"(step, i) in steps\" :key=\"step.name\">\n <a\n v-if=\"isFinishedStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <div\n class=\"shrink-0 h-7 w-7 rounded-full border border-primary text-white bg-primary inline-flex items-center justify-center select-none\"\n >\n <CheckIcon class=\"w-4 h-4\" />\n </div>\n <div class=\"flex flex-col\">\n <div class=\"text-body-xs font-medium text-primary\">{{ step.name }}</div>\n <div v-if=\"step.description\" class=\"text-body-2xs text-foreground-2\">\n {{ step.description }}\n </div>\n </div>\n </div>\n </a>\n <a\n v-else-if=\"isCurrentStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n aria-current=\"step\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <div\n class=\"shrink-0 h-7 w-7 text-body-xs rounded-full border border-primary inline-flex items-center justify-center select-none text-primary\"\n >\n {{ getStepDisplayValue(i) }}\n </div>\n <div class=\"flex flex-col\">\n <div class=\"text-body-xs font-medium text-primary\">{{ step.name }}</div>\n <div v-if=\"step.description\" class=\"text-body-2xs text-foreground-2\">\n {{ step.description }}\n </div>\n </div>\n </div>\n </a>\n <a\n v-else\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <div\n class=\"shrink-0 h-7 w-7 rounded-full border border-foreground-3 inline-flex items-center justify-center select-none text-foreground-3\"\n >\n {{ getStepDisplayValue(i) }}\n </div>\n <div class=\"flex flex-col\">\n <div class=\"text-body-xs font-medium text-foreground-2\">\n {{ step.name }}\n </div>\n <div v-if=\"step.description\" class=\"text-body-2xs text-foreground-2\">\n {{ step.description }}\n </div>\n </div>\n </div>\n </a>\n </li>\n </ol>\n </nav>\n</template>\n<script setup lang=\"ts\">\nimport { CheckIcon } from '@heroicons/vue/20/solid'\nimport { toRefs } from 'vue'\nimport { useStepsInternals } from '~~/src/composables/common/steps'\nimport type { StepsPadding } from '~~/src/composables/common/steps'\nimport type {\n HorizontalOrVertical,\n NumberStepType\n} from '~~/src/helpers/common/components'\nimport { TailwindBreakpoints } from '~~/src/helpers/tailwind'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: number): void\n}>()\n\nconst props = defineProps<{\n ariaLabel?: string\n orientation?: HorizontalOrVertical\n steps: NumberStepType[]\n modelValue?: number\n goVerticalBelow?: TailwindBreakpoints\n nonInteractive?: boolean\n stepsPadding?: StepsPadding\n}>()\n\nconst {\n isCurrentStep,\n isFinishedStep,\n switchStep,\n getStepDisplayValue,\n listClasses,\n linkClasses\n} = useStepsInternals({\n props: toRefs(props),\n emit\n})\n</script>\n","<template>\n <nav class=\"flex justify-center\" :aria-label=\"ariaLabel || 'Progress steps'\">\n <ol :class=\"[listClasses, extraListClasses]\">\n <li v-for=\"(step, i) in steps\" :key=\"step.name\">\n <a\n v-if=\"isFinishedStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <span class=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\">\n <span v-if=\"basic\" class=\"h-3 w-3 rounded-full bg-foreground-2\" />\n <CheckCircleIcon\n v-else\n class=\"h-full w-full text-primary\"\n aria-hidden=\"true\"\n />\n </span>\n <span :class=\"['text-foreground', labelClasses]\">\n {{ step.name }}\n </span>\n </a>\n <a\n v-else-if=\"isCurrentStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n aria-current=\"step\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <span\n class=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\"\n aria-hidden=\"true\"\n >\n <template v-if=\"basic\">\n <span class=\"h-3 w-3 rounded-full bg-foreground\" />\n </template>\n <template v-else>\n <span class=\"absolute h-4 w-4 rounded-full bg-outline-2\" />\n <span class=\"relative block h-2 w-2 rounded-full bg-primary-focus\" />\n </template>\n </span>\n <span :class=\"['text-primary-focus', labelClasses]\">\n {{ step.name }}\n </span>\n </a>\n <a\n v-else\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div\n class=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\"\n aria-hidden=\"true\"\n >\n <span v-if=\"basic\" class=\"h-3 w-3 rounded-full bg-foreground-2\" />\n <div v-else class=\"h-4 w-4 rounded-full bg-foreground-disabled\" />\n </div>\n <p :class=\"['text-foreground-disabled', labelClasses]\">\n {{ step.name }}\n </p>\n </a>\n </li>\n </ol>\n </nav>\n</template>\n<script setup lang=\"ts\">\nimport { CheckCircleIcon } from '@heroicons/vue/20/solid'\nimport { computed, toRefs } from 'vue'\nimport { useStepsInternals } from '~~/src/composables/common/steps'\nimport type { StepsPadding } from '~~/src/composables/common/steps'\nimport type {\n BulletStepType,\n HorizontalOrVertical\n} from '~~/src/helpers/common/components'\nimport { TailwindBreakpoints } from '~~/src/helpers/tailwind'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: number): void\n}>()\n\nconst props = defineProps<{\n ariaLabel?: string\n basic?: boolean\n orientation?: HorizontalOrVertical\n steps: BulletStepType[]\n modelValue?: number\n goVerticalBelow?: TailwindBreakpoints\n nonInteractive?: boolean\n stepsPadding?: StepsPadding\n}>()\n\nconst { isCurrentStep, isFinishedStep, switchStep, listClasses, linkClasses } =\n useStepsInternals({\n props: toRefs(props),\n emit\n })\n\nconst labelClasses = computed(() => {\n const classParts: string[] = ['h6 font-medium leading-7']\n\n let leftMargin: string\n if (props.stepsPadding === 'xs') {\n leftMargin = 'ml-1'\n } else if (props.stepsPadding === 'sm') {\n leftMargin = 'ml-2'\n } else {\n leftMargin = 'ml-3'\n }\n\n classParts.push(leftMargin)\n\n if (props.basic) {\n classParts.push('sr-only')\n }\n\n return classParts.join(' ')\n})\n\nconst extraListClasses = computed(() => {\n const classParts: string[] = []\n\n if (props.basic) {\n classParts.push('basic')\n }\n\n return classParts.join(' ')\n})\n</script>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"icon icon-tabler icon-tabler-pointer\"\n width=\"44\"\n height=\"44\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n fill=\"rgba(255,255,255,0.8)\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M7.904 17.563a1.2 1.2 0 0 0 2.228 .308l2.09 -3.093l4.907 4.907a1.067 1.067 0 0 0 1.509 0l1.047 -1.047a1.067 1.067 0 0 0 0 -1.509l-4.907 -4.907l3.113 -2.09a1.2 1.2 0 0 0 -.309 -2.228l-13.582 -3.904l3.904 13.563z\"\n />\n </svg>\n</template>\n","<template>\n <svg viewBox=\"0 0 18 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9 1.25V3.5M14.834 3.666L13.243 5.257M17.25 9.5H15M4.757 13.743L3.167 15.333M3 9.5H0.75M4.757 5.257L3.167 3.667\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n</template>\n","<template>\n <div\n class=\"relative aspect-square w-full h-full max-w-[250px] mx-auto mb-8 border-t border-r border-outline-3 select-none\"\n >\n <div\n class=\"absolute z-50 text-foreground dark:text-foundation\"\n :style=\"{\n transitionProperty: 'all',\n top: mousePosition.top + '%',\n left: mousePosition.left + '%',\n transitionDuration: animationDuration + 'ms'\n }\"\n >\n <ClickIcon\n class=\"absolute -top-5 -left-4 h-12 w-12 -rotate-12 text-foreground\"\n :class=\"[{ hidden: !isClicked }]\"\n />\n <MouseIcon class=\"absolute top-0 left-0 right-0 bottom-0 h-11 w-11\" />\n </div>\n <div class=\"w-full h-full overflow-hidden\">\n <slot name=\"background\"></slot>\n <template v-for=\"slotObject in dynamicSlots\" :key=\"slotObject.name\">\n <template v-if=\"slotObject.visible\">\n <slot :name=\"slotObject.name\"></slot>\n </template>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, defineProps, type PropType, onBeforeUnmount } from 'vue'\nimport MouseIcon from '~~/src/components/common/animation/MouseIcon.vue'\nimport ClickIcon from '~~/src/components/common/animation/ClickIcon.vue'\nimport { wait } from '@speckle/shared'\n\ntype AnimationAction = {\n type: 'animation'\n top: number\n left: number\n duration: number\n}\n\ntype ClickAction = {\n type: 'click'\n}\n\ntype DelayAction = {\n type: 'delay'\n duration: number\n}\n\ntype SlotAction = {\n type: 'slot'\n slot: string\n}\n\ntype Action = AnimationAction | ClickAction | SlotAction | DelayAction\n\nconst props = defineProps({\n actions: Array as PropType<Action[]>,\n initialPosition: {\n type: Object as PropType<{ top: number; left: number }>\n },\n slotsConfig: Array as PropType<{ name: string; visible: boolean }[]>\n})\n\nconst isAnimating = ref(true)\nconst mousePosition = ref({ ...props.initialPosition })\nconst isClicked = ref(false)\nconst animationDuration = ref(500)\nconst isMouseVisible = ref(true)\nconst dynamicSlots = ref(props.slotsConfig || [])\n\nasync function delay(action: DelayAction) {\n await wait(action.duration)\n}\n\nfunction toggleSlotVisibility(action: SlotAction) {\n const slotToToggle = dynamicSlots.value.find((slot) => slot.name === action.slot)\n if (slotToToggle) {\n slotToToggle.visible = !slotToToggle.visible\n }\n}\n\nfunction handleAction(action: Action) {\n switch (action.type) {\n case 'animation':\n mousePosition.value = { top: action.top, left: action.left }\n animationDuration.value = action.duration\n break\n case 'click':\n isClicked.value = true\n setTimeout(() => (isClicked.value = false), 500)\n break\n case 'delay':\n return delay(action)\n case 'slot':\n toggleSlotVisibility(action)\n break\n }\n}\n\nonMounted(() => {\n const loopActions = async () => {\n while (isAnimating.value) {\n await delay({ type: 'delay', duration: 800 })\n isMouseVisible.value = true\n for (const action of props.actions || []) {\n await handleAction(action)\n }\n isMouseVisible.value = false\n mousePosition.value = { ...props.initialPosition }\n await delay({ type: 'delay', duration: 200 })\n }\n }\n\n void loopActions()\n})\n\nonBeforeUnmount(() => {\n isAnimating.value = false\n})\n</script>\n","<template>\n <svg\n width=\"24\"\n height=\"26\"\n viewBox=\"0 0 24 26\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M22.5 11.268C23.8333 12.0378 23.8333 13.9622 22.5 14.732L3.75 25.5574C2.41667 26.3272 0.750004 25.3649 0.750005 23.8253L0.750005 2.17468C0.750006 0.635079 2.41667 -0.327169 3.75001 0.442631L22.5 11.268Z\"\n fill=\"currentColor\"\n />\n </svg>\n</template>\n","<template>\n <div class=\"relative aspect-video w-full\">\n <iframe\n :title=\"title\"\n :src=\"`https://player.vimeo.com/video/${vimeoId}?badge=0&autopause=0&player_id=0&app_id=58479&autoplay=${\n isPlaying ? '1' : '0'\n }&muted=${muted ? '1' : '0'}&controls=${controls ? '1' : '0'}`\"\n frameborder=\"0\"\n allow=\"autoplay; fullscreen; accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n class=\"w-full h-full\"\n ></iframe>\n\n <button\n v-if=\"!isPlaying && (darkPlaceholder || lightPlaceholder)\"\n class=\"group absolute top-0 left-0 w-full h-full flex items-center justify-center\"\n @click=\"play\"\n >\n <div\n class=\"absolute top-0 left-0 w-full h-full bg-foundation pointer-events-none\"\n >\n <img\n v-if=\"darkPlaceholder\"\n :src=\"darkPlaceholder\"\n class=\"hidden dark:block w-full h-full object-cover\"\n :alt=\"placeholderAlt || 'Play video'\"\n />\n <img\n v-if=\"lightPlaceholder\"\n :src=\"lightPlaceholder\"\n class=\"dark:hidden w-full h-full object-cover\"\n :alt=\"placeholderAlt || 'Play video'\"\n />\n </div>\n <div\n class=\"relative z-10 bg-primary group-hover:bg-primary-focus h-28 w-28 rounded-full border-[4px] border-white flex items-center justify-center shadow-md\"\n >\n <IconPlay class=\"h-10 w-10 ml-2 text-white\" />\n </div>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport IconPlay from '../global/icon/Play.vue'\n\nconst emit = defineEmits<{\n (e: 'onPlay'): void\n}>()\n\nconst props = defineProps<{\n vimeoId: string\n title: string\n autoplay?: boolean\n muted?: boolean\n controls?: boolean\n darkPlaceholder?: string\n lightPlaceholder?: string\n placeholderAlt?: string\n}>()\n\nconst isPlaying = ref(props.autoplay || false)\n\nconst play = () => {\n isPlaying.value = true\n emit('onPlay')\n}\n\ndefineExpose({\n play\n})\n</script>\n","<template>\n <button :class=\"computedClasses\" :disabled=\"disabled\" @click=\"onClick\">\n <slot>Text</slot>\n </button>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: boolean): void\n (e: 'click', v: MouseEvent): void\n}>()\n\nconst props = defineProps<{\n disabled?: boolean\n modelValue?: boolean\n}>()\n\nconst computedClasses = computed(() => {\n const classParts: string[] = [\n 'h-20 bg-foundation-2 inline-flex justify-center items-center outline-none',\n 'normal px-16 py-5 shadow rounded transition active:scale-95'\n ]\n\n if (props.disabled) {\n classParts.push('bg-foundation-disabled text-foreground-2 cursor-not-allowed')\n } else {\n classParts.push(\n props.modelValue\n ? 'bg-primary-focus text-foreground-on-primary'\n : 'bg-foundation text-foreground'\n )\n classParts.push('ring-outline-2 hover:ring-4')\n }\n\n return classParts.join(' ')\n})\n\nconst onClick = (e: MouseEvent) => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n\n emit('update:modelValue', !props.modelValue)\n emit('click', e)\n}\n</script>\n","<template>\n <div\n class=\"relative flex\"\n :class=\"labelPosition === 'left' ? 'flex-row-reverse items-center' : 'items-start'\"\n >\n <div\n class=\"flex items-center h-6\"\n :class=\"labelPosition === 'left' ? 'w-1/2 justify-end mr-2' : ''\"\n >\n <div class=\"relative w-3.5 h-3.5\">\n <input\n :id=\"finalId\"\n :checked=\"coreChecked\"\n :aria-describedby=\"descriptionId\"\n :name=\"name\"\n :disabled=\"disabled\"\n :value=\"checkboxValue\"\n type=\"checkbox\"\n :class=\"checkboxClasses\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n />\n <!-- Indeterminate state overlay -->\n <div\n v-if=\"indeterminate\"\n class=\"absolute w-full h-full top-0 left-0 flex items-center justify-center pointer-events-none\"\n >\n <Minus class=\"w-3 h-3 text-foreground\" />\n </div>\n </div>\n </div>\n <div class=\"text-sm\" :class=\"labelPosition === 'left' ? 'w-1/2' : 'ml-2'\">\n <label :for=\"finalId\" :class=\"{ 'sr-only': hideLabel }\">\n <span class=\"text-body-xs text-foreground font-medium\" :class=\"labelClasses\">\n {{ title }}\n </span>\n <span v-if=\"showRequired\" class=\"text-danger ml-1\">*</span>\n <p v-if=\"descriptionText\" :id=\"descriptionId\" :class=\"descriptionClasses\">\n {{ descriptionText }}\n </p>\n </label>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, onMounted, ref } from 'vue'\nimport type { PropType } from 'vue'\nimport type { Optional } from '@speckle/shared'\nimport { nanoid } from 'nanoid'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { Minus } from 'lucide-vue-next'\n\n/**\n * Troubleshooting:\n * - If clicking on the checkbox doesn't do anything, check if any of its ancestor elements\n * have a @click.prevent on them anywhere.\n * - If you're not using the checkbox in a group, it's suggested that you set :value=\"true\",\n * so that a v-model attached to the checkbox will be either 'true' or 'undefined' depending on the\n * checked state\n */\n\ntype ValueType = Optional<string | true> | string[]\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = defineProps({\n /**\n * Input name/id. In a checkbox group, all checkboxes must have the same name and different values.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Whether the input is disabled\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Set label text\n */\n label: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Set label classes\n */\n labelClasses: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Help text\n */\n description: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Whether to inline the help description\n */\n inlineDescription: {\n type: Boolean,\n default: false\n },\n /**\n * vee-validate validation rules\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<RuleExpression<ValueType>>,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Checkbox group's value\n */\n modelValue: {\n type: [String, Boolean] as PropType<ValueType | false>,\n default: undefined\n },\n /**\n * Checkbox's own value. If it is checked, modelValue will include this value (amongst any other checked values from the same group).\n * If not set will default to 'name' value.\n */\n value: {\n type: [String, Boolean] as PropType<Optional<string | true>>,\n default: true\n },\n /**\n * HTML ID to use, must be globally unique. If not specified, a random ID will be generated. One is necessary to properly associate the label and checkbox.\n */\n id: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n hideLabel: {\n type: Boolean,\n default: false\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n indeterminate: {\n type: Boolean,\n default: false\n }\n})\n\nconst generateRandomId = (prefix: string) => `${prefix}-${nanoid()}`\n\ndefineEmits<{\n (e: 'update:modelValue', val: ValueType): void\n}>()\n\nconst checkboxValue = computed(() => props.value || props.name)\n\nconst {\n checked: coreChecked,\n errorMessage,\n handleChange,\n value: coreValue\n} = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n type: 'checkbox',\n checkedValue: checkboxValue,\n initialValue: props.modelValue || undefined\n})\n\nconst title = computed(() => props.label || props.name)\n\nconst descriptionText = computed(() => props.description || errorMessage.value)\nconst descriptionId = computed(() => `${props.name}-description`)\nconst descriptionClasses = computed((): string => {\n const classParts: string[] = ['text-body-2xs']\n\n if (props.inlineDescription) {\n classParts.push('inline ml-2')\n } else {\n classParts.push('block')\n }\n\n if (errorMessage.value) {\n classParts.push('text-danger')\n } else {\n classParts.push('text-foreground-2')\n }\n\n return classParts.join(' ')\n})\n\nconst implicitId = ref<Optional<string>>(generateRandomId('checkbox'))\nconst finalId = computed(() => props.id || implicitId.value)\n\nconst checkboxClasses = computed(() => {\n const classParts = [\n 'h-3.5 w-3.5 rounded',\n 'border bg-foundation text-primary',\n 'hover:border-foreground-2 focus:ring-1 focus:ring-outline-4 focus:ring-offset-1',\n 'disabled:cursor-not-allowed disabled:opacity-60'\n ]\n\n if (errorMessage.value) {\n classParts.push('border-danger-lighter')\n } else {\n classParts.push('border-outline-5')\n }\n\n return classParts.join(' ')\n})\n\nconst onChange = (e: unknown) => {\n if (props.disabled) return\n handleChange(e)\n}\n\n/**\n * Bugfix for strange issue where checkbox appears checked even tho it shouldnt be.\n * It's not clear why this happens, but for some reason coreValue.value shows that the checkbox\n * is checked, even tho props.modelValue is undefined.\n */\nonMounted(() => {\n const newModelValue = props.modelValue\n const newCoreValue = coreValue.value\n\n const shouldBeChecked = Array.isArray(newModelValue)\n ? newModelValue.includes(props.value as any)\n : newModelValue === props.value\n\n const isCoreChecked = Array.isArray(newCoreValue)\n ? newCoreValue.includes(props.value as any)\n : newCoreValue === props.value\n\n if (shouldBeChecked !== isCoreChecked) {\n handleChange(newModelValue)\n }\n})\n</script>\n","<template>\n <div\n class=\"relative flex space-x-2 mb-2 last:mb-0\"\n :class=\"description && inlineDescription ? 'items-start' : 'items-center'\"\n >\n <div class=\"flex items-center\" :class=\"size === 'sm' ? 'h-4' : 'h-6'\">\n <!-- eslint-disable-next-line vuejs-accessibility/form-control-has-label -->\n <input\n :id=\"finalId\"\n :checked=\"coreChecked\"\n :aria-describedby=\"descriptionId\"\n :name=\"name\"\n :disabled=\"disabled\"\n :value=\"radioValue\"\n type=\"radio\"\n class=\"h-4 w-4 rounded-full text-primary focus:ring-primary bg-foundation disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-2\"\n :class=\"computedClasses\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n />\n </div>\n <div\n :class=\"[\n inlineDescription ? 'flex space-x-2 items-center' : '',\n size === 'sm' ? 'text-body-2xs' : 'text-body-xs'\n ]\"\n >\n <label\n :for=\"finalId\"\n class=\"text-foreground flex space-x-2 items-center cursor-pointer\"\n :class=\"{ 'sr-only': hideLabel, '!cursor-not-allowed opacity-70': disabled }\"\n >\n <div v-if=\"icon\">\n <component\n :is=\"icon\"\n :class=\"[\n size === 'sm' ? 'h-6 sm:h-8 w-6 sm:w-8' : 'h-8 w-8 sm:h-10 sm:w-10'\n ]\"\n />\n </div>\n <div class=\"flex flex-col\">\n <span :class=\"labelClasses ? labelClasses : ''\">{{ title }}</span>\n <p\n v-if=\"descriptionText && !inlineDescription\"\n :id=\"descriptionId\"\n :class=\"descriptionClasses\"\n >\n {{ descriptionText }}\n </p>\n </div>\n <span v-if=\"showRequired\" class=\"text-danger ml-1\">*</span>\n </label>\n <p\n v-if=\"descriptionText && inlineDescription\"\n :id=\"descriptionId\"\n :class=\"descriptionClasses\"\n >\n {{ descriptionText }}\n </p>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, onMounted, ref } from 'vue'\nimport type { PropType, ConcreteComponent } from 'vue'\nimport type { Optional } from '@speckle/shared'\nimport { nanoid } from 'nanoid'\n\n/**\n * Troubleshooting:\n * - If clicking on the radio doesn't do anything, check if any of its ancestor elements\n * have a @click.prevent on them anywhere.\n * - If you're not using the radio in a group, it's suggested that you set :value=\"true\",\n * so that a v-model attached to the radio will be either 'true' or 'undefined' depending on the\n * checked state\n */\n\ntype ValueType = Optional<string | true> | string[]\ntype Size = 'sm' | 'base'\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = defineProps({\n /**\n * Input name/id. In a radio group, all radios must have the same name and different values.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Whether the input is disabled\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Set label text\n */\n label: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Set label text classes\n */\n labelClasses: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Help text\n */\n description: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Whether to inline the help description\n */\n inlineDescription: {\n type: Boolean,\n default: false\n },\n /**\n * Optional Icon\n */\n icon: {\n type: Object as PropType<ConcreteComponent>,\n default: undefined\n },\n /**\n * vee-validate validation rules\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<RuleExpression<ValueType>>,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Radio group's value\n */\n modelValue: {\n type: [String, Boolean] as PropType<ValueType | false>,\n default: undefined\n },\n /**\n * Radio's own value. If it is checked, modelValue will include this value (amongst any other checked values from the same group).\n * If not set will default to 'name' value.\n */\n value: {\n type: [String, Boolean] as PropType<Optional<string | true>>,\n default: true\n },\n /**\n * HTML ID to use, must be globally unique. If not specified, a random ID will be generated. One is necessary to properly associate the label and radio.\n */\n id: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n hideLabel: {\n type: Boolean,\n default: false\n },\n size: {\n type: String as PropType<Optional<Size>>,\n default: 'base'\n }\n})\n\nconst generateRandomId = (prefix: string) => `${prefix}-${nanoid()}`\n\ndefineEmits<{\n (e: 'update:modelValue', val: ValueType): void\n}>()\n\nconst radioValue = computed(() => props.value || props.name)\n\nconst {\n checked: coreChecked,\n errorMessage,\n handleChange,\n value: coreValue\n} = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n type: 'radio',\n checkedValue: radioValue,\n initialValue: props.modelValue || undefined\n})\n\nconst title = computed(() => props.label || props.name)\n\nconst computedClasses = computed((): string => {\n return errorMessage.value ? 'border-danger-lighter' : 'border-foreground-4 '\n})\n\nconst descriptionText = computed(() => props.description || errorMessage.value)\nconst descriptionId = computed(() => `${props.name}-description`)\nconst descriptionClasses = computed((): string => {\n const classParts: string[] = ['text-body-3xs']\n\n if (errorMessage.value) {\n classParts.push('text-danger')\n } else {\n classParts.push('text-foreground-2')\n }\n\n return classParts.join(' ')\n})\n\nconst implicitId = ref<Optional<string>>(generateRandomId('radio'))\nconst finalId = computed(() => props.id || implicitId.value)\n\nconst onChange = (e: unknown) => {\n if (props.disabled) return\n handleChange(e)\n}\n\n/**\n * Bugfix for strange issue where radio appears checked even tho it shouldnt be.\n * It's not clear why this happens, but for some reason coreValue.value shows that the radio\n * is checked, even tho props.modelValue is undefined.\n */\nonMounted(() => {\n const newModelValue = props.modelValue\n const newCoreValue = coreValue.value\n\n const shouldBeChecked = Array.isArray(newModelValue)\n ? newModelValue.includes(props.value as any)\n : newModelValue === props.value\n\n const isCoreChecked = Array.isArray(newCoreValue)\n ? newCoreValue.includes(props.value as any)\n : newCoreValue === props.value\n\n if (shouldBeChecked !== isCoreChecked) {\n handleChange(newModelValue)\n }\n})\n</script>\n","<template>\n <div class=\"w-full\">\n <div\n class=\"flex items-stretch w-full\"\n :class=\"\n isStacked\n ? 'flex-col space-y-3 '\n : 'flex-col sm:flex-row space-y-3 sm:space-y-0 sm:space-x-3'\n \"\n >\n <div v-for=\"option in options\" :key=\"option.value\" class=\"w-full flex flex-col\">\n <button\n class=\"bg-foundation relative w-full h-full select-none rounded-md border shadow\"\n :class=\"[\n selected === option.value ? 'border-outline-4' : 'border-outline-2',\n disabled || option.disabled\n ? 'opacity-60 cursor-not-allowed'\n : 'hover:border-outline-1'\n ]\"\n :disabled=\"disabled || option.disabled\"\n type=\"button\"\n @click=\"selectItem(option.value)\"\n >\n <div\n class=\"flex flex-col space-y-2 h-full\"\n :class=\"props.size === 'sm' ? 'p-3' : 'p-4 '\"\n >\n <div\n class=\"flex justify-between gap-x-3\"\n :class=\"option.icon ? 'items-start' : 'items-center'\"\n >\n <div class=\"flex flex-1 items-center text-left gap-x-2\">\n <component\n :is=\"option.icon\"\n v-if=\"option.icon\"\n class=\"text-foreground h-5 w-5\"\n />\n <div class=\"flex flex-col\">\n <h4\n class=\"text-foreground\"\n :class=\"props.size === 'sm' ? 'text-heading-sm' : 'text-heading'\"\n >\n {{ option.title }}\n </h4>\n <h5 v-if=\"option.subtitle\" class=\"text-foreground-3 text-body-xs\">\n {{ option.subtitle }}\n </h5>\n </div>\n </div>\n <div\n class=\"h-5 w-5 rounded-full flex items-center justify-center border-[1.5px] border-outline-5\"\n >\n <div\n v-if=\"selected === option.value\"\n class=\"h-2.5 w-2.5 rounded-full bg-primary flex\"\n ></div>\n </div>\n </div>\n <div\n v-if=\"option.introduction\"\n class=\"text-body-2xs text-foreground-2 select-none text-left pr-8\"\n >\n {{ option.introduction }}\n </div>\n <slot :name=\"option.value\" />\n </div>\n </button>\n <div\n v-if=\"option.help\"\n class=\"sm:hidden text-xs flex space-x-0.5 mt-2 text-foreground\"\n >\n <InformationCircleIcon class=\"h-4 w-4\" />\n {{ option.help }}\n </div>\n </div>\n </div>\n <div v-if=\"!isStacked\" class=\"hidden sm:flex space-x-3 w-full\">\n <div v-for=\"option in options\" :key=\"option.value\" class=\"w-full\">\n <div\n v-if=\"option.help\"\n class=\"text-xs flex space-x-0.5 mt-2 text-foreground select-none\"\n >\n <InformationCircleIcon class=\"h-4 w-4\" />\n {{ option.help }}\n </div>\n </div>\n </div>\n <div v-if=\"errorMessage\" class=\"text-danger text-body-2xs mt-2\">\n {{ errorMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"Value extends string\">\nimport { InformationCircleIcon } from '@heroicons/vue/24/outline'\nimport { useField, type RuleExpression } from 'vee-validate'\nimport { computed } from 'vue'\nimport type { FormRadioGroupItem } from '~~/src/helpers/common/components'\n\ndefineEmits<{\n (e: 'update:modelValue', v: Value): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n name?: string\n modelValue?: Value\n options: FormRadioGroupItem<Value>[]\n disabled?: boolean\n isStacked?: boolean\n size?: 'sm' | 'base'\n rules?: RuleExpression<Value>\n }>(),\n {\n size: 'base',\n name: 'formRadioGroup'\n }\n)\n\nconst { value, errorMessage } = useField<Value>(props.name, props.rules, {\n initialValue: props.modelValue as Value\n})\n\nconst selected = computed({\n get: () => value.value,\n set: (newVal: Value) => (value.value = newVal)\n})\n\nconst selectItem = (value: Value) => {\n selected.value = value\n}\n</script>\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, onMounted, ref, unref, watch } from 'vue'\nimport type { Ref, ToRefs } from 'vue'\nimport type { MaybeNullOrUndefined, Nullable } from '@speckle/shared'\nimport { nanoid } from 'nanoid'\nimport {\n debounce,\n includes,\n isArray,\n isBoolean,\n isString,\n isUndefined,\n noop\n} from '#lodash'\nimport type { LabelPosition } from './input'\n\nexport type InputColor = 'page' | 'foundation' | 'transparent' | 'fully-transparent'\n\n/**\n * Common setup for text input & textarea fields\n */\nexport function useTextInputCore<V extends string | string[] = string>(params: {\n props: ToRefs<{\n name: string\n help?: string\n label?: string\n showLabel?: boolean\n rules?: RuleExpression<V>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n modelValue?: V\n autoFocus?: boolean\n showClear?: boolean\n useLabelInErrors?: boolean\n customErrorMessage?: string\n hideErrorMessage?: boolean\n color?: InputColor\n labelPosition?: LabelPosition\n customHelpClass?: string\n }>\n emit: {\n (e: 'change', val: { event?: Event; value: V }): void\n (e: 'clear'): void\n }\n inputEl: Ref<Nullable<HTMLInputElement | HTMLTextAreaElement>>\n options?: Partial<{\n customClear: () => void\n }>\n}) {\n const { props, inputEl, emit, options } = params\n\n const { value, errorMessage: veeErrorMessage } = useField<V>(\n props.name,\n props.rules,\n {\n validateOnMount: unref(props.validateOnMount),\n validateOnValueUpdate: unref(props.validateOnValueUpdate),\n initialValue: unref(props.modelValue) || undefined\n }\n )\n\n const labelClasses = computed(() => {\n const classParts = [\n 'flex text-body-xs font-medium gap-1 items-center',\n unref(props.color) === 'foundation' ? 'text-foreground' : 'text-foreground-2',\n unref(props.labelPosition) !== 'left' ? 'pb-1' : null\n ]\n if (!unref(props.showLabel)) {\n classParts.push('sr-only')\n }\n\n return classParts.join(' ')\n })\n\n const coreInputClasses = computed(() => {\n const classParts: string[] = [\n 'focus:outline-none disabled:cursor-not-allowed disabled:bg-foundation-disabled',\n 'disabled:text-disabled-muted placeholder:text-foreground-2',\n 'rounded-md'\n ]\n\n return classParts.join(' ')\n })\n\n const coreClasses = computed(() => {\n const color = unref(props.color)\n const classParts = ['block w-full text-foreground', coreInputClasses.value]\n\n if (color !== 'fully-transparent') {\n classParts.push('py-2 px-3')\n } else {\n classParts.push('p-0')\n }\n\n if (hasError.value) {\n classParts.push('!border-danger')\n } else {\n classParts.push('border-0')\n if (color !== 'fully-transparent') {\n classParts.push('transition-all focus:ring-2 focus:ring-outline-2')\n } else {\n classParts.push('focus:ring-0')\n }\n }\n\n if (color === 'foundation') {\n classParts.push(\n 'bg-foundation !border border-outline-2 hover:border-outline-5 focus-visible:border-outline-4 !ring-0 focus-visible:!outline-0'\n )\n } else if (includes(['transparent', 'fully-transparent'], color)) {\n classParts.push('bg-transparent')\n } else {\n classParts.push('bg-foundation-page')\n }\n\n return classParts.join(' ')\n })\n\n const internalHelpTipId = ref(nanoid())\n\n const title = computed(() => unref(props.label) || unref(props.name))\n\n const errorMessage = computed(() => {\n if (unref(props.customErrorMessage)) {\n return unref(props.customErrorMessage)\n }\n\n const base = veeErrorMessage.value\n if (!base || !unref(props.useLabelInErrors)) return base\n return base.replace('Value', title.value)\n })\n\n const hasError = computed(() => !!errorMessage.value)\n\n const hideHelpTip = computed(\n () => errorMessage.value && unref(props.hideErrorMessage)\n )\n const helpTip = computed(() => errorMessage.value || unref(props.help))\n const hasHelpTip = computed(() => !!helpTip.value)\n const customHelpTipClass = computed(() => unref(props.customHelpClass))\n const helpTipId = computed(() =>\n hasHelpTip.value ? `${unref(props.name)}-${internalHelpTipId.value}` : undefined\n )\n\n const helpTipClasses = computed((): string => {\n const classParts = ['text-body-2xs break-words']\n classParts.push(hasError.value ? 'text-danger' : 'text-foreground-2')\n if (customHelpTipClass.value) {\n classParts.push(customHelpTipClass.value)\n }\n return classParts.join(' ')\n })\n\n const shouldShowClear = computed(() => {\n if (!unref(props.showClear)) return false\n return (value.value?.length || 0) > 0\n })\n\n const focus = () => {\n inputEl.value?.focus()\n }\n\n const clear = () => {\n value.value = (isArray(value.value) ? [] : '') as V\n options?.customClear?.()\n\n emit('change', { value: value.value })\n emit('clear')\n }\n\n onMounted(() => {\n if (unref(props.autoFocus)) {\n focus()\n }\n })\n\n return {\n coreInputClasses,\n coreClasses,\n title,\n value,\n helpTipId,\n helpTipClasses,\n helpTip,\n hideHelpTip,\n errorMessage,\n clear,\n focus,\n labelClasses,\n shouldShowClear,\n hasError\n }\n}\n\ntype FormInputChangeEvent = { event?: Event; value: string }\n\n/**\n * Attach returned on and bind using v-on and v-bind, and then you can use the returned `value`\n * ref to get the input's value while ensuring normal input events are debounced and only change/clear\n * events cause the value to propagate immediately\n *\n * Very useful for search inputs and other kind of auto-submitting inputs!\n */\nexport function useDebouncedTextInput(params?: {\n /**\n * For how long should basic input events be debounced.\n * Default: 1000 (ms)\n */\n debouncedBy?: number\n\n /**\n * If enabled, value will only change on submit/enter, and just typing in values will never\n * register.\n * Default: false\n */\n disableDebouncedInput?: boolean\n\n /**\n * Optionally pass in the model ref that should be used as the source of truth\n */\n model?: Ref<MaybeNullOrUndefined<string>>\n\n /**\n * Set to true if you're tracking changes on a basic HTML input element. This will change the events\n * being used (e.g. input instead of update:modelValue)\n *\n * Default: false\n */\n isBasicHtmlInput?: boolean\n\n /**\n * Set to false if you don't want the change event to be emitted on Enter key press.\n * Setting only works for basic html inputs currently!\n *\n * Default: Default behavior (true for input, false for textarea)\n */\n submitOnEnter?: boolean\n\n /**\n * Set to true if you want to see debug output for how events fire and are handled\n */\n debug?: boolean | ((...logArgs: unknown[]) => void)\n\n /**\n * Callback function that gets called when a new value is actually written to the model\n */\n onWrite?: (val: string) => void\n}) {\n const {\n debouncedBy = 1000,\n isBasicHtmlInput = false,\n submitOnEnter,\n disableDebouncedInput,\n onWrite\n } = params || {}\n const log = params?.debug\n ? isBoolean(params.debug)\n ? console.debug\n : params.debug\n : noop\n\n // The actual source of truth holding the final value\n const value = params?.model || ref('')\n\n // The internal model of the input\n const model = ref(value.value)\n\n const getValue = (val: string | InputEvent | Event | FormInputChangeEvent) => {\n if (isString(val)) return val\n if ('value' in val) return val.value\n\n const target = val.target as Nullable<HTMLInputElement | HTMLTextAreaElement>\n return target?.value || ''\n }\n\n /**\n * Persist changes to the core underlying source of truth that's available outwards\n */\n const persistValue = (val: string) => {\n value.value = val\n log('Value updated: ' + val)\n onWrite?.(val)\n }\n\n const debouncedValueUpdate = disableDebouncedInput\n ? undefined\n : debounce((val: string) => {\n persistValue(val)\n }, debouncedBy)\n\n const inputEventName = isBasicHtmlInput ? 'input' : 'update:modelValue'\n const on = {\n [inputEventName]: (val: string | InputEvent) => {\n const newVal = getValue(val)\n model.value = newVal\n debouncedValueUpdate?.(newVal)\n log(`Input event [${inputEventName}] triggered: ${newVal}`)\n },\n clear: () => {\n debouncedValueUpdate?.cancel()\n model.value = ''\n persistValue('')\n log('Clear event')\n },\n change: (val: FormInputChangeEvent | Event) => {\n const newVal = getValue(val)\n debouncedValueUpdate?.cancel()\n persistValue(newVal)\n model.value = newVal\n log('Change event: ' + newVal)\n },\n keydown: (e: KeyboardEvent) => {\n if (!isBasicHtmlInput) return\n if (isUndefined(submitOnEnter)) return\n\n const isEnter = e.key === 'Enter'\n if (!isEnter) return\n\n const isTextarea = e.target instanceof HTMLTextAreaElement\n\n if (isTextarea) {\n if (submitOnEnter) {\n log('Triggering submit on enter')\n e.preventDefault()\n e.stopPropagation()\n on.change(e)\n }\n } else {\n if (!submitOnEnter) {\n log('Preventing submit on enter')\n e.preventDefault()\n e.stopPropagation()\n }\n }\n }\n }\n const bind = computed(() => ({\n modelValue: model.value || ''\n }))\n\n watch(value, (newVal, oldVal) => {\n if (oldVal === newVal && !oldVal && !newVal) return\n if (model.value === value.value) return\n model.value = value.value\n })\n\n const syncFromValue = () => {\n debouncedValueUpdate?.cancel()\n model.value = value.value\n }\n\n return {\n on,\n bind,\n value,\n /**\n * Force sync internal state from the source of truth\n */\n syncFromValue\n }\n}\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div :class=\"computedWrapperClasses\">\n <div\n :class=\"\n labelPosition === 'left'\n ? 'w-full md:w-6/12 flex flex-col justify-center'\n : 'w-full'\n \"\n >\n <label :for=\"name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n <div v-if=\"!showRequired\" class=\"text-body-2xs font-normal\">(optional)</div>\n </label>\n <span\n v-if=\"labelPosition === 'left' && helpTipIdLeft\"\n :id=\"helpTipIdLeft\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </span>\n </div>\n <div\n class=\"relative\"\n :class=\"labelPosition === 'left' ? 'w-full md:w-6/12' : 'w-full'\"\n >\n <textarea\n :id=\"name\"\n ref=\"inputElement\"\n v-model=\"value\"\n :name=\"name\"\n :class=\"[\n coreClasses,\n iconClasses,\n sizeClasses,\n textareaClasses || '',\n 'min-h-[6rem] sm:min-h-[3rem] simple-scrollbar'\n ]\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"errorMessage ? 'true' : 'false'\"\n :aria-describedby=\"labelPosition === 'left' ? helpTipIdLeft : helpTipIdTop\"\n v-bind=\"$attrs\"\n @change=\"$emit('change', { event: $event, value })\"\n @input=\"$emit('input', { event: $event, value })\"\n @keydown.stop\n />\n <a\n v-if=\"shouldShowClear\"\n title=\"Clear input\"\n class=\"absolute top-2 right-0 flex items-center pr-2 cursor-pointer\"\n @click=\"clear\"\n @keydown=\"clear\"\n >\n <span class=\"text-xs sr-only\">Clear input</span>\n <XMarkIcon class=\"h-5 w-5 text-foreground\" aria-hidden=\"true\" />\n </a>\n </div>\n <p\n v-if=\"labelPosition === 'top' && helpTipIdTop\"\n :id=\"helpTipIdTop\"\n :class=\"['mt-1.5', helpTipClasses]\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { XMarkIcon } from '@heroicons/vue/20/solid'\nimport type { Nullable } from '@speckle/shared'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, ref, toRefs } from 'vue'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport type { InputColor } from '~~/src/composables/form/textInput'\nimport { useTextInputCore } from '~~/src/composables/form/textInput'\n\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: string): void\n (e: 'change', val: { event?: Event; value: string }): void\n (e: 'input', val: { event?: Event; value: string }): void\n (e: 'clear'): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Unique ID for the input (must be unique page-wide)\n */\n name: string\n showLabel?: boolean\n help?: string\n placeholder?: string\n label?: string\n disabled?: boolean\n rules?: RuleExpression<string>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n useLabelInErrors?: boolean\n autoFocus?: boolean\n modelValue?: string\n showClear?: boolean\n fullWidth?: boolean\n showRequired?: boolean\n showOptional?: boolean\n color?: InputColor\n textareaClasses?: string\n size?: InputSize\n labelPosition?: LabelPosition\n wrapperClasses?: string\n }>(),\n {\n useLabelInErrors: true,\n modelValue: '',\n color: 'page',\n labelPosition: 'top',\n wrapperClasses: ''\n }\n)\n\nconst inputElement = ref(null as Nullable<HTMLTextAreaElement>)\n\nconst {\n coreClasses,\n title,\n value,\n helpTipClasses,\n helpTip,\n errorMessage,\n labelClasses,\n clear,\n focus,\n shouldShowClear\n} = useTextInputCore({\n props: toRefs(props),\n emit,\n inputEl: inputElement\n})\n\nconst helpTipIdTop = computed(() => `${props.name}-help-top`)\nconst helpTipIdLeft = computed(() => `${props.name}-help-left`)\n\nconst iconClasses = computed(() => {\n const classParts: string[] = ['pl-2']\n\n if (shouldShowClear.value && errorMessage.value) {\n classParts.push('pr-12')\n } else if (shouldShowClear.value || errorMessage.value) {\n classParts.push('pr-8')\n }\n\n return classParts.join(' ')\n})\n\nconst sizeClasses = computed((): string => {\n switch (props.size) {\n case 'sm':\n return 'text-body sm:text-body-2xs'\n case 'lg':\n return 'text-body sm:text-sm'\n case 'xl':\n return 'text-body sm:text-base'\n case 'base':\n default:\n return 'text-body sm:text-body-xs'\n }\n})\n\nconst computedWrapperClasses = computed(() => {\n const classes = ['flex', props.wrapperClasses]\n if (props.fullWidth) {\n classes.push('w-full')\n }\n\n if (props.labelPosition === 'top') {\n classes.push('flex-col')\n }\n if (props.labelPosition === 'left') {\n classes.push(\n 'w-full space-y-1 sm:space-y-0 sm:space-x-8 flex-col sm:flex-row items-start'\n )\n }\n return classes.join(' ')\n})\n\ndefineExpose({ focus })\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div :class=\"computedWrapperClasses\">\n <div\n :class=\"\n labelPosition === 'left'\n ? 'w-full md:w-6/12 flex flex-col justify-center'\n : 'w-full'\n \"\n >\n <label :for=\"name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n <div v-if=\"showRequired\" class=\"text-danger text-body-xs opacity-80\">*</div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">(optional)</div>\n </label>\n <p\n v-if=\"labelPosition === 'left' && helpTipId && !hideHelpTip\"\n :id=\"helpTipId\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n\n <div\n class=\"group relative\"\n :class=\"labelPosition === 'left' ? 'w-full md:w-6/12' : 'w-full'\"\n >\n <div\n v-if=\"customIcon\"\n class=\"pointer-events-none absolute top-0 bottom-0 left-0 flex items-center pl-2\"\n >\n <Component\n :is=\"customIcon\"\n v-if=\"customIcon\"\n :class=\"leadingIconClasses\"\n aria-hidden=\"true\"\n />\n </div>\n <div\n v-if=\"loading\"\n class=\"absolute top-0 h-full right-0 flex items-center pr-2 text-foreground-3\"\n >\n <CommonLoadingIcon />\n </div>\n\n <div v-tippy=\"tooltipText\">\n <input\n :id=\"name\"\n ref=\"inputElement\"\n v-model=\"value\"\n :type=\"type\"\n :name=\"name\"\n :class=\"[coreClasses, iconClasses, sizeClasses, inputClasses || '']\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"errorMessage ? 'true' : 'false'\"\n :aria-describedby=\"helpTipId\"\n :readonly=\"readOnly\"\n role=\"textbox\"\n v-bind=\"$attrs\"\n :style=\"inputStyle\"\n @change=\"$emit('change', { event: $event, value })\"\n @input=\"$emit('input', { event: $event, value })\"\n @focus=\"$emit('focus')\"\n @blur=\"$emit('blur')\"\n @keydown.stop\n />\n </div>\n <slot name=\"input-right\">\n <a\n v-if=\"rightIcon\"\n :title=\"rightIconTitle\"\n :class=\"[\n sizeClasses,\n readOnly\n ? 'w-full cursor-text border border-transparent group-hover:border-outline-5 rounded-md'\n : 'cursor-pointer'\n ]\"\n class=\"absolute top-0 right-0 hidden group-hover:flex items-center justify-end pr-1 text-foreground-2\"\n @click=\"onRightIconClick\"\n @keydown=\"onRightIconClick\"\n >\n <span class=\"text-body-xs sr-only\">{{ rightIconTitle }}</span>\n <Component\n :is=\"rightIcon\"\n class=\"h-6 w-6 text-foreground\"\n aria-hidden=\"true\"\n />\n </a>\n <a\n v-else-if=\"shouldShowClear\"\n title=\"Clear input\"\n class=\"absolute top-0 bottom-0 right-0 flex items-center pr-2 cursor-pointer\"\n @click=\"clear\"\n @keydown=\"clear\"\n >\n <span class=\"text-body-xs sr-only\">Clear input</span>\n <XMarkIcon class=\"h-5 w-5 text-foreground\" aria-hidden=\"true\" />\n </a>\n <div\n v-else-if=\"!showLabel && showRequired && !errorMessage\"\n class=\"pointer-events-none absolute top-0 bottom-0 mt-2 text-body right-0 flex items-center text-danger pr-2.5\"\n :class=\"[shouldShowClear ? 'pr-8' : 'pr-2']\"\n >\n *\n </div>\n </slot>\n </div>\n <p\n v-if=\"labelPosition === 'top' && helpTipId && !hideHelpTip\"\n :id=\"helpTipId\"\n :class=\"['mt-1.5', helpTipClasses]\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { RuleExpression } from 'vee-validate'\nimport { XMarkIcon } from '@heroicons/vue/20/solid'\nimport { computed, ref, toRefs, useSlots } from 'vue'\nimport type { CSSProperties, PropType } from 'vue'\nimport type { Nullable, Optional } from '@speckle/shared'\nimport { useTextInputCore } from '~~/src/composables/form/textInput'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport type { InputColor } from '~~/src/composables/form/textInput'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { CommonLoadingIcon } from '~~/src/lib'\nimport { directive as vTippy } from 'vue-tippy'\n\ntype InputType = 'text' | 'email' | 'password' | 'url' | 'search' | 'number' | string\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = defineProps({\n /**\n * Input \"type\" value (changes behaviour & look)\n */\n type: {\n type: String as PropType<InputType>,\n default: 'text'\n },\n /**\n * Unique ID for the input (must be unique page-wide)\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Whether to show label (label will always be shown to screen readers)\n */\n showLabel: {\n type: Boolean,\n required: false\n },\n /**\n * Optional help text\n */\n help: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Placeholder text\n */\n placeholder: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Set label text explicitly\n */\n label: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the \"optional\" text\n */\n showOptional: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to disable the component, blocking it from user input\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to disable editing the component, making it read only\n */\n readOnly: {\n type: Boolean,\n default: false\n },\n /**\n * vee-validate validation rules\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<RuleExpression<string>>,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to trigger validation whenever the value changes\n */\n validateOnValueUpdate: {\n type: Boolean,\n default: false\n },\n /**\n * Will replace the generic \"Value\" text with the name of the input in error messages\n */\n useLabelInErrors: {\n type: Boolean,\n default: true\n },\n /**\n * Set a custom icon to use inside the input\n */\n customIcon: {\n type: [Object, Function] as PropType<Optional<PropAnyComponent>>,\n default: undefined\n },\n iconClasses: {\n type: String,\n default: null\n },\n /**\n * Whether to focus on the input when component is mounted\n */\n autoFocus: {\n type: Boolean,\n default: false\n },\n modelValue: {\n type: String,\n default: ''\n },\n size: {\n type: String as PropType<InputSize>,\n default: 'base'\n },\n showClear: {\n type: Boolean,\n default: false\n },\n inputClasses: {\n type: String,\n default: null\n },\n fullWidth: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n },\n hideErrorMessage: {\n type: Boolean,\n default: false\n },\n customErrorMessage: {\n type: String,\n default: null\n },\n wrapperClasses: {\n type: String,\n default: () => ''\n },\n color: {\n type: String as PropType<InputColor>,\n default: 'page'\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n rightIcon: {\n type: [Object, Function] as PropType<Optional<PropAnyComponent>>,\n default: undefined\n },\n rightIconTitle: {\n type: String,\n default: undefined\n },\n tooltipText: {\n type: String,\n default: undefined\n },\n customHelpClass: {\n type: String,\n default: undefined\n }\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: string): void\n (e: 'change', val: { event?: Event; value: string }): void\n (e: 'input', val: { event?: Event; value: string }): void\n (e: 'clear'): void\n (e: 'focus'): void\n (e: 'blur'): void\n (e: 'rightIconClick'): void\n}>()\n\nconst slots = useSlots()\n\nconst inputElement = ref(null as Nullable<HTMLInputElement>)\n\nconst {\n coreClasses,\n title,\n value,\n helpTipId,\n helpTipClasses,\n helpTip,\n hideHelpTip,\n errorMessage,\n clear,\n focus,\n labelClasses,\n shouldShowClear\n} = useTextInputCore({\n props: toRefs(props),\n emit,\n inputEl: inputElement\n})\n\nconst inputStyle = computed((): CSSProperties => {\n if (props.color !== 'fully-transparent') return {}\n\n // In fully transparent mode, we want the input to fully blend in w/ parent styling\n const style: CSSProperties = {\n fontSize: 'inherit'\n }\n return style\n})\n\nconst leadingIconClasses = computed(() => {\n const classParts: string[] = ['h-4 w-4']\n\n if (props.iconClasses) {\n classParts.push(props.iconClasses)\n }\n\n if (errorMessage.value) {\n classParts.push('text-danger')\n } else {\n classParts.push('text-foreground-2')\n }\n\n return classParts.join(' ')\n})\n\nconst iconClasses = computed((): string => {\n const classParts: string[] = []\n\n if (props.customIcon) {\n classParts.push('pl-8')\n }\n\n if (!slots['input-right']) {\n if (props.rightIcon || errorMessage.value || shouldShowClear.value) {\n classParts.push('pr-8')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst sizeClasses = computed((): string => {\n // fully transparent should get sizing/coloring info from parent elements,\n // its supposed to fit into the existing style\n const ifNotFullyTransparent = (val: string) =>\n props.color === 'fully-transparent' ? '' : val\n\n switch (props.size) {\n case 'sm':\n return `h-6 ${ifNotFullyTransparent('text-body sm:text-body-sm')}`\n case 'lg':\n return `h-10 ${ifNotFullyTransparent('text-body sm:text-[13px]')}`\n case 'xl':\n return `h-14 ${ifNotFullyTransparent('text-body sm:text-sm')}`\n case 'base':\n default:\n return `h-8 ${ifNotFullyTransparent('text-body sm:text-body-sm')}`\n }\n})\n\nconst computedWrapperClasses = computed(() => {\n const classes = ['flex', props.wrapperClasses]\n if (props.fullWidth) {\n classes.push('w-full')\n }\n\n if (props.labelPosition === 'top') {\n classes.push('flex-col')\n }\n if (props.labelPosition === 'left') {\n classes.push('w-full space-y-1 sm:space-y-0 sm:space-x-8 flex-col sm:flex-row')\n }\n return classes.join(' ')\n})\n\nconst onRightIconClick = () => {\n emit('rightIconClick')\n}\n\ndefineExpose({ focus })\n</script>\n","import { isString, isUndefined } from '#lodash'\nimport type { GenericValidateFunction } from 'vee-validate'\nimport { isNullOrUndefined } from '@speckle/shared'\n\nexport const VALID_HTTP_URL = /^https?:\\/\\//\nexport const VALID_EMAIL = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\n/**\n * Note about new validators:\n * Make sure you use the word \"Value\" to refer to the value being validated in all error messages, cause the dynamic string replace\n * that replaces that part with the actual field name works based on that\n */\n\n/**\n * E-mail validation rule (not perfect, but e-mails should be validated by sending out confirmation e-mails anyway)\n */\nexport const isEmail: GenericValidateFunction<string> = (val) =>\n (val || '').match(VALID_EMAIL) ? true : 'Value should be a valid e-mail address'\n\n/**\n * Used for placeholders inputs where the user can leave the field empty\n */\nexport const isEmailOrEmpty: GenericValidateFunction<string> = (val) =>\n (val || '').match(VALID_EMAIL) || !val\n ? true\n : 'Value should be a valid e-mail address'\n\nexport const isOneOrMultipleEmails: GenericValidateFunction<string> = (val) => {\n const emails = (val || '').split(',').map((i) => i.trim())\n const valid = emails.every((e) => e.match(VALID_EMAIL))\n return valid || 'Value should be one or multiple comma-delimited e-mail addresses'\n}\n\nexport const isRequired: GenericValidateFunction<unknown> = (val) => {\n if (isString(val)) {\n val = val.trim()\n }\n\n return val ? true : 'Value is required'\n}\n\nexport const isSameAs: (\n otherFieldName: string,\n otherFieldDisplayName?: string\n) => GenericValidateFunction<unknown> =\n (otherFieldName, otherFieldDisplayName) => (val, meta) => {\n return val === meta.form[otherFieldName]\n ? true\n : `Value must be the same as in field '${\n otherFieldDisplayName || otherFieldName\n }'`\n }\n\nexport const isStringOfLength =\n (params: {\n minLength?: number\n maxLength?: number\n }): GenericValidateFunction<string> =>\n (val) => {\n const { minLength, maxLength } = params\n val = isNullOrUndefined(val) ? '' : val\n\n if (!isString(val)) return 'Value should be a text string'\n if (!isUndefined(minLength) && val.length < minLength)\n return `Value needs to be at least ${minLength} characters long`\n if (!isUndefined(maxLength) && val.length > maxLength)\n return `Value can't be longer than ${maxLength} characters`\n return true\n }\n\nexport const stringContains =\n (params: {\n match: string | RegExp\n message: string\n }): GenericValidateFunction<string> =>\n (val) => {\n const { match, message } = params\n\n if (!isString(val)) return 'Value should be a text string'\n if (!match) return true\n\n if (isString(match)) {\n return val.includes(match) ? true : message\n } else {\n return match.test(val) ? true : message\n }\n }\n\nexport const isUrl: GenericValidateFunction<string> = (value) => {\n if (VALID_HTTP_URL.test(value)) {\n return true\n }\n return 'Value is not a valid URL'\n}\n\nexport const isItemSelected: GenericValidateFunction<unknown[]> = (val) => {\n if (Array.isArray(val) && val.length > 0) {\n return true\n }\n return 'Value should have at least a single item selected'\n}\n\nexport const isMultiItemSelected = <T>(val: T[] | unknown): true | string => {\n if (Array.isArray(val) && val.length > 0) {\n return true\n }\n return 'Value should have at least a single item selected'\n}\n","import type { Nullable, Optional } from '@speckle/shared'\nimport { useMutationObserver, useResizeObserver } from '@vueuse/core'\nimport { isUndefined } from '#lodash'\nimport { ref } from 'vue'\nimport type { Ref, ComputedRef } from 'vue'\n\n/**\n * Use this to calculate the number of hidden elements (e.g. user avatars) in a wrapping flex row that\n * is styled to only show the first row. For example, there are 12 users total, there's only space for 5,\n * and this composable will calculate the number of hidden ones to use for the \"+X\" label (+7 in the example)\n *\n * Note: The \"hidden\" items must wrap into another line, because we use their offset from the top of the parent\n * to check if they're hidden (compared to items in the 1st row)\n */\nexport function useWrappingContainerHiddenCount(params: {\n /**\n * Element to watch for any changes\n */\n elementToWatchForChanges: Ref<Nullable<HTMLElement>>\n /**\n * The element that actually contains the potentially visible/hidden items as direct children\n */\n itemContainer: Ref<Nullable<HTMLElement>>\n\n /**\n * Allows you to pause calculations conditionally\n */\n skipCalculation?: ComputedRef<boolean>\n\n /**\n * If true, will track resizing of 'elementToWatchForChanges'.\n * Default: false\n */\n trackResize?: boolean\n\n /**\n * If true, will track descendants being added/removed to 'elementToWatchForChanges'.\n * Default: true\n */\n trackMutations?: boolean\n}) {\n const {\n skipCalculation,\n elementToWatchForChanges,\n itemContainer,\n trackResize = false,\n trackMutations = true\n } = params || {}\n\n /**\n * Dynamically updated to show the number of items currently not visible in the container\n */\n const hiddenItemCount = ref(0)\n\n const recalculate = () => {\n const target = itemContainer.value\n if (skipCalculation?.value || !target) return\n\n const avatarElements = target.children\n\n /**\n * Comparing offset from parent to between all avatars to see when they break off into another line\n * and become invisible\n */\n let visibleCount = 0\n let totalCount = 0\n let firstElOffsetTop = undefined as Optional<number>\n for (const avatarEl of avatarElements) {\n const offsetTop = (avatarEl as HTMLElement).offsetTop\n if (isUndefined(firstElOffsetTop)) {\n firstElOffsetTop = offsetTop\n visibleCount += 1\n } else {\n if (offsetTop === firstElOffsetTop) {\n visibleCount += 1\n }\n }\n\n totalCount += 1\n }\n\n hiddenItemCount.value = totalCount - visibleCount\n }\n\n if (trackResize) {\n useResizeObserver(elementToWatchForChanges, recalculate)\n }\n\n if (trackMutations) {\n useMutationObserver(elementToWatchForChanges, recalculate, {\n childList: true,\n subtree: true\n })\n }\n\n return {\n hiddenItemCount\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport { isArray } from '#lodash'\nimport { computed, ref } from 'vue'\nimport type { Ref, ToRefs } from 'vue'\nimport type { Nullable } from '@speckle/shared'\nimport { useWrappingContainerHiddenCount } from '~~/src/composables/layout/resize'\n\ntype GenericSelectValueType<T> = T | T[] | undefined\n\n/**\n * Common setup for FormSelectBase wrapping selector components\n */\nexport function useFormSelectChildInternals<T>(params: {\n props: ToRefs<{\n modelValue?: GenericSelectValueType<T>\n multiple?: boolean\n }>\n emit: {\n (e: 'update:modelValue', val: GenericSelectValueType<T>): void\n }\n /**\n * @see {useWrappingContainerHiddenCount()}\n */\n dynamicVisibility?: {\n elementToWatchForChanges: Ref<Nullable<HTMLElement>>\n itemContainer: Ref<Nullable<HTMLElement>>\n }\n}) {\n const { props, emit, dynamicVisibility } = params\n\n let hiddenItemCount: Ref<number>\n if (dynamicVisibility) {\n const { elementToWatchForChanges, itemContainer } = dynamicVisibility\n const hiddenCountData = useWrappingContainerHiddenCount({\n skipCalculation: computed(() => !props.multiple?.value),\n elementToWatchForChanges,\n itemContainer\n })\n hiddenItemCount = hiddenCountData.hiddenItemCount\n } else {\n hiddenItemCount = ref(0)\n }\n\n /**\n * Use this to get or set the v-model value of the select input in a proper way\n */\n const selectedValue = computed({\n get: (): GenericSelectValueType<T> => {\n const currentValue = props.modelValue?.value\n if (props.multiple?.value) {\n return isArray(currentValue) ? currentValue : []\n } else {\n return isArray(currentValue) ? undefined : currentValue\n }\n },\n set: (newVal: GenericSelectValueType<T>) => {\n if (props.multiple?.value && !isArray(newVal)) {\n console.warn('Attempting to set non-array value in selector w/ multiple=true')\n return\n } else if (!props.multiple?.value && isArray(newVal)) {\n console.warn('Attempting to set array value in selector w/ multiple=false')\n return\n }\n\n emit('update:modelValue', props.multiple?.value ? newVal || [] : newVal)\n }\n })\n\n const isArrayValue = (v: GenericSelectValueType<T>): v is T[] => isArray(v)\n const isMultiItemArrayValue = (v: GenericSelectValueType<T>): v is T[] =>\n isArray(v) && v.length > 1\n const firstItem = (v: NonNullable<GenericSelectValueType<T>>): T =>\n isArrayValue(v) ? v[0] : v\n\n return {\n selectedValue,\n hiddenSelectedItemCount: hiddenItemCount,\n isArrayValue,\n isMultiItemArrayValue,\n firstItem\n }\n}\n","<template>\n <div\n :class=\"[\n 'relative w-full h-1 bg-blue-500/30 text-xs text-foreground-on-primary overflow-hidden rounded-xl',\n showBar ? 'opacity-100' : 'opacity-0'\n ]\"\n >\n <div class=\"swoosher relative top-0 bg-blue-500/50\"></div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { useMounted } from '@vueuse/core'\nimport { computed } from 'vue'\n\nconst props = defineProps<{ loading: boolean; clientOnly?: boolean }>()\n\nconst mounted = useMounted()\nconst showBar = computed(() => (mounted.value || !props.clientOnly) && props.loading)\n</script>\n<style scoped>\n.swoosher {\n width: 100%;\n height: 100%;\n animation: swoosh 1s infinite linear;\n transform-origin: 0% 30%;\n}\n\n@keyframes swoosh {\n 0% {\n transform: translateX(0) scaleX(0);\n }\n\n 40% {\n transform: translateX(0) scaleX(0.4);\n }\n\n 100% {\n transform: translateX(100%) scaleX(0.5);\n }\n}\n</style>\n","import type { Nullable } from '@speckle/shared'\nimport { isClient } from '@vueuse/core'\nimport type { MaybeRef } from '@vueuse/core'\nimport { debounce, isUndefined, throttle } from '#lodash'\nimport { computed, onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'\n\nexport enum ThrottleOrDebounce {\n Throttle,\n Debounce\n}\n\nexport enum HorizontalDirection {\n Left,\n Right\n}\n\nexport function useWindowResizeHandler(\n handler: (e: UIEvent) => void,\n options?: Partial<{\n wait: number\n throttleOrDebounce: ThrottleOrDebounce\n }>\n) {\n if (!isClient) return\n\n const { wait = 100, throttleOrDebounce = ThrottleOrDebounce.Throttle } = options || {}\n const finalHandler = wait\n ? throttleOrDebounce === ThrottleOrDebounce.Throttle\n ? throttle(handler, wait)\n : debounce(handler, wait)\n : handler\n\n onMounted(() => window.addEventListener('resize', finalHandler))\n onBeforeUnmount(() => window.removeEventListener('resize', finalHandler))\n}\n\nexport function useOnBeforeWindowUnload(handler: (e: BeforeUnloadEvent) => void) {\n onMounted(() => {\n window.addEventListener('beforeunload', handler)\n })\n\n onBeforeUnmount(() => {\n window.removeEventListener('beforeunload', handler)\n })\n}\n\nexport function useResponsiveHorizontalDirectionCalculation(params: {\n el: MaybeRef<Nullable<HTMLElement>>\n defaultDirection?: HorizontalDirection\n /**\n * Stop recalculation below this screen size. Defaults to el.width * 2\n */\n stopUpdatesBelowWidth?: MaybeRef<number>\n}) {\n const { el, defaultDirection } = params\n\n const direction = ref<HorizontalDirection>(\n !isUndefined(defaultDirection) ? defaultDirection : HorizontalDirection.Right\n )\n const stopUpdatesBelowWidth = computed(() => {\n const stopUpdatesBelowWidth = unref(params.stopUpdatesBelowWidth)\n if (!isUndefined(stopUpdatesBelowWidth)) return stopUpdatesBelowWidth\n\n const element = unref(el)\n return element?.offsetWidth ? element.offsetWidth * 2 : undefined\n })\n\n const recalculateDirection = () => {\n if (!isClient) return\n\n const element = unref(el)\n if (!element) return\n\n const rect = element.getBoundingClientRect()\n const showOnLeftSide = rect.x + rect.width > window.innerWidth\n const showOnRightSide = rect.x < 0\n\n // Screen too small - do nothing\n if (\n (showOnLeftSide && showOnRightSide) ||\n (!isUndefined(stopUpdatesBelowWidth.value) &&\n window.innerWidth < stopUpdatesBelowWidth.value)\n )\n return\n\n if (showOnLeftSide) {\n direction.value = HorizontalDirection.Left\n } else if (showOnRightSide) {\n direction.value = HorizontalDirection.Right\n }\n }\n\n useWindowResizeHandler(() => recalculateDirection())\n\n watch(\n () => unref(el),\n (element) => {\n if (element) {\n recalculateDirection()\n }\n }\n )\n\n return {\n direction: computed(() => direction.value),\n recalculateDirection\n }\n}\n","import { isClient, type UseElementBoundingReturn } from '@vueuse/core'\nimport { isUndefined } from '#lodash'\nimport { computed, unref, type ComputedRef, type CSSProperties } from 'vue'\nimport { HorizontalDirection } from '~~/src/composables/common/window'\n\n/**\n * Simplifies correctly and responsively positioning (dropdown/right-click/etc) menus so that they open\n * to the correct direction, can change directions if there's not enough space or even go full screen\n * if there's no space in either direction.\n *\n * Also supports updating vertical position, incase the menu would clip w/ the bottom of the screen\n */\nexport const useBodyMountedMenuPositioning = (params: {\n /**\n * The direction the open should preferably open in, assuming it has the space to do so\n */\n menuOpenDirection?: ComputedRef<HorizontalDirection>\n /**\n * useElementBounding() of the button that opens the menu\n */\n buttonBoundingBox: UseElementBoundingReturn\n /**\n * Set the target menu width. If not available, will try a very basic positioning method\n * that just uses the button width.\n */\n menuWidth: ComputedRef<number | undefined>\n /**\n * Optionally also control target menu height.\n */\n menuHeight?: ComputedRef<number | undefined>\n}) => {\n const menuStyle = computed(() => {\n const style: CSSProperties = {}\n if (!isClient) return style // Not SSR compatible\n\n /**\n * 1.a. If menuWidth is bigger than screen width, use screen width\n * 1.b. If menuWidth is smaller than screen width, use menuWidth\n * 2. If 1.b. but menu is leaving screen bounds, make it open to other direction\n *\n * Also:\n * 1.a. If menuHeight is bigger than screen height, use screen height\n * 1.b. If menuHeight is smaller than screen height, use screenHeight\n * 2. If 1.b. but menu is leaving screen bounds, make it open to other direction (upwards)\n */\n\n const openToLeft = unref(params.menuOpenDirection) === HorizontalDirection.Left\n\n const top = params.buttonBoundingBox.top.value\n const left = params.buttonBoundingBox.left.value\n const width = params.buttonBoundingBox.width.value\n const height = params.buttonBoundingBox.height.value\n const margin = 4 // how much space to leave in full-screen mode or between button and menu\n\n let finalWidth = width\n let finalLeft = left\n let finalTop = top + height + margin\n\n const menuWidth = unref(params.menuWidth)\n const menuHeight = unref(params?.menuHeight)\n\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n const viewportWidthWithoutMargins = viewportWidth - margin * 2\n const viewportHeightWithoutMargins = viewportHeight - margin * 2\n\n if (!isUndefined(menuWidth)) {\n if (menuWidth > viewportWidthWithoutMargins) {\n // Menu too big: use full screen width\n finalWidth = viewportWidthWithoutMargins\n finalLeft = margin\n } else {\n // Open to right or left depending on available space\n finalWidth = menuWidth\n\n if (openToLeft) {\n finalLeft = left + width - menuWidth\n if (finalLeft < margin) {\n finalLeft = margin\n }\n } else {\n if (left + menuWidth > viewportWidthWithoutMargins) {\n finalLeft = Math.max(left + width - menuWidth, margin)\n }\n }\n }\n }\n\n if (!isUndefined(menuHeight)) {\n if (menuHeight > viewportHeightWithoutMargins) {\n finalTop = margin\n } else {\n // By default opens downward, see if we need to move upward instead\n if (top + height + menuHeight > viewportHeightWithoutMargins) {\n finalTop = top - menuHeight - margin\n }\n }\n }\n\n style.left = `${finalLeft}px`\n style.width = `${finalWidth}px`\n style.top = `${finalTop}px`\n\n return style\n })\n\n return { menuStyle }\n}\n","<template>\n <!-- If multiple, use FormSelectMultiple instead -->\n <div>\n <Listbox\n :key=\"forceUpdateKey\"\n v-model=\"wrappedValue\"\n :name=\"name\"\n :multiple=\"multiple\"\n :by=\"by\"\n :disabled=\"isDisabled\"\n as=\"div\"\n :class=\"{\n 'md:flex md:items-center md:space-x-2 md:justify-between': isLeftLabelPosition\n }\"\n >\n <div class=\"flex flex-col\" :class=\"{ 'pb-1': showLabel && !isLeftLabelPosition }\">\n <ListboxLabel\n :id=\"labelId\"\n class=\"flex text-body-xs text-foreground font-medium\"\n :class=\"[{ 'sr-only': !showLabel }, { 'items-center gap-1': showOptional }]\"\n :for=\"buttonId\"\n >\n {{ label }}\n <div v-if=\"showRequired\" class=\"text-danger text-xs opacity-80\">*</div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">\n (optional)\n </div>\n </ListboxLabel>\n <p\n v-if=\"helpTipId && isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n <div v-tippy=\"tooltipText\">\n <div :class=\"buttonsWrapperClasses\">\n <!-- <div class=\"relative flex\"> -->\n <ListboxButton\n :id=\"buttonId\"\n ref=\"listboxButton\"\n v-slot=\"{ open }\"\n :class=\"buttonClasses\"\n >\n <div\n class=\"flex items-center w-full\"\n :class=\"buttonStyle === 'simple' ? 'justify-start' : 'justify-between'\"\n >\n <div\n class=\"block truncate text-left text-xs sm:text-[13px]\"\n :class=\"[\n hasValueSelected ? 'text-foreground' : 'text-foreground-2',\n buttonStyle === 'simple' ? '' : 'grow'\n ]\"\n >\n <template\n v-if=\"\n !wrappedValue || (isArray(wrappedValue) && !wrappedValue.length)\n \"\n >\n <slot name=\"nothing-selected\">\n {{ placeholder ? placeholder : label }}\n </slot>\n </template>\n <template v-else>\n <slot name=\"something-selected\" :value=\"wrappedValue\">\n {{ simpleDisplayText(wrappedValue) }}\n </slot>\n </template>\n </div>\n <div\n class=\"pointer-events-none shrink-0 ml-1 flex items-center space-x-2\"\n >\n <ExclamationCircleIcon\n v-if=\"errorMessage\"\n class=\"h-4 w-4 text-danger\"\n aria-hidden=\"true\"\n />\n <div\n v-else-if=\"!showLabel && showRequired\"\n class=\"text-4xl text-danger opacity-50 h-4 w-4 leading-6\"\n >\n *\n </div>\n <ChevronUpIcon\n v-if=\"open\"\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n <ChevronDownIcon\n v-else\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n <!-- Sync isOpen with dropdown open state -->\n <template v-if=\"(isOpen = open)\"></template>\n </ListboxButton>\n <!-- </div> -->\n <!-- Clear Button -->\n <button\n v-if=\"renderClearButton\"\n :class=\"clearButtonClasses\"\n :disabled=\"disabled\"\n @click=\"clearValue()\"\n >\n <XMarkIcon class=\"w-3 h-3\" />\n </button>\n <Transition\n v-if=\"isMounted\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <Teleport to=\"body\" :disabled=\"!mountMenuOnBody\">\n <ListboxOptions\n ref=\"menuEl\"\n :class=\"listboxOptionsClasses\"\n :style=\"listboxOptionsStyle\"\n @focus=\"searchInput?.focus()\"\n >\n <label v-if=\"hasSearch\" class=\"flex flex-col mx-1 mb-1\">\n <span class=\"sr-only label text-foreground\">Search</span>\n <div class=\"relative\">\n <div\n class=\"pointer-events-none absolute top-0 bottom-0 left-0 flex items-center pl-2\"\n >\n <MagnifyingGlassIcon class=\"h-4 w-4 text-foreground-2\" />\n </div>\n <input\n ref=\"searchInput\"\n v-model=\"searchValue\"\n type=\"text\"\n class=\"py-1 pl-7 w-full bg-foundation placeholder:font-normal normal placeholder:text-foreground-2 text-[13px] focus-visible:[box-shadow:none] rounded-md hover:border-outline-5 focus-visible:border-outline-4\"\n :placeholder=\"searchPlaceholder\"\n @keydown.stop\n />\n </div>\n </label>\n <div\n class=\"overflow-auto simple-scrollbar\"\n :class=\"props.menuMaxHeightClasses || 'max-h-[50vh] xl:max-h-80'\"\n >\n <div v-if=\"isAsyncSearchMode && isAsyncLoading\" class=\"px-1\">\n <CommonLoadingBar :loading=\"true\" />\n </div>\n <div v-else-if=\"isAsyncSearchMode && !currentItems.length\">\n <div class=\"text-foreground-2 text-center\">\n <slot name=\"nothing-found\">Nothing found</slot>\n </div>\n </div>\n <template v-if=\"!isAsyncSearchMode || !isAsyncLoading\">\n <ListboxOption\n v-for=\"item in finalItems\"\n :key=\"itemKey(item)\"\n v-slot=\"{\n active,\n selected\n }: {\n active: boolean,\n selected: boolean\n }\"\n :value=\"(item as SingleItem)\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n >\n <li\n v-tippy=\"\n disabledItemPredicate?.(item)\n ? disabledItemTooltip\n : undefined\n \"\n :class=\"\n listboxOptionClasses({\n active,\n disabled: disabledItemPredicate?.(item) || false\n })\n \"\n >\n <span\n class=\"block px-2 py-1.5 rounded-md\"\n :class=\"[\n selected ? 'bg-highlight-3' : '',\n !hideCheckmarks ? 'pr-8' : 'pr-2',\n !disabledItemPredicate?.(item) && !selected\n ? 'hover:bg-highlight-1'\n : ''\n ]\"\n >\n <slot\n name=\"option\"\n class=\"truncate\"\n :item=\"item\"\n :active=\"active\"\n :selected=\"selected\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n >\n {{ simpleDisplayText(item) }}\n </slot>\n\n <span\n v-if=\"!hideCheckmarks && selected\"\n :class=\"[\n 'absolute top-0 bottom-0 right-0 text-foreground flex items-center pr-4'\n ]\"\n >\n <CheckIcon class=\"h-4 w-4\" aria-hidden=\"true\" />\n </span>\n </span>\n </li>\n </ListboxOption>\n </template>\n </div>\n </ListboxOptions>\n </Teleport>\n </Transition>\n </div>\n </div>\n </Listbox>\n <p\n v-if=\"helpTipId && !isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"mt-2 text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script\n setup\n lang=\"ts\"\n generic=\"SingleItem extends Record<string, unknown> | string | number\"\n>\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n ListboxLabel\n} from '@headlessui/vue'\nimport {\n ChevronDownIcon,\n CheckIcon,\n ChevronUpIcon,\n MagnifyingGlassIcon,\n XMarkIcon,\n ExclamationCircleIcon\n} from '@heroicons/vue/20/solid'\nimport { debounce, isArray, isObjectLike } from '#lodash'\nimport type { CSSProperties, PropType, Ref } from 'vue'\nimport { computed, onMounted, ref, unref, watch } from 'vue'\nimport type { MaybeAsync, Nullable, Optional } from '@speckle/shared'\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { nanoid } from 'nanoid'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\nimport {\n useElementBounding,\n useMounted,\n useIntersectionObserver,\n isClient\n} from '@vueuse/core'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { directive as vTippy } from 'vue-tippy'\nimport { useBodyMountedMenuPositioning } from '~~/src/composables/layout/menu'\nimport { HorizontalDirection } from '~~/src/lib'\n\ntype ButtonStyle = 'base' | 'simple' | 'tinted'\ntype ValueType = SingleItem | SingleItem[] | undefined\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\nconst isObjectLikeType = (v: unknown): v is Record<string, unknown> => isObjectLike(v)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ValueType): void\n}>()\n\nconst props = defineProps({\n size: {\n type: String as PropType<Optional<InputSize>>,\n default: undefined\n },\n multiple: {\n type: Boolean,\n default: false\n },\n items: {\n type: Array as PropType<SingleItem[]>,\n default: () => []\n },\n modelValue: {\n type: [Object, Array, String] as PropType<ValueType>,\n default: undefined\n },\n /**\n * Whether to enable the search bar. You must also set one of the following:\n * * filterPredicate - to allow filtering passed in `items` based on search bar\n * * getSearchResults - to allow asynchronously loading items from server (props.items no longer required in this case,\n * but can be used to prefill initial values)\n */\n search: {\n type: Boolean,\n default: false\n },\n /**\n * If search=true and this is set, you can use this to filter passed in items based on whatever\n * the user enters in the search bar\n */\n filterPredicate: {\n type: Function as PropType<\n Optional<(item: SingleItem, searchString: string) => boolean>\n >,\n default: undefined\n },\n /**\n * Set this to disable certain items in the list\n */\n disabledItemPredicate: {\n type: Function as PropType<Optional<(item: SingleItem) => boolean>>,\n default: undefined\n },\n /**\n * If search=true and this is set, you can use this to load data asynchronously depending\n * on the search query\n */\n getSearchResults: {\n type: Function as PropType<\n Optional<(searchString: string) => MaybeAsync<SingleItem[]>>\n >,\n default: undefined\n },\n searchPlaceholder: {\n type: String,\n default: 'Search'\n },\n /**\n * Label is required at the very least for screen-readers\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Optional text that replaces the label as the placeholder when set.\n */\n placeholder: {\n type: String\n },\n /**\n * Whether to show the label visually\n */\n showLabel: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n required: true\n },\n /**\n * Objects will be compared by the values in the specified prop\n */\n by: {\n type: String,\n required: false\n },\n disabled: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n buttonStyle: {\n type: String as PropType<Optional<ButtonStyle>>,\n default: 'base'\n },\n hideCheckmarks: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n allowUnset: {\n type: Boolean as PropType<Optional<boolean>>,\n default: true\n },\n clearable: {\n type: Boolean,\n default: false\n },\n /**\n * Validation stuff\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<\n Optional<RuleExpression<ValueType>>\n >,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to trigger validation whenever the value changes\n */\n validateOnValueUpdate: {\n type: Boolean,\n default: false\n },\n /**\n * Will replace the generic \"Value\" text with the name of the input in error messages\n */\n useLabelInErrors: {\n type: Boolean,\n default: true\n },\n /**\n * Optional help text\n */\n help: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * @deprecated Use size attribute instead\n */\n fixedHeight: {\n type: Boolean,\n default: false\n },\n /**\n * By default component holds its own internal value state so that even if you don't have it tied up to a real `modelValue` ref somewhere\n * it knows its internal state and can report it on form submits.\n *\n * If you set this to true, its only going to rely on `modelValue` as its primary source of truth so that you can reject updates etc.\n */\n fullyControlValue: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the optional text\n */\n showOptional: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to mount the menu on the body instead of inside the component. Useful when select box is mounted within\n * dialog windows and the menu causes unnecessary overflow.\n */\n mountMenuOnBody: {\n type: Boolean,\n default: false\n },\n labelId: {\n type: String,\n default: undefined\n },\n buttonId: {\n type: String,\n default: undefined\n },\n /**\n * Tooltip shown on disabled items\n */\n disabledItemTooltip: {\n required: false,\n type: String\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n tooltipText: {\n type: String,\n default: undefined\n },\n /**\n * Optionally make the menu width wider/narrower than the button width by specifying the max width in pixels.\n * Only supported when `mountMenuOnBody` is true.\n */\n menuMaxWidth: {\n type: Number,\n default: undefined\n },\n /**\n * If menuMaxWidth is set and menu is wider than the button, this will determine the direction of the menu opening.\n * Default: 'left' (opens to the left of the button)\n */\n menuOpenDirection: {\n type: String as PropType<'left' | 'right'>,\n default: 'left'\n },\n /**\n * Custom max height classes for the dropdown menu. If not provided, defaults to 'max-h-[50vh] xl:max-h-80'\n */\n menuMaxHeightClasses: {\n type: String,\n default: undefined\n }\n})\n\nconst { value, errorMessage: error } = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n validateOnValueUpdate: props.validateOnValueUpdate,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n initialValue: props.modelValue as ValueType\n})\n\nconst isMounted = useMounted()\n\nconst searchInput = ref(null as Nullable<HTMLInputElement>)\nconst menuEl = ref(null as Nullable<{ el: Nullable<HTMLElement> }>)\nconst listboxButton = ref(null as Nullable<{ el: Nullable<HTMLButtonElement> }>)\nconst searchValue = ref('')\nconst currentItems = ref([]) as Ref<SingleItem[]>\nconst isAsyncLoading = ref(false)\nconst forceUpdateKey = ref(1)\nconst internalHelpTipId = ref(nanoid())\nconst isOpen = ref(false)\n\nconst listboxButtonBounding = useElementBounding(\n computed(() => listboxButton.value?.el),\n { windowResize: true, windowScroll: true, immediate: true }\n)\n\nuseIntersectionObserver(\n computed(() => menuEl.value?.el),\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.mountMenuOnBody) {\n listboxButtonBounding.update()\n }\n }\n)\n\nconst { menuStyle } = useBodyMountedMenuPositioning({\n menuOpenDirection: computed(() =>\n props.menuOpenDirection === 'left'\n ? HorizontalDirection.Left\n : HorizontalDirection.Right\n ),\n menuWidth: computed(() => props.menuMaxWidth),\n buttonBoundingBox: listboxButtonBounding\n})\n\nconst title = computed(() => unref(props.label) || unref(props.name))\nconst errorMessage = computed(() => {\n const base = error.value\n if (!base || !unref(props.useLabelInErrors)) return base\n return base.replace('Value', title.value)\n})\nconst helpTip = computed(() => errorMessage.value || unref(props.help))\nconst hasHelpTip = computed(() => !!helpTip.value)\nconst helpTipId = computed(() =>\n hasHelpTip.value ? `${unref(props.name)}-${internalHelpTipId.value}` : undefined\n)\nconst helpTipClasses = computed((): string =>\n error.value ? 'text-danger' : 'text-foreground-2'\n)\n\nconst isLeftLabelPosition = computed(() => props.labelPosition === 'left')\n\nconst renderClearButton = computed(\n () => props.buttonStyle !== 'simple' && props.clearable && !props.disabled\n)\n\nconst sizeClasses = computed((): string => {\n if (!props.size) return ''\n\n switch (props.size) {\n case 'sm':\n return 'h-6 text-body-sm'\n case 'lg':\n return 'h-10 text-[13px]'\n case 'xl':\n return 'h-14 text-sm'\n case 'base':\n default:\n return 'h-8 text-body-sm'\n }\n})\n\nconst buttonsWrapperClasses = computed(() => {\n const classParts: string[] = ['relative flex group']\n\n if (error.value) {\n classParts.push('hover:shadow rounded-md')\n classParts.push('text-danger-darker focus:border-danger')\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('border border-danger')\n }\n } else if (props.buttonStyle !== 'simple') {\n classParts.push('rounded-md border')\n if (isOpen.value) {\n classParts.push('border-outline-4')\n } else {\n classParts.push('border-outline-2 hover:border-outline-5 focus:outline-0')\n }\n }\n\n if (props.fixedHeight) {\n classParts.push('h-8')\n } else if (sizeClasses.value?.length) {\n classParts.push(sizeClasses.value)\n }\n\n if (isLeftLabelPosition.value) {\n classParts.push('md:basis-1/2')\n }\n\n return classParts.join(' ')\n})\n\nconst commonButtonClasses = computed(() => {\n const classParts: string[] = []\n\n if (props.buttonStyle !== 'simple') {\n classParts.push(\n isDisabled.value ? 'bg-foundation-disabled text-foreground-disabled' : ''\n )\n }\n\n if (isDisabled.value) classParts.push('cursor-not-allowed')\n\n return classParts.join(' ')\n})\n\nconst clearButtonClasses = computed(() => {\n const classParts = [\n 'relative z-[1]',\n 'flex items-center justify-center text-center shrink-0',\n 'rounded-r-md overflow-hidden transition-all',\n 'text-foreground',\n hasValueSelected.value ? `w-6 ${commonButtonClasses.value}` : 'w-0'\n ]\n\n if (!isDisabled.value) {\n classParts.push(\n 'hover:bg-primary hover:text-foreground-on-primary dark:text-foreground-on-primary'\n )\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-outline-3')\n } else {\n classParts.push('bg-primary-muted')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst buttonClasses = computed(() => {\n const classParts = [\n 'relative z-[2]',\n 'normal rounded-md cursor-pointer transition truncate flex-1',\n 'flex items-center focus:outline-outline-4 focus:outline-1',\n commonButtonClasses.value\n ]\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('p-2')\n\n if (!isDisabled.value) {\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-foundation text-foreground')\n } else {\n classParts.push('bg-foundation text-foreground')\n }\n }\n }\n\n if (renderClearButton.value && hasValueSelected.value) {\n classParts.push('rounded-r-none')\n }\n\n return classParts.join(' ')\n})\n\nconst hasSearch = computed(\n () => !!(props.search && (props.filterPredicate || props.getSearchResults))\n)\nconst isAsyncSearchMode = computed(() => hasSearch.value && props.getSearchResults)\nconst isDisabled = computed(\n () => props.disabled || (!props.items.length && !isAsyncSearchMode.value)\n)\n\nconst wrappedValue = computed({\n get: () => {\n const currentValue = value.value\n if (props.multiple) {\n return isArray(currentValue) ? currentValue : []\n } else {\n return isArray(currentValue) ? undefined : currentValue\n }\n },\n set: (newVal) => {\n if (props.multiple && !isArray(newVal)) {\n console.warn('Attempting to set non-array value in selector w/ multiple=true')\n return\n } else if (!props.multiple && isArray(newVal)) {\n console.warn('Attempting to set array value in selector w/ multiple=false')\n return\n }\n\n let finalValue: typeof value.value\n if (props.multiple) {\n finalValue = newVal || []\n } else {\n const currentVal = value.value\n const isUnset =\n props.allowUnset &&\n currentVal &&\n newVal &&\n itemKey(currentVal as SingleItem) === itemKey(newVal as SingleItem)\n finalValue = isUnset ? undefined : newVal\n }\n\n if (props.fullyControlValue) {\n // Not setting value.value, cause then we don't give a chance for the parent\n // component to reject the update\n emit('update:modelValue', finalValue)\n } else {\n value.value = finalValue\n }\n\n // hacky, but there's no other way to force ListBox to re-read the modelValue prop which\n // we need in case the update was rejected and ListBox still thinks the value is the one\n // that was clicked on\n forceUpdateKey.value += 1\n }\n})\n\nconst hasValueSelected = computed(() => {\n if (props.multiple && isArray(wrappedValue.value))\n return wrappedValue.value.length !== 0\n else return !!wrappedValue.value\n})\n\nconst clearValue = () => {\n if (props.multiple) wrappedValue.value = []\n else wrappedValue.value = undefined\n}\n\nconst finalItems = computed(() => {\n const searchVal = searchValue.value\n if (!hasSearch.value || !searchVal?.length) return currentItems.value\n\n if (props.filterPredicate) {\n return currentItems.value.filter(\n (i) => props.filterPredicate?.(i, searchVal) || false\n )\n }\n\n return currentItems.value\n})\n\nconst listboxOptionsClasses = computed(() => {\n const classParts = [\n 'rounded-md bg-foundation py-1 label label--light border border-outline-3 shadow-md'\n ]\n\n if (props.mountMenuOnBody) {\n classParts.push('fixed z-50')\n } else {\n classParts.push('absolute top-[100%] w-full z-40 mt-1')\n }\n\n return classParts.join(' ')\n})\n\nconst listboxOptionsStyle = computed(() => {\n let style: CSSProperties = {}\n if (!isClient || !props.mountMenuOnBody) return style\n\n style = {\n ...style,\n ...menuStyle.value\n }\n\n return style\n})\n\nconst simpleDisplayText = (v: ValueType) => JSON.stringify(v)\nconst itemKey = (v: SingleItem): string | number => {\n if (isObjectLikeType(v)) {\n return v[props.by || 'id'] as string\n } else {\n return v\n }\n}\n\nconst triggerSearch = async () => {\n if (!isAsyncSearchMode.value || !props.getSearchResults) return\n\n isAsyncLoading.value = true\n try {\n currentItems.value = await props.getSearchResults(searchValue.value)\n } finally {\n isAsyncLoading.value = false\n }\n}\nconst debouncedSearch = debounce(triggerSearch, 1000)\n\nconst listboxOptionClasses = (params: { active: boolean; disabled: boolean }) => {\n const { disabled } = params || {}\n\n const classParts = ['relative transition select-none py-1 px-2']\n\n if (disabled) {\n classParts.push('opacity-50 cursor-not-allowed')\n } else {\n classParts.push('text-foreground cursor-pointer')\n }\n\n return classParts.join(' ')\n}\n\nwatch(\n () => props.items,\n (newItems) => {\n currentItems.value = newItems.slice()\n },\n { immediate: true }\n)\n\nwatch(searchValue, () => {\n if (!isAsyncSearchMode.value) return\n void debouncedSearch()\n})\n\nwatch(isOpen, (newVal, oldVal) => {\n if (newVal && !oldVal) {\n // Update menu location (to avoid flashing)\n listboxButtonBounding.update()\n }\n})\n\nonMounted(() => {\n if (isAsyncSearchMode.value && !props.items.length) {\n void triggerSearch()\n }\n})\n\ndefineExpose({ triggerSearch })\n</script>\n","<template>\n <CommonBadge\n color-classes=\"text-foreground-on-primary\"\n rounded\n :style=\"{ backgroundColor: sourceApp.bgColor }\"\n >\n {{ sourceApp.short }}\n </CommonBadge>\n</template>\n<script setup lang=\"ts\">\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport type { SourceAppDefinition } from '@speckle/shared'\n\ndefineProps<{\n sourceApp: SourceAppDefinition\n}>()\n</script>\n","<template>\n <FormSelectBase\n v-model=\"selectedValue\"\n :multiple=\"multiple\"\n :items=\"items ?? SourceApps\"\n :search=\"search\"\n :search-placeholder=\"searchPlaceholder\"\n :label=\"label\"\n :show-label=\"showLabel\"\n :name=\"name || 'sourceApps'\"\n :filter-predicate=\"searchFilterPredicate\"\n :clearable=\"clearable\"\n :help=\"help\"\n :label-id=\"labelId\"\n :button-id=\"buttonId\"\n by=\"name\"\n >\n <template #nothing-selected>\n <template v-if=\"selectorPlaceholder\">\n {{ selectorPlaceholder }}\n </template>\n <template v-else>\n {{ multiple ? 'Select apps' : 'Select an app' }}\n </template>\n </template>\n <template #something-selected=\"{ value }\">\n <template v-if=\"isMultiItemArrayValue(value)\">\n <div ref=\"elementToWatchForChanges\" class=\"flex items-center space-x-0.5 h-5\">\n <div\n ref=\"itemContainer\"\n class=\"flex flex-wrap overflow-hidden space-x-0.5 h-5\"\n >\n <SourceAppBadge v-for=\"item in value\" :key=\"item.name\" :source-app=\"item\" />\n </div>\n <div v-if=\"hiddenSelectedItemCount > 0\" class=\"text-foreground-2 normal\">\n +{{ hiddenSelectedItemCount }}\n </div>\n </div>\n </template>\n <template v-else>\n <div class=\"flex items-center\">\n <div\n class=\"h-2 w-2 rounded-full mr-2\"\n :style=\"{ backgroundColor: firstItem(value).bgColor }\"\n />\n <span class=\"truncate\">{{ firstItem(value).name }}</span>\n </div>\n </template>\n </template>\n <template #option=\"{ item }\">\n <div class=\"flex items-center\">\n <div\n class=\"h-2 w-2 rounded-full mr-2\"\n :style=\"{ backgroundColor: item.bgColor }\"\n />\n <span class=\"truncate\">{{ item.name }}</span>\n </div>\n </template>\n </FormSelectBase>\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable, Optional, SourceAppDefinition } from '@speckle/shared'\nimport { SourceApps } from '@speckle/shared'\nimport { ref, toRefs } from 'vue'\nimport type { PropType } from 'vue'\nimport { useFormSelectChildInternals } from '~~/src/composables/form/select'\nimport FormSelectBase from '~~/src/components/form/select/Base.vue'\nimport SourceAppBadge from '~~/src/components/SourceAppBadge.vue'\n\ntype ValueType = SourceAppDefinition | SourceAppDefinition[] | undefined\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ValueType): void\n}>()\n\nconst props = defineProps({\n /**\n * Whether to allow selecting multiple source apps\n */\n multiple: {\n type: Boolean,\n default: false\n },\n modelValue: {\n type: [Object, Array] as PropType<ValueType>,\n default: undefined\n },\n /**\n * Whether to allow filtering source apps through a search box\n */\n search: {\n type: Boolean,\n default: false\n },\n /**\n * Search placeholder text\n */\n searchPlaceholder: {\n type: String,\n default: 'Search apps'\n },\n selectorPlaceholder: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Label is required at the very least for screen-readers\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Whether to show the label visually\n */\n showLabel: {\n type: Boolean,\n default: false\n },\n name: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Control source apps to show. If left undefined, will show all available options.\n */\n items: {\n type: Array as PropType<Optional<SourceAppDefinition[]>>,\n default: undefined\n },\n clearable: {\n type: Boolean\n },\n help: {\n type: String\n },\n labelId: {\n type: String\n },\n buttonId: {\n type: String\n }\n})\n\nconst elementToWatchForChanges = ref(null as Nullable<HTMLElement>)\nconst itemContainer = ref(null as Nullable<HTMLElement>)\n\nconst { selectedValue, hiddenSelectedItemCount, isMultiItemArrayValue, firstItem } =\n useFormSelectChildInternals<SourceAppDefinition>({\n props: toRefs(props),\n emit,\n dynamicVisibility: { elementToWatchForChanges, itemContainer }\n })\n\nconst searchFilterPredicate = (i: SourceAppDefinition, search: string) =>\n i.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())\n</script>\n","<template>\n <FormSelectBase\n v-model=\"selectedValue\"\n :multiple=\"multiple\"\n :items=\"items\"\n :label=\"label\"\n :name=\"name\"\n :help=\"help\"\n :rules=\"rules\"\n :by=\"by\"\n :label-id=\"labelId\"\n :button-id=\"buttonId\"\n >\n <template #something-selected=\"{ value }\">\n <ul class=\"flex flex-wrap gap-1.5\">\n <li v-for=\"item in isArrayValue(value) ? value : [value]\" :key=\"item[by]\">\n <CommonBadge\n size=\"lg\"\n color-classes=\"border border-outline-2 bg-foundation-page\"\n dot-icon-color-classes=\"text-foreground\"\n rounded\n :clickable-icon=\"true\"\n :icon-left=\"XMarkIcon\"\n @click-icon.stop=\"deselectItem(item)\"\n >\n {{ item.text }}\n </CommonBadge>\n </li>\n </ul>\n </template>\n <template #option=\"{ item }\">\n {{ item.text }}\n </template>\n </FormSelectBase>\n</template>\n\n<script setup lang=\"ts\">\n// Vue components don't support generic props, so having to rely on any\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { toRefs } from 'vue'\nimport FormSelectBase from '~~/src/components/form/select/Base.vue'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport { useFormSelectChildInternals } from '~~/src/composables/form/select'\nimport { XMarkIcon } from '@heroicons/vue/24/solid'\n\ntype SingleItem = any\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: Array<SingleItem>): void\n}>()\n\nconst props = defineProps<{\n items: Array<SingleItem>\n label: string\n name: string\n help?: string\n modelValue?: SingleItem | SingleItem[] | undefined\n multiple?: boolean\n rules?: Array<any>\n by: string\n labelId?: string\n buttonId?: string\n}>()\n\nconst { selectedValue, isArrayValue } = useFormSelectChildInternals<SingleItem>({\n props: toRefs(props),\n emit\n})\n\nconst deselectItem = (item: SingleItem) => {\n if (isArrayValue(selectedValue.value)) {\n selectedValue.value = selectedValue.value.filter((i) => i.id !== item.id)\n } else {\n selectedValue.value = undefined\n }\n}\n</script>\n","<template>\n <div>\n <div\n :key=\"forceUpdateKey\"\n :class=\"{\n 'md:flex md:items-center md:space-x-2 md:justify-between': isLeftLabelPosition\n }\"\n >\n <div class=\"flex flex-col\" :class=\"{ 'pb-1': showLabel && !isLeftLabelPosition }\">\n <label\n :id=\"labelId\"\n class=\"flex text-body-xs text-foreground font-medium pointer-events-none\"\n :class=\"[{ 'sr-only': !showLabel }, { 'items-center gap-1': showOptional }]\"\n :for=\"buttonId\"\n >\n {{ label }}\n <div v-if=\"showRequired\" class=\"text-danger text-xs opacity-80\">*</div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">\n (optional)\n </div>\n </label>\n <p\n v-if=\"helpTipId && isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n <div v-tippy=\"tooltipText\">\n <div :class=\"buttonsWrapperClasses\">\n <button\n :id=\"buttonId\"\n ref=\"listboxButton\"\n type=\"button\"\n :class=\"buttonClasses\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n @click=\"toggleDropdown\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div\n class=\"block truncate grow text-left text-xs sm:text-[13px]\"\n :class=\"[hasValueSelected ? 'text-foreground' : 'text-foreground-2']\"\n >\n <template\n v-if=\"\n !wrappedValue || (isArray(wrappedValue) && !wrappedValue.length)\n \"\n >\n <slot name=\"nothing-selected\">\n {{ placeholder ? placeholder : label }}\n </slot>\n </template>\n <template v-else>\n <slot name=\"something-selected\" :value=\"wrappedValue\">\n {{ simpleDisplayText(wrappedValue) }}\n </slot>\n </template>\n </div>\n <div\n class=\"pointer-events-none shrink-0 ml-1 flex items-center space-x-2\"\n >\n <ExclamationCircleIcon\n v-if=\"errorMessage\"\n class=\"h-4 w-4 text-danger\"\n aria-hidden=\"true\"\n />\n <div\n v-else-if=\"!showLabel && showRequired\"\n class=\"text-4xl text-danger opacity-50 h-4 w-4 leading-6\"\n >\n *\n </div>\n <ChevronUpIcon\n v-if=\"isOpen\"\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n <ChevronDownIcon\n v-else\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n </button>\n\n <button\n v-if=\"renderClearButton\"\n :class=\"clearButtonClasses\"\n :disabled=\"disabled\"\n @click=\"clearValue()\"\n >\n <XMarkIcon class=\"w-3 h-3\" />\n </button>\n\n <Transition\n v-if=\"isMounted\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <Teleport to=\"body\" :disabled=\"!mountMenuOnBody\">\n <div\n v-if=\"isOpen\"\n ref=\"menuEl\"\n :class=\"listboxOptionsClasses\"\n :style=\"listboxOptionsStyle\"\n role=\"listbox\"\n :aria-labelledby=\"labelId\"\n @focus=\"searchInput?.focus()\"\n >\n <!-- Search input section -->\n <label v-if=\"hasSearch\" class=\"flex flex-col mx-1 mb-1\">\n <span class=\"sr-only label text-foreground\">Search</span>\n <div class=\"relative\">\n <div\n class=\"pointer-events-none absolute top-0 bottom-0 left-0 flex items-center pl-2\"\n >\n <MagnifyingGlassIcon class=\"h-4 w-4 text-foreground-2\" />\n </div>\n <input\n ref=\"searchInput\"\n v-model=\"searchValue\"\n type=\"text\"\n class=\"py-1 pl-7 w-full bg-foundation placeholder:font-normal normal placeholder:text-foreground-2 text-[13px] focus-visible:[box-shadow:none] rounded-md hover:border-outline-5 focus-visible:border-outline-4\"\n :placeholder=\"searchPlaceholder\"\n @keydown.stop\n />\n </div>\n </label>\n\n <div\n ref=\"optionsContainer\"\n class=\"overflow-auto simple-scrollbar max-h-60 xl:max-h-80 gap-1 flex flex-col\"\n >\n <div v-if=\"isAsyncSearchMode && isAsyncLoading\" class=\"px-1\">\n <CommonLoadingBar :loading=\"true\" />\n </div>\n <div v-else-if=\"isAsyncSearchMode && !currentItems.length\">\n <div class=\"text-foreground-2 text-center\">\n <slot name=\"nothing-found\">Nothing found</slot>\n </div>\n </div>\n <template v-if=\"!isAsyncSearchMode || !isAsyncLoading\">\n <button\n v-for=\"item in finalItems\"\n :key=\"itemKey(item)\"\n v-tippy=\"\n disabledItemPredicate?.(item) ? disabledItemTooltip : undefined\n \"\n type=\"button\"\n role=\"option\"\n :aria-selected=\"isSelected(item)\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n :class=\"\n listboxOptionClasses({\n disabled: disabledItemPredicate?.(item) || false\n })\n \"\n @click=\"(e) => selectItem(item, e)\"\n >\n <div\n class=\"block w-full px-2 py-1.5 rounded-md text-left flex items-center gap-1\"\n :class=\"[\n !hideCheckmarks ? 'pr-8' : 'pr-2',\n !disabledItemPredicate?.(item) && !isSelected(item)\n ? 'hover:bg-highlight-1'\n : ''\n ]\"\n >\n <FormCheckbox\n :name=\"`select-${itemKey(item)}`\"\n :checked=\"isSelected(item)\"\n :disabled=\"disabledItemPredicate?.(item)\"\n :hide-label=\"true\"\n @change.stop\n />\n <slot\n name=\"option\"\n class=\"truncate\"\n :item=\"item\"\n :selected=\"isSelected(item)\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n >\n {{ simpleDisplayText(item) }}\n </slot>\n </div>\n </button>\n </template>\n </div>\n </div>\n </Teleport>\n </Transition>\n </div>\n </div>\n </div>\n <p\n v-if=\"helpTipId && !isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"mt-2 text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script\n setup\n lang=\"ts\"\n generic=\"SingleItem extends Record<string, unknown> | string | number\"\n>\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n MagnifyingGlassIcon,\n XMarkIcon,\n ExclamationCircleIcon\n} from '@heroicons/vue/20/solid'\nimport { debounce, isArray, isObjectLike } from '#lodash'\nimport type { CSSProperties, PropType, Ref } from 'vue'\nimport { computed, onMounted, ref, unref, watch, nextTick } from 'vue'\nimport type { MaybeAsync, Nullable, Optional } from '@speckle/shared'\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { nanoid } from 'nanoid'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\nimport {\n useElementBounding,\n useMounted,\n useIntersectionObserver,\n onClickOutside\n} from '@vueuse/core'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { directive as vTippy } from 'vue-tippy'\nimport FormCheckbox from '~~/src/components/form/Checkbox.vue'\n\ntype ButtonStyle = 'base' | 'simple' | 'tinted'\ntype ValueType = SingleItem | SingleItem[] | undefined\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\nconst isObjectLikeType = (v: unknown): v is Record<string, unknown> => isObjectLike(v)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ValueType): void\n}>()\n\nconst props = defineProps({\n size: {\n type: String as PropType<Optional<InputSize>>,\n default: undefined\n },\n items: {\n type: Array as PropType<SingleItem[]>,\n default: () => []\n },\n modelValue: {\n type: [Array, Object, String, Number] as PropType<ValueType>,\n default: undefined\n },\n /**\n * Whether to enable the search bar. You must also set one of the following:\n * * filterPredicate - to allow filtering passed in `items` based on search bar\n * * getSearchResults - to allow asynchronously loading items from server (props.items no longer required in this case,\n * but can be used to prefill initial values)\n */\n search: {\n type: Boolean,\n default: false\n },\n /**\n * If search=true and this is set, you can use this to filter passed in items based on whatever\n * the user enters in the search bar\n */\n filterPredicate: {\n type: Function as PropType<\n Optional<(item: SingleItem, searchString: string) => boolean>\n >,\n default: undefined\n },\n /**\n * Set this to disable certain items in the list\n */\n disabledItemPredicate: {\n type: Function as PropType<Optional<(item: SingleItem) => boolean>>,\n default: undefined\n },\n /**\n * If search=true and this is set, you can use this to load data asynchronously depending\n * on the search query\n */\n getSearchResults: {\n type: Function as PropType<\n Optional<(searchString: string) => MaybeAsync<SingleItem[]>>\n >,\n default: undefined\n },\n searchPlaceholder: {\n type: String,\n default: 'Search'\n },\n /**\n * Label is required at the very least for screen-readers\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Optional text that replaces the label as the placeholder when set.\n */\n placeholder: {\n type: String\n },\n /**\n * Whether to show the label visually\n */\n showLabel: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n required: true\n },\n /**\n * Objects will be compared by the values in the specified prop\n */\n by: {\n type: String,\n required: false\n },\n disabled: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n buttonStyle: {\n type: String as PropType<Optional<ButtonStyle>>,\n default: 'base'\n },\n hideCheckmarks: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n allowUnset: {\n type: Boolean as PropType<Optional<boolean>>,\n default: true\n },\n clearable: {\n type: Boolean,\n default: false\n },\n /**\n * Validation stuff\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<\n Optional<RuleExpression<ValueType>>\n >,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to trigger validation whenever the value changes\n */\n validateOnValueUpdate: {\n type: Boolean,\n default: false\n },\n /**\n * Will replace the generic \"Value\" text with the name of the input in error messages\n */\n useLabelInErrors: {\n type: Boolean,\n default: true\n },\n /**\n * Optional help text\n */\n help: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * @deprecated Use size attribute instead\n */\n fixedHeight: {\n type: Boolean,\n default: false\n },\n /**\n * By default component holds its own internal value state so that even if you don't have it tied up to a real `modelValue` ref somewhere\n * it knows its internal state and can report it on form submits.\n *\n * If you set this to true, its only going to rely on `modelValue` as its primary source of truth so that you can reject updates etc.\n */\n fullyControlValue: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the optional text\n */\n showOptional: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to mount the menu on the body instead of inside the component. Useful when select box is mounted within\n * dialog windows and the menu causes unnecessary overflow.\n */\n mountMenuOnBody: {\n type: Boolean,\n default: false\n },\n labelId: {\n type: String,\n default: undefined\n },\n buttonId: {\n type: String,\n default: undefined\n },\n /**\n * Tooltip shown on disabled items\n */\n disabledItemTooltip: {\n required: false,\n type: String\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n tooltipText: {\n type: String,\n default: undefined\n }\n})\n\nconst { value, errorMessage: error } = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n validateOnValueUpdate: props.validateOnValueUpdate,\n initialValue: isArray(props.modelValue) ? props.modelValue : []\n})\n\nconst isMounted = useMounted()\n\nconst searchInput = ref(null as Nullable<HTMLInputElement>)\nconst menuEl = ref<HTMLDivElement | null>(null)\nconst listboxButton = ref<HTMLButtonElement | null>(null)\nconst searchValue = ref('')\nconst currentItems = ref([]) as Ref<SingleItem[]>\nconst isAsyncLoading = ref(false)\nconst forceUpdateKey = ref(1)\nconst internalHelpTipId = ref(nanoid())\nconst isOpen = ref(false)\n\nconst listboxButtonBounding = useElementBounding(listboxButton, {\n windowResize: true,\n windowScroll: true,\n immediate: true\n})\n\nuseIntersectionObserver(\n computed(() => menuEl.value),\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.mountMenuOnBody) {\n listboxButtonBounding.update()\n }\n }\n)\n\nconst title = computed(() => unref(props.label) || unref(props.name))\nconst errorMessage = computed(() => {\n const base = error.value\n if (!base || !unref(props.useLabelInErrors)) return base\n return base.replace('Value', title.value)\n})\nconst helpTip = computed(() => errorMessage.value || unref(props.help))\nconst hasHelpTip = computed(() => !!helpTip.value)\nconst helpTipId = computed(() =>\n hasHelpTip.value ? `${unref(props.name)}-${internalHelpTipId.value}` : undefined\n)\nconst helpTipClasses = computed((): string =>\n error.value ? 'text-danger' : 'text-foreground-2'\n)\n\nconst isLeftLabelPosition = computed(() => props.labelPosition === 'left')\n\nconst renderClearButton = computed(\n () => props.buttonStyle !== 'simple' && props.clearable && !props.disabled\n)\n\nconst sizeClasses = computed((): string => {\n if (!props.size) return ''\n\n switch (props.size) {\n case 'sm':\n return 'h-6 text-body-sm'\n case 'lg':\n return 'h-10 text-[13px]'\n case 'xl':\n return 'h-14 text-sm'\n case 'base':\n default:\n return 'h-8 text-body-sm'\n }\n})\n\nconst buttonsWrapperClasses = computed(() => {\n const classParts: string[] = ['relative flex group']\n\n if (error.value) {\n classParts.push('hover:shadow rounded-md')\n classParts.push('text-danger-darker focus:border-danger')\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('border border-danger')\n }\n } else if (props.buttonStyle !== 'simple') {\n classParts.push('rounded-md border')\n if (isOpen.value) {\n classParts.push('border-outline-4')\n } else {\n classParts.push('border-outline-2 hover:border-outline-5 focus:outline-0')\n }\n }\n\n if (props.fixedHeight) {\n classParts.push('h-8')\n } else if (sizeClasses.value?.length) {\n classParts.push(sizeClasses.value)\n }\n\n if (isLeftLabelPosition.value) {\n classParts.push('md:basis-1/2')\n }\n\n return classParts.join(' ')\n})\n\nconst commonButtonClasses = computed(() => {\n const classParts: string[] = []\n\n if (props.buttonStyle !== 'simple') {\n classParts.push(\n isDisabled.value ? 'bg-foundation-disabled text-foreground-disabled' : ''\n )\n }\n\n if (isDisabled.value) classParts.push('cursor-not-allowed')\n\n return classParts.join(' ')\n})\n\nconst clearButtonClasses = computed(() => {\n const classParts = [\n 'relative z-[1]',\n 'flex items-center justify-center text-center shrink-0',\n 'rounded-r-md overflow-hidden transition-all',\n 'text-foreground',\n hasValueSelected.value ? `w-6 ${commonButtonClasses.value}` : 'w-0'\n ]\n\n if (!isDisabled.value) {\n classParts.push(\n 'hover:bg-primary hover:text-foreground-on-primary dark:text-foreground-on-primary'\n )\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-outline-3')\n } else {\n classParts.push('bg-primary-muted')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst buttonClasses = computed(() => {\n const classParts = [\n 'relative z-[2]',\n 'normal rounded-md cursor-pointer transition truncate flex-1',\n 'flex items-center focus:outline-outline-4 focus:outline-1',\n commonButtonClasses.value\n ]\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('p-2')\n\n if (!isDisabled.value) {\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-foundation text-foreground')\n } else {\n classParts.push('bg-foundation text-foreground')\n }\n }\n }\n\n if (renderClearButton.value && hasValueSelected.value) {\n classParts.push('rounded-r-none')\n }\n\n return classParts.join(' ')\n})\n\nconst hasSearch = computed(\n () => !!(props.search && (props.filterPredicate || props.getSearchResults))\n)\nconst isAsyncSearchMode = computed(() => hasSearch.value && props.getSearchResults)\nconst isDisabled = computed(\n () => props.disabled || (!props.items.length && !isAsyncSearchMode.value)\n)\n\nconst wrappedValue = computed({\n get: () => {\n const currentValue = value.value\n return isArray(currentValue) ? currentValue : []\n },\n set: (newVal) => {\n if (!isArray(newVal)) {\n console.warn('Attempting to set non-array value in selector')\n return\n }\n\n if (props.fullyControlValue) {\n emit('update:modelValue', newVal)\n } else {\n value.value = newVal\n }\n\n forceUpdateKey.value += 1\n }\n})\n\nconst hasValueSelected = computed(() => {\n if (isArray(wrappedValue.value)) return wrappedValue.value.length !== 0\n else return !!wrappedValue.value\n})\n\nconst clearValue = () => {\n wrappedValue.value = []\n}\n\nconst finalItems = computed(() => {\n const searchVal = searchValue.value\n if (!hasSearch.value || !searchVal?.length) return currentItems.value\n\n if (props.filterPredicate) {\n return currentItems.value.filter(\n (i) => props.filterPredicate?.(i, searchVal) || false\n )\n }\n\n return currentItems.value\n})\n\nconst listboxOptionsClasses = computed(() => {\n const classParts = [\n 'rounded-md bg-foundation py-1 label label--light border border-outline-3 shadow-md mt-1 '\n ]\n\n if (props.mountMenuOnBody) {\n classParts.push('fixed z-50')\n } else {\n classParts.push('absolute top-[100%] w-full z-40')\n }\n\n return classParts.join(' ')\n})\n\nconst listboxOptionsStyle = computed(() => {\n const style: CSSProperties = {}\n\n if (props.mountMenuOnBody) {\n const top = listboxButtonBounding.top.value\n const left = listboxButtonBounding.left.value\n const width = listboxButtonBounding.width.value\n const height = listboxButtonBounding.height.value\n\n style.top = `${top + height}px`\n style.left = `${left}px`\n style.width = `${width}px`\n }\n\n return style\n})\n\nconst simpleDisplayText = (v: ValueType) => JSON.stringify(v)\nconst itemKey = (v: SingleItem): string | number => {\n if (isObjectLikeType(v)) {\n return v[props.by || 'id'] as string\n } else {\n return v\n }\n}\n\nconst triggerSearch = async () => {\n if (!isAsyncSearchMode.value || !props.getSearchResults) return\n\n isAsyncLoading.value = true\n try {\n currentItems.value = await props.getSearchResults(searchValue.value)\n } finally {\n isAsyncLoading.value = false\n }\n}\nconst debouncedSearch = debounce(triggerSearch, 1000)\n\nconst listboxOptionClasses = (params: { disabled: boolean }) => {\n const { disabled } = params\n const classParts = ['relative transition select-none px-2']\n\n if (disabled) {\n classParts.push('opacity-50 cursor-not-allowed')\n } else {\n classParts.push('text-foreground cursor-pointer')\n }\n\n return classParts.join(' ')\n}\n\nwatch(\n () => props.items,\n (newItems) => {\n currentItems.value = newItems.slice()\n },\n { immediate: true }\n)\n\nwatch(searchValue, () => {\n if (!isAsyncSearchMode.value) return\n void debouncedSearch()\n})\n\nonMounted(() => {\n if (isAsyncSearchMode.value && !props.items.length) {\n void triggerSearch()\n }\n})\n\nconst toggleDropdown = () => {\n if (!isDisabled.value) {\n isOpen.value = !isOpen.value\n }\n}\n\nconst isSelected = (item: SingleItem) => {\n return wrappedValue.value.some((v) => itemKey(v) === itemKey(item))\n}\n\nconst optionsContainer = ref<HTMLDivElement | null>(null)\nconst scrollPosition = ref(0)\n\nconst selectItem = (item: SingleItem, event?: Event) => {\n if (props.disabledItemPredicate?.(item)) return\n event?.stopPropagation()\n\n scrollPosition.value = optionsContainer.value?.scrollTop || 0\n\n const currentValue = wrappedValue.value\n const itemExists = currentValue.some((v) => itemKey(v) === itemKey(item))\n\n wrappedValue.value = itemExists\n ? currentValue.filter((v) => itemKey(v) !== itemKey(item))\n : [...currentValue, item]\n\n void nextTick(() => {\n if (optionsContainer.value) {\n optionsContainer.value.scrollTop = scrollPosition.value\n }\n })\n}\n\nonClickOutside(\n menuEl,\n () => {\n if (isOpen.value) {\n isOpen.value = false\n }\n },\n {\n ignore: [listboxButton]\n }\n)\n\ndefineExpose({ triggerSearch })\n</script>\n","<template>\n <div class=\"flex items-center space-x-2\">\n <HeadlessSwitch\n :id=\"id || name\"\n v-model=\"enabled\"\n :class=\"switchClasses\"\n :name=\"name\"\n :disabled=\"disabled\"\n >\n <span :class=\"sliderClasses\"></span>\n </HeadlessSwitch>\n <label :for=\"id || name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n </label>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Switch as HeadlessSwitch } from '@headlessui/vue'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n showLabel?: boolean\n name: string\n label?: string\n disabled?: boolean\n id?: string\n }>(),\n {\n showLabel: true\n }\n)\n\nconst enabled = defineModel<boolean>()\n\nconst title = computed(() => props.label || props.name)\n\nconst labelClasses = computed(() => {\n const classParts = ['block label-light']\n\n if (!props.showLabel) {\n classParts.push('sr-only')\n }\n\n return classParts.join(' ')\n})\n\nconst switchClasses = computed(() => {\n const classParts = [\n 'relative inline-flex flex-shrink-0 h-[18px] w-[30px] rounded-full',\n 'transition-colors ease-in-out duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary',\n 'cursor-pointer disabled:cursor-not-allowed disabled:opacity-40'\n ]\n\n if (enabled.value) {\n classParts.push('bg-primary')\n } else {\n classParts.push('bg-foreground-3')\n }\n\n return classParts.join(' ')\n})\n\nconst sliderClasses = computed(() => {\n const classParts = [\n 'pointer-events-none inline-block h-3 w-3 rounded-full mt-[3px] ml-[3px]',\n 'ring-0 transition ease-in-out duration-200 bg-foreground-on-primary'\n ]\n\n if (enabled.value) {\n classParts.push('translate-x-[12px]')\n } else {\n classParts.push('translate-x-0')\n }\n\n return classParts.join(' ')\n})\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div\n class=\"relative group bg-foundation border border-outline-2 p-2 rounded-lg pr-20\"\n >\n <div\n v-if=\"isMultiline\"\n class=\"relative z-10 text-body-2xs select-all text-foreground font-mono break-all p-2 pl-3 max-h-[4.8rem] simple-scrollbar overflow-y-auto\"\n @keypress=\"keyboardClick(selectAllText)\"\n >\n {{ value }}\n </div>\n <FormTextInput\n v-else\n color=\"transparent\"\n name=\"contentInput\"\n readonly\n :model-value=\"value\"\n class=\"relative z-10 text-body-2xs text-foreground font-mono select-all\"\n />\n <div class=\"absolute top-3 right-2 flex justify-end items-center\">\n <FormButton\n color=\"outline\"\n size=\"sm\"\n :icon-left=\"\n isIconButton\n ? copied\n ? ClipboardDocumentCheckIcon\n : ClipboardDocumentIcon\n : undefined\n \"\n :hide-text=\"isIconButton\"\n @click=\"handleCopy\"\n >\n {{ copied ? 'Copied' : 'Copy' }}\n </FormButton>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useClipboard } from '@vueuse/core'\nimport {\n ClipboardDocumentIcon,\n ClipboardDocumentCheckIcon\n} from '@heroicons/vue/24/outline'\nimport { FormTextInput, FormButton } from '~~/src/lib'\nimport { ref } from 'vue'\nimport { keyboardClick } from '~~/src/helpers/global/accessibility'\n\ntype Props = {\n value: string\n isMultiline?: boolean\n isIconButton?: boolean\n rows?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n isMultiline: false\n})\n\nconst emit = defineEmits<{ (e: 'copy', val: string): void }>()\n\nconst { copy } = useClipboard({ legacy: true })\n\nconst copied = ref(false)\n\nconst handleCopy = async () => {\n if (props.value) {\n await copy(props.value)\n copied.value = true\n emit('copy', props.value)\n\n setTimeout(() => {\n copied.value = false\n }, 2000)\n }\n}\n\nconst selectAllText = (event: Event) => {\n const textElement = event.target as HTMLElement\n\n const selection = window.getSelection()\n if (selection) {\n const range = document.createRange()\n range.selectNodeContents(textElement)\n selection.removeAllRanges()\n selection.addRange(range)\n }\n}\n</script>\n","<template>\n <div class=\"flex flex-col items-center\">\n <div class=\"flex gap-2\">\n <div v-for=\"(_, index) in digitCount\" :key=\"index\" class=\"w-10\">\n <FormTextInput\n ref=\"inputRefs\"\n v-model=\"digits[index]\"\n class=\"text-center !text-[14px] py-6 !px-2 font-semibold\"\n color=\"foundation\"\n :name=\"`code-${index}`\"\n type=\"text\"\n inputmode=\"numeric\"\n :disabled=\"disabled\"\n :error=\"internalError\"\n :custom-error-message=\"internalError ? ' ' : undefined\"\n maxlength=\"1\"\n size=\"lg\"\n @input=\"onInput(index)\"\n @keydown=\"onKeyDown(index, $event)\"\n @paste=\"onPaste\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, watch } from 'vue'\nimport { FormTextInput } from '~~/src/lib'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string\n digitCount?: number\n disabled?: boolean\n error?: boolean\n clearErrorOnEdit?: boolean\n }>(),\n {\n digitCount: 6,\n clearErrorOnEdit: true\n }\n)\n\nconst emit = defineEmits(['update:modelValue', 'complete'])\n\nconst inputRefs = ref<Array<HTMLInputElement | null>>([])\nconst digits = ref<string[]>(new Array(props.digitCount).fill('') as string[])\nconst internalError = ref(props.error)\n\nconst onInput = (index: number) => {\n if (props.clearErrorOnEdit) {\n internalError.value = false\n }\n\n digits.value[index] = digits.value[index].replace(/[^0-9]/g, '')\n\n // Move to next input if available\n if (digits.value[index] && index < props.digitCount - 1) {\n inputRefs.value[index + 1]?.focus()\n }\n}\n\nconst onKeyDown = (index: number, event: KeyboardEvent) => {\n if (event.key === 'Backspace' && !digits.value[index] && index > 0) {\n if (props.clearErrorOnEdit) {\n internalError.value = false\n }\n // Move to previous input on backspace if current is empty\n digits.value[index - 1] = ''\n inputRefs.value[index - 1]?.focus()\n } else if (event.key === 'ArrowLeft' && index > 0) {\n // Move to previous input on left arrow\n inputRefs.value[index - 1]?.focus()\n } else if (event.key === 'ArrowRight' && index < props.digitCount - 1) {\n // Move to next input on right arrow\n inputRefs.value[index + 1]?.focus()\n }\n}\n\nconst onPaste = (event: ClipboardEvent) => {\n if (props.clearErrorOnEdit) {\n internalError.value = false\n }\n event.preventDefault()\n const pastedData = event.clipboardData?.getData('text')\n if (!pastedData) return\n\n const numbers = pastedData.replace(/[^0-9]/g, '').split('')\n\n digits.value = [\n ...numbers.slice(0, props.digitCount),\n ...(Array(Math.max(0, props.digitCount - numbers.length)).fill('') as string[])\n ]\n\n // Focus the next empty input or the last input\n const nextEmptyIndex = digits.value.findIndex((d) => !d)\n if (nextEmptyIndex !== -1) {\n inputRefs.value[nextEmptyIndex]?.focus()\n } else {\n inputRefs.value[props.digitCount - 1]?.focus()\n }\n}\n\n// Focus first input on mount\nonMounted(() => {\n if (inputRefs.value[0]) {\n inputRefs.value[0].focus()\n }\n})\n\n// Watch external error prop changes\nwatch(\n () => props.error,\n (newValue) => {\n internalError.value = newValue\n }\n)\n\n// Watch for external value changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue) {\n const newDigits = newValue.split('')\n digits.value = [\n ...newDigits,\n ...(Array(props.digitCount - newDigits.length).fill('') as string[])\n ]\n } else {\n digits.value = Array(props.digitCount).fill('') as string[]\n }\n },\n { immediate: true }\n)\n\n// Watch for completion\nwatch(\n digits,\n (newDigits) => {\n const value = newDigits.join('')\n emit('update:modelValue', value)\n\n // Emit complete when all digits are filled\n if (value.length === props.digitCount) {\n emit('complete', value)\n }\n },\n { deep: true }\n)\n</script>\n","import { getClientOperatingSystem, OperatingSystem } from '@speckle/shared'\n\nexport enum ModifierKeys {\n CtrlOrCmd = 'cmd-or-ctrl',\n AltOrOpt = 'alt-or-opt',\n Shift = 'shift'\n}\n\nexport const clientOs = getClientOperatingSystem()\n\nexport const ModifierKeyTitles: Record<ModifierKeys, string> = {\n [ModifierKeys.CtrlOrCmd]: clientOs === OperatingSystem.Mac ? '⌘' : '⌃',\n [ModifierKeys.AltOrOpt]: clientOs === OperatingSystem.Mac ? '⌥' : 'Alt',\n [ModifierKeys.Shift]: '⇧'\n}\n\nexport function getKeyboardShortcutTitle(keys: Array<string | ModifierKeys>) {\n const isModifierKey = (k: string): k is ModifierKeys =>\n (Object.values(ModifierKeys) as string[]).includes(k)\n\n return keys.map((v) => (isModifierKey(v) ? ModifierKeyTitles[v] : v)).join('')\n}\n","import { useMagicKeys, whenever } from '@vueuse/core'\nimport { OperatingSystem } from '@speckle/shared'\nimport { clientOs, ModifierKeys } from '~~/src/helpers/form/input'\nimport { computed, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport type LabelPosition = 'top' | 'left'\n\n/**\n * onKeyDown wrapper that also checks for modifier keys being pressed\n */\nexport function onKeyboardShortcut(\n modifiers: ModifierKeys[],\n key: string,\n callback: () => void\n) {\n const keys = useMagicKeys()\n\n const modifierKeys = modifiers.map((modifier) => {\n switch (modifier) {\n case ModifierKeys.CtrlOrCmd:\n return clientOs === OperatingSystem.Mac ? 'Meta' : 'Control'\n case ModifierKeys.AltOrOpt:\n return 'Alt'\n case ModifierKeys.Shift:\n return 'Shift'\n default:\n return ''\n }\n })\n\n const keyCombination = `${modifierKeys.join('+')}+${key}`\n\n whenever(keys[keyCombination], callback)\n}\n\n/**\n * To support group checkboxes, the checkbox v-model API is a bit confusing: The value is `true` or `undefined`\n * not `true` or `false`.\n *\n * To simplify working with single checkboxes, you can use the model returned from this composable\n * as the model and `isChecked` as a helpful wrapper that allows you to deal with boolean values only\n */\nexport function useFormCheckboxModel(\n options?: Partial<{\n model: Ref<true | undefined>\n }>\n) {\n const model = options?.model || ref<true | undefined>()\n const isChecked = computed({\n get: () => !!model.value,\n set: (newVal) => (model.value = newVal ? true : undefined)\n })\n\n return { model, isChecked }\n}\n","<template>\n <TransitionRoot as=\"template\" :show=\"open\">\n <Dialog as=\"div\" class=\"relative z-50\" open @close=\"onClose\">\n <TransitionChild\n as=\"template\"\n enter=\"ease-out duration-300\"\n enter-from=\"opacity-0\"\n enter-to=\"opacity-100\"\n leave=\"ease-in duration-400\"\n leave-from=\"opacity-100\"\n leave-to=\"opacity-0\"\n >\n <div\n class=\"fixed top-0 left-0 w-full h-full backdrop-blur-xs bg-black/60 dark:bg-neutral-900/60 transition-opacity\"\n />\n </TransitionChild>\n <div class=\"fixed top-0 left-0 z-10 h-screen !h-[100dvh] w-screen\">\n <div\n class=\"flex md:justify-center h-full w-full md:p-6\"\n :class=\"[\n fullscreen === 'none' || fullscreen === 'desktop'\n ? 'p-4 items-center'\n : 'items-end md:items-center'\n ]\"\n >\n <TransitionChild\n as=\"template\"\n enter=\"ease-out duration-5000\"\n :enter-from=\"`md:opacity-0 ${\n fullscreen === 'mobile' || fullscreen === 'all'\n ? 'translate-y-[100%]'\n : 'translate-y-4'\n } md:translate-y-4`\"\n enter-to=\"md:opacity-100 translate-y-0\"\n leave=\"ease-in duration-5000\"\n leave-from=\"md:opacity-100 translate-y-0\"\n :leave-to=\"`md:opacity-0 ${\n fullscreen === 'mobile' || fullscreen === 'all'\n ? 'translate-y-[100%]'\n : 'translate-y-4'\n } md:translate-y-4`\"\n @after-leave=\"onFullyClosed\"\n >\n <DialogPanel\n :class=\"dialogPanelClasses\"\n dialog-panel-classes\n :as=\"isForm ? 'form' : 'div'\"\n @submit.prevent=\"onFormSubmit\"\n >\n <div\n v-if=\"hasTitle\"\n class=\"border-b border-outline-3\"\n :class=\"scrolledFromTop && 'relative z-20 shadow-lg'\"\n >\n <div\n class=\"flex items-center justify-start rounded-t-lg shrink-0 min-h-[2rem] sm:min-h-[3rem] px-6 py-4 truncate text-heading-sm\"\n >\n <div class=\"flex items-center pr-12\">\n <ChevronLeftIcon\n v-if=\"showBackButton\"\n class=\"w-5 h-5 -ml-1 mr-3\"\n @click=\"$emit('back')\"\n />\n <div class=\"w-full truncate\">\n {{ title }}\n <slot name=\"header\" />\n </div>\n </div>\n </div>\n </div>\n\n <!--\n Due to how forms work, if there's no other submit button, on form submission the first button\n will be clicked. This is a workaround to prevent the close button from being that first button.\n https://stackoverflow.com/a/4763911/3194577\n -->\n <button class=\"hidden\" type=\"button\" />\n\n <FormButton\n v-if=\"!hideCloser\"\n color=\"subtle\"\n size=\"sm\"\n class=\"absolute z-20 top-4 right-5 shrink-0 !w-6 !h-6 !p-0 text-foreground-2\"\n :class=\"closerClasses\"\n @click=\"open = false\"\n >\n <XMarkIcon class=\"h-6 w-6\" />\n </FormButton>\n <div\n ref=\"slotContainer\"\n v-memo=\"isClosing ? [memoKey] : [(memoKey = Math.random())]\"\n :class=\"slotContainerClasses\"\n @scroll=\"onScroll\"\n >\n <slot>Put your content here!</slot>\n </div>\n <div\n v-if=\"hasButtons\"\n class=\"relative z-50 flex justify-end px-6 pb-6 space-x-2 shrink-0 bg-foundation-page\"\n :class=\"{\n 'shadow-t pt-6': !scrolledToBottom,\n [buttonsWrapperClasses || '']: true\n }\"\n >\n <template v-if=\"buttons\">\n <div\n v-for=\"(button, index) in buttons\"\n :key=\"button.id || index\"\n v-tippy=\"\n button.props?.disabled || button.disabled\n ? button.disabledMessage\n : undefined\n \"\n >\n <FormButton\n v-bind=\"button.props || {}\"\n :disabled=\"button.props?.disabled || button.disabled\"\n :submit=\"button.props?.submit || button.submit\"\n @click=\"($event) => button.onClick?.($event)\"\n >\n {{ button.text }}\n </FormButton>\n </div>\n </template>\n <template v-else>\n <slot name=\"buttons\" />\n </template>\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </Dialog>\n </TransitionRoot>\n</template>\n<script setup lang=\"ts\">\nimport { Dialog, DialogPanel, TransitionChild, TransitionRoot } from '@headlessui/vue'\nimport { FormButton, type LayoutDialogButton } from '~~/src/lib'\nimport { XMarkIcon, ChevronLeftIcon } from '@heroicons/vue/24/outline'\nimport { isClient, useResizeObserver, type ResizeObserverCallback } from '@vueuse/core'\nimport { computed, onUnmounted, ref, useSlots, watch, type SetupContext } from 'vue'\nimport { throttle } from '#lodash'\nimport { directive as vTippy } from 'vue-tippy'\n\ntype MaxWidthValue = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\ntype FullscreenValues = 'mobile' | 'desktop' | 'all' | 'none'\n\nconst emit = defineEmits<{\n (e: 'update:open', v: boolean): void\n (e: 'fully-closed'): void\n (e: 'back'): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n open: boolean\n maxWidth?: MaxWidthValue\n fullscreen?: FullscreenValues\n hideCloser?: boolean\n showBackButton?: boolean\n /**\n * Prevent modal from closing when the user clicks outside of the modal or presses Esc\n */\n preventCloseOnClickOutside?: boolean\n title?: string\n buttons?: Array<LayoutDialogButton>\n /**\n * Extra classes to apply to the button container.\n */\n buttonsWrapperClasses?: string\n /**\n * If set, the modal will be wrapped in a form element and the `onSubmit` callback will be invoked when the user submits the form\n */\n onSubmit?: (e: SubmitEvent) => void\n isTransparent?: boolean\n closerClasses?: string\n hideTitle?: boolean\n hideButtons?: boolean\n }>(),\n {\n fullscreen: 'mobile'\n }\n)\n\nconst slots: SetupContext['slots'] = useSlots()\n\nconst isClosing = ref(false)\nconst memoKey = ref(Math.random())\n\nconst scrolledFromTop = ref(false)\nconst scrolledToBottom = ref(true)\nconst slotContainer = ref<HTMLElement | null>(null)\n\nuseResizeObserver(\n slotContainer,\n throttle<ResizeObserverCallback>(() => {\n // Triggering onScroll on size change too so that we don't get stuck with shadows\n // even tho the new content is not scrollable\n onScroll({ target: slotContainer.value })\n }, 60)\n)\n\nconst isForm = computed(() => !!props.onSubmit)\nconst hasButtons = computed(\n () => (props.buttons || slots.buttons) && !props.hideButtons\n)\nconst hasTitle = computed(() => !props.hideTitle && (!!props.title || !!slots.header))\n\nconst open = computed({\n get: () => props.open,\n set: (newVal) => emit('update:open', newVal)\n})\n\nconst maxWidthWeight = computed(() => {\n switch (props.maxWidth) {\n case 'xs':\n return 0\n case 'sm':\n return 1\n case 'md':\n return 2\n case 'lg':\n return 3\n case 'xl':\n return 4\n default:\n return 10000\n }\n})\n\nconst widthClasses = computed(() => {\n const classParts: string[] = ['w-full', 'sm:w-full']\n\n if (!isFullscreenDesktop.value) {\n if (maxWidthWeight.value === 0) {\n classParts.push('md:max-w-sm')\n }\n if (maxWidthWeight.value >= 1) {\n classParts.push('md:max-w-lg')\n }\n if (maxWidthWeight.value >= 2) {\n classParts.push('md:max-w-2xl')\n }\n if (maxWidthWeight.value >= 3) {\n classParts.push('lg:max-w-3xl')\n }\n if (maxWidthWeight.value >= 4) {\n classParts.push('xl:max-w-6xl')\n } else {\n classParts.push('md:max-w-2xl')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst isFullscreenDesktop = computed(\n () => props.fullscreen === 'desktop' || props.fullscreen === 'all'\n)\n\nconst dialogPanelClasses = computed(() => {\n const classParts: string[] = [\n 'transform md:rounded-xl text-foreground overflow-hidden transition-all text-left flex flex-col md:h-auto'\n ]\n\n if (!props.isTransparent) {\n classParts.push('bg-foundation-page shadow-xl border border-outline-2')\n }\n\n if (isFullscreenDesktop.value) {\n classParts.push('md:h-full')\n } else {\n classParts.push('md:max-h-[90vh]')\n }\n\n if (props.fullscreen === 'mobile' || props.fullscreen === 'all') {\n classParts.push('max-md:h-[98vh] max-md:!h-[98dvh]')\n }\n\n if (props.fullscreen === 'none' || props.fullscreen === 'desktop') {\n classParts.push('rounded-lg max-h-[90vh]')\n } else {\n classParts.push('rounded-t-lg')\n }\n\n classParts.push(widthClasses.value)\n return classParts.join(' ')\n})\n\nconst slotContainerClasses = computed(() => {\n const classParts: string[] = ['flex-1 simple-scrollbar overflow-y-auto text-body-xs']\n\n if (!props.isTransparent) {\n if (hasTitle.value) {\n classParts.push('px-6 py-4')\n if (isFullscreenDesktop.value) {\n classParts.push('md:p-0')\n }\n } else if (!isFullscreenDesktop.value) {\n classParts.push('px-6 py-4')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst onClose = () => {\n if (props.preventCloseOnClickOutside) return\n open.value = false\n}\n\nconst onFullyClosed = () => {\n emit('fully-closed')\n isClosing.value = false\n}\n\nconst onFormSubmit = (e: SubmitEvent) => {\n props.onSubmit?.(e)\n}\n\nconst onScroll = throttle((e: { target: EventTarget | null }) => {\n if (!e.target) return\n\n const target = e.target as HTMLElement\n const { scrollTop, offsetHeight, scrollHeight } = target\n scrolledFromTop.value = scrollTop > 0\n scrolledToBottom.value = scrollTop + offsetHeight >= scrollHeight\n}, 60)\n\nwatch(\n open,\n (newValue, oldValue) => {\n if (isClient) {\n // Toggle 'dialog-open' class on <html> to prevent scroll jumping and disable background scroll.\n // This maintains user scroll position when Headless UI dialogs are activated.\n const html = document.documentElement\n if (newValue) {\n html.classList.add('dialog-open')\n } else {\n html.classList.remove('dialog-open')\n }\n }\n\n if (!newValue && oldValue) {\n isClosing.value = true\n }\n },\n { flush: 'sync' }\n)\n\n// Clean up when the component unmounts\nonUnmounted(() => {\n document.documentElement.classList.remove('dialog-open')\n})\n</script>\n<style>\nhtml.dialog-open {\n overflow: visible !important;\n}\nhtml.dialog-open body {\n overflow: hidden !important;\n}\n</style>\n","<template>\n <div\n class=\"flex flex-col border-primary-muted\"\n :class=\"{\n 'border-t': borderT,\n 'border-b': borderB,\n 'relative z-10': isExpanded\n }\"\n >\n <div\n class=\"flex justify-between items-center space-x-4 sm:space-x-8 py-2.5 px-2\"\n :class=\"backgroundClass\"\n tabindex=\"0\"\n v-on=\"\n !button && !alwaysOpen\n ? {\n click: toggleExpansion,\n keypress: keyboardClick(toggleExpansion)\n }\n : {}\n \"\n >\n <div\n class=\"text-heading-sm flex items-center space-x-1 sm:space-x-2 select-none\"\n :class=\"titleClasses\"\n >\n <div v-if=\"$slots.icon || icon\" class=\"h-4 w-4 empty:h-0 empty:w-0\">\n <slot v-if=\"$slots.icon\" name=\"icon\" />\n <Component :is=\"icon\" v-if=\"icon\" class=\"w-full h-full\" />\n </div>\n <span>{{ title }}</span>\n </div>\n <div>\n <ChevronDownIcon\n v-if=\"!button && !alwaysOpen\"\n class=\"w-4 h-4 transition-all duration-400\"\n :class=\"isExpanded && 'rotate-180'\"\n />\n <FormButton\n v-if=\"button\"\n :to=\"button.expandContent ? undefined : button.to\"\n :color=\"button.expandContent && isExpanded ? 'outline' : button.color\"\n :icon-right=\"\n button.expandContent && isExpanded ? undefined : button.iconRight\n \"\n size=\"sm\"\n @click=\"button?.onClick\"\n v-on=\"button?.expandContent ? { click: toggleExpansion } : {}\"\n >\n {{ button.expandContent && isExpanded ? 'Cancel' : button.text }}\n </FormButton>\n </div>\n </div>\n <div\n class=\"transition-all duration-300 overflow-hidden\"\n :class=\"[\n allowOverflow && isExpanded ? '!overflow-visible' : '',\n isExpanded ? 'mb-2 mt-1' : '',\n !button && !alwaysOpen ? 'cursor-pointer hover:bg-foundation-page' : ''\n ]\"\n :style=\"\n alwaysOpen\n ? 'max-height: none;'\n : `max-height: ${isExpanded ? contentHeight + 'px' : '0px'}`\n \"\n >\n <template v-if=\"props.lazyLoad\">\n <div\n v-if=\"isExpanded || props.alwaysOpen\"\n ref=\"content\"\n class=\"rounded-md text-sm pb-3 px-2 mt-1\"\n >\n <slot>Panel contents</slot>\n </div>\n </template>\n\n <template v-else>\n <div ref=\"content\" class=\"rounded-md text-sm pb-3 px-2 mt-1\">\n <slot>Panel contents</slot>\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, unref, computed, nextTick } from 'vue'\nimport type { PropType, Ref } from 'vue'\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline'\nimport { FormButton } from '~~/src/lib'\nimport { keyboardClick } from '~~/src/helpers/global/accessibility'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport type { FormButtonStyle } from '~~/src/helpers/form/button'\n\ntype TitleColor = 'default' | 'danger' | 'warning' | 'success' | 'secondary' | 'info'\n\nconst props = defineProps({\n title: String,\n borderT: Boolean,\n borderB: Boolean,\n allowOverflow: Boolean,\n titleColor: {\n type: String as () => TitleColor,\n default: 'default'\n },\n button: Object as () =>\n | {\n expandContent?: boolean\n text: string\n to?: string\n color: FormButtonStyle\n iconRight?: PropAnyComponent | undefined\n onClick?: () => void\n }\n | undefined,\n alwaysOpen: Boolean,\n lazyLoad: {\n type: Boolean,\n default: false\n },\n icon: {\n type: [Function, Object] as PropType<PropAnyComponent>,\n default: undefined\n }\n})\n\nconst content: Ref<HTMLElement | null> = ref(null)\nconst contentHeight = ref(0)\nconst isExpanded = ref(false)\n\nconst backgroundClass = computed(() => {\n const classes = []\n\n if (!props.button && !props.alwaysOpen) {\n classes.push('cursor-pointer', 'hover:bg-foundation-page-2')\n }\n\n return classes\n})\n\nconst titleClasses = computed(() => {\n switch (props.titleColor) {\n case 'danger':\n return 'text-danger'\n case 'warning':\n return 'text-warning'\n case 'success':\n return 'text-success'\n case 'secondary':\n return 'text-secondary'\n case 'info':\n return 'text-info'\n default:\n return 'text-foreground'\n }\n})\n\nconst toggleExpansion = async () => {\n isExpanded.value = !isExpanded.value\n\n if (isExpanded.value) {\n await nextTick()\n contentHeight.value = (unref(content)?.scrollHeight || 0) + 64\n }\n}\n</script>\n","<template>\n <div>\n <HeadlessDisclosure>\n <DisclosureButton :class=\"buttonClasses\" @click=\"toggle\">\n <div class=\"inline-flex items-center space-x-2 w-full\">\n <Component :is=\"icon\" v-if=\"icon\" class=\"h-5 w-5\" />\n <span v-if=\"!editTitle\" class=\"text-left w-full\">{{ title }}</span>\n <FormTextInput\n v-else\n v-bind=\"bind\"\n name=\"disclosureTitle\"\n color=\"fully-transparent\"\n :input-classes=\"buttonTextClasses\"\n :auto-focus=\"true\"\n wrapper-classes=\"flex-1\"\n v-on=\"on\"\n @click.stop\n @blur=\"onTitleInputBlur\"\n />\n <slot name=\"title-actions\" />\n </div>\n <ChevronUpIcon :class=\"chevronClasses\" />\n </DisclosureButton>\n <DisclosurePanel v-if=\"open\" :class=\"panelClasses\" static>\n <div v-if=\"!lazyLoad || open\" class=\"label-light\">\n <slot>Panel contents</slot>\n </div>\n </DisclosurePanel>\n </HeadlessDisclosure>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {\n DisclosureButton,\n Disclosure as HeadlessDisclosure,\n DisclosurePanel\n} from '@headlessui/vue'\nimport { ChevronUpIcon } from '@heroicons/vue/24/solid'\nimport { computed, watch } from 'vue'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport { FormTextInput, useDebouncedTextInput } from '~~/src/lib'\n\ntype DisclosureColor = 'default' | 'danger' | 'success' | 'warning' | 'subtle'\n\nconst props = withDefaults(\n defineProps<{\n /**\n * HeadlessUI icon component to use\n */\n icon?: PropAnyComponent\n color?: DisclosureColor\n /**\n * Whether to lazy load the panel contents only upon opening\n */\n lazyLoad?: boolean\n /**\n * If edit mode enabled - it will exit mode when user unfocuses\n */\n exitEditModeOnBlur?: boolean\n }>(),\n {\n color: 'default',\n exitEditModeOnBlur: true\n }\n)\n\nconst editTitle = defineModel<boolean>('editTitle')\nconst title = defineModel<string>('title')\nconst open = defineModel<boolean>('open', {\n default: false\n})\n\nconst { on, bind, syncFromValue } = useDebouncedTextInput({\n disableDebouncedInput: true,\n model: title\n})\n\nconst buttonTextClasses = computed(() => {\n const classParts = ['font-medium']\n\n switch (props.color) {\n case 'warning':\n classParts.push('text-warning')\n break\n case 'success':\n classParts.push('text-success')\n break\n case 'danger':\n classParts.push('text-danger')\n break\n case 'subtle':\n classParts.push('text-foreground text-body-2xs')\n break\n case 'default':\n default:\n classParts.push('text-primary')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst buttonClasses = computed(() => {\n let classParts: string[] = []\n\n // Common classes shared between subtle and other variants\n classParts = [\n 'w-full',\n 'flex',\n 'items-center',\n 'transition',\n 'group/disclosure',\n buttonTextClasses.value\n ]\n\n if (props.color === 'subtle') {\n // Subtle variant specific styling\n classParts.push(\n 'h-7',\n 'justify-normal',\n 'pl-1',\n 'pr-0.5',\n 'rounded-md',\n 'hover:bg-highlight-1',\n 'ring-none'\n )\n } else {\n // Default styling for other variants\n classParts.push(\n 'pr-3',\n 'h-10',\n 'justify-between',\n 'border-l-2',\n 'px-2',\n 'rounded',\n 'ring-1'\n )\n }\n\n // Add color-specific styling\n switch (props.color) {\n case 'warning':\n classParts.push('border-warning ring-warning-lighter hover:ring-warning')\n break\n case 'success':\n classParts.push('border-success ring-success-lighter hover:ring-success')\n break\n case 'danger':\n classParts.push('border-danger ring-danger-lighter hover:ring-danger')\n break\n case 'subtle':\n classParts.push('border-none ring-none flex-row-reverse gap-x-1 justify-end')\n break\n case 'default':\n default:\n classParts.push('border-primary ring-primary-muted hover:ring-primary')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst panelClasses = computed(() => {\n const classParts = ['p-3 border-x border-b rounded-b-md']\n\n switch (props.color) {\n case 'warning':\n classParts.push('border-warning-lighter')\n break\n case 'success':\n classParts.push('border-success-lighter')\n break\n case 'danger':\n classParts.push('border-danger-lighter')\n break\n case 'subtle':\n classParts.push('border-none pl-0 pr-0 pb-0 pt-0 rounded-none')\n break\n case 'default':\n default:\n classParts.push('border-primary-muted')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst chevronClasses = computed(() => {\n const baseClasses = 'h-4 w-4 transition-transform duration-200 ease-in-out'\n\n if (props.color === 'subtle') {\n // Subtle variant: 90° when closed, 0° when open\n return open.value\n ? `${baseClasses} rotate-180 transform`\n : `${baseClasses} rotate-90 transform`\n } else {\n // Other variants: rotate when closed (default behavior)\n return !open.value ? `${baseClasses} rotate-180 transform` : baseClasses\n }\n})\n\nconst toggle = () => {\n open.value = !open.value\n}\n\nconst onTitleInputBlur = () => {\n if (!props.exitEditModeOnBlur) return\n\n editTitle.value = false\n}\n\nwatch(editTitle, (newVal, oldVal) => {\n // Reset input value on turning on edit mode\n if (newVal && !oldVal) {\n syncFromValue()\n }\n})\n</script>\n","import type { ConcreteComponent } from 'vue'\nimport type { FormButton } from '~~/src/lib'\n\ntype FormButtonProps = InstanceType<typeof FormButton>['$props']\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport type { MaybeNullOrUndefined } from '@speckle/shared'\n\nexport enum GridListToggleValue {\n Grid = 'grid',\n List = 'list'\n}\n\nexport type LayoutTabItem<I extends string = string> = {\n title: string\n id: I\n}\n\nexport type LayoutPageTabItem<I extends string = string> = {\n title: string\n id: I\n count?: number\n tag?: string\n icon?: PropAnyComponent\n disabled?: boolean\n disabledMessage?: string\n}\n\nexport type LayoutMenuItem<I extends string = string> = {\n icon?: ConcreteComponent\n title: string\n id: I\n disabled?: MaybeNullOrUndefined<boolean>\n disabledTooltip?: MaybeNullOrUndefined<string>\n color?: 'danger' | 'info'\n active?: boolean\n}\n\nexport type LayoutDialogButton = {\n text: string\n props?: Record<string, unknown> & FormButtonProps\n onClick?: (e: MouseEvent) => void\n disabled?: boolean\n disabledMessage?: string\n submit?: boolean\n /**\n * This should uniquely identify the button within the form. Even if you have different sets\n * of buttons rendered on different steps of a wizard, all of them should have unique IDs to\n * ensure proper form functionality.\n */\n id?: string\n}\n\nexport type LayoutHeaderButton = {\n label: string\n props: Record<string, unknown> & FormButtonProps\n onClick?: (e: MouseEvent) => void\n}\n\nexport type LayoutTableColours = 'primary' | 'outline' | 'subtle' | 'danger'\n","<template>\n <button\n class=\"max-w-max transition flex justify-center items-center space-x-2 outline-none select-none h-8 text-foreground border-2 border-primary-muted dark:border-foundation bg-primary-muted rounded-md active:scale-[0.97] grow\"\n @click=\"onClick\"\n >\n <div class=\"relative flex bg-primary-muted rounded-md\">\n <div\n class=\"absolute transition\"\n :class=\"{\n 'translate-x-7': value !== GridListToggleValue.List\n }\"\n >\n <div\n class=\"w-7 h-7 bg-foundation dark:bg-foundation-2 transition rounded shadow\"\n />\n </div>\n <div\n v-tippy=\"'List View'\"\n class=\"relative z-10 flex space-x-1 items-center p-1 rounded-l\"\n >\n <Bars3Icon class=\"h-5 w-5\" />\n </div>\n <div\n v-tippy=\"'Grid View'\"\n class=\"relative z-10 flex space-x-1 items-center p-1 rounded-r\"\n >\n <Squares2X2Icon class=\"h-5 w-5\" />\n </div>\n </div>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { Bars3Icon, Squares2X2Icon } from '@heroicons/vue/24/solid'\nimport { computed } from 'vue'\nimport { GridListToggleValue } from '~~/src/helpers/layout/components'\n\nconst emit = defineEmits<{\n (e: 'click', v: MouseEvent): void\n (e: 'update:modelValue', v: GridListToggleValue): void\n}>()\n\nconst props = defineProps<{\n modelValue?: GridListToggleValue\n}>()\n\nconst value = computed({\n get: () => props.modelValue || GridListToggleValue.Grid,\n set: (newVal) => emit('update:modelValue', newVal)\n})\n\nconst onClick = (e: MouseEvent) => {\n emit('click', e)\n\n const newVal =\n value.value === GridListToggleValue.Grid\n ? GridListToggleValue.List\n : GridListToggleValue.Grid\n value.value = newVal\n}\n</script>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.8849 5.91851L7.25614 11.74L3.99951 8.48337L4.93388 7.549L7.24028 9.8554L11.9349 5L12.8849 5.91851Z\"\n fill=\"currentColor\"\n />\n </svg>\n</template>\n","<template>\n <HeadlessMenu v-slot=\"{ open: isMenuOpen }\" as=\"div\" class=\"relative inline-block\">\n <div>\n <MenuButton :id=\"menuId\" ref=\"menuButton\" class=\"hidden\" @click.stop.prevent />\n <!-- conditional pointer-events-none is necessary to avoid double events when clicking on the button when the menu is already open -->\n <div ref=\"menuButtonWrapper\" :class=\"isMenuOpen ? 'pointer-events-none' : ''\">\n <slot :toggle=\"toggle\" :open=\"processOpen(isMenuOpen)\" />\n </div>\n </div>\n <Teleport to=\"body\" :disabled=\"!mountMenuOnBody\">\n <MenuItems\n v-if=\"isMenuOpen\"\n ref=\"menuItems\"\n :class=\"menuItemsClasses\"\n :style=\"menuItemsStyles\"\n >\n <div v-for=\"(group, i) in items\" :key=\"i\" class=\"p-1\">\n <MenuItem\n v-for=\"item in group\"\n v-slot=\"{ active, disabled }\"\n :key=\"item.id\"\n :disabled=\"item.disabled || undefined\"\n :color=\"item.color\"\n >\n <span v-tippy=\"item.disabled && item.disabledTooltip\">\n <button\n :class=\"buildButtonClassses({ active, disabled, color: item.color })\"\n :disabled=\"disabled\"\n @click=\"chooseItem(item, $event)\"\n >\n <Component :is=\"item.icon\" v-if=\"item.icon\" class=\"h-4 w-4\" />\n <div v-if=\"showTicks === true\" class=\"w-5 shrink-0\">\n <IconCheck v-if=\"item.active\" class=\"h-4 w-4 text-foreground-2\" />\n </div>\n <slot name=\"item\" :item=\"item\">\n <div :class=\"{ grow: !!showTicks }\">{{ item.title }}</div>\n </slot>\n <div v-if=\"showTicks === 'right' && item.active\" class=\"w-5 shrink-0\">\n <IconCheck v-if=\"item.active\" class=\"h-4 w-4 text-foreground-2\" />\n </div>\n </button>\n </span>\n </MenuItem>\n </div>\n </MenuItems>\n </Teleport>\n </HeadlessMenu>\n</template>\n\n<script setup lang=\"ts\" generic=\"MenuIds extends string = string\">\nimport { directive as vTippy } from 'vue-tippy'\nimport { Menu as HeadlessMenu, MenuButton, MenuItems, MenuItem } from '@headlessui/vue'\nimport type { Nullable } from '@speckle/shared'\nimport { computed, ref, watch, onMounted } from 'vue'\nimport {\n HorizontalDirection,\n useResponsiveHorizontalDirectionCalculation\n} from '~~/src/composables/common/window'\nimport type { LayoutMenuItem } from '~~/src/helpers/layout/components'\nimport { useElementBounding, useElementSize, useEventListener } from '@vueuse/core'\nimport { useBodyMountedMenuPositioning } from '~~/src/composables/layout/menu'\nimport { isNumber } from '#lodash'\nimport IconCheck from '~~/src/components/global/icon/Check.vue'\n\nconst emit = defineEmits<{\n (e: 'update:open', val: boolean): void\n (e: 'chosen', val: { event: MouseEvent; item: LayoutMenuItem<MenuIds> }): void\n}>()\n\nconst props = defineProps<{\n open?: boolean\n /**\n * 2D array so that items can be grouped with dividers between them\n */\n items: LayoutMenuItem<MenuIds>[][]\n size?: 'base' | 'lg' | number\n menuId?: string\n /**\n * Preferable menu position/directed. This can change depending on available space.\n */\n menuPosition?: HorizontalDirection\n mountMenuOnBody?: boolean\n customMenuItemsClasses?: string[]\n showTicks?: boolean | 'right'\n}>()\n\nconst menuItems = ref(null as Nullable<{ el: HTMLDivElement }>)\nconst menuButton = ref(null as Nullable<{ el: HTMLButtonElement }>)\nconst menuButtonWrapper = ref(null as Nullable<HTMLElement>)\nconst isOpenInternally = ref(false)\nconst isMounted = ref(false)\n\nconst finalOpen = computed({\n get: () => props.open || false,\n set: (newVal) => emit('update:open', newVal)\n})\n\nconst menuButtonBounding = useElementBounding(menuButtonWrapper, {\n windowResize: true,\n windowScroll: true,\n immediate: true\n})\n\nconst menuItemsSize = useElementSize(computed(() => menuItems.value?.el || null))\n\nconst { direction: calculatedDirection } = useResponsiveHorizontalDirectionCalculation({\n el: computed(() => menuItems.value?.el || null),\n defaultDirection: props.menuPosition,\n stopUpdatesBelowWidth: 300\n})\n\nconst menuDirection = computed(() => {\n return props.menuPosition || calculatedDirection.value\n})\n\nconst { menuStyle } = useBodyMountedMenuPositioning({\n menuOpenDirection: menuDirection,\n buttonBoundingBox: menuButtonBounding,\n menuWidth: computed(() => {\n if (isNumber(props.size)) return props.size\n\n switch (props.size) {\n case 'lg':\n return 208\n case 'base':\n default:\n return 176\n }\n }),\n menuHeight: computed(() => menuItemsSize.height.value)\n})\n\nconst menuItemsStyles = computed(() => {\n // Only add styles for body mounted menus\n if (!props.mountMenuOnBody) return {}\n if (!menuButtonBounding.width.value) return {}\n\n return {\n position: 'fixed',\n zIndex: 50,\n ...menuStyle.value\n }\n})\n\nconst menuItemsClasses = computed(() => {\n const classParts = [\n 'w-44 origin-top-right divide-y divide-outline-3 rounded-md bg-foundation shadow-lg border border-outline-2 z-50'\n ]\n\n if (props.customMenuItemsClasses) {\n classParts.push(...props.customMenuItemsClasses)\n }\n\n if (props.mountMenuOnBody) {\n classParts.push('fixed')\n } else {\n classParts.push('absolute mt-1')\n\n if (menuDirection.value === HorizontalDirection.Left) {\n classParts.push('right-0')\n }\n }\n\n if (props.size === 'lg') {\n classParts.push('w-52')\n } else {\n classParts.push('w-44')\n }\n\n return classParts.join(' ')\n})\n\nconst buildButtonClassses = (params: {\n active?: boolean\n disabled?: boolean\n color?: 'danger' | 'info'\n}) => {\n const { active, disabled, color } = params\n const classParts = [\n 'group flex space-x-2 w-full items-center rounded-md px-2 py-1 text-body-xs text-left'\n ]\n\n if (active && !color) {\n classParts.push('bg-primary-muted text-foreground')\n } else if (disabled) {\n classParts.push('opacity-40')\n } else if (color === 'danger' && active) {\n classParts.push('text-foreground-on-primary bg-danger')\n } else if (color === 'danger' && !active) {\n classParts.push('text-danger')\n } else if (color === 'info' && active) {\n classParts.push('text-foreground-on-primary bg-info')\n } else if (color === 'info' && !active) {\n classParts.push('text-info')\n } else {\n classParts.push('text-foreground')\n }\n\n return classParts.join(' ')\n}\n\nconst chooseItem = (item: LayoutMenuItem<MenuIds>, event: MouseEvent) => {\n emit('chosen', { item, event })\n setOpen(false)\n}\n\nconst toggle = () => {\n menuButton.value?.el.click()\n if (props.mountMenuOnBody) {\n menuButtonBounding.update()\n }\n}\n\nconst setOpen = (open: boolean) => {\n if (isOpenInternally.value === open) return\n toggle()\n}\n\n// ok this is a bit hacky, but it's done because of headlessui's limited API\n// the point of this is 1) cast any to bool 2) store 'open' state locally\n// so that we can access it outside of the template\nconst processOpen = (val: unknown): val is boolean => {\n const isOpen = !!val\n isOpenInternally.value = isOpen\n return isOpen\n}\n\nwatch(isOpenInternally, (newVal, oldVal) => {\n if (newVal === oldVal) return\n finalOpen.value = newVal\n})\n\nwatch(finalOpen, (shouldBeOpen) => {\n if (shouldBeOpen && !isOpenInternally.value) {\n toggle()\n } else if (!shouldBeOpen && isOpenInternally.value) {\n toggle()\n }\n})\n\nonMounted(() => {\n isMounted.value = true\n})\n\nuseEventListener(window, 'resize', () => {\n menuButtonBounding.update()\n})\n\nuseEventListener(window, 'scroll', () => {\n menuButtonBounding.update()\n})\n</script>\n","<template>\n <div class=\"relative z-10 flex flex-col !mt-0\">\n <!-- Left Arrow Button -->\n <div\n class=\"absolute left-[-2px] top-[-2px] z-20 pr-8 bg-gradient-to-r from-foundation-page to-transparent\"\n >\n <button\n v-if=\"showLeftArrow\"\n class=\"bg-foundation p-1 rounded-full border border-outline-4 shadow\"\n @click=\"scrollLeft\"\n >\n <ArrowLongLeftIcon class=\"h-4 w-4\" />\n </button>\n </div>\n <div class=\"absolute left-0 z-10 w-full h-[1px] mt-px bg-outline-3 top-7\"></div>\n <div\n ref=\"scrollContainer\"\n class=\"relative overflow-x-auto hide-scrollbar w-full\"\n @scroll=\"handleScroll\"\n >\n <div\n :style=\"borderStyle\"\n class=\"h-[2px] absolute bottom-0 z-20 transition-[left,width] duration-300\"\n :class=\"isInitialSetup ? 'bg-transparent' : 'bg-primary'\"\n ></div>\n\n <div ref=\"buttonContainer\" class=\"flex w-full space-x-4\">\n <button\n v-for=\"item in items\"\n :key=\"item.id\"\n :data-tab-id=\"item.id\"\n :class=\"[\n buttonClass(item),\n { '!border-primary': isActiveItem(item) && isInitialSetup }\n ]\"\n class=\"tab-button\"\n :disabled=\"item.disabled\"\n @click=\"setActiveItem(item)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <component\n :is=\"item.icon\"\n v-if=\"item.icon\"\n class=\"shrink-0 h-4 w-4 stroke-[2px]\"\n />\n\n <div class=\"min-w-6\">\n <span\n v-if=\"item.disabled && item.disabledMessage\"\n v-tippy=\"item.disabledMessage\"\n >\n {{ item.title }}\n </span>\n <span v-else>{{ item.title }}</span>\n </div>\n <div\n v-if=\"item.count\"\n class=\"rounded-full px-2 text-body-3xs transition-all min-w-6\"\n :class=\"\n activeItem?.id === item.id\n ? 'text-primary bg-info-lighter dark:text-foreground'\n : 'text-foreground-2 bg-highlight-3'\n \"\n >\n <span>{{ item.count }}</span>\n </div>\n <CommonBadge v-if=\"item.tag\">\n {{ item.tag }}\n </CommonBadge>\n </div>\n </button>\n </div>\n </div>\n\n <!-- Right Arrow Button -->\n <div\n class=\"absolute right-[-2px] top-[-2px] z-20 pl-8 bg-gradient-to-l from-foundation-page to-transparent\"\n >\n <button\n v-if=\"showRightArrow\"\n class=\"bg-foundation p-1 rounded-full border border-outline-3 shadow\"\n @click=\"scrollRight\"\n >\n <ArrowLongRightIcon class=\"h-4 w-4\" />\n </button>\n </div>\n <div class=\"pt-4\">\n <slot :active-item=\"activeItem\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, watch, onBeforeUnmount } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport type { LayoutPageTabItem } from '~~/src/helpers/layout/components'\nimport { isClient } from '@vueuse/core'\nimport { ArrowLongRightIcon, ArrowLongLeftIcon } from '@heroicons/vue/24/outline'\nimport type { Nullable } from '@speckle/shared'\nimport { throttle } from '#lodash'\nimport { useResizeObserver } from '@vueuse/core'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\n\nconst props = defineProps<{\n items: LayoutPageTabItem[]\n}>()\n\nconst activeItem = defineModel<LayoutPageTabItem>('activeItem', { required: true })\n\nconst buttonContainer = ref(null as Nullable<HTMLDivElement>)\nconst scrollContainer = ref<HTMLElement | null>(null)\nconst showLeftArrow = ref(false)\nconst showRightArrow = ref(false)\nconst isInitialSetup = ref(true)\n\nconst underlineLeft = ref('0px')\nconst underlineWidth = ref('0px')\n\nconst buttonClass = computed(() => {\n return (item: LayoutPageTabItem) => {\n const isActive = activeItem.value?.id === item.id\n const baseClasses = [\n 'relative',\n 'z-10',\n 'flex',\n 'items-center',\n 'disabled:opacity-60 disabled:hover:border-transparent disabled:cursor-not-allowed disabled:hover:bg-transparent',\n 'text-body-xs',\n 'hover:sm:border-outline-2',\n 'pb-2',\n 'border-b-[2px]',\n 'border-transparent',\n 'max-w-max',\n 'last:mr-6',\n 'whitespace-nowrap'\n ]\n\n if (isActive) baseClasses.push('text-primary', 'hover:text-primary')\n else baseClasses.push('text-foreground')\n\n return baseClasses\n }\n})\n\nconst activeItemRef = computed(() => {\n const id = activeItem.value?.id\n if (!id) return null\n\n const parent = buttonContainer.value\n if (!parent) return null\n\n const btns = [...parent.getElementsByClassName('tab-button')] as HTMLElement[]\n return btns.find((b) => b.dataset['tabId'] === id) || null\n})\n\nconst borderStyle = computed<CSSProperties>(() => ({\n left: underlineLeft.value,\n width: underlineWidth.value\n}))\n\nconst updateUnderline = () => {\n const el = activeItemRef.value\n if (!el) return\n\n underlineLeft.value = `${el.offsetLeft}px`\n underlineWidth.value = `${el.clientWidth}px`\n}\n\nconst setActiveItem = (item: LayoutPageTabItem) => {\n activeItem.value = item\n isInitialSetup.value = false\n}\n\nconst isActiveItem = (item: LayoutPageTabItem) => {\n return activeItem.value?.id === item.id\n}\n\nconst checkArrowsVisibility = () => {\n const container = scrollContainer.value\n if (!container) return\n\n const scrollWidth = container.scrollWidth\n const clientWidth = container.clientWidth\n const scrollLeft = container.scrollLeft\n const buffer = 1\n\n showLeftArrow.value = scrollLeft > buffer\n showRightArrow.value = scrollLeft < scrollWidth - clientWidth - buffer\n}\n\nconst scrollLeft = () => {\n scrollContainer.value?.scrollBy({ left: -100, behavior: 'smooth' }) // Adjust the scroll amount as needed\n checkArrowsVisibility()\n}\n\nconst scrollRight = () => {\n scrollContainer.value?.scrollBy({ left: 100, behavior: 'smooth' }) // Adjust the scroll amount as needed\n checkArrowsVisibility()\n}\n\nconst handleScroll = throttle(() => {\n checkArrowsVisibility()\n}, 250)\n\nconst ensureActiveItemVisible = () => {\n const activeButton = activeItemRef.value\n if (activeButton && scrollContainer.value) {\n activeButton.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center'\n })\n }\n}\n\nonMounted(() => {\n if (isClient) {\n if (props.items.length && !activeItem.value) {\n setActiveItem(props.items[0])\n }\n checkArrowsVisibility()\n ensureActiveItemVisible()\n }\n})\n\nwatch(\n () => [props.items, activeItem.value] as const,\n ([newItems]) => {\n if (Array.isArray(newItems) && newItems.length && !activeItem.value) {\n setActiveItem(newItems[0])\n }\n checkArrowsVisibility()\n }\n)\n\nconst { stop: stopResizeObserver } = useResizeObserver(activeItemRef, () =>\n updateUnderline()\n)\n\nonBeforeUnmount(() => {\n handleScroll.cancel()\n stopResizeObserver()\n})\n</script>\n<style>\n/* Hide scrollbar for Chrome, Safari and Opera */\n.hide-scrollbar::-webkit-scrollbar {\n display: none;\n}\n\n/* Hide scrollbar for IE, Edge and Firefox */\n.hide-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n</style>\n","<template>\n <div class=\"flex space-y-8 lg:space-y-0 lg:space-x-8 flex-col lg:flex-row\">\n <div class=\"lg:w-2/12\">\n <div class=\"flex w-full flex-col space-y-1\">\n <button\n v-for=\"item in items\"\n :key=\"item.id\"\n :data-tab-id=\"item.id\"\n :class=\"[buttonClass(item)]\"\n :disabled=\"item.disabled\"\n @click=\"setActiveItem(item)\"\n >\n <div\n v-tippy=\"\n item.disabled && item.disabledMessage ? item.disabledMessage : undefined\n \"\n class=\"absolute top-0 right-0 left-0 bottom-0\"\n ></div>\n <div class=\"flex space-x-2 items-center px-2\">\n <component\n :is=\"item.icon\"\n v-if=\"item.icon\"\n class=\"shrink-0 h-4 w-4 stroke-[2px]\"\n ></component>\n <span class=\"min-w-6\">{{ item.title }}</span>\n <div\n v-if=\"item.count\"\n class=\"rounded-full px-2 text-body-3xs transition-all min-w-6\"\n :class=\"\n activeItem?.id === item.id\n ? 'text-primary bg-info-lighter dark:text-foreground'\n : 'text-foreground-2 bg-foundation-2'\n \"\n >\n <span>{{ item.count }}</span>\n </div>\n <div\n v-if=\"item.tag\"\n class=\"text-body-3xs font-medium py-0.5 px-1.5 text-foreground-2 bg-foundation-2 uppercase text-outline-4 rounded\"\n >\n {{ item.tag }}\n </div>\n </div>\n </button>\n </div>\n </div>\n\n <div class=\"lg:w-10/12\">\n <slot :active-item=\"activeItem\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, watch } from 'vue'\nimport type { LayoutPageTabItem } from '~~/src/helpers/layout/components'\nimport { isClient } from '@vueuse/core'\n\nconst props = defineProps<{\n items: LayoutPageTabItem[]\n}>()\n\nconst activeItem = defineModel<LayoutPageTabItem>('activeItem', { required: true })\n\nconst buttonClass = computed(() => {\n return (item: LayoutPageTabItem) => {\n const isActive = activeItem.value?.id === item.id\n const baseClasses = [\n 'relative',\n 'flex items-center space-x-1.5',\n 'hover:bg-highlight-2',\n 'disabled:opacity-60 disabled:hover:border-transparent disabled:cursor-not-allowed disabled:hover:bg-transparent rounded-md',\n 'text-body-xs font-medium',\n 'py-1'\n ]\n\n if (isActive) baseClasses.push('bg-primary-muted')\n else baseClasses.push('border-transparent text-foreground')\n\n return baseClasses\n }\n})\n\nconst setActiveItem = (item: LayoutPageTabItem) => {\n activeItem.value = item\n}\n\nonMounted(() => {\n if (isClient) {\n if (props.items.length && !activeItem.value) {\n setActiveItem(props.items[0])\n }\n }\n})\n\nwatch(\n () => [props.items, activeItem.value],\n ([newItems]) => {\n if (Array.isArray(newItems) && newItems.length && !activeItem.value) {\n setActiveItem(newItems[0])\n }\n }\n)\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div :class=\"tableClasses\">\n <div :class=\"headerRowClasses\" :style=\"{ paddingRight: paddingRightStyle }\">\n <div\n v-for=\"(column, colIndex) in columns\"\n :key=\"column.id\"\n :class=\"getHeaderClasses(column.id, colIndex)\"\n >\n {{ column.header }}\n </div>\n </div>\n <div :class=\"resultContainerClasses\">\n <div\n v-if=\"loading || !items\"\n class=\"flex items-center justify-center py-3\"\n tabindex=\"0\"\n >\n <CommonLoadingIcon />\n </div>\n <template v-else-if=\"items?.length\">\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n :style=\"{ paddingRight: paddingRightStyle }\"\n :class=\"rowsWrapperClasses\"\n tabindex=\"0\"\n @click=\"handleRowClick(item)\"\n @keypress=\"handleRowClick(item)\"\n >\n <template v-for=\"(column, colIndex) in columns\" :key=\"column.id\">\n <div :class=\"getClasses(column.id, colIndex)\" tabindex=\"0\">\n <slot :name=\"column.id\" :item=\"item\">\n <div class=\"text-foreground-2 font-medium order-1\">Placeholder</div>\n </slot>\n </div>\n </template>\n <div\n v-if=\"buttons\"\n class=\"absolute right-1.5 space-x-1 flex items-center p-0 h-full\"\n >\n <div v-for=\"button in buttons\" :key=\"button.label\">\n <FormButton\n v-tippy=\"button.tooltip\"\n :icon-left=\"button.icon\"\n size=\"sm\"\n color=\"outline\"\n hide-text\n :disabled=\"button.disabled\"\n :class=\"button.class\"\n :to=\"isString(button.action) ? button.action : undefined\"\n @click.stop=\"!isString(button.action) ? button.action(item) : noop\"\n />\n </div>\n </div>\n </div>\n </template>\n <div\n v-else\n tabindex=\"0\"\n :style=\"{ paddingRight: paddingRightStyle }\"\n :class=\"rowsWrapperClasses\"\n >\n <div :class=\"getClasses(undefined, 0)\" tabindex=\"0\">\n <slot name=\"empty\">\n <div class=\"w-full text-center label-light text-foreground-2 italic\">\n {{ emptyMessage }}\n </div>\n </slot>\n </div>\n </div>\n <slot name=\"loader\" />\n </div>\n </div>\n</template>\n<script setup lang=\"ts\" generic=\"T extends {id: string}, C extends string\">\nimport { noop, isString } from '#lodash'\nimport { computed } from 'vue'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport { CommonLoadingIcon, FormButton } from '~~/src/lib'\nimport { directive as vTippy } from 'vue-tippy'\n\nexport type TableColumn<I> = {\n id: I\n header: string\n classes: string\n}\n\nexport type RowButton<T = unknown> = {\n icon: PropAnyComponent\n label: string\n action: (item: T) => unknown\n class?: string\n tooltip?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n items: T[] | undefined | null\n buttons?: RowButton<T>[]\n columns: TableColumn<C>[]\n overflowCells?: boolean\n onRowClick?: (item: T) => void\n rowItemsAlign?: 'center' | 'stretch'\n emptyMessage?: string\n loading?: boolean\n }>(),\n { rowItemsAlign: 'center', emptyMessage: 'No data found' }\n)\n\nconst tableClasses = computed(() => {\n const classParts = [\n 'w-full text-foreground text-sm border border-outline-3 rounded-lg',\n 'overflow-x-auto simple-scrollbar',\n 'h-full flex flex-col'\n ]\n return classParts.join(' ')\n})\n\nconst sharedContainerClasses = computed(() => {\n const classParts = ['w-full min-w-[750px]']\n return classParts.join(' ')\n})\n\nconst resultContainerClasses = computed(() => {\n const classParts = [\n 'divide-y divide-outline-3 overflow-y-auto overflow-x-hidden simple-scrollbar',\n sharedContainerClasses.value\n ]\n\n if (props.overflowCells) {\n classParts.push('pb-32')\n }\n\n return classParts.join(' ')\n})\n\nconst buttonCount = computed(() => {\n return (props.buttons || []).length\n})\nconst paddingRightStyle = computed(() => {\n let padding = 16\n if (buttonCount.value > 0) {\n padding = 48 + (buttonCount.value - 1) * 42\n }\n return `${padding}px`\n})\n\nconst rowsWrapperClasses = computed(() => {\n const classParts = [\n 'relative grid grid-cols-12 items-center space-x-6 px-4 py-0.5 min-w-[750px] text-body-xs'\n ]\n\n if (props.onRowClick && props.items?.length) {\n classParts.push('cursor-pointer hover:bg-highlight-1')\n }\n\n switch (props.rowItemsAlign) {\n case 'center':\n classParts.push('items-center')\n break\n case 'stretch':\n classParts.push('items-stretch')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst getHeaderClasses = (\n column: C | undefined,\n colIndex: number,\n options?: Partial<{\n noPadding: boolean\n }>\n): string => {\n const columnClasses = column\n ? props.columns.find((c) => c.id === column)?.classes\n : ''\n const classParts = [columnClasses || '']\n\n if (!options?.noPadding) {\n if (colIndex === 0) {\n classParts.push('px-1')\n } else {\n classParts.push('lg:p-0 px-1')\n }\n }\n\n return classParts.join(' ')\n}\n\nconst getClasses = (\n column: C | undefined,\n colIndex: number,\n options?: Partial<{\n noPadding: boolean\n }>\n): string => {\n const classParts = [getHeaderClasses(column, colIndex, options)]\n\n if (colIndex === 0) {\n classParts.push(`bg-transparent py-2 ${column ? 'pr-5' : 'col-span-full'}`)\n } else {\n classParts.push(`my-2`)\n }\n\n return classParts.join(' ')\n}\n\nconst handleRowClick = (item: T) => {\n props.onRowClick?.(item)\n}\n\nconst headerRowClasses = computed(() => [\n 'z-10 grid grid-cols-12 items-center',\n 'space-x-6',\n 'px-4 py-3',\n 'bg-foundation-2 rounded-t-lg',\n 'font-medium text-body-2xs text-foreground-2',\n 'border-b border-outline-3',\n sharedContainerClasses.value\n])\n</script>\n","<template>\n <div ref=\"wrapper\">\n <InternalInfiniteLoading\n v-if=\"initializeLoader\"\n v-bind=\"$props.settings || {}\"\n @infinite=\"$emit('infinite', $event)\"\n >\n <template #spinner>\n <CommonLoadingBar :loading=\"true\" class=\"my-2\" />\n </template>\n <template #complete>\n <!-- No \"No more items\" message, instead a small amount of spacing -->\n <div :class=\"{ 'h-8': !hideWhenComplete }\"></div>\n </template>\n <template #error=\"{ retry }\">\n <div class=\"w-full flex flex-col items-center my-2 space-y-2 mt-4\">\n <div class=\"inline-flex items-center space-x-1\">\n <ExclamationTriangleIcon class=\"w-5 h-5 text-danger\" />\n <span class=\"text-foreground-2\">An error occurred while loading</span>\n </div>\n <FormButton v-if=\"allowRetry\" @click=\"retry\">Retry</FormButton>\n </div>\n </template>\n </InternalInfiniteLoading>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport InternalInfiniteLoading from 'v3-infinite-loading'\nimport { ExclamationTriangleIcon } from '@heroicons/vue/24/outline'\nimport type { InfiniteLoaderState } from '~~/src/helpers/global/components'\nimport type { Nullable } from '@speckle/shared'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\nimport { onMounted, ref } from 'vue'\nimport { isClient } from '@vueuse/core'\nimport FormButton from '~~/src/components/form/Button.vue'\n\ndefineEmits<{\n (e: 'infinite', $state: InfiniteLoaderState): void\n}>()\n\ndefineProps<{\n /**\n * v3-infinite-loading props, see docs or type definitions\n */\n settings?: {\n target?: string\n distance?: number\n top?: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n identifier?: any\n firstload?: boolean\n }\n /**\n * Whether to allow retry and show a retry button when loading fails\n */\n allowRetry?: boolean\n /**\n * Hide completely and prevent taking any space when not loading\n */\n hideWhenComplete?: boolean\n}>()\n\nconst wrapper = ref(null as Nullable<HTMLElement>)\nconst initializeLoader = ref(false)\n\n// This hack is necessary cause sometimes v3-infinite-loading initializes too early and doesnt trigger\nif (isClient) {\n onMounted(() => {\n const int = setInterval(() => {\n if (wrapper.value?.isConnected) {\n initializeLoader.value = true\n clearInterval(int)\n }\n }, 200)\n })\n}\n</script>\n","<template>\n <div class=\"relative group\">\n <div\n v-if=\"fancyGlow\"\n class=\"absolute -top-1 -left-1 -right-1 -bottom-1 bg-blue-300 dark:bg-blue-500 opacity-5 dark:opacity-0 rounded-md blur-sm group-hover:opacity-60 dark:group-hover:opacity-30 transition duration-500\"\n ></div>\n <Component\n :is=\"form ? 'form' : 'div'\"\n :class=\"[\n 'relative divide-outline-3 bg-foundation text-foreground flex flex-col divide-y overflow-hidden',\n computedClasses\n ]\"\n @submit=\"emit('submit', $event)\"\n >\n <div v-if=\"$slots.header\" :class=\"secondarySlotPaddingClasses\">\n <slot name=\"header\" />\n </div>\n <div :class=\"['grow', defaultSlotPaddingClasses]\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" :class=\"secondarySlotPaddingClasses\">\n <slot name=\"footer\" />\n </div>\n </Component>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst emit = defineEmits<{ (e: 'submit', val: SubmitEvent): void }>()\n\nconst props = defineProps({\n /**\n * Use a `<form/>` element as a wrapper that will emit 'submit' events out from the component when they occur\n */\n form: {\n type: Boolean,\n default: false\n },\n /**\n * Add a ring outline on hover\n */\n ring: {\n type: Boolean,\n default: false\n },\n /**\n * Add a primary-colored glow on hover\n */\n fancyGlow: {\n type: Boolean,\n default: false\n },\n customPadding: {\n type: Boolean,\n default: false\n },\n noShadow: {\n type: Boolean,\n default: false\n },\n panelClasses: {\n type: String\n }\n})\n\nconst secondarySlotPaddingClasses = computed(() =>\n props.customPadding ? '' : 'px-4 py-4 sm:px-6'\n)\nconst defaultSlotPaddingClasses = computed(() =>\n props.customPadding ? '' : 'px-4 py-4 sm:p-6'\n)\n\nconst computedClasses = computed(() => {\n const classParts: string[] = ['rounded-lg']\n\n if (!props.noShadow) classParts.push('shadow')\n if (props.ring) {\n classParts.push('ring-outline-1 hover:ring-1')\n }\n if (props.panelClasses) {\n classParts.push(props.panelClasses)\n }\n\n return classParts.join(' ')\n})\n</script>\n","<template>\n <!-- If promo content is defined, scroll the menu items. If not, scroll the whole aside -->\n <aside\n class=\"flex flex-col justify-between h-full w-full\"\n :class=\"$slots.promo ? '' : 'overflow-y-auto overflow-x-hidden simple-scrollbar'\"\n >\n <div\n class=\"flex flex-col h-full w-full\"\n :class=\"$slots.promo ? 'overflow-y-auto overflow-x-hidden simple-scrollbar' : ''\"\n >\n <slot></slot>\n </div>\n <div v-if=\"$slots.promo\" class=\"shrink-0 pt-2\">\n <slot name=\"promo\"></slot>\n </div>\n </aside>\n</template>\n","<template>\n <div\n class=\"flex flex-col gap-y-1 sm:gap-y-2 border border-outline-3 rounded-lg py-2 px-3 sm:p-4 select-none\"\n >\n <h6\n v-if=\"title\"\n class=\"text-body-xs sm:text-heading-sm font-medium text-foreground\"\n >\n {{ title }}\n </h6>\n <p v-if=\"text\" class=\"text-body-2xs sm:text-body-xs text-foreground-2 !leading-5\">\n {{ text }}\n </p>\n <FormButton\n v-if=\"buttonText\"\n size=\"sm\"\n class=\"mt-1\"\n :to=\"to\"\n :target=\"to ? '_blank' : undefined\"\n @click=\"$emit('onClick')\"\n >\n {{ buttonText }}\n </FormButton>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport FormButton from '~~/src/components/form/Button.vue'\n\ndefineEmits(['onClick'])\n\ndefineProps<{\n title?: string\n text?: string\n to?: string\n buttonText?: string\n}>()\n</script>\n","<template>\n <nav class=\"flex flex-col\">\n <slot></slot>\n </nav>\n</template>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M8 3V13M3 8H13\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n </svg>\n</template>\n","<template>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.66748 3.66687H3.00081C2.64719 3.66687 2.30805 3.80735 2.058 4.05739C1.80796 4.30744 1.66748 4.64658 1.66748 5.0002V11.0002C1.66748 11.3538 1.80796 11.693 2.058 11.943C2.30805 12.1931 2.64719 12.3335 3.00081 12.3335H9.00081C9.35443 12.3335 9.69357 12.1931 9.94362 11.943C10.1937 11.693 10.3341 11.3538 10.3341 11.0002V10.3335\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12.59 3.39007C12.8526 3.12751 13.0001 2.77139 13.0001 2.40007C13.0001 2.02875 12.8526 1.67264 12.59 1.41007C12.3274 1.14751 11.9713 1 11.6 1C11.2287 1 10.8726 1.14751 10.61 1.41007L5 7.00007V9.00007H7L12.59 3.39007Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M9.66748 2.33313L11.6675 4.33313\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n</template>\n","<template>\n <svg\n width=\"16\"\n height=\"32\"\n viewBox=\"0 0 16 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.64645 17.7498C7.84171 17.9451 8.15829 17.9451 8.35355 17.7498L11.1464 14.9569C11.4614 14.642 11.2383 14.1034 10.7929 14.1034H5.20711C4.76165 14.1034 4.53857 14.642 4.85355 14.9569L7.64645 17.7498Z\"\n fill=\"currentColor\"\n />\n </svg>\n</template>\n","<template>\n <div class=\"flex flex-col group\">\n <div\n v-if=\"title\"\n class=\"h-8 flex items-center justify-between select-none rounded-md\"\n :class=\"[collapsible && !noHover && 'hover:bg-highlight-1']\"\n >\n <component\n :is=\"collapsible ? 'button' : 'div'\"\n class=\"flex items-center w-full\"\n :class=\"[\n collapsible ? 'group rounded-md gap-x-1' : 'space-x-1 p-1 text-foreground-2',\n collapsible && !noHover ? 'py-0.5 px-2' : 'pl-2'\n ]\"\n @click=\"collapsible ? (isCollapsed = !isCollapsed) : undefined\"\n >\n <ArrowFilled\n v-if=\"collapsible\"\n :class=\"[isCollapsed ? '-rotate-90' : '', noHover ? '-ml-1' : '']\"\n class=\"text-foreground-2 shrink-0\"\n />\n <div\n v-if=\"$slots['title-icon']\"\n class=\"flex items-center justify-center\"\n :class=\"[collapsible ? 'ml-1 mr-2' : '']\"\n >\n <slot name=\"title-icon\"></slot>\n </div>\n <div class=\"flex flex-1 items-center truncate justify-between\">\n <h6\n class=\"truncate text-body-2xs pr-2\"\n :class=\"[nested ? 'text-foreground' : 'font-semibold text-foreground-2']\"\n >\n {{ title }}\n </h6>\n <CommonBadge v-if=\"tag\" rounded>\n {{ tag }}\n </CommonBadge>\n </div>\n </component>\n <button\n v-if=\"iconClick\"\n v-tippy=\"iconText ? iconText : undefined\"\n :disabled=\"iconDisabled\"\n class=\"group-hover:flex p-1 shrink-0 hover:bg-primary-muted rounded text-foreground-2\"\n :class=\"[\n noHover ? '' : 'mr-2',\n alwaysShowIcon ? 'flex' : 'hidden',\n iconDisabled ? 'opacity-50 cursor-not-allowed' : ''\n ]\"\n @click=\"iconClick\"\n >\n <Edit v-if=\"icon === 'edit'\" class=\"h-4 w-4\" />\n <ChevronRightIcon v-else-if=\"icon === 'view'\" class=\"h-4 w-4\" />\n <Plus v-else class=\"h-4 w-4\" />\n </button>\n </div>\n\n <div v-show=\"!isCollapsed\" class=\"flex flex-col\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Plus from '~~/src/components/global/icon/Plus.vue'\nimport Edit from '~~/src/components/global/icon/Edit.vue'\nimport ArrowFilled from '~~/src/components/global/icon/ArrowFilled.vue'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport { ChevronRightIcon } from '@heroicons/vue/24/outline'\n\ndefineProps<{\n tag?: string\n title?: string\n collapsible?: boolean\n collapsed?: boolean\n icon?: 'add' | 'edit' | 'view'\n iconText?: string\n iconClick?: () => void\n iconDisabled?: boolean\n noHover?: boolean\n nested?: boolean\n alwaysShowIcon?: boolean\n}>()\n\nconst isCollapsed = defineModel<boolean>('collapsed')\n</script>\n","<template>\n <div\n v-if=\"!hasChildren\"\n v-tippy=\"tooltipText\"\n :to=\"to\"\n class=\"group/item flex items-center justify-between space-x-2 shrink-0 text-body-xs text-foreground select-none rounded-md w-full py-1\"\n :class=\"[\n !disabled && 'cursor-pointer hover:bg-highlight-1',\n disabled && 'cursor-not-allowed',\n active && 'bg-highlight-3 hover:!bg-highlight-3',\n $slots.icon ? 'pl-1 pr-2' : 'pr-2 pl-7',\n extraPadding && '!pl-14'\n ]\"\n >\n <div\n class=\"flex items-center space-x-2 truncate\"\n :class=\"[disabled && 'opacity-60']\"\n >\n <div v-if=\"$slots.icon\" class=\"h-6 w-6 flex items-center justify-center\">\n <slot name=\"icon\" />\n </div>\n <span class=\"truncate\">\n {{ label }}\n </span>\n <ArrowUpRightIcon\n v-if=\"external\"\n class=\"h-2.5 w-2.5 !stroke-[3px] -ml-1 -mt-1.5 opacity-0 group-hover/item:opacity-100 shrink-0\"\n />\n </div>\n <CommonBadge\n v-if=\"tag\"\n rounded\n :color-classes=\"\n colorClasses ?? (disabled ? 'text-foreground-2 bg-primary-muted' : undefined)\n \"\n >\n {{ tag }}\n </CommonBadge>\n </div>\n <div v-else class=\"flex flex-col\">\n <button\n v-tippy=\"tooltipText\"\n class=\"flex space-x-1.5 items-center w-full rounded-md p-0.5\"\n :class=\"[\n !disabled && 'cursor-pointer text-foreground-2 hover:text-foreground',\n disabled && 'opacity-60'\n ]\"\n @click=\"toggleOpen\"\n >\n <ArrowFilled class=\"h-1 w-2 shrink-0\" :class=\"[isOpen ? '' : '-rotate-90']\" />\n\n <h6 class=\"text-heading-sm flex items-center space-x-1.5\">\n {{ label }}\n </h6>\n </button>\n <div v-show=\"isOpen\" class=\"pl-4\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, useSlots, type SetupContext } from 'vue'\nimport ArrowFilled from '~~/src/components/global/icon/ArrowFilled.vue'\nimport { ArrowUpRightIcon } from '@heroicons/vue/24/outline'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\n\nconst props = defineProps<{\n label: string\n to?: string\n tag?: string\n external?: boolean\n disabled?: boolean\n active?: boolean\n tooltipText?: string\n extraPadding?: boolean\n colorClasses?: string\n}>()\n\nconst isOpen = ref(true)\n\nconst slots: SetupContext['slots'] = useSlots()\n\nconst hasChildren = !!slots.default\n\nconst toggleOpen = () => {\n if (!props.disabled) {\n isOpen.value = !isOpen.value\n }\n}\n</script>\n","<template>\n <div :class=\"containerClasses\">\n <div :class=\"subcontainerClasses\">\n <div v-if=\"!hideIcon\">\n <Component :is=\"icon\" :class=\"iconClasses\" aria-hidden=\"true\" />\n </div>\n <div class=\"flex-1\">\n <h3 v-if=\"hasTitle\" :class=\"titleClasses\">\n <slot name=\"title\">Title</slot>\n </h3>\n <div v-if=\"hasDescription\" :class=\"descriptionClasses\">\n <slot name=\"description\">\n Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid pariatur,\n ipsum similique veniam.\n </slot>\n </div>\n </div>\n <div class=\"flex gap-x-2\">\n <FormButton\n v-for=\"(action, i) in actions || []\"\n :key=\"i\"\n color=\"outline\"\n size=\"sm\"\n :to=\"action.url\"\n :external=\"action.externalUrl || false\"\n :disabled=\"action.disabled || false\"\n @click=\"handleActionClick(action)\"\n >\n {{ action.title }}\n </FormButton>\n </div>\n <div\n v-if=\"withDismiss\"\n class=\"flex\"\n :class=\"[hasDescription ? 'items-start' : 'items-center']\"\n >\n <FormButton type=\"button\" color=\"subtle\" size=\"sm\" @click=\"$emit('dismiss')\">\n Dismiss\n </FormButton>\n </div>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {\n CheckCircleIcon,\n XCircleIcon,\n InformationCircleIcon,\n ExclamationCircleIcon\n} from '@heroicons/vue/24/outline'\nimport { noop } from '#lodash'\nimport { computed, useSlots, type SetupContext } from 'vue'\nimport FormButton from '~~/src/components/form/Button.vue'\nimport type {\n PropAnyComponent,\n AlertAction,\n AlertColor\n} from '~~/src/helpers/common/components'\n\ntype Size = 'default' | 'xs' | '2xs'\n\ndefineEmits<{ (e: 'dismiss'): void }>()\n\nconst props = withDefaults(\n defineProps<{\n color?: AlertColor\n withDismiss?: boolean\n actions?: Array<AlertAction>\n customIcon?: PropAnyComponent\n hideIcon?: boolean\n size?: Size\n }>(),\n {\n color: 'success',\n size: 'default'\n }\n)\n\nconst slots: SetupContext['slots'] = useSlots()\nconst hasDescription = computed(() => !!slots['description'])\nconst hasTitle = computed(() => !!slots['title'])\n\nconst icon = computed(() => {\n if (props.customIcon) return props.customIcon\n\n switch (props.color) {\n case 'info':\n return InformationCircleIcon\n case 'warning':\n return ExclamationCircleIcon\n case 'danger':\n return XCircleIcon\n case 'success':\n return CheckCircleIcon\n default:\n return InformationCircleIcon\n }\n})\n\nconst containerClasses = computed(() => {\n const classParts: string[] = ['rounded-lg text-foreground border']\n\n switch (props.size) {\n case '2xs':\n case 'xs':\n classParts.push('p-2')\n break\n case 'default':\n default:\n classParts.push(hasDescription.value ? 'p-3 sm:p-4' : 'p-2')\n break\n }\n\n switch (props.color) {\n case 'success':\n classParts.push('bg-success-lightest border-outline-2')\n break\n case 'info':\n classParts.push('bg-foundation-2 border-outline-3')\n break\n case 'danger':\n classParts.push('bg-danger-lightest border-outline-2')\n break\n case 'warning':\n classParts.push('bg-warning-lightest border-outline-2')\n break\n case 'neutral':\n classParts.push('bg-foundation border-outline-2')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst subcontainerClasses = computed(() => {\n const classParts: string[] = ['flex items-center w-full']\n\n switch (props.size) {\n case '2xs':\n case 'xs':\n classParts.push('gap-x-1.5')\n break\n case 'default':\n default:\n classParts.push('gap-x-3')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = []\n\n switch (props.size) {\n case '2xs':\n classParts.push('h-4 w-4')\n break\n case 'xs':\n classParts.push('h-5 w-5')\n break\n case 'default':\n default:\n classParts.push('h-6 w-6')\n break\n }\n\n switch (props.color) {\n case 'success':\n classParts.push('text-success-darker')\n break\n case 'info':\n classParts.push('text-info-darker dark:text-primary')\n break\n case 'danger':\n classParts.push('text-danger-darker')\n break\n case 'warning':\n classParts.push('text-warning-darker')\n break\n case 'neutral':\n classParts.push('text-foreground-2')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst titleClasses = computed(() => {\n const classParts: string[] = ['font-medium']\n\n switch (props.size) {\n case '2xs':\n classParts.push('text-body-2xs')\n break\n case 'default':\n default:\n classParts.push('text-body-xs')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst descriptionClasses = computed(() => {\n const classParts: string[] = ['whitespace-normal']\n\n switch (props.size) {\n case '2xs':\n classParts.push('text-body-2xs pt-0.5')\n break\n case 'default':\n default:\n classParts.push('text-body-xs')\n break\n }\n\n return classParts.join(' ')\n})\n\nfunction handleActionClick(action: AlertAction) {\n if (action.onClick) {\n action.onClick()\n } else {\n noop()\n }\n}\n</script>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type MaybeAsync, buildManualPromise } from '@speckle/shared'\nimport { computedAsync } from '@vueuse/core'\nimport type { AsyncComputedOptions } from '@vueuse/core'\nimport { computed } from 'vue'\nimport type { ComputedRef } from 'vue'\n\nexport interface AsyncWritableComputedOptions<T> {\n get: (...args: any[]) => MaybeAsync<T>\n set: (value: T) => MaybeAsync<void>\n initialState: T\n readOptions?: AsyncComputedOptions\n asyncRead?: boolean\n debugging?: Partial<{\n log: {\n name: string\n writesOnly?: boolean\n readsOnly?: boolean\n logger?: (msg: string, ...args: any[]) => void\n }\n }>\n}\n\nexport type AsyncWritableComputedRef<T> = ComputedRef<T> & {\n update: AsyncWritableComputedOptions<T>['set']\n}\n\n/**\n * Allows async read/write from/to computed. Use `res.value` to read and `res.update` to write. If you only need\n * the computed to be read-only then use vueuse's `computedAsync`. If you only need async writes you can\n * disable async reads through the `asyncRead` param.\n * @param params\n */\nexport function writableAsyncComputed<T>(\n params: AsyncWritableComputedOptions<T>\n): AsyncWritableComputedRef<T> {\n const { get, initialState, readOptions, set, asyncRead = true, debugging } = params\n const logSettings = debugging?.log\n const getTrace = () => (new Error('Trace:').stack || '').substring(7)\n const logger = params.debugging?.log?.logger || console.debug\n\n const finalGet: typeof get =\n logSettings && !logSettings.writesOnly\n ? () => {\n const res = get()\n logger(`debugging: '${logSettings.name}' read`, res, getTrace())\n return res\n }\n : get\n\n const finalSet: typeof set =\n logSettings && !logSettings.readsOnly\n ? (newVal) => {\n logger(`debugging: '${logSettings.name}' written to`, newVal, getTrace())\n return set(newVal)\n }\n : set\n\n const readValue = asyncRead\n ? computedAsync(finalGet, initialState, readOptions)\n : computed(finalGet)\n\n const getter = computed(() => readValue.value) as AsyncWritableComputedRef<T>\n getter.update = finalSet\n\n return getter\n}\n\nexport { buildManualPromise }\n","<template>\n <slot />\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable, Optional } from '@speckle/shared'\nimport { getCurrentInstance, inject } from 'vue'\nimport type { ComponentInternalInstance, Ref } from 'vue'\n\n/**\n * Sort of hacky - we need to manipulate the @headlessui combobox state, but it can't be injected\n * from its parent component (Tags.vue). This being initialized inside of a slot of the combobox,\n * it has access to the context\n *\n * Also the context is inaccessible due to it being tied to a private symbol, so we need\n * to retrieve that a bit hackily too.\n */\n\n// Copied from headlessui\nenum Focus {\n /** Focus the first non-disabled item. */\n First,\n\n /** Focus the previous non-disabled item. */\n Previous,\n\n /** Focus the next non-disabled item. */\n Next,\n\n /** Focus the last non-disabled item. */\n Last,\n\n /** Focus a specific item based on the `id` of the item. */\n Specific,\n\n /** Focus no items at all. */\n Nothing\n}\n\nenum ComboboxStates {\n Open,\n Closed\n}\n\nconst instance = getCurrentInstance() as ComponentInternalInstance & {\n provides: Record<symbol | string, unknown>\n}\nconst provides = instance['provides']\nconst ctxKey = Object.getOwnPropertySymbols(provides).find(\n (s) => s.description === 'ComboboxContext'\n)\nif (!ctxKey) {\n console.error('FormTagsContextManager ctx key not found!')\n}\n\nconst state = inject(ctxKey || '__undefined') as Optional<{\n goToOption: (focus: Focus) => void\n openCombobox: () => void\n closeCombobox: () => void\n activeOptionIndex: Ref<Nullable<number>>\n selectActiveOption: () => void\n comboboxState: Ref<ComboboxStates>\n}>\n\nif (!state) {\n console.error('FormTagsContextManager ctx not found!')\n}\n\nconst goUp = () => {\n state?.goToOption(Focus.Previous)\n}\nconst goDown = () => {\n state?.goToOption(Focus.Next)\n}\nconst open = () => {\n if (!state) return\n state.openCombobox()\n}\nconst close = () => {\n state?.closeCombobox()\n}\nconst selectActive = () => {\n state?.selectActiveOption()\n}\nconst isOpen = () => state?.comboboxState.value === ComboboxStates.Open\n\ndefineExpose({ goUp, goDown, open, close, selectActive, isOpen })\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <Combobox\n v-model=\"selectedItems\"\n as=\"div\"\n multiple\n clearable\n :class=\"[wrapperClasses]\"\n >\n <FormTagsContextManager ref=\"ctxManager\">\n <label :for=\"name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n </label>\n <div\n class=\"relative flex flex-wrap items-center space-x-1 px-2 py-1\"\n :class=\"inputWrapperClasses\"\n >\n <CommonBadge\n v-for=\"tag in selectedItems\"\n :key=\"tag\"\n :icon-left=\"!disabled ? XMarkIcon : undefined\"\n clickable-icon\n size=\"lg\"\n @click-icon=\"() => removeTag(tag)\"\n >\n {{ tag }}\n </CommonBadge>\n <input\n ref=\"inputEl\"\n v-model=\"query\"\n :disabled=\"disabled\"\n class=\"bg-transparent grow shrink border-0 focus:ring-0 p-0\"\n :class=\"[coreInputClasses, sizeClasses]\"\n style=\"flex-basis: 70px; min-width: 70px\"\n :placeholder=\"!selectedItems.length ? placeholder : undefined\"\n @input=\"onQueryInput\"\n @keydown.escape=\"onQueryEscape\"\n @keydown.enter.stop.prevent=\"onQueryInput($event, true)\"\n @keydown.tab=\"onQueryInput\"\n @keydown.backspace=\"onQueryBackspace\"\n @keydown.arrow-up=\"onQueryArrowUp\"\n @keydown.arrow-down=\"onQueryArrowDown\"\n @blur=\"isAutocompleteOpen = false\"\n />\n <a\n v-if=\"shouldShowClear\"\n title=\"Clear input\"\n class=\"absolute top-2 right-0 flex items-center pr-2 cursor-pointer\"\n @click=\"clear\"\n @keydown=\"clear\"\n >\n <span class=\"text-xs sr-only\">Clear input</span>\n <XMarkIcon class=\"h-5 w-5 text-foreground\" aria-hidden=\"true\" />\n </a>\n <div\n v-if=\"errorMessage\"\n :class=\"[\n 'pointer-events-none absolute top-[10px] right-0 flex items-center',\n shouldShowClear ? 'pr-8' : 'pr-2'\n ]\"\n >\n <ExclamationCircleIcon class=\"h-4 w-4 text-danger\" aria-hidden=\"true\" />\n </div>\n <div\n v-else-if=\"showRequired\"\n class=\"pointer-events-none absolute top-[2px] text-4xl right-0 flex items-center text-danger opacity-50\"\n :class=\"shouldShowClear ? 'pr-8' : 'pr-2'\"\n >\n *\n </div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">(optional)</div>\n </div>\n <TransitionRoot\n leave=\"transition ease-in duration-100\"\n leave-from=\"opacity-100\"\n leave-to=\"opacity-0\"\n class=\"relative px-0.5\"\n >\n <ComboboxOptions\n class=\"absolute top-1 max-h-60 w-full overflow-auto simple-scrollbar rounded-md bg-foundation py-1 shadow label label--light outline outline-2 outline-primary-muted focus:outline-none\"\n >\n <div\n v-if=\"isAutocompleteLoading\"\n class=\"px-1\"\n :class=\"autocompleteItems.length ? 'mb-1' : ''\"\n >\n <CommonLoadingBar :loading=\"true\" />\n </div>\n <div v-if=\"!autocompleteItems.length && !isAutocompleteLoading\">\n <div class=\"text-foreground-2 text-center\">\n Press\n <strong>Enter</strong>\n to create tag ⚡\n </div>\n </div>\n <template v-if=\"autocompleteItems.length\">\n <ComboboxOption\n v-for=\"tag in autocompleteItems\"\n :key=\"tag\"\n v-slot=\"{ selected, active }\"\n as=\"template\"\n :value=\"tag\"\n >\n <li\n class=\"relative cursor-pointer select-none py-1.5 pl-3\"\n :class=\"{\n 'text-primary': active,\n 'text-foreground': !active\n }\"\n >\n <span\n class=\"block truncate\"\n :class=\"{ 'font-medium': selected, 'font-normal': !selected }\"\n >\n {{ tag }}\n </span>\n <span\n v-if=\"selected\"\n class=\"absolute top-0 bottom-0 right-0 flex items-center pr-4\"\n :class=\"{ 'text-primary': active, 'text-foreground': !active }\"\n >\n <CheckIcon class=\"h-5 w-5\" aria-hidden=\"true\" />\n </span>\n </li>\n </ComboboxOption>\n </template>\n </ComboboxOptions>\n </TransitionRoot>\n <p\n v-if=\"helpTipId && !hideHelpTip\"\n :id=\"helpTipId\"\n class=\"mt-2\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </FormTagsContextManager>\n </Combobox>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, toRefs, watch, onMounted } from 'vue'\nimport {\n Combobox,\n ComboboxOptions,\n ComboboxOption,\n TransitionRoot\n} from '@headlessui/vue'\nimport { CheckIcon, XMarkIcon, ExclamationCircleIcon } from '@heroicons/vue/20/solid'\nimport { debounce, uniq } from '#lodash'\nimport { useTextInputCore } from '~~/src/composables/form/textInput'\nimport type { InputColor } from '~~/src/composables/form/textInput'\nimport type { RuleExpression } from 'vee-validate'\nimport type { MaybeAsync, Nullable } from '@speckle/shared'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport FormTagsContextManager from '~~/src/components/form/tags/ContextManager.vue'\nimport { useFocus } from '@vueuse/core'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\n\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\ntype Tag = string\nconst isInputEvent = (e: Event): e is InputEvent => e.type === 'input'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: Tag[]): void\n (e: 'change', val: { event?: Event; value: Tag[] }): void\n (e: 'clear'): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n name: string\n help?: string\n label?: string\n showLabel?: boolean\n rules?: RuleExpression<Tag[]>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n autoFocus?: boolean\n showClear?: boolean\n showRequired?: boolean\n showOptional?: boolean\n color?: InputColor\n wrapperClasses?: string\n size?: InputSize\n placeholder?: string\n disabled?: boolean\n useLabelInErrors?: boolean\n getAutocompleteItems?: (query: string) => MaybeAsync<Tag[]>\n modelValue?: Tag[]\n }>(),\n {\n size: 'base',\n color: 'page',\n useLabelInErrors: true\n }\n)\n\n// const localValue = defineModel<Tag[]>({ local: true })\nconst inputEl = ref(null as Nullable<HTMLInputElement>)\nconst { focused: isInputFocused } = useFocus(inputEl)\n\nconst ctxManager = ref(\n null as Nullable<{\n goUp: () => void\n goDown: () => void\n open: () => void\n close: () => void\n selectActive: () => void\n isOpen: () => boolean\n }>\n)\n\nconst {\n coreInputClasses,\n coreClasses,\n labelClasses,\n title,\n helpTip,\n helpTipId,\n hideHelpTip,\n helpTipClasses,\n errorMessage,\n clear,\n value\n} = useTextInputCore({\n props: toRefs(props),\n emit,\n inputEl\n // options: {\n // customClear: () => (selectedItems.value = [])\n // }\n})\n\nconst autocompleteItems = ref([] as string[])\nconst isAutocompleteLoading = ref(false)\nconst isAutocompleteOpen = ref(false)\nconst query = ref('')\n\nconst selectedItems = computed({\n get: () => value.value || [],\n set: (newVal) => {\n value.value = uniq(newVal).filter((t) => !!t.length)\n }\n})\n\nconst sizeClasses = computed((): string => {\n switch (props.size) {\n case 'sm':\n return 'h-6'\n case 'lg':\n return 'h-10'\n case 'xl':\n return 'h-14'\n case 'base':\n default:\n return 'h-8'\n }\n})\n\nconst shouldShowClear = computed(() => props.showClear && !!selectedItems.value.length)\n\nconst inputWrapperClasses = computed(() => {\n const classParts: string[] = [\n coreClasses.value,\n props.disabled\n ? 'cursor-not-allowed !bg-foundation-disabled !text-disabled-muted'\n : ''\n ]\n\n if (shouldShowClear.value && (errorMessage.value || props.showRequired)) {\n classParts.push('pr-14')\n } else if (shouldShowClear.value || errorMessage.value || props.showRequired) {\n classParts.push('pr-8')\n }\n\n if (errorMessage.value) {\n classParts.push('border-2 border-danger text-danger-darker')\n if (isInputFocused.value) {\n classParts.push('ring-1 ring-danger')\n }\n } else {\n classParts.push('border border-outline-3')\n if (isInputFocused.value) {\n classParts.push('ring-1 ring-outline-3')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst removeTag = (tag: Tag) => {\n if (props.disabled) return\n\n const idx = selectedItems.value.indexOf(tag)\n if (idx !== -1) {\n const newSelected = selectedItems.value.slice()\n newSelected.splice(idx, 1)\n\n selectedItems.value = newSelected\n }\n}\n\nconst onQueryEscape = () => {\n inputEl.value?.blur()\n isAutocompleteOpen.value = false\n}\n\nconst onQueryBackspace = (e: KeyboardEvent) => {\n if (e.key !== 'Backspace') return\n if (query.value.length) return\n\n // Clear last tag\n const newTags = selectedItems.value.slice()\n newTags.pop()\n selectedItems.value = newTags\n isAutocompleteOpen.value = false\n}\n\nconst onQueryArrowUp = () => {\n if (ctxManager.value?.isOpen()) {\n ctxManager.value?.goUp()\n } else {\n ctxManager.value?.open()\n }\n}\n\nconst onQueryArrowDown = () => {\n if (ctxManager.value?.isOpen()) {\n ctxManager.value?.goDown()\n } else {\n ctxManager.value?.open()\n }\n}\n\nconst resolveAutocompleteItems = async () => {\n if (!props.getAutocompleteItems) return\n\n isAutocompleteLoading.value = true\n autocompleteItems.value = await Promise.resolve(\n props.getAutocompleteItems(query.value)\n )\n isAutocompleteLoading.value = false\n}\nconst debouncedResolve = debounce(resolveAutocompleteItems, 1000)\nconst debouncedResolveAndMarkLoading = async () => {\n isAutocompleteLoading.value = true\n await debouncedResolve()\n}\n\nconst onQueryInput = (e: Event, forceCreateFromInput?: boolean) => {\n const isAddingTag = isInputEvent(e)\n ? e.data === ' ' || e.data === ',' || e.data === ';'\n : true\n\n if (isAddingTag) {\n let selected = false\n if (\n ctxManager.value?.isOpen() &&\n autocompleteItems.value.length &&\n !forceCreateFromInput\n ) {\n // Add from opened autocomplete panel\n ctxManager.value?.selectActive()\n selected = true\n } else {\n // Add from query\n const newTag = query.value\n .trim()\n .substring(0, query.value.length - (isInputEvent(e) ? 1 : 0))\n\n const tagExists = selectedItems.value.includes(newTag)\n if (newTag.length > 0 && !tagExists) {\n selectedItems.value = [...selectedItems.value, newTag]\n selected = true\n }\n }\n\n if (selected) {\n query.value = ''\n isAutocompleteOpen.value = false\n }\n } else {\n isAutocompleteOpen.value = !!query.value.length\n }\n}\n\nwatch(isAutocompleteOpen, (newIsOpen, oldIsOpen) => {\n if (newIsOpen && !oldIsOpen) {\n if (props.getAutocompleteItems) ctxManager.value?.open()\n } else if (!newIsOpen && oldIsOpen) {\n ctxManager.value?.close()\n }\n})\n\nwatch(query, () => {\n void debouncedResolveAndMarkLoading()\n})\n\n// // syncing value w/ vee-validate internal state\n// watch(\n// selectedItems,\n// (newVal) => {\n// value.value = newVal.slice()\n// },\n// { deep: true, immediate: true }\n// )\n\nonMounted(() => {\n void resolveAutocompleteItems()\n})\n\ndefineExpose({ resolveAutocompleteItems })\n</script>\n","import { computed } from 'vue'\nimport type { ToRefs } from 'vue'\n\nexport type AvatarUser = {\n name: string\n avatar?: string | null\n}\n\nexport type AvatarUserWithId = AvatarUser & { id: string }\n\nexport type UserAvatarSize =\n | '2xs'\n | 'xs'\n | 'sm'\n | 'base'\n | 'lg'\n | 'xl'\n | 'xxl'\n | '3xl'\n | 'editable'\n\nexport function useAvatarSizeClasses(params: {\n props: ToRefs<{\n size?: UserAvatarSize\n }>\n}) {\n const { props } = params\n\n const heightClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n return 'h-4'\n case 'xs':\n return 'h-5'\n case 'sm':\n return 'h-6'\n case 'lg':\n return 'h-10'\n case 'xl':\n return 'h-14'\n case 'xxl':\n return 'h-24'\n case '3xl':\n return 'h-32'\n case 'editable':\n return 'h-60'\n case 'base':\n default:\n return 'h-8'\n }\n })\n\n const widthClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n return 'w-4'\n case 'xs':\n return 'w-5'\n case 'sm':\n return 'w-6'\n case 'lg':\n return 'w-10'\n case 'xl':\n return 'w-14'\n case 'xxl':\n return 'w-24'\n case '3xl':\n return 'w-32'\n case 'editable':\n return 'w-60'\n case 'base':\n default:\n return 'w-8'\n }\n })\n\n const textClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n case 'xs':\n return 'text-tiny'\n case 'sm':\n return 'text-xs'\n case 'lg':\n return 'text-md'\n case 'xl':\n return 'text-2xl'\n case 'xxl':\n return 'text-2xl'\n case '3xl':\n return 'text-3xl'\n case 'editable':\n return 'h1'\n case 'base':\n default:\n return 'text-body-2xs'\n }\n })\n\n const iconClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n case 'xs':\n return 'w-3 h-3'\n case 'sm':\n return 'w-3 h-3'\n case 'lg':\n return 'w-5 h-5'\n case 'xl':\n return 'w-8 h-8'\n case 'xxl':\n return 'w-10 h-10'\n case 'editable':\n return 'w-20 h-20'\n case 'base':\n default:\n return 'w-4 h-4'\n }\n })\n\n const sizeClasses = computed(\n () => `${widthClasses.value} ${heightClasses.value} ${textClasses.value}`\n )\n\n return { heightClasses, widthClasses, sizeClasses, iconClasses }\n}\n","<template>\n <div\n :class=\"[\n 'text-foreground-on-primary flex shrink-0 items-center justify-center overflow-hidden uppercase transition',\n rounded ? 'rounded-full' : 'rounded-md',\n sizeClasses,\n bgClasses,\n borderClasses,\n hoverClasses,\n activeClasses\n ]\"\n >\n <slot>\n <div\n v-if=\"user?.avatar\"\n v-tippy=\"!hideTooltip ? props.user?.name : undefined\"\n class=\"h-full w-full bg-cover bg-center bg-no-repeat\"\n :style=\"{ backgroundImage: `url('${user.avatar}')` }\"\n />\n <div\n v-else-if=\"initials\"\n v-tippy=\"!hideTooltip ? props.user?.name : undefined\"\n :class=\"textClasses\"\n class=\"flex h-full w-full select-none items-center justify-center\"\n >\n {{ initials }}\n </div>\n <div v-else><UserCircleIcon :class=\"iconClasses\" /></div>\n </slot>\n <slot name=\"absolute-anchor\" />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { UserCircleIcon } from '@heroicons/vue/24/solid'\nimport type { MaybeNullOrUndefined } from '@speckle/shared'\nimport { computed, toRefs } from 'vue'\nimport { useAvatarSizeClasses } from '~~/src/composables/user/avatar'\nimport type { AvatarUser, UserAvatarSize } from '~~/src/composables/user/avatar'\n\nconst props = withDefaults(\n defineProps<{\n user?: MaybeNullOrUndefined<AvatarUser>\n size?: UserAvatarSize\n hoverEffect?: boolean\n active?: boolean\n noBorder?: boolean\n noBg?: boolean\n hideTooltip?: boolean\n rounded?: boolean\n lightStyle?: boolean\n }>(),\n {\n size: 'base',\n hoverEffect: false,\n user: null,\n rounded: true,\n lightStyle: false\n }\n)\n\nconst { sizeClasses, iconClasses } = useAvatarSizeClasses({ props: toRefs(props) })\n\nconst initials = computed(() => {\n if (!props.user?.name?.length) return\n const parts = props.user.name.split(' ')\n const firstLetter = parts[0]?.[0] || ''\n const secondLetter = parts[1]?.[0] || ''\n\n if (props.size === 'sm' || props.size === 'xs') return firstLetter\n return firstLetter + secondLetter\n})\n\nconst borderClasses = computed(() => {\n if (props.noBorder) return ''\n if (props.lightStyle) return 'border border-outline-2'\n return 'border border-foundation'\n})\n\nconst bgClasses = computed(() => {\n if (props.noBg) return ''\n if (props.lightStyle) return 'bg-foundation-2'\n return 'bg-info-darker'\n})\n\nconst hoverClasses = computed(() => {\n if (props.hoverEffect)\n return 'hover:border-primary focus:border-primary active:scale-95'\n return ''\n})\n\nconst activeClasses = computed(() => {\n if (props.active) return 'border-primary'\n return ''\n})\n\nconst textClasses = computed(() => {\n if (props.lightStyle) return 'text-foreground-3'\n return ''\n})\n</script>\n","<template>\n <div ref=\"elementToWatchForChanges\" :class=\"`flex ${overlap ? '-space-x-2' : ''}`\">\n <div\n ref=\"itemContainer\"\n :class=\"`flex flex-wrap overflow-hidden ${\n overlap ? '-space-x-2 ' : ''\n } ${heightClasses}`\"\n >\n <UserAvatar\n v-for=\"(user, i) in visibleUsers\"\n :key=\"user.id || i\"\n :user=\"user\"\n :size=\"size\"\n :hide-tooltip=\"hideTooltips\"\n />\n </div>\n <UserAvatar\n v-if=\"totalHiddenCount\"\n :size=\"size\"\n class=\"select-none\"\n :class=\"{ 'cursor-pointer': !!onHiddenCountClick }\"\n @click=\"onHiddenCountClick && onHiddenCountClick()\"\n >\n +{{ totalHiddenCount }}\n </UserAvatar>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable } from '@speckle/shared'\nimport { computed, ref, toRefs } from 'vue'\nimport UserAvatar from '~~/src/components/user/Avatar.vue'\nimport { useWrappingContainerHiddenCount } from '~~/src/composables/layout/resize'\nimport { useAvatarSizeClasses } from '~~/src/composables/user/avatar'\nimport type { UserAvatarSize, AvatarUserWithId } from '~~/src/composables/user/avatar'\n\nconst props = withDefaults(\n defineProps<{\n users: AvatarUserWithId[]\n overlap?: boolean\n size?: UserAvatarSize\n maxCount?: number\n hideTooltips?: boolean\n maxAvatars?: number\n onHiddenCountClick?: () => void\n }>(),\n {\n users: () => [],\n overlap: true,\n size: 'base',\n maxCount: undefined,\n hideTooltips: false,\n maxAvatars: undefined,\n onHiddenCountClick: undefined\n }\n)\n\nconst elementToWatchForChanges = ref(null as Nullable<HTMLElement>)\nconst itemContainer = ref(null as Nullable<HTMLElement>)\n\nconst { hiddenItemCount } = useWrappingContainerHiddenCount({\n elementToWatchForChanges,\n itemContainer,\n trackResize: true,\n trackMutations: true\n})\n\nconst { heightClasses } = useAvatarSizeClasses({ props: toRefs(props) })\n\nconst maxCountHiddenItemCount = computed(() => {\n if (!props.maxCount) return 0\n return Math.max(props.users.length - props.maxCount, 0)\n})\n\nconst visibleUsers = computed(() => {\n const result = props.users\n const limit = Math.min(props.maxCount ?? Infinity, props.maxAvatars ?? Infinity)\n return result.slice(0, limit)\n})\n\nconst maxAvatarsHiddenCount = computed(() => {\n if (!props.maxAvatars) return 0\n return Math.max(props.users.length - props.maxAvatars, 0)\n})\n\nconst totalHiddenCount = computed(\n () =>\n hiddenItemCount.value + maxCountHiddenItemCount.value + maxAvatarsHiddenCount.value\n)\n</script>\n","<template>\n <svg\n class=\"spinner\"\n :class=\"iconClasses\"\n width=\"32px\"\n height=\"40px\"\n viewBox=\"0 0 66 66\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n class=\"path\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n cx=\"33\"\n cy=\"33\"\n r=\"30\"\n ></circle>\n </svg>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype Size = 'base' | 'sm' | 'lg'\n\nconst props = withDefaults(defineProps<{ loading?: boolean; size?: Size }>(), {\n size: 'base',\n loading: true\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = ['']\n classParts.push(props.loading ? 'opacity-100' : 'opacity-0')\n\n switch (props.size) {\n case 'base':\n classParts.push('h-5 w-5')\n break\n case 'sm':\n classParts.push('h-4 w-4')\n break\n case 'lg':\n classParts.push('h-8 w-8')\n break\n }\n\n return classParts.join(' ')\n})\n</script>\n\n<style scoped>\n@keyframes rotator {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dashoffset: 187;\n }\n 50% {\n stroke-dashoffset: 46.75;\n transform: rotate(135deg);\n }\n 100% {\n stroke-dashoffset: 187;\n transform: rotate(450deg);\n }\n}\n\n.spinner {\n animation: rotator 1.4s linear infinite;\n}\n\n.path {\n stroke-dasharray: 187;\n stroke-dashoffset: 0;\n transform-origin: center;\n animation: dash 1.4s ease-in-out infinite;\n}\n</style>\n","<template>\n <div class=\"flex flex-col items-center space-y-2\">\n <LazyUserAvatarEditor\n v-if=\"editMode\"\n :user=\"modelAsUser\"\n :disabled=\"disabled\"\n :size=\"size\"\n :rounded=\"rounded\"\n @cancel=\"editMode = false\"\n @save=\"onSave\"\n />\n <div v-else class=\"relative group\">\n <img\n v-if=\"!modelAsUser.avatar && defaultImg\"\n :src=\"defaultImg\"\n :alt=\"modelAsUser.name\"\n :class=\"sizeClasses\"\n />\n <UserAvatar\n v-else\n hide-tooltip\n :user=\"modelAsUser\"\n :size=\"size\"\n :light-style=\"lightStyle\"\n :rounded=\"rounded\"\n />\n <div\n class=\"opacity-0 transition-all absolute group-hover:opacity-100 top-0 right-0 left-0 bottom-0 flex items-end justify-center bottom-4\"\n >\n <FormButton\n size=\"sm\"\n :disabled=\"disabled\"\n color=\"outline\"\n @click=\"editMode = true\"\n >\n Change\n </FormButton>\n </div>\n </div>\n <div v-if=\"errorMessage\" class=\"w-full text-center text-danger text-sm\">\n {{ errorMessage }}\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { MaybeNullOrUndefined, Nullable } from '@speckle/shared'\nimport { computed, defineAsyncComponent, toRefs } from 'vue'\nimport FormButton from '~~/src/components/form/Button.vue'\nimport UserAvatar from '~~/src/components/user/Avatar.vue'\nimport type { AvatarUser, UserAvatarSize } from '~~/src/composables/user/avatar'\nimport CommonLoadingIcon from '~~/src/components/common/loading/Icon.vue'\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { useAvatarSizeClasses } from '~~/src/composables/user/avatar'\n\ntype ModelType = MaybeNullOrUndefined<string>\n\nconst LazyUserAvatarEditor = defineAsyncComponent({\n loader: () => import('~~/src/components/user/AvatarEditor.vue'),\n loadingComponent: CommonLoadingIcon,\n delay: 100\n})\n\nconst emit = defineEmits<{\n (e: 'save', newUrl: ModelType): void\n (e: 'update:modelValue', value: ModelType): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: ModelType\n /**\n * Placeholder name that will be used to generate and show initials if no avatar is present\n */\n placeholder: string\n /**\n * Name of the field. Used for validation & form submits\n */\n name: string\n rules?: RuleExpression<ModelType>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n disabled?: boolean\n size?: UserAvatarSize\n defaultImg?: string\n rounded?: boolean\n lightStyle?: boolean\n }>(),\n {\n rounded: true,\n lightStyle: false\n }\n)\n\nconst { value, errorMessage } = useField<ModelType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n validateOnValueUpdate: props.validateOnValueUpdate,\n initialValue: props.modelValue || undefined\n})\nconst { sizeClasses } = useAvatarSizeClasses({ props: toRefs(props) })\n\nconst editMode = defineModel<boolean>('editMode')\n\nconst modelAsUser = computed(\n (): AvatarUser => ({\n avatar: value.value,\n name: props.placeholder\n })\n)\n\nconst onSave = (newUrl: Nullable<string>) => {\n value.value = newUrl\n emit('save', newUrl)\n}\n\nconst open = () => (editMode.value = true)\nconst close = () => (editMode.value = false)\n\ndefineExpose({ open, close })\n</script>\n","/**\n * Base ObjectLoader error\n */\nexport abstract class BaseError extends Error {\n /**\n * Default message if none is passed\n */\n static defaultMessage = 'Unexpected error occurred'\n\n constructor(message?: string, options?: ErrorOptions) {\n message ||= new.target.defaultMessage\n super(message, options)\n }\n}\n\n/**\n * Throw these in execution branches that should never occur unless if there's a bug\n */\nexport class LogicError extends BaseError {\n static defaultMessage = 'An unexpected logic error occurred!'\n}\n\nexport class UninitializedResourceAccessError extends BaseError {\n static defaultMessage = 'Attempting to access an uninitialized resource'\n}\n\nexport class ComposableInvokedOutOfScopeError extends BaseError {\n static defaultMessage =\n 'getCurrentInstance() returned null. Method must be called at the top of a setup function'\n}\n\n/**\n * Throw this when something that's only supported during CSR is invoked during SSR or vice versa\n */\nexport class UnsupportedEnvironmentError extends BaseError {\n static defaultMessage =\n 'Operation not supported in current (server or client) environment'\n}\n","import { difference, intersection } from '#lodash'\nimport { md5 } from '@speckle/shared'\nimport type { Nullable } from '@speckle/shared'\nimport { BaseError } from '~~/src/helpers/common/error'\n\nexport type FileTypeSpecifier = UniqueFileTypeSpecifier | `.${string}`\n\nexport enum UniqueFileTypeSpecifier {\n AnyAudio = 'audio/*',\n AnyVideo = 'video/*',\n AnyImage = 'image/*'\n}\n\n/**\n * Validate if file has the allowed type. While we could also test for MIME types\n * not in UniqueFileTypeSpecifier, this function is meant to be equivalent to the\n * 'accept' attribute, which only allows for extensions or UniqueFileTypeSpecifier\n * values.\n * @param file\n * @param allowedTypes The file must have one of these types\n * @returns True if valid, Error object if not\n */\nexport function validateFileType(\n file: File,\n allowedTypes: FileTypeSpecifier[]\n): true | Error {\n // Check one of the unique file type specifiers first\n const allowedUniqueTypes = intersection(\n Object.values(UniqueFileTypeSpecifier),\n allowedTypes\n )\n for (const allowedUniqueType of allowedUniqueTypes) {\n switch (allowedUniqueType) {\n case UniqueFileTypeSpecifier.AnyAudio:\n if (file.type.startsWith('audio')) return true\n break\n case UniqueFileTypeSpecifier.AnyImage:\n if (file.type.startsWith('image')) return true\n break\n case UniqueFileTypeSpecifier.AnyVideo:\n if (file.type.startsWith('video')) return true\n break\n }\n }\n\n // Check file extensions\n const allowedExtensions = difference(allowedTypes, allowedUniqueTypes)\n const fileExt = resolveFileExtension(file.name)\n if (!fileExt) return new MissingFileExtensionError()\n\n for (const allowedExtension of allowedExtensions) {\n if (allowedExtension.toLowerCase() === fileExt.toLowerCase()) return true\n }\n\n return new ForbiddenFileTypeError()\n}\n\n/**\n * Resolve file extension (with leading dot)\n */\nexport function resolveFileExtension(fileName: string): Nullable<FileTypeSpecifier> {\n const fileNameParts = fileName.split('.')\n if (fileNameParts.length < 2) return null\n\n const ext = fileNameParts.pop() || null\n return ext ? `.${ext}` : null\n}\n\n/**\n * Check if string is a FileTypeSpecifier\n */\nexport function isFileTypeSpecifier(type: string): type is FileTypeSpecifier {\n return (\n type.startsWith('.') ||\n Object.values(UniqueFileTypeSpecifier as Record<string, string>).includes(type)\n )\n}\n\n/**\n * Create a human readable file size string from the numeric size in bytes\n */\nexport function prettyFileSize(sizeInBytes: number): string {\n const removeTrailingZeroes = (fileSize: number) =>\n parseFloat(fileSize.toFixed(2)).toString()\n\n if (sizeInBytes < 1024) {\n return `${sizeInBytes}bytes`\n }\n\n const kbSize = sizeInBytes / 1024\n if (kbSize < 1024) {\n return `${removeTrailingZeroes(kbSize)}KB`\n }\n\n const mbSize = kbSize / 1024\n if (mbSize < 1024) {\n return `${removeTrailingZeroes(mbSize)}MB`\n }\n\n const gbSize = mbSize / 1024\n return `${removeTrailingZeroes(gbSize)}GB`\n}\n\n/**\n * Generate an ID that uniquely identifies a specific file. The same file\n * will always have the same ID.\n */\nexport function generateFileId(file: File): string {\n const importantData = {\n name: file.name,\n lastModified: file.lastModified,\n size: file.size,\n type: file.type\n }\n\n return md5(JSON.stringify(importantData))\n}\n\nexport class MissingFileExtensionError extends BaseError {\n static defaultMessage = 'The selected file has a missing extension'\n}\n\nexport class ForbiddenFileTypeError extends BaseError {\n static defaultMessage = 'The selected file type is forbidden'\n}\n","import type { MaybeRef } from '@vueuse/core'\nimport type { MaybeNullOrUndefined, Nullable, Optional } from '@speckle/shared'\nimport {\n generateFileId,\n isFileTypeSpecifier,\n prettyFileSize,\n validateFileType\n} from '~~/src/helpers/form/file'\nimport type { FileTypeSpecifier } from '~~/src/helpers/form/file'\nimport { computed, unref } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport { BaseError } from '~~/src/lib'\nimport type { BlobUploadStatus } from '@speckle/shared/blobs'\n\n/**\n * A file, as emitted out from FileUploadZone\n */\nexport interface UploadableFileItem {\n file: File\n error: Nullable<Error>\n /**\n * You can use this ID to check for File equality\n */\n id: string\n}\n\nexport type BlobPostResultItem = {\n blobId?: string\n fileName?: string\n fileSize?: number\n formKey: string\n /**\n * Success = 1, Failure = 2\n */\n uploadStatus: BlobUploadStatus\n uploadError: string\n}\n\nexport interface UploadFileItem extends UploadableFileItem {\n /**\n * Progress between 0 and 100\n */\n progress: number\n\n /**\n * When upload has finished this contains a BlobPostResultItem\n */\n result: Optional<BlobPostResultItem>\n\n /**\n * When a blob gets assigned to a resource, it should count as in use, and this will\n * prevent it from being deleted as junk\n */\n inUse?: boolean\n}\n\nfunction buildFileTypeSpecifiers(\n accept: Optional<string>\n): Optional<FileTypeSpecifier[]> {\n if (!accept) return undefined\n const specifiers = accept\n .split(',')\n .map((s) => (isFileTypeSpecifier(s) ? s : null))\n .filter((s): s is FileTypeSpecifier => s !== null)\n\n return specifiers.length ? specifiers : undefined\n}\n\nexport function usePrepareUploadableFiles(params: {\n disabled?: MaybeRef<Optional<boolean>>\n accept?: MaybeRef<Optional<string>>\n multiple?: MaybeRef<Optional<boolean>>\n countLimit?: MaybeRef<Optional<number>>\n sizeLimit: MaybeRef<number>\n}) {\n const { disabled, accept, multiple, sizeLimit, countLimit } = params\n\n const fileTypeSpecifiers = computed(() => buildFileTypeSpecifiers(unref(accept)))\n\n const handleFiles = (files: File[]): UploadableFileItem[] => {\n const results: UploadableFileItem[] = []\n const allowedTypes = fileTypeSpecifiers.value\n\n for (const file of files) {\n const id = generateFileId(file)\n const finalCountLimit = !unref(multiple) ? 1 : unref(countLimit)\n\n // skip file, if it's selected twice somehow\n if (results.find((r) => r.id === id)) continue\n\n // Only allow a single file if !multiple\n if (finalCountLimit && results.length >= finalCountLimit) {\n break\n }\n\n if (allowedTypes) {\n const validationResult = validateFileType(file, allowedTypes)\n if (validationResult instanceof Error) {\n results.push({\n file,\n id,\n error: validationResult\n })\n continue\n }\n }\n\n if (file.size > unref(sizeLimit)) {\n results.push({\n file,\n id,\n error: new FileTooLargeError(\n `The selected file's size (${prettyFileSize(\n file.size\n )}) is too big (over ${prettyFileSize(unref(sizeLimit))})`\n )\n })\n continue\n }\n\n results.push({ file, id, error: null })\n }\n\n return results\n }\n\n return {\n /**\n * Validate incoming files and build UploadableFileItem structs out of them\n */\n buildUploadableFiles: (files: File[]) => {\n if (unref(disabled || false)) return\n return handleFiles(files)\n }\n }\n}\n\nexport class FileTooLargeError extends BaseError {\n static defaultMessage = \"The selected file's size is too large\"\n}\n\nexport function useFileUploadProgressCore(params: {\n item: MaybeRef<MaybeNullOrUndefined<UploadFileItem>>\n}) {\n const errorMessage = computed(() => {\n const item = unref(params.item)\n if (!item) return null\n\n const itemError = item.error\n if (itemError) return itemError.message\n\n const uploadError = item.result?.uploadError\n if (uploadError) return uploadError\n\n return null\n })\n\n const progressBarColorClass = computed(() => {\n const item = unref(params.item)\n if (errorMessage.value) return 'bg-danger'\n if (item && item.progress >= 100) return 'bg-success'\n return 'bg-primary'\n })\n\n const progressBarClasses = computed(() => {\n return ['h-1', progressBarColorClass.value].join(' ')\n })\n\n const progressBarStyle = computed((): CSSProperties => {\n const item = unref(params.item)\n return {\n width: `${item ? item.progress : 0}%`\n }\n })\n\n return { errorMessage, progressBarClasses, progressBarStyle }\n}\n","<!-- eslint-disable vuejs-accessibility/form-control-has-label -->\n<template>\n <div ref=\"fileUploadZone\" class=\"file-upload-zone\">\n <slot\n :is-dragging-files=\"isOverDropZone\"\n :open-file-picker=\"triggerPicker\"\n :activator-on=\"{ click: triggerPicker }\"\n />\n <input\n ref=\"fileInput\"\n type=\"file\"\n class=\"hidden\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n @click.stop\n @change=\"onInputChange\"\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable } from '@speckle/shared'\nimport { useDropZone } from '@vueuse/core'\nimport { computed, ref } from 'vue'\nimport { usePrepareUploadableFiles } from '~~/src/composables/form/fileUpload'\nimport type { UploadableFileItem } from '~~/src/composables/form/fileUpload'\n\nconst emit = defineEmits<{\n (e: 'files-selected', v: { files: UploadableFileItem[] }): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n /**\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept\n */\n accept?: string\n /**\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/multiple\n */\n multiple?: boolean\n /**\n * Max file size in bytes\n */\n sizeLimit?: number\n /**\n * Max file count if 'multiple' is set\n */\n countLimit?: number\n disabled?: boolean\n }>(),\n {\n sizeLimit: 1024 * 1024 * 100 // 100mb\n }\n)\n\nconst fileUploadZone = ref(null as Nullable<HTMLDivElement>)\nconst fileInput = ref(null as Nullable<HTMLInputElement>)\n\nconst { buildUploadableFiles } = usePrepareUploadableFiles({\n sizeLimit: computed(() => props.sizeLimit),\n countLimit: computed(() => props.countLimit),\n accept: computed(() => props.accept),\n multiple: computed(() => props.multiple),\n disabled: computed(() => props.disabled)\n})\nconst handleIncomingFiles = (files: File[]) => {\n const fileItems = buildUploadableFiles(files)\n if (!fileItems?.length) return\n emit('files-selected', { files: fileItems })\n}\n\nconst { isOverDropZone } = useDropZone(fileUploadZone, (files) => {\n if (!files?.length) return\n handleIncomingFiles(files)\n})\n\nconst onInputChange = () => {\n const input = fileInput.value\n if (!input) return\n\n const files = [...(input.files || [])]\n input.value = '' // Resetting value\n\n if (!files.length) return\n handleIncomingFiles(files)\n}\n\nconst triggerPicker = () => {\n fileInput.value?.click()\n}\n\ndefineExpose({\n triggerPicker\n})\n</script>\n","import type { Optional } from '@speckle/shared'\nimport type { Directive } from 'vue'\n\nconst keyboardClickableKeypressHandler = (e: KeyboardEvent) => {\n if (e.code !== 'Enter') return\n ;(e.target as Optional<HTMLElement>)?.click()\n}\n\n/**\n * Makes it possible to navigate to and click on the element using the keyboard\n */\nexport const vKeyboardClickable: Directive<HTMLElement> = {\n created(el) {\n el.setAttribute('tabindex', '0')\n el.addEventListener('keypress', keyboardClickableKeypressHandler)\n },\n unmounted(el) {\n el.removeEventListener('keypress', keyboardClickableKeypressHandler)\n }\n}\n","<template>\n <div class=\"relative w-full bg-outline-3 rounded h-1.5 overflow-hidden\">\n <div\n class=\"aboslute left-0 top-0 rounded h-1.5\"\n :class=\"colorClass\"\n :style=\"{ width: `${percentage <= 100 ? percentage : 100}%` }\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n currentValue: number\n maxValue: number\n}>()\n\nconst percentage = computed(() => (props.currentValue / props.maxValue) * 100)\nconst colorClass = computed(() => {\n if (percentage.value >= 100) {\n return 'bg-danger'\n }\n if (percentage.value >= 80) {\n return 'bg-warning'\n }\n\n return 'bg-success'\n})\n</script>\n","<template>\n <div\n class=\"bg-foundation-page shadow-sm flex flex-col gap-y-1 sm:gap-y-2 border border-outline-3 rounded-lg py-2 px-3 sm:p-4 select-none\"\n >\n <div class=\"flex justify-between items-center\">\n <h6\n v-if=\"title\"\n class=\"text-body-xs sm:text-heading-sm font-medium text-foreground\"\n >\n {{ title }}\n </h6>\n <X\n v-if=\"showCloser\"\n v-keyboard-clickable\n class=\"h-4 w-4 cursor-pointer focus:outline-none\"\n @click=\"$emit('close', $event)\"\n />\n </div>\n <p v-if=\"text\" class=\"text-body-2xs sm:text-body-xs text-foreground-2 !leading-5\">\n {{ text }}\n </p>\n <div class=\"flex justify-end\">\n <FormButton\n v-if=\"button\"\n size=\"sm\"\n class=\"mt-1\"\n :to=\"button.to\"\n :target=\"button.to ? '_blank' : undefined\"\n @click=\"$emit('click', $event)\"\n >\n {{ button.title }}\n </FormButton>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport FormButton from '~~/src/components/form/Button.vue'\nimport { X } from 'lucide-vue-next'\nimport { vKeyboardClickable } from '~~/src/directives/accessibility'\n\ndefineEmits<{\n click: [e: MouseEvent]\n close: [e: MouseEvent]\n}>()\n\ndefineProps<{\n title?: string\n text?: string\n button?: { to?: string; title: string }\n showCloser?: boolean\n}>()\n</script>\n","<template>\n <div class=\"w-full flex flex-col gap-1.5\" :style=\"props.style\">\n <div v-if=\"!hideHeader\" class=\"flex items-center justify-between\">\n <label\n :for=\"name\"\n class=\"block text-body-2xs\"\n :class=\"disabled ? 'text-foreground-2' : 'text-foreground'\"\n >\n {{ label || name }}\n </label>\n <input\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"currentValue\"\n :disabled=\"disabled\"\n :aria-label=\"`${label} current value`\"\n class=\"w-8 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-0.5 text-right\"\n @input=\"handleNumberInput\"\n @blur=\"validateAndClamp\"\n />\n </div>\n\n <input\n :id=\"name\"\n :name=\"name\"\n type=\"range\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"currentValue\"\n :disabled=\"disabled\"\n class=\"mt-1.5 w-full h-4 outline-none slider slider-gradient\"\n :class=\"{\n 'disabled:opacity-50 disabled:cursor-not-allowed': disabled,\n '!mt-0': inputBelowSlider\n }\"\n :aria-label=\"label\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"currentValue\"\n @input=\"handleInput\"\n />\n <input\n v-if=\"inputBelowSlider\"\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"currentValue\"\n :disabled=\"disabled\"\n :aria-label=\"`${label} current value`\"\n class=\"w-16 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-1\"\n @input=\"handleNumberInput\"\n @blur=\"validateAndClamp\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n min: number\n max: number\n step: number\n name: string\n label: string\n disabled?: boolean\n hideHeader?: boolean\n inputBelowSlider?: boolean\n style?: Record<string, string | number>\n}>()\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst currentValue = defineModel({\n type: Number,\n default: 0\n})\n\nconst clampValue = (value: number): number => {\n return Math.max(props.min, Math.min(props.max, value))\n}\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = Number(target.value)\n const clampedValue = clampValue(value)\n currentValue.value = clampedValue\n emit('update:modelValue', clampedValue)\n}\n\nconst handleNumberInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = Number(target.value)\n // Don't clamp during typing, only set the value\n currentValue.value = value\n emit('update:modelValue', value)\n}\n\nconst validateAndClamp = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = Number(target.value)\n const clampedValue = clampValue(value)\n\n if (value !== clampedValue) {\n target.value = clampedValue.toString()\n }\n\n currentValue.value = clampedValue\n emit('update:modelValue', clampedValue)\n}\n</script>\n\n<style lang=\"postcss\" scoped>\ninput[type='number']::-webkit-outer-spin-button,\ninput[type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\ninput[type='number'] {\n -moz-appearance: textfield;\n appearance: textfield;\n}\n\n.slider::-webkit-slider-runnable-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider::-moz-range-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider::-webkit-slider-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider::-moz-range-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n}\n\n/* Gradient styling for slider inputs when gradient custom properties are set */\n.slider-gradient::-webkit-slider-runnable-track {\n background: linear-gradient(\n to right,\n var(--gradient-from, var(--highlight-1)),\n var(--gradient-to, var(--highlight-1))\n ) !important;\n}\n</style>\n","<template>\n <div>\n <div class=\"w-full h-5 max-w-96\" :style=\"props.style\">\n <div class=\"relative\">\n <!-- Min range input -->\n <input\n :id=\"`${name}-min`\"\n :name=\"`${name}-min`\"\n type=\"range\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue.min\"\n :disabled=\"disabled\"\n class=\"absolute w-full h-4 outline-none slider slider-min\"\n style=\"-webkit-appearance: none; appearance: none; pointer-events: none\"\n :class=\"{ 'disabled:opacity-50 disabled:cursor-not-allowed': disabled }\"\n :aria-label=\"`${name} minimum`\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue.min\"\n @input=\"handleMinInput\"\n />\n\n <!-- Max range input -->\n <input\n :id=\"`${name}-max`\"\n :name=\"`${name}-max`\"\n type=\"range\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue.max\"\n :disabled=\"disabled\"\n class=\"absolute w-full h-4 outline-none slider slider-max px-0.5\"\n style=\"-webkit-appearance: none; appearance: none; pointer-events: none\"\n :class=\"{ 'disabled:opacity-50 disabled:cursor-not-allowed': disabled }\"\n :aria-label=\"`${name} maximum`\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue.max\"\n @input=\"handleMaxInput\"\n />\n\n <!-- Visual track highlight between handles -->\n <div\n class=\"absolute top-0.5 h-3 w-full pointer-events-none z-0 overflow-hidden\"\n style=\"background: transparent\"\n >\n <div\n class=\"absolute inset-0 bg-gray-300/60 dark:bg-gray-200/40\"\n :style=\"{\n left: trackLeft,\n right: trackRight\n }\"\n />\n </div>\n </div>\n </div>\n <div v-if=\"showFields\" class=\"flex justify-between gap-2 mt-0.5\">\n <input\n v-model=\"minValueString\"\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :disabled=\"disabled\"\n :aria-label=\"`${name}-min`\"\n placeholder=\"Min\"\n class=\"mt-0 w-16 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-1\"\n />\n\n <input\n v-model=\"maxValueString\"\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :disabled=\"disabled\"\n :aria-label=\"`${name}-max`\"\n placeholder=\"Max\"\n class=\"mt-0 w-16 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-1 text-right\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n min: number\n max: number\n step: number\n name: string\n disabled?: boolean\n showFields?: boolean\n style?: Record<string, string | number>\n}>()\n\nconst modelValue = defineModel<{ min: number; max: number }>({\n default: () => ({ min: 0, max: 100 })\n})\n\nconst clampValue = (value: number): number => {\n return Math.max(props.min, Math.min(props.max, value))\n}\n\n// String versions for FormTextInput compatibility\nconst minValueString = computed({\n get: () => modelValue.value.min.toString(),\n set: (value: string) => {\n const numValue = Number(value)\n if (!isNaN(numValue)) {\n const clampedValue = clampValue(numValue)\n const finalValue = Math.min(clampedValue, modelValue.value.max)\n modelValue.value = { ...modelValue.value, min: finalValue }\n }\n }\n})\n\nconst maxValueString = computed({\n get: () => modelValue.value.max.toString(),\n set: (value: string) => {\n const numValue = Number(value)\n if (!isNaN(numValue)) {\n const clampedValue = clampValue(numValue)\n const finalValue = Math.max(clampedValue, modelValue.value.min)\n modelValue.value = { ...modelValue.value, max: finalValue }\n }\n }\n})\n\nconst minPercentage = computed(() => {\n const basePercentage =\n ((modelValue.value.min - props.min) / (props.max - props.min)) * 100\n const thumbOffset = 0.5\n return Math.max(0, basePercentage - thumbOffset)\n})\n\nconst maxPercentage = computed(() => {\n const basePercentage =\n ((modelValue.value.max - props.min) / (props.max - props.min)) * 100\n const thumbOffset = 0.5\n return Math.min(100, basePercentage + thumbOffset)\n})\n\nconst trackLeft = computed(() => {\n const percentage = minPercentage.value\n if (percentage < 25) return `${percentage + 2.5}%`\n if (percentage > 75) return `${percentage - 2.5}%`\n return `${percentage}%`\n})\n\nconst trackRight = computed(() => {\n const percentage = 100 - maxPercentage.value\n if (percentage < 25) return `${percentage + 2.5}%`\n if (percentage > 75) return `${percentage - 2.5}%`\n return `${percentage}%`\n})\n\nconst handleMinInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = clampValue(Number(target.value))\n\n modelValue.value = {\n ...modelValue.value,\n min: Math.min(value, modelValue.value.max)\n }\n}\n\nconst handleMaxInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = clampValue(Number(target.value))\n\n modelValue.value = {\n ...modelValue.value,\n max: Math.max(value, modelValue.value.min)\n }\n}\n</script>\n\n<style lang=\"postcss\" scoped>\ninput[type='number']::-webkit-outer-spin-button,\ninput[type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\ninput[type='number'] {\n -moz-appearance: textfield;\n appearance: textfield;\n}\n\n/* Show track for min slider */\n.slider-min::-webkit-slider-runnable-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider-min::-moz-range-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n/* Hide track for max slider */\n.slider-max::-webkit-slider-runnable-track {\n background: transparent;\n border: none;\n outline: none;\n height: 16px;\n border-radius: 9999px;\n}\n\n.slider-max::-moz-range-track {\n background: transparent;\n border: none;\n outline: none;\n height: 16px;\n border-radius: 9999px;\n}\n\n/* Firefox specific track hiding */\n.slider::-moz-range-progress {\n background: transparent;\n}\n\n.slider::-webkit-slider-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n z-index: 20;\n position: relative;\n pointer-events: auto;\n}\n\n.slider::-moz-range-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n z-index: 20;\n position: relative;\n pointer-events: auto;\n}\n\n/* Gradient styling for slider inputs when gradient custom properties are set */\n.slider-min::-webkit-slider-runnable-track {\n background: linear-gradient(\n to right,\n var(--gradient-from, var(--highlight-1)),\n var(--gradient-to, var(--highlight-1))\n ) !important;\n}\n\n.slider-min::-moz-range-track {\n background: linear-gradient(\n to right,\n var(--gradient-from, var(--highlight-1)),\n var(--gradient-to, var(--highlight-1))\n ) !important;\n}\n</style>\n"],"names":["freeGlobal","freeGlobal$1","freeSelf","root","root$1","Symbol","Symbol$2","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","value","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","arrayMap","array","iteratee","index","length","isArray","isArray$1","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","isObject","type","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","INFINITY","MAX_INTEGER","toFinite","sign","toInteger","remainder","identity","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","coreJsData$1","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getValue","object","key","getNative","apply","thisArg","args","noop","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","defineProperty$1","baseSetToString","baseSetToString$1","setToString","setToString$1","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","MAX_SAFE_INTEGER","reIsUint","isIndex","eq","nativeMax","overRest","start","transform","otherArgs","baseRest","isLength","isArrayLike","isPrototype","Ctor","proto","baseTimes","n","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","isArguments$1","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","isBuffer$1","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeUtil$1","nodeIsTypedArray","isTypedArray","isTypedArray$1","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","arg","nativeKeys","nativeKeys$1","baseKeys","keys","nativeCreate","nativeCreate$1","hashClear","hashDelete","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","Hash","entries","entry","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","Map$1","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","arrayPush","values","offset","spreadableSymbol","isFlattenable","baseFlatten","depth","isStrict","baseClamp","number","lower","upper","clamp","Set","Set$1","setCacheAdd","setCacheHas","SetCache","cacheHas","cache","setToArray","set","now","now$1","FUNC_ERROR_TEXT","nativeMin","debounce","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","isArrayLikeObject","arrayIncludesWith","comparator","LARGE_ARRAY_SIZE","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","difference","difference$1","isString","baseValues","props","collection","guard","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","castArrayLikeObject","intersection","mapped","intersection$1","isBoolean","isNumber","isUndefined","throttle","createSet","createSet$1","baseUniq","seenIndex","uniq","emit","__emit","__props","NuxtLink","resolveDynamicComponent","RouterLink","linkComponent","buttonType","isDisabled","finalLeftIcon","CommonLoadingIcon","bgAndBorderClasses","classParts","colorsBgBorder","sizeClasses","paddingClasses","hasIconLeft","hasIconRight","hideText","generalClasses","baseClasses","additionalClasses","buttonClasses","iconClasses","onClick","e","_createBlock","_resolveDynamicComponent","to","external","_normalizeStyle","color","text","_openBlock","_renderSlot","_ctx","iconRight","loading","FormButton","ToastNotificationType","ToastNotificationType2","isTitleOnly","_a","_b","dismiss","onCtaClick","_c","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","_Transition","notification","_normalizeClass","_hoisted_3","_hoisted_4","_unref","CheckCircleIcon","XCircleIcon","ExclamationCircleIcon","InformationCircleIcon","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","TextLink","_hoisted_9","_cache","XMarkIcon","KEYBOARD_CLICK_CHAR","keyboardClick","cb","badgeColorClasses","badgeDotIconColorClasses","badgeClasses","dotClasses","onIconClick","dot","iconLeft","$event","junkVariable","markClassesUsed","classes","TailwindBreakpoints","useStepsInternals","params","modelValue","steps","orientation","goVerticalBelow","nonInteractive","stepsPadding","finalOrientation","newVal","getStepDisplayValue","step","isCurrentStep","isFinishedStep","switchStep","newStep","stepObj","listClasses","paddingHorizontal","paddingVertical","linkClasses","toRefs","ariaLabel","_Fragment","i","CheckIcon","_toDisplayString","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","labelClasses","leftMargin","extraListClasses","basic","_sfc_render","isAnimating","ref","mousePosition","isClicked","animationDuration","isMouseVisible","dynamicSlots","delay","action","toggleSlotVisibility","slotToToggle","slot","handleAction","onMounted","onBeforeUnmount","ClickIcon","MouseIcon","_renderList","slotObject","isPlaying","play","__expose","title","vimeoId","muted","controls","darkPlaceholder","lightPlaceholder","placeholderAlt","IconPlay","computedClasses","disabled","generateRandomId","prefix","nanoid","checkboxValue","coreChecked","errorMessage","handleChange","coreValue","useField","descriptionText","descriptionId","descriptionClasses","implicitId","finalId","checkboxClasses","onChange","newModelValue","newCoreValue","shouldBeChecked","isCoreChecked","_mergeProps","$attrs","Minus","radioValue","selected","selectItem","isStacked","option","useTextInputCore","inputEl","veeErrorMessage","unref","coreInputClasses","coreClasses","hasError","internalHelpTipId","base","hideHelpTip","helpTip","hasHelpTip","customHelpTipClass","helpTipId","helpTipClasses","shouldShowClear","focus","clear","useDebouncedTextInput","debouncedBy","isBasicHtmlInput","submitOnEnter","disableDebouncedInput","onWrite","log","model","val","target","persistValue","debouncedValueUpdate","inputEventName","on","bind","watch","oldVal","inputElement","helpTipIdTop","helpTipIdLeft","computedWrapperClasses","labelPosition","name","showRequired","_withDirectives","textareaClasses","placeholder","$emit","slots","useSlots","inputStyle","leadingIconClasses","ifNotFullyTransparent","onRightIconClick","VALID_HTTP_URL","VALID_EMAIL","isEmail","isEmailOrEmpty","isOneOrMultipleEmails","isRequired","isSameAs","otherFieldName","otherFieldDisplayName","meta","isStringOfLength","minLength","isNullOrUndefined","stringContains","match","message","isUrl","isItemSelected","isMultiItemSelected","useWrappingContainerHiddenCount","skipCalculation","elementToWatchForChanges","itemContainer","trackResize","trackMutations","hiddenItemCount","recalculate","avatarElements","visibleCount","totalCount","firstElOffsetTop","avatarEl","offsetTop","useResizeObserver","useMutationObserver","useFormSelectChildInternals","dynamicVisibility","selectedValue","currentValue","isArrayValue","v","mounted","useMounted","showBar","ThrottleOrDebounce","ThrottleOrDebounce2","HorizontalDirection","HorizontalDirection2","useWindowResizeHandler","handler","isClient","throttleOrDebounce","finalHandler","useOnBeforeWindowUnload","useResponsiveHorizontalDirectionCalculation","el","defaultDirection","direction","stopUpdatesBelowWidth","element","recalculateDirection","rect","showOnLeftSide","showOnRightSide","useBodyMountedMenuPositioning","style","openToLeft","top","left","width","height","margin","finalWidth","finalLeft","finalTop","menuWidth","menuHeight","viewportWidth","viewportHeight","viewportWidthWithoutMargins","viewportHeightWithoutMargins","isObjectLikeType","error","isMounted","searchInput","menuEl","listboxButton","searchValue","currentItems","isAsyncLoading","forceUpdateKey","isOpen","listboxButtonBounding","useElementBounding","useIntersectionObserver","isIntersecting","menuStyle","isLeftLabelPosition","renderClearButton","buttonsWrapperClasses","commonButtonClasses","clearButtonClasses","hasValueSelected","hasSearch","isAsyncSearchMode","wrappedValue","finalValue","currentVal","itemKey","clearValue","finalItems","searchVal","listboxOptionsClasses","listboxOptionsStyle","simpleDisplayText","triggerSearch","debouncedSearch","listboxOptionClasses","newItems","Listbox","ListboxLabel","_createTextVNode","ListboxButton","_withCtx","open","ChevronUpIcon","ChevronDownIcon","_Teleport","ListboxOptions","MagnifyingGlassIcon","CommonLoadingBar","item","ListboxOption","active","_hoisted_14","_d","CommonBadge","sourceApp","hiddenSelectedItemCount","isMultiItemArrayValue","firstItem","searchFilterPredicate","search","FormSelectBase","SourceApps","SourceAppBadge","deselectItem","multiple","items","label","help","rules","by","labelId","buttonId","_withModifiers","toggleDropdown","isSelected","optionsContainer","scrollPosition","event","itemExists","nextTick","onClickOutside","FormCheckbox","_e","_f","enabled","_useModel","switchClasses","sliderClasses","HeadlessSwitch","id","copy","useClipboard","copied","handleCopy","selectAllText","textElement","selection","range","isMultiline","FormTextInput","isIconButton","ClipboardDocumentCheckIcon","ClipboardDocumentIcon","inputRefs","digits","internalError","onInput","onKeyDown","onPaste","pastedData","numbers","nextEmptyIndex","d","newValue","newDigits","digitCount","_","ModifierKeys","clientOs","getClientOperatingSystem","ModifierKeyTitles","OperatingSystem","getKeyboardShortcutTitle","isModifierKey","k","onKeyboardShortcut","modifiers","callback","useMagicKeys","keyCombination","modifier","whenever","useFormCheckboxModel","isChecked","isClosing","memoKey","scrolledFromTop","scrolledToBottom","slotContainer","onScroll","isForm","hasButtons","hasTitle","maxWidthWeight","widthClasses","isFullscreenDesktop","dialogPanelClasses","slotContainerClasses","onClose","onFullyClosed","onFormSubmit","scrollTop","offsetHeight","scrollHeight","oldValue","html","onUnmounted","TransitionRoot","Dialog","TransitionChild","fullscreen","DialogPanel","showBackButton","ChevronLeftIcon","hideCloser","closerClasses","buttons","button","content","contentHeight","isExpanded","backgroundClass","titleClasses","toggleExpansion","_toHandlers","$slots","editTitle","syncFromValue","buttonTextClasses","panelClasses","chevronClasses","toggle","onTitleInputBlur","HeadlessDisclosure","DisclosureButton","icon","DisclosurePanel","lazyLoad","GridListToggleValue","Bars3Icon","Squares2X2Icon","menuItems","menuButton","menuButtonWrapper","isOpenInternally","finalOpen","menuButtonBounding","menuItemsSize","useElementSize","calculatedDirection","menuDirection","menuItemsStyles","menuItemsClasses","buildButtonClassses","chooseItem","setOpen","processOpen","shouldBeOpen","useEventListener","HeadlessMenu","isMenuOpen","MenuButton","menuId","mountMenuOnBody","MenuItems","group","MenuItem","showTicks","IconCheck","vTippy","activeItem","buttonContainer","scrollContainer","showLeftArrow","showRightArrow","isInitialSetup","underlineLeft","underlineWidth","buttonClass","isActive","activeItemRef","parent","b","borderStyle","updateUnderline","setActiveItem","isActiveItem","checkArrowsVisibility","container","scrollWidth","clientWidth","scrollLeft","buffer","scrollRight","handleScroll","ensureActiveItemVisible","activeButton","stopResizeObserver","ArrowLongLeftIcon","_directive_tippy","ArrowLongRightIcon","tableClasses","sharedContainerClasses","resultContainerClasses","buttonCount","paddingRightStyle","padding","rowsWrapperClasses","getHeaderClasses","column","colIndex","c","getClasses","handleRowClick","headerRowClasses","columns","emptyMessage","wrapper","initializeLoader","int","InternalInfiniteLoading","$props","hideWhenComplete","retry","ExclamationTriangleIcon","allowRetry","secondarySlotPaddingClasses","defaultSlotPaddingClasses","buttonText","isCollapsed","collapsible","noHover","ArrowFilled","nested","iconClick","iconDisabled","alwaysShowIcon","Edit","ChevronRightIcon","Plus","iconText","hasChildren","toggleOpen","tooltipText","extraPadding","ArrowUpRightIcon","colorClasses","hasDescription","containerClasses","subcontainerClasses","handleActionClick","hideIcon","actions","withDismiss","writableAsyncComputed","get","initialState","readOptions","asyncRead","debugging","logSettings","getTrace","logger","finalGet","res","finalSet","readValue","computedAsync","getter","provides","getCurrentInstance","ctxKey","s","state","inject","isInputEvent","isInputFocused","useFocus","ctxManager","autocompleteItems","isAutocompleteLoading","isAutocompleteOpen","query","selectedItems","t","inputWrapperClasses","removeTag","idx","newSelected","onQueryEscape","onQueryBackspace","newTags","onQueryArrowUp","onQueryArrowDown","resolveAutocompleteItems","debouncedResolve","debouncedResolveAndMarkLoading","onQueryInput","forceCreateFromInput","newTag","tagExists","newIsOpen","oldIsOpen","Combobox","wrapperClasses","FormTagsContextManager","_withKeys","showOptional","ComboboxOptions","ComboboxOption","useAvatarSizeClasses","heightClasses","textClasses","initials","parts","firstLetter","secondLetter","borderClasses","bgClasses","hoverClasses","activeClasses","rounded","user","hideTooltip","UserCircleIcon","maxCountHiddenItemCount","visibleUsers","limit","maxAvatarsHiddenCount","totalHiddenCount","overlap","UserAvatar","hideTooltips","onHiddenCountClick","LazyUserAvatarEditor","defineAsyncComponent","editMode","modelAsUser","onSave","newUrl","defaultImg","lightStyle","BaseError","__publicField","LogicError","UninitializedResourceAccessError","ComposableInvokedOutOfScopeError","UnsupportedEnvironmentError","UniqueFileTypeSpecifier","validateFileType","file","allowedTypes","allowedUniqueTypes","allowedUniqueType","allowedExtensions","fileExt","resolveFileExtension","MissingFileExtensionError","allowedExtension","ForbiddenFileTypeError","fileName","fileNameParts","ext","isFileTypeSpecifier","prettyFileSize","sizeInBytes","removeTrailingZeroes","fileSize","kbSize","mbSize","gbSize","generateFileId","importantData","md5","buildFileTypeSpecifiers","accept","specifiers","usePrepareUploadableFiles","sizeLimit","countLimit","fileTypeSpecifiers","handleFiles","files","results","finalCountLimit","r","validationResult","FileTooLargeError","fileUploadZone","fileInput","buildUploadableFiles","handleIncomingFiles","fileItems","isOverDropZone","useDropZone","onInputChange","input","triggerPicker","keyboardClickableKeypressHandler","vKeyboardClickable","percentage","colorClass","showCloser","X","clampValue","handleInput","clampedValue","handleNumberInput","validateAndClamp","hideHeader","min","max","inputBelowSlider","minValueString","numValue","maxValueString","minPercentage","basePercentage","maxPercentage","trackLeft","trackRight","handleMinInput","handleMaxInput","showFields"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110]}
1
+ {"version":3,"file":"lib.cjs","sources":["../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/identity.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_apply.js","../node_modules/lodash-es/noop.js","../node_modules/lodash-es/_shortOut.js","../node_modules/lodash-es/constant.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseSetToString.js","../node_modules/lodash-es/_setToString.js","../node_modules/lodash-es/_baseFindIndex.js","../node_modules/lodash-es/_baseIsNaN.js","../node_modules/lodash-es/_strictIndexOf.js","../node_modules/lodash-es/_baseIndexOf.js","../node_modules/lodash-es/_arrayIncludes.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_overRest.js","../node_modules/lodash-es/_baseRest.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_isFlattenable.js","../node_modules/lodash-es/_baseFlatten.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/lodash-es/clamp.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/isArrayLikeObject.js","../node_modules/lodash-es/_arrayIncludesWith.js","../node_modules/lodash-es/_baseDifference.js","../node_modules/lodash-es/difference.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/_baseValues.js","../node_modules/lodash-es/values.js","../node_modules/lodash-es/includes.js","../node_modules/lodash-es/_baseIntersection.js","../node_modules/lodash-es/_castArrayLikeObject.js","../node_modules/lodash-es/intersection.js","../node_modules/lodash-es/isBoolean.js","../node_modules/lodash-es/isNumber.js","../node_modules/lodash-es/isUndefined.js","../node_modules/lodash-es/throttle.js","../node_modules/lodash-es/_createSet.js","../node_modules/lodash-es/_baseUniq.js","../node_modules/lodash-es/uniq.js","../src/components/form/Button.vue","../src/components/common/text/Link.vue","../src/helpers/global/toast.ts","../src/components/global/ToastRenderer.vue","../src/helpers/global/accessibility.ts","../src/components/common/Badge.vue","../src/helpers/tailwind.ts","../src/composables/common/steps.ts","../src/components/common/steps/Number.vue","../src/components/common/steps/Bullet.vue","../src/components/common/animation/MouseIcon.vue","../src/components/common/animation/ClickIcon.vue","../src/components/common/animation/Instructional.vue","../src/components/global/icon/Play.vue","../src/components/common/VimeoEmbed.vue","../src/components/form/CardButton.vue","../src/components/form/Checkbox.vue","../src/components/form/Radio.vue","../src/components/form/RadioGroup.vue","../src/composables/form/textInput.ts","../src/components/form/TextArea.vue","../src/components/form/TextInput.vue","../src/helpers/common/validation.ts","../src/composables/layout/resize.ts","../src/composables/form/select.ts","../src/components/common/loading/Bar.vue","../src/composables/common/window.ts","../src/composables/layout/menu.ts","../src/components/form/select/Base.vue","../src/components/SourceAppBadge.vue","../src/components/form/select/SourceApps.vue","../src/components/form/select/Badges.vue","../src/components/form/select/Multi.vue","../src/components/form/Switch.vue","../src/components/form/ClipboardInput.vue","../src/components/form/CodeInput.vue","../src/helpers/form/input.ts","../src/composables/form/input.ts","../src/components/layout/Dialog.vue","../src/components/layout/DialogSection.vue","../src/components/layout/Disclosure.vue","../src/helpers/layout/components.ts","../src/components/layout/GridListToggle.vue","../src/components/global/icon/Check.vue","../src/components/layout/Menu.vue","../src/components/layout/tabs/Horizontal.vue","../src/components/layout/tabs/Vertical.vue","../src/components/layout/Table.vue","../src/components/InfiniteLoading.vue","../src/components/layout/Panel.vue","../src/components/layout/sidebar/Sidebar.vue","../src/components/layout/sidebar/Promo.vue","../src/components/layout/sidebar/menu/Menu.vue","../src/components/global/icon/Plus.vue","../src/components/global/icon/Edit.vue","../src/components/global/icon/ArrowFilled.vue","../src/components/layout/sidebar/menu/group/Group.vue","../src/components/layout/sidebar/menu/group/Item.vue","../src/components/common/Alert.vue","../src/composables/common/async.ts","../src/components/form/tags/ContextManager.vue","../src/components/form/Tags.vue","../src/composables/user/avatar.ts","../src/components/user/Avatar.vue","../src/components/user/AvatarGroup.vue","../src/components/common/loading/Icon.vue","../src/components/user/AvatarEditable.vue","../src/helpers/common/error.ts","../src/helpers/form/file.ts","../src/composables/form/fileUpload.ts","../src/components/form/file-upload/Zone.vue","../src/directives/accessibility.ts","../src/components/common/ProgressBar.vue","../src/components/common/PromoAlert.vue","../src/components/form/Range.vue","../src/components/form/DualRange.vue"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","import baseIndexOf from './_baseIndexOf.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport toInteger from './toInteger.js';\nimport values from './values.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nexport default includes;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseIntersection;\n","import isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nexport default castArrayLikeObject;\n","import arrayMap from './_arrayMap.js';\nimport baseIntersection from './_baseIntersection.js';\nimport baseRest from './_baseRest.js';\nimport castArrayLikeObject from './_castArrayLikeObject.js';\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n});\n\nexport default intersection;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nexport default isBoolean;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","<template>\n <Component\n :is=\"to ? linkComponent : 'button'\"\n :href=\"to\"\n :to=\"to\"\n :type=\"buttonType\"\n :external=\"external\"\n :class=\"buttonClasses\"\n :disabled=\"isDisabled\"\n role=\"button\"\n :style=\"\n color !== 'subtle' && !text\n ? `box-shadow: -1px 1px 4px 0px #0000000a inset; box-shadow: 0px 2px 2px 0px #0000000d;`\n : ''\n \"\n @click=\"onClick\"\n >\n <Component :is=\"finalLeftIcon\" v-if=\"finalLeftIcon\" :class=\"iconClasses\" />\n <slot v-if=\"!hideText\">Button</slot>\n <Component :is=\"iconRight\" v-if=\"iconRight || !loading\" :class=\"iconClasses\" />\n </Component>\n</template>\n<script setup lang=\"ts\">\nimport { isObjectLike } from '#lodash'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport { computed, resolveDynamicComponent } from 'vue'\nimport type { Nullable } from '@speckle/shared'\nimport type { FormButtonStyle, FormButtonSize } from '~~/src/helpers/form/button'\nimport { CommonLoadingIcon } from '~~/src/lib'\n\nconst emit = defineEmits<{\n /**\n * Emit MouseEvent on click\n */\n (e: 'click', val: MouseEvent): void\n}>()\n\nconst props = defineProps<{\n /**\n * URL to which to navigate - can be a relative (app) path or an absolute link for an external URL\n */\n to?: string\n /**\n * Choose from one of 3 button sizes\n */\n size?: FormButtonSize\n /**\n * If set, will make the button take up all available space horizontally\n */\n fullWidth?: boolean\n /**\n * Similar to \"link\", but without an underline and possibly in different colors\n */\n text?: boolean\n /**\n * Will remove paddings and background. Use for links.\n */\n link?: boolean\n /**\n * color:\n * primary: the default primary blue.\n * outline: foundation background and outline\n * subtle: no styling\n */\n color?: FormButtonStyle\n /**\n * Should rounded-full be added?:\n */\n rounded?: boolean\n /**\n * Whether the target location should be forcefully treated as an external URL\n * (for relative paths this will likely cause a redirect)\n */\n external?: boolean\n /**\n * Whether to disable the button so that it can't be pressed\n */\n disabled?: boolean\n /**\n * If set, will have type set to \"submit\" to enable it to submit any parent forms\n */\n submit?: boolean\n /**\n * Add icon to the left from the text\n */\n iconLeft?: Nullable<PropAnyComponent>\n /**\n * Add icon to the right from the text\n */\n iconRight?: Nullable<PropAnyComponent>\n /**\n * Hide default slot (when you want to show icons only)\n */\n hideText?: boolean\n /**\n * Customize component to be used when rendering links.\n *\n * The component will try to dynamically resolve NuxtLink and RouterLink and use those, if this is set to null.\n */\n linkComponent?: Nullable<PropAnyComponent>\n /**\n * Disables the button and shows a spinning loader\n */\n loading?: boolean\n}>()\n\nconst NuxtLink = resolveDynamicComponent('NuxtLink')\nconst RouterLink = resolveDynamicComponent('RouterLink')\n\nconst linkComponent = computed(() => {\n if (props.linkComponent) return props.linkComponent\n if (props.external) return 'a'\n if (isObjectLike(NuxtLink)) return NuxtLink\n if (isObjectLike(RouterLink)) return RouterLink\n return 'a'\n})\n\nconst buttonType = computed(() => {\n if (props.to) return undefined\n if (props.submit) return 'submit'\n return 'button'\n})\n\nconst isDisabled = computed(() => props.disabled || props.loading)\nconst finalLeftIcon = computed(() =>\n props.loading ? CommonLoadingIcon : props.iconLeft\n)\n\nconst bgAndBorderClasses = computed(() => {\n const classParts: string[] = []\n\n const colorsBgBorder = {\n subtle: [\n 'bg-transparent border-transparent text-foreground font-medium',\n 'hover:bg-primary-muted disabled:hover:bg-transparent focus-visible:border-foundation'\n ],\n outline: [\n 'bg-foundation border-outline-2 text-foreground font-medium',\n 'hover:bg-primary-muted disabled:hover:bg-foundation focus-visible:border-foundation'\n ],\n danger: [\n 'bg-danger border-danger-darker text-foundation font-medium',\n 'hover:bg-danger-darker disabled:hover:bg-danger focus-visible:border-foundation'\n ],\n primary: [\n 'bg-primary border-outline-1 text-foreground-on-primary font-semibold',\n 'hover:bg-primary-focus disabled:hover:bg-primary focus-visible:border-foundation'\n ]\n }\n\n if (props.rounded) {\n classParts.push('!rounded-full')\n }\n\n if (props.text || props.link) {\n switch (props.color) {\n case 'subtle':\n classParts.push('text-foreground')\n break\n case 'outline':\n classParts.push('text-foreground')\n break\n case 'danger':\n classParts.push('text-danger')\n break\n case 'primary':\n default:\n classParts.push('text-primary')\n break\n }\n } else {\n switch (props.color) {\n case 'subtle':\n classParts.push(...colorsBgBorder.subtle)\n break\n case 'outline':\n classParts.push(...colorsBgBorder.outline)\n break\n case 'danger':\n classParts.push(...colorsBgBorder.danger)\n break\n case 'primary':\n default:\n classParts.push(...colorsBgBorder.primary)\n break\n }\n }\n\n return classParts.join(' ')\n})\n\nconst sizeClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'h-6 text-body-2xs'\n case 'lg':\n return 'h-10 text-body-sm'\n default:\n case 'base':\n return 'h-8 text-body-xs'\n }\n})\n\nconst paddingClasses = computed(() => {\n if (props.text || props.link) {\n return 'p-0'\n }\n\n const hasIconLeft = !!props.iconLeft\n const hasIconRight = !!props.iconRight\n const hideText = props.hideText\n\n switch (props.size) {\n case 'sm':\n if (hideText) return 'w-6'\n if (hasIconLeft) return 'py-1 pr-2 pl-1'\n if (hasIconRight) return 'py-1 pl-2 pr-1'\n return 'px-2 py-1'\n case 'lg':\n if (hideText) return 'w-10'\n if (hasIconLeft) return 'py-2 pr-6 pl-4'\n if (hasIconRight) return 'py-2 pl-6 pr-4'\n return 'px-6 py-2'\n case 'base':\n default:\n if (hideText) return 'w-8'\n if (hasIconLeft) return 'py-0 pr-4 pl-2'\n if (hasIconRight) return 'py-0 pl-4 pr-2'\n return 'px-4 py-0'\n }\n})\n\nconst generalClasses = computed(() => {\n const baseClasses = [\n 'inline-flex justify-center items-center',\n 'text-center select-none whitespace-nowrap',\n 'outline outline-2 outline-transparent',\n 'transition duration-200 ease-in-out focus-visible:outline-outline-4'\n ]\n\n const additionalClasses = []\n\n if (!props.text && !props.link) {\n additionalClasses.push('rounded-md border')\n }\n\n if (props.fullWidth) {\n additionalClasses.push('w-full')\n } else if (!props.hideText) {\n additionalClasses.push('max-w-max')\n }\n if (isDisabled.value) {\n additionalClasses.push('cursor-not-allowed opacity-60')\n }\n\n return [...baseClasses, ...additionalClasses].join(' ')\n})\n\nconst buttonClasses = computed(() => {\n return [\n generalClasses.value,\n sizeClasses.value,\n bgAndBorderClasses.value,\n paddingClasses.value\n ].join(' ')\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = ['shrink-0']\n\n switch (props.size) {\n case 'sm':\n // Dont add padding to icon if hideText is true on sm size\n if (props.hideText) {\n classParts.push('h-4 w-4')\n } else {\n classParts.push('h-4 w-4 p-0.5')\n }\n break\n case 'lg':\n classParts.push('h-6 w-6 p-1')\n break\n case 'base':\n default:\n classParts.push('h-6 w-6 p-1')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst onClick = (e: MouseEvent) => {\n if (isDisabled.value) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n\n emit('click', e)\n}\n</script>\n","<template>\n <FormButton\n :link=\"underline\"\n :text=\"!underline\"\n :to=\"to\"\n :external=\"external\"\n :disabled=\"disabled\"\n :size=\"size\"\n :foreground-link=\"foregroundLink\"\n :icon-left=\"iconLeft\"\n :icon-right=\"iconRight\"\n :hide-text=\"hideText\"\n role=\"link\"\n @click.capture=\"onClick\"\n >\n <slot>Link</slot>\n </FormButton>\n</template>\n<script setup lang=\"ts\">\nimport FormButton from '~~/src/components/form/Button.vue'\nimport type { PropType } from 'vue'\nimport type { Nullable, Optional } from '@speckle/shared'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\n\ntype LinkSize = 'sm' | 'base' | 'lg'\nconst emit = defineEmits<{ (e: 'click', val: MouseEvent): void }>()\n\nconst props = defineProps({\n to: {\n type: String as PropType<Optional<string>>,\n required: false,\n default: undefined\n },\n external: {\n type: Boolean as PropType<Optional<boolean>>,\n required: false,\n default: undefined\n },\n disabled: {\n type: Boolean as PropType<Optional<boolean>>,\n required: false,\n default: undefined\n },\n size: {\n type: String as PropType<LinkSize>,\n default: 'base'\n },\n foregroundLink: {\n type: Boolean,\n default: false\n },\n /**\n * Add icon to the left from the text\n */\n iconLeft: {\n type: [Object, Function] as PropType<Nullable<PropAnyComponent>>,\n default: null\n },\n /**\n * Add icon to the right from the text\n */\n iconRight: {\n type: [Object, Function] as PropType<Nullable<PropAnyComponent>>,\n default: null\n },\n /**\n * Hide default slot (when you want to show icons only)\n */\n hideText: {\n type: Boolean,\n default: false\n },\n underline: {\n type: Boolean,\n default: false\n }\n})\n\nconst onClick = (e: MouseEvent) => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n\n emit('click', e)\n}\n</script>\n","export enum ToastNotificationType {\n Success,\n Warning,\n Danger,\n Info,\n Loading\n}\n\nexport type ToastNotification = {\n title?: string\n /**\n * Optionally provide extra text\n */\n description?: string\n type: ToastNotificationType\n /**\n * Optionally specify a CTA link on the right\n */\n cta?: {\n title: string\n url?: string\n onClick?: (e: MouseEvent) => void\n }\n /**\n * Whether or not the toast should disappear automatically after a while.\n * Defaults to true\n */\n autoClose?: boolean\n id?: string\n}\n","<template>\n <div\n aria-live=\"assertive\"\n class=\"pointer-events-none fixed top-0 right-0 left-0 bottom-0 flex items-end px-4 py-6 mt-10 sm:items-start sm:p-6 z-[60]\"\n >\n <div class=\"flex w-full flex-col items-center space-y-4 sm:items-end\">\n <!-- Notification panel, dynamically insert this into the live region when it needs to be displayed -->\n <Transition\n enter-active-class=\"transform ease-out duration-300 transition\"\n enter-from-class=\"translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2\"\n enter-to-class=\"translate-y-0 opacity-100 sm:translate-x-0\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"notification\"\n class=\"flex pointer-events-auto w-full max-w-[20rem] overflow-hidden rounded bg-foundation text-foreground shadow-lg border border-outline-2 p-2 pl-3\"\n >\n <div class=\"flex gap-2 items-center w-full\">\n <div\n class=\"shrink-0\"\n :class=\"{\n 'self-start mt-0.5': notification.description || notification.cta\n }\"\n >\n <CircleCheck\n v-if=\"notification.type === ToastNotificationType.Success\"\n class=\"text-success h-4 w-4\"\n aria-hidden=\"true\"\n />\n <CircleX\n v-else-if=\"notification.type === ToastNotificationType.Danger\"\n class=\"text-danger h-4 w-4\"\n aria-hidden=\"true\"\n />\n <AlertCircle\n v-else-if=\"notification.type === ToastNotificationType.Warning\"\n class=\"text-foreground-2 h-4 w-4\"\n aria-hidden=\"true\"\n />\n <Info\n v-else-if=\"notification.type === ToastNotificationType.Info\"\n class=\"text-foreground-2 h-4 w-4\"\n aria-hidden=\"true\"\n />\n <CommonLoadingIcon\n v-else-if=\"notification.type === ToastNotificationType.Loading\"\n class=\"h-4 w-4 opacity-80\"\n />\n </div>\n <div class=\"w-full min-w-[10rem]\">\n <p\n v-if=\"notification.title\"\n class=\"text-foreground text-body-xs font-medium\"\n >\n {{ notification.title }}\n </p>\n <p\n v-if=\"notification.description\"\n class=\"text-foreground-2 text-body-2xs leading-snug\"\n >\n {{ notification.description }}\n </p>\n <div v-if=\"notification.cta\">\n <TextLink :to=\"notification.cta.url\" size=\"sm\" @click=\"onCtaClick\">\n {{ notification.cta.title }}\n </TextLink>\n </div>\n </div>\n <FormButton\n :icon-left=\"X\"\n color=\"subtle\"\n size=\"sm\"\n hide-text\n class=\"shrink-0 ml-auto\"\n :class=\"{\n 'self-start -mt-0.5 -mr-0.5':\n notification.description || notification.cta\n }\"\n @click=\"dismiss\"\n >\n Close\n </FormButton>\n </div>\n </div>\n </Transition>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport TextLink from '~~/src/components/common/text/Link.vue'\nimport type { MaybeNullOrUndefined } from '@speckle/shared'\nimport { ToastNotificationType } from '~~/src/helpers/global/toast'\nimport type { ToastNotification } from '~~/src/helpers/global/toast'\nimport { CommonLoadingIcon, FormButton } from '~~/src/lib'\nimport { X, CircleCheck, CircleX, AlertCircle, Info } from 'lucide-vue-next'\n\nconst emit = defineEmits<{\n (e: 'update:notification', val: MaybeNullOrUndefined<ToastNotification>): void\n}>()\n\nconst props = defineProps<{\n notification: MaybeNullOrUndefined<ToastNotification>\n}>()\n\nconst dismiss = () => {\n emit('update:notification', null)\n}\n\nconst onCtaClick = (e: MouseEvent) => {\n props.notification?.cta?.onClick?.(e)\n dismiss()\n}\n</script>\n","const KEYBOARD_CLICK_CHAR = 'Enter'\n\n/**\n * Visible, non-interactive elements with click handlers must have at least one keyboard listener for accessibility.\n * You can wrap your click handler with this in @keypress, to run it when enter is pressed on the selected component\n * @deprecated Use vKeyboardClickable directive instead\n * See more: https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility/blob/main/docs/click-events-have-key-events.md\n */\nexport function keyboardClick(cb: (e: KeyboardEvent) => void) {\n return (e: KeyboardEvent) => {\n if (e.code !== KEYBOARD_CLICK_CHAR) return\n cb(e)\n }\n}\n","<template>\n <span :class=\"badgeClasses\">\n <svg v-if=\"dot\" :class=\"dotClasses\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n <span class=\"whitespace-nowrap\">\n <slot>Badge</slot>\n </span>\n <button v-if=\"iconLeft\" :class=\"iconClasses\" @click=\"onIconClick($event)\">\n <Component :is=\"iconLeft\" :class=\"['h-4 w-4', badgeDotIconColorClasses]\" />\n </button>\n </span>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\n\ntype BadgeSize = 'base' | 'lg'\ntype BadgeColors = 'primary' | 'secondary'\n\nconst emit = defineEmits<{\n (e: 'click-icon', v: MouseEvent): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n size?: BadgeSize\n color?: BadgeColors\n /**\n * Set text & bg color. Defaults to primary variation.\n */\n colorClasses?: string\n\n /**\n * Show dot to the right\n */\n dot?: boolean\n\n /**\n * Set dot/icon bg color. Defaults to primary variation.\n */\n dotIconColorClasses?: string\n\n /**\n * Optionally show icon to the left of the text\n */\n iconLeft?: PropAnyComponent\n\n /**\n * A more square, but still rounded look\n */\n rounded?: boolean\n\n /**\n * Track icon clicks\n */\n clickableIcon?: boolean\n }>(),\n {\n size: 'base',\n color: 'primary'\n }\n)\n\nconst badgeColorClasses = computed(() => {\n if (props.colorClasses) {\n return props.colorClasses\n } else if (props.color === 'secondary') {\n return 'bg-highlight-3 text-foreground-2'\n } else {\n return 'bg-info-lighter text-primary-focus dark:text-foreground'\n }\n})\n\nconst badgeDotIconColorClasses = computed(\n () => props.dotIconColorClasses || 'text-blue-400'\n)\n\nconst badgeClasses = computed(() => {\n const classParts: string[] = [\n 'inline-flex items-center select-none',\n badgeColorClasses.value,\n props.size === 'lg'\n ? 'px-3 py-0.5 text-body-2xs'\n : 'p-1 text-body-3xs text-body-3xs font-medium'\n ]\n\n if (props.rounded) {\n classParts.push('rounded')\n classParts.push(\n props.size === 'lg'\n ? 'px-2 py-0.5 text-body-2xs'\n : 'px-1.1 py-0.5 text-body-3xs font-medium'\n )\n } else {\n classParts.push('rounded-full')\n classParts.push(\n props.size === 'lg'\n ? 'px-2.5 py-0.5 text-body-2xs'\n : 'px-2.5 py-0.5 text-body-3xs font-medium'\n )\n }\n\n return classParts.join(' ')\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = [\n 'mt-0.5 ml-0.5 inline-flex h-4 w-4 flex-shrink-0 items-center justify-center rounded-full focus:outline-none'\n ]\n\n if (props.clickableIcon) {\n classParts.push('cursor-pointer')\n } else {\n classParts.push('cursor-default')\n }\n\n return classParts.join(' ')\n})\n\nconst dotClasses = computed(() => {\n const classParts: string[] = [\n '-ml-0.5 mr-1.5 h-2 w-2',\n badgeDotIconColorClasses.value\n ]\n\n return classParts.join(' ')\n})\n\nconst onIconClick = (e: MouseEvent) => {\n if (!props.clickableIcon) {\n e.stopPropagation()\n e.stopImmediatePropagation()\n e.preventDefault()\n return\n }\n\n emit('click-icon', e)\n}\n</script>\n","let junkVariable: string[] = []\n\n/**\n * If you use concatenation or variables to build tailwind classes, PurgeCSS won't pick up on them\n * during build and will not add them to the build. So you can use this function to just add string\n * literals of tailwind classes so PurgeCSS picks up on them.\n *\n * While you could just define an unused array of these classes, eslint/TS will bother you about the unused\n * variable so it's better to use this instead.\n */\nexport function markClassesUsed(classes: string[]) {\n // this doesn't do anything, except trick the compiler into thinking this isn't a pure\n // function so that the invocations aren't tree-shaken out\n junkVariable = junkVariable ? classes : classes.slice()\n}\n\n/**\n * Default tailwind breakpoint set. Each value is the minimum width (in pixels) expected for each breakpoint.\n */\nexport enum TailwindBreakpoints {\n sm = 640,\n md = 768,\n lg = 1024,\n xl = 1280,\n '2xl' = 1536\n}\n","import { computed } from 'vue'\nimport type { ToRefs } from 'vue'\nimport type {\n HorizontalOrVertical,\n StepCoreType\n} from '~~/src/helpers/common/components'\nimport { clamp } from '#lodash'\nimport { TailwindBreakpoints, markClassesUsed } from '~~/src/helpers/tailwind'\n\nexport type StepsPadding = 'base' | 'xs' | 'sm'\n\nexport function useStepsInternals(params: {\n props: ToRefs<{\n orientation?: HorizontalOrVertical\n steps: StepCoreType[]\n modelValue?: number\n goVerticalBelow?: TailwindBreakpoints\n nonInteractive?: boolean\n stepsPadding?: StepsPadding\n }>\n emit: {\n (e: 'update:modelValue', val: number): void\n }\n}) {\n const {\n props: {\n modelValue,\n steps,\n orientation,\n goVerticalBelow,\n nonInteractive,\n stepsPadding\n },\n emit\n } = params\n\n const finalOrientation = computed(\n (): HorizontalOrVertical =>\n orientation?.value === 'vertical' ? 'vertical' : 'horizontal'\n )\n\n const value = computed({\n get: () => clamp(modelValue?.value || 0, -1, steps.value.length),\n set: (newVal) => emit('update:modelValue', clamp(newVal, 0, steps.value.length))\n })\n\n const getStepDisplayValue = (step: number) => `${step + 1}`\n const isCurrentStep = (step: number) => step === value.value\n const isFinishedStep = (step: number) => step < value.value\n\n const switchStep = (newStep: number, e?: MouseEvent) => {\n if (nonInteractive?.value) {\n e?.preventDefault()\n e?.stopPropagation()\n e?.stopImmediatePropagation()\n return\n }\n\n value.value = newStep\n\n const stepObj = steps.value[value.value]\n stepObj?.onClick?.()\n }\n\n const listClasses = computed(() => {\n const classParts: string[] = ['flex']\n\n let paddingHorizontal: string\n let paddingVertical: string\n if (stepsPadding?.value === 'xs') {\n paddingHorizontal = 'space-x-2'\n paddingVertical = 'space-y-1'\n } else if (stepsPadding?.value === 'sm') {\n paddingHorizontal = 'space-x-4'\n paddingVertical = 'space-y-1'\n } else {\n paddingHorizontal = 'space-x-6'\n paddingVertical = 'space-y-4'\n }\n\n classParts.push('flex')\n if (finalOrientation.value === 'vertical' || goVerticalBelow?.value) {\n classParts.push(`flex-col ${paddingVertical} justify-center`)\n\n if (goVerticalBelow?.value === TailwindBreakpoints.sm) {\n classParts.push(\n `sm:flex-row sm:space-y-0 sm:justify-start sm:${paddingHorizontal} sm:items-center`\n )\n } else if (goVerticalBelow?.value === TailwindBreakpoints.md) {\n classParts.push(\n `md:flex-row md:space-y-0 md:justify-start md:${paddingHorizontal} md:items-center`\n )\n } else if (goVerticalBelow?.value === TailwindBreakpoints.lg) {\n classParts.push(\n `lg:flex-row lg:space-y-0 lg:justify-start lg:${paddingHorizontal} lg:items-center`\n )\n } else if (goVerticalBelow?.value === TailwindBreakpoints.xl) {\n classParts.push(\n `xl:flex-row xl:space-y-0 xl:justify-start xl:${paddingHorizontal} xl:items-center`\n )\n }\n } else {\n classParts.push(`flex-row ${paddingHorizontal} items-center`)\n }\n\n return classParts.join(' ')\n })\n\n const linkClasses = computed(() => {\n const classParts: string[] = ['flex items-center']\n\n if (!nonInteractive?.value) {\n classParts.push('cursor-pointer')\n }\n\n return classParts.join(' ')\n })\n\n return {\n value,\n isCurrentStep,\n isFinishedStep,\n switchStep,\n getStepDisplayValue,\n listClasses,\n linkClasses,\n orientation: finalOrientation\n }\n}\n\n// to allow for dynamic class building above:\nmarkClassesUsed([\n 'sm:space-x-6',\n 'md:space-x-6',\n 'lg:space-x-6',\n 'xl:space-x-6',\n 'sm:space-x-2',\n 'md:space-x-2',\n 'lg:space-x-2',\n 'xl:space-x-2',\n 'sm:space-x-4',\n 'md:space-x-4',\n 'lg:space-x-4',\n 'xl:space-x-4'\n])\n","<template>\n <nav class=\"flex justify-center\" :aria-label=\"ariaLabel || 'Progress steps'\">\n <ol :class=\"listClasses\">\n <li v-for=\"(step, i) in steps\" :key=\"step.name\">\n <a\n v-if=\"isFinishedStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <div\n class=\"shrink-0 h-7 w-7 rounded-full border border-primary text-white bg-primary inline-flex items-center justify-center select-none\"\n >\n <CheckIcon class=\"w-4 h-4\" />\n </div>\n <div class=\"flex flex-col\">\n <div class=\"text-body-xs font-medium text-primary\">{{ step.name }}</div>\n <div v-if=\"step.description\" class=\"text-body-2xs text-foreground-2\">\n {{ step.description }}\n </div>\n </div>\n </div>\n </a>\n <a\n v-else-if=\"isCurrentStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n aria-current=\"step\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <div\n class=\"shrink-0 h-7 w-7 text-body-xs rounded-full border border-primary inline-flex items-center justify-center select-none text-primary\"\n >\n {{ getStepDisplayValue(i) }}\n </div>\n <div class=\"flex flex-col\">\n <div class=\"text-body-xs font-medium text-primary\">{{ step.name }}</div>\n <div v-if=\"step.description\" class=\"text-body-2xs text-foreground-2\">\n {{ step.description }}\n </div>\n </div>\n </div>\n </a>\n <a\n v-else\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <div\n class=\"shrink-0 h-7 w-7 rounded-full border border-foreground-3 inline-flex items-center justify-center select-none text-foreground-3\"\n >\n {{ getStepDisplayValue(i) }}\n </div>\n <div class=\"flex flex-col\">\n <div class=\"text-body-xs font-medium text-foreground-2\">\n {{ step.name }}\n </div>\n <div v-if=\"step.description\" class=\"text-body-2xs text-foreground-2\">\n {{ step.description }}\n </div>\n </div>\n </div>\n </a>\n </li>\n </ol>\n </nav>\n</template>\n<script setup lang=\"ts\">\nimport { CheckIcon } from '@heroicons/vue/20/solid'\nimport { toRefs } from 'vue'\nimport { useStepsInternals } from '~~/src/composables/common/steps'\nimport type { StepsPadding } from '~~/src/composables/common/steps'\nimport type {\n HorizontalOrVertical,\n NumberStepType\n} from '~~/src/helpers/common/components'\nimport { TailwindBreakpoints } from '~~/src/helpers/tailwind'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: number): void\n}>()\n\nconst props = defineProps<{\n ariaLabel?: string\n orientation?: HorizontalOrVertical\n steps: NumberStepType[]\n modelValue?: number\n goVerticalBelow?: TailwindBreakpoints\n nonInteractive?: boolean\n stepsPadding?: StepsPadding\n}>()\n\nconst {\n isCurrentStep,\n isFinishedStep,\n switchStep,\n getStepDisplayValue,\n listClasses,\n linkClasses\n} = useStepsInternals({\n props: toRefs(props),\n emit\n})\n</script>\n","<template>\n <nav class=\"flex justify-center\" :aria-label=\"ariaLabel || 'Progress steps'\">\n <ol :class=\"[listClasses, extraListClasses]\">\n <li v-for=\"(step, i) in steps\" :key=\"step.name\">\n <a\n v-if=\"isFinishedStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <span class=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\">\n <span v-if=\"basic\" class=\"h-3 w-3 rounded-full bg-foreground-2\" />\n <CheckCircleIcon\n v-else\n class=\"h-full w-full text-primary\"\n aria-hidden=\"true\"\n />\n </span>\n <span :class=\"['text-foreground', labelClasses]\">\n {{ step.name }}\n </span>\n </a>\n <a\n v-else-if=\"isCurrentStep(i)\"\n :href=\"step.href\"\n :class=\"linkClasses\"\n aria-current=\"step\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <span\n class=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\"\n aria-hidden=\"true\"\n >\n <template v-if=\"basic\">\n <span class=\"h-3 w-3 rounded-full bg-foreground\" />\n </template>\n <template v-else>\n <span class=\"absolute h-4 w-4 rounded-full bg-outline-2\" />\n <span class=\"relative block h-2 w-2 rounded-full bg-primary-focus\" />\n </template>\n </span>\n <span :class=\"['text-primary-focus', labelClasses]\">\n {{ step.name }}\n </span>\n </a>\n <a\n v-else\n :href=\"step.href\"\n :class=\"linkClasses\"\n @click=\"(e) => switchStep(i, e)\"\n >\n <div\n class=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\"\n aria-hidden=\"true\"\n >\n <span v-if=\"basic\" class=\"h-3 w-3 rounded-full bg-foreground-2\" />\n <div v-else class=\"h-4 w-4 rounded-full bg-foreground-disabled\" />\n </div>\n <p :class=\"['text-foreground-disabled', labelClasses]\">\n {{ step.name }}\n </p>\n </a>\n </li>\n </ol>\n </nav>\n</template>\n<script setup lang=\"ts\">\nimport { CheckCircleIcon } from '@heroicons/vue/20/solid'\nimport { computed, toRefs } from 'vue'\nimport { useStepsInternals } from '~~/src/composables/common/steps'\nimport type { StepsPadding } from '~~/src/composables/common/steps'\nimport type {\n BulletStepType,\n HorizontalOrVertical\n} from '~~/src/helpers/common/components'\nimport { TailwindBreakpoints } from '~~/src/helpers/tailwind'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: number): void\n}>()\n\nconst props = defineProps<{\n ariaLabel?: string\n basic?: boolean\n orientation?: HorizontalOrVertical\n steps: BulletStepType[]\n modelValue?: number\n goVerticalBelow?: TailwindBreakpoints\n nonInteractive?: boolean\n stepsPadding?: StepsPadding\n}>()\n\nconst { isCurrentStep, isFinishedStep, switchStep, listClasses, linkClasses } =\n useStepsInternals({\n props: toRefs(props),\n emit\n })\n\nconst labelClasses = computed(() => {\n const classParts: string[] = ['h6 font-medium leading-7']\n\n let leftMargin: string\n if (props.stepsPadding === 'xs') {\n leftMargin = 'ml-1'\n } else if (props.stepsPadding === 'sm') {\n leftMargin = 'ml-2'\n } else {\n leftMargin = 'ml-3'\n }\n\n classParts.push(leftMargin)\n\n if (props.basic) {\n classParts.push('sr-only')\n }\n\n return classParts.join(' ')\n})\n\nconst extraListClasses = computed(() => {\n const classParts: string[] = []\n\n if (props.basic) {\n classParts.push('basic')\n }\n\n return classParts.join(' ')\n})\n</script>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"icon icon-tabler icon-tabler-pointer\"\n width=\"44\"\n height=\"44\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n fill=\"rgba(255,255,255,0.8)\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M7.904 17.563a1.2 1.2 0 0 0 2.228 .308l2.09 -3.093l4.907 4.907a1.067 1.067 0 0 0 1.509 0l1.047 -1.047a1.067 1.067 0 0 0 0 -1.509l-4.907 -4.907l3.113 -2.09a1.2 1.2 0 0 0 -.309 -2.228l-13.582 -3.904l3.904 13.563z\"\n />\n </svg>\n</template>\n","<template>\n <svg viewBox=\"0 0 18 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9 1.25V3.5M14.834 3.666L13.243 5.257M17.25 9.5H15M4.757 13.743L3.167 15.333M3 9.5H0.75M4.757 5.257L3.167 3.667\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n</template>\n","<template>\n <div\n class=\"relative aspect-square w-full h-full max-w-[250px] mx-auto mb-8 border-t border-r border-outline-3 select-none\"\n >\n <div\n class=\"absolute z-50 text-foreground dark:text-foundation\"\n :style=\"{\n transitionProperty: 'all',\n top: mousePosition.top + '%',\n left: mousePosition.left + '%',\n transitionDuration: animationDuration + 'ms'\n }\"\n >\n <ClickIcon\n class=\"absolute -top-5 -left-4 h-12 w-12 -rotate-12 text-foreground\"\n :class=\"[{ hidden: !isClicked }]\"\n />\n <MouseIcon class=\"absolute top-0 left-0 right-0 bottom-0 h-11 w-11\" />\n </div>\n <div class=\"w-full h-full overflow-hidden\">\n <slot name=\"background\"></slot>\n <template v-for=\"slotObject in dynamicSlots\" :key=\"slotObject.name\">\n <template v-if=\"slotObject.visible\">\n <slot :name=\"slotObject.name\"></slot>\n </template>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, defineProps, type PropType, onBeforeUnmount } from 'vue'\nimport MouseIcon from '~~/src/components/common/animation/MouseIcon.vue'\nimport ClickIcon from '~~/src/components/common/animation/ClickIcon.vue'\nimport { wait } from '@speckle/shared'\n\ntype AnimationAction = {\n type: 'animation'\n top: number\n left: number\n duration: number\n}\n\ntype ClickAction = {\n type: 'click'\n}\n\ntype DelayAction = {\n type: 'delay'\n duration: number\n}\n\ntype SlotAction = {\n type: 'slot'\n slot: string\n}\n\ntype Action = AnimationAction | ClickAction | SlotAction | DelayAction\n\nconst props = defineProps({\n actions: Array as PropType<Action[]>,\n initialPosition: {\n type: Object as PropType<{ top: number; left: number }>\n },\n slotsConfig: Array as PropType<{ name: string; visible: boolean }[]>\n})\n\nconst isAnimating = ref(true)\nconst mousePosition = ref({ ...props.initialPosition })\nconst isClicked = ref(false)\nconst animationDuration = ref(500)\nconst isMouseVisible = ref(true)\nconst dynamicSlots = ref(props.slotsConfig || [])\n\nasync function delay(action: DelayAction) {\n await wait(action.duration)\n}\n\nfunction toggleSlotVisibility(action: SlotAction) {\n const slotToToggle = dynamicSlots.value.find((slot) => slot.name === action.slot)\n if (slotToToggle) {\n slotToToggle.visible = !slotToToggle.visible\n }\n}\n\nfunction handleAction(action: Action) {\n switch (action.type) {\n case 'animation':\n mousePosition.value = { top: action.top, left: action.left }\n animationDuration.value = action.duration\n break\n case 'click':\n isClicked.value = true\n setTimeout(() => (isClicked.value = false), 500)\n break\n case 'delay':\n return delay(action)\n case 'slot':\n toggleSlotVisibility(action)\n break\n }\n}\n\nonMounted(() => {\n const loopActions = async () => {\n while (isAnimating.value) {\n await delay({ type: 'delay', duration: 800 })\n isMouseVisible.value = true\n for (const action of props.actions || []) {\n await handleAction(action)\n }\n isMouseVisible.value = false\n mousePosition.value = { ...props.initialPosition }\n await delay({ type: 'delay', duration: 200 })\n }\n }\n\n void loopActions()\n})\n\nonBeforeUnmount(() => {\n isAnimating.value = false\n})\n</script>\n","<template>\n <svg\n width=\"24\"\n height=\"26\"\n viewBox=\"0 0 24 26\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M22.5 11.268C23.8333 12.0378 23.8333 13.9622 22.5 14.732L3.75 25.5574C2.41667 26.3272 0.750004 25.3649 0.750005 23.8253L0.750005 2.17468C0.750006 0.635079 2.41667 -0.327169 3.75001 0.442631L22.5 11.268Z\"\n fill=\"currentColor\"\n />\n </svg>\n</template>\n","<template>\n <div class=\"relative aspect-video w-full\">\n <iframe\n :title=\"title\"\n :src=\"`https://player.vimeo.com/video/${vimeoId}?badge=0&autopause=0&player_id=0&app_id=58479&autoplay=${\n isPlaying ? '1' : '0'\n }&muted=${muted ? '1' : '0'}&controls=${controls ? '1' : '0'}`\"\n frameborder=\"0\"\n allow=\"autoplay; fullscreen; accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n class=\"w-full h-full\"\n ></iframe>\n\n <button\n v-if=\"!isPlaying && (darkPlaceholder || lightPlaceholder)\"\n class=\"group absolute top-0 left-0 w-full h-full flex items-center justify-center\"\n @click=\"play\"\n >\n <div\n class=\"absolute top-0 left-0 w-full h-full bg-foundation pointer-events-none\"\n >\n <img\n v-if=\"darkPlaceholder\"\n :src=\"darkPlaceholder\"\n class=\"hidden dark:block w-full h-full object-cover\"\n :alt=\"placeholderAlt || 'Play video'\"\n />\n <img\n v-if=\"lightPlaceholder\"\n :src=\"lightPlaceholder\"\n class=\"dark:hidden w-full h-full object-cover\"\n :alt=\"placeholderAlt || 'Play video'\"\n />\n </div>\n <div\n class=\"relative z-10 bg-primary group-hover:bg-primary-focus h-28 w-28 rounded-full border-[4px] border-white flex items-center justify-center shadow-md\"\n >\n <IconPlay class=\"h-10 w-10 ml-2 text-white\" />\n </div>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport IconPlay from '../global/icon/Play.vue'\n\nconst emit = defineEmits<{\n (e: 'onPlay'): void\n}>()\n\nconst props = defineProps<{\n vimeoId: string\n title: string\n autoplay?: boolean\n muted?: boolean\n controls?: boolean\n darkPlaceholder?: string\n lightPlaceholder?: string\n placeholderAlt?: string\n}>()\n\nconst isPlaying = ref(props.autoplay || false)\n\nconst play = () => {\n isPlaying.value = true\n emit('onPlay')\n}\n\ndefineExpose({\n play\n})\n</script>\n","<template>\n <button :class=\"computedClasses\" :disabled=\"disabled\" @click=\"onClick\">\n <slot>Text</slot>\n </button>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: boolean): void\n (e: 'click', v: MouseEvent): void\n}>()\n\nconst props = defineProps<{\n disabled?: boolean\n modelValue?: boolean\n}>()\n\nconst computedClasses = computed(() => {\n const classParts: string[] = [\n 'h-20 bg-foundation-2 inline-flex justify-center items-center outline-none',\n 'normal px-16 py-5 shadow rounded transition active:scale-95'\n ]\n\n if (props.disabled) {\n classParts.push('bg-foundation-disabled text-foreground-2 cursor-not-allowed')\n } else {\n classParts.push(\n props.modelValue\n ? 'bg-primary-focus text-foreground-on-primary'\n : 'bg-foundation text-foreground'\n )\n classParts.push('ring-outline-2 hover:ring-4')\n }\n\n return classParts.join(' ')\n})\n\nconst onClick = (e: MouseEvent) => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n\n emit('update:modelValue', !props.modelValue)\n emit('click', e)\n}\n</script>\n","<template>\n <div\n class=\"relative flex items-center\"\n :class=\"[\n labelPosition === 'left' && 'flex-row-reverse items-center',\n labelPosition === 'top' && 'items-start',\n labelPosition === 'right' && 'items-center'\n ]\"\n >\n <div\n class=\"flex items-center h-3.5 w-3.5\"\n :class=\"labelPosition === 'left' ? 'w-1/2 justify-end mr-2' : ''\"\n >\n <div class=\"relative flex h-full w-full\">\n <input\n :id=\"finalId\"\n :checked=\"coreChecked\"\n :aria-describedby=\"descriptionId\"\n :name=\"name\"\n :disabled=\"disabled\"\n :value=\"checkboxValue\"\n type=\"checkbox\"\n :class=\"checkboxClasses\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n />\n <!-- Indeterminate state overlay -->\n <div\n v-if=\"indeterminate\"\n class=\"absolute w-full h-full top-0 left-0 flex items-center justify-center pointer-events-none\"\n >\n <Minus class=\"w-3 h-3 text-foreground\" />\n </div>\n </div>\n </div>\n <div class=\"text-sm\" :class=\"labelPosition === 'left' ? 'w-1/2' : 'ml-2'\">\n <label :for=\"finalId\" :class=\"{ 'sr-only': hideLabel }\">\n <span class=\"text-body-xs text-foreground font-medium\" :class=\"labelClasses\">\n {{ title }}\n </span>\n <span v-if=\"showRequired\" class=\"text-danger ml-1\">*</span>\n <p v-if=\"descriptionText\" :id=\"descriptionId\" :class=\"descriptionClasses\">\n {{ descriptionText }}\n </p>\n </label>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, onMounted, ref } from 'vue'\nimport type { PropType } from 'vue'\nimport type { Optional } from '@speckle/shared'\nimport { nanoid } from 'nanoid'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { Minus } from 'lucide-vue-next'\n\n/**\n * Troubleshooting:\n * - If clicking on the checkbox doesn't do anything, check if any of its ancestor elements\n * have a @click.prevent on them anywhere.\n * - If you're not using the checkbox in a group, it's suggested that you set :value=\"true\",\n * so that a v-model attached to the checkbox will be either 'true' or 'undefined' depending on the\n * checked state\n */\n\ntype ValueType = Optional<string | true> | string[]\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = defineProps({\n /**\n * Input name/id. In a checkbox group, all checkboxes must have the same name and different values.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Whether the input is disabled\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Set label text\n */\n label: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Set label classes\n */\n labelClasses: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Help text\n */\n description: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Whether to inline the help description\n */\n inlineDescription: {\n type: Boolean,\n default: false\n },\n /**\n * vee-validate validation rules\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<RuleExpression<ValueType>>,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Checkbox group's value\n */\n modelValue: {\n type: [String, Boolean] as PropType<ValueType | false>,\n default: undefined\n },\n /**\n * Checkbox's own value. If it is checked, modelValue will include this value (amongst any other checked values from the same group).\n * If not set will default to 'name' value.\n */\n value: {\n type: [String, Boolean] as PropType<Optional<string | true>>,\n default: true\n },\n /**\n * HTML ID to use, must be globally unique. If not specified, a random ID will be generated. One is necessary to properly associate the label and checkbox.\n */\n id: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n hideLabel: {\n type: Boolean,\n default: false\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n indeterminate: {\n type: Boolean,\n default: false\n }\n})\n\nconst generateRandomId = (prefix: string) => `${prefix}-${nanoid()}`\n\ndefineEmits<{\n (e: 'update:modelValue', val: ValueType): void\n}>()\n\nconst checkboxValue = computed(() => props.value || props.name)\n\nconst {\n checked: coreChecked,\n errorMessage,\n handleChange,\n value: coreValue\n} = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n type: 'checkbox',\n checkedValue: checkboxValue,\n initialValue: props.modelValue || undefined\n})\n\nconst title = computed(() => props.label || props.name)\n\nconst descriptionText = computed(() => props.description || errorMessage.value)\nconst descriptionId = computed(() => `${props.name}-description`)\nconst descriptionClasses = computed((): string => {\n const classParts: string[] = ['text-body-2xs']\n\n if (props.inlineDescription) {\n classParts.push('inline ml-2')\n } else {\n classParts.push('block')\n }\n\n if (errorMessage.value) {\n classParts.push('text-danger')\n } else {\n classParts.push('text-foreground-2')\n }\n\n return classParts.join(' ')\n})\n\nconst implicitId = ref<Optional<string>>(generateRandomId('checkbox'))\nconst finalId = computed(() => props.id || implicitId.value)\n\nconst checkboxClasses = computed(() => {\n const classParts = [\n 'h-3.5 w-3.5 rounded',\n 'border bg-foundation text-primary',\n 'hover:border-foreground-2 focus:ring-1 focus:ring-outline-4 focus:ring-offset-1',\n 'disabled:cursor-not-allowed disabled:opacity-60'\n ]\n\n if (errorMessage.value) {\n classParts.push('border-danger-lighter')\n } else {\n classParts.push('border-outline-5')\n }\n\n return classParts.join(' ')\n})\n\nconst onChange = (e: unknown) => {\n if (props.disabled) return\n handleChange(e)\n}\n\n/**\n * Bugfix for strange issue where checkbox appears checked even tho it shouldnt be.\n * It's not clear why this happens, but for some reason coreValue.value shows that the checkbox\n * is checked, even tho props.modelValue is undefined.\n */\nonMounted(() => {\n const newModelValue = props.modelValue\n const newCoreValue = coreValue.value\n\n const shouldBeChecked = Array.isArray(newModelValue)\n ? newModelValue.includes(props.value as any)\n : newModelValue === props.value\n\n const isCoreChecked = Array.isArray(newCoreValue)\n ? newCoreValue.includes(props.value as any)\n : newCoreValue === props.value\n\n if (shouldBeChecked !== isCoreChecked) {\n handleChange(newModelValue)\n }\n})\n</script>\n","<template>\n <div\n class=\"relative flex space-x-2 mb-2 last:mb-0\"\n :class=\"description && inlineDescription ? 'items-start' : 'items-center'\"\n >\n <div class=\"flex items-center\" :class=\"size === 'sm' ? 'h-4' : 'h-6'\">\n <!-- eslint-disable-next-line vuejs-accessibility/form-control-has-label -->\n <input\n :id=\"finalId\"\n :checked=\"coreChecked\"\n :aria-describedby=\"descriptionId\"\n :name=\"name\"\n :disabled=\"disabled\"\n :value=\"radioValue\"\n type=\"radio\"\n class=\"h-4 w-4 rounded-full text-primary focus:ring-primary bg-foundation disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-2\"\n :class=\"computedClasses\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n />\n </div>\n <div\n :class=\"[\n inlineDescription ? 'flex space-x-2 items-center' : '',\n size === 'sm' ? 'text-body-2xs' : 'text-body-xs'\n ]\"\n >\n <label\n :for=\"finalId\"\n class=\"text-foreground flex space-x-2 items-center cursor-pointer\"\n :class=\"{ 'sr-only': hideLabel, '!cursor-not-allowed opacity-70': disabled }\"\n >\n <div v-if=\"icon\">\n <component\n :is=\"icon\"\n :class=\"[\n size === 'sm' ? 'h-6 sm:h-8 w-6 sm:w-8' : 'h-8 w-8 sm:h-10 sm:w-10'\n ]\"\n />\n </div>\n <div class=\"flex flex-col\">\n <span :class=\"labelClasses ? labelClasses : ''\">{{ title }}</span>\n <p\n v-if=\"descriptionText && !inlineDescription\"\n :id=\"descriptionId\"\n :class=\"descriptionClasses\"\n >\n {{ descriptionText }}\n </p>\n </div>\n <span v-if=\"showRequired\" class=\"text-danger ml-1\">*</span>\n </label>\n <p\n v-if=\"descriptionText && inlineDescription\"\n :id=\"descriptionId\"\n :class=\"descriptionClasses\"\n >\n {{ descriptionText }}\n </p>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, onMounted, ref } from 'vue'\nimport type { PropType, ConcreteComponent } from 'vue'\nimport type { Optional } from '@speckle/shared'\nimport { nanoid } from 'nanoid'\n\n/**\n * Troubleshooting:\n * - If clicking on the radio doesn't do anything, check if any of its ancestor elements\n * have a @click.prevent on them anywhere.\n * - If you're not using the radio in a group, it's suggested that you set :value=\"true\",\n * so that a v-model attached to the radio will be either 'true' or 'undefined' depending on the\n * checked state\n */\n\ntype ValueType = Optional<string | true> | string[]\ntype Size = 'sm' | 'base'\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = defineProps({\n /**\n * Input name/id. In a radio group, all radios must have the same name and different values.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Whether the input is disabled\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Set label text\n */\n label: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Set label text classes\n */\n labelClasses: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Help text\n */\n description: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Whether to inline the help description\n */\n inlineDescription: {\n type: Boolean,\n default: false\n },\n /**\n * Optional Icon\n */\n icon: {\n type: Object as PropType<ConcreteComponent>,\n default: undefined\n },\n /**\n * vee-validate validation rules\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<RuleExpression<ValueType>>,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Radio group's value\n */\n modelValue: {\n type: [String, Boolean] as PropType<ValueType | false>,\n default: undefined\n },\n /**\n * Radio's own value. If it is checked, modelValue will include this value (amongst any other checked values from the same group).\n * If not set will default to 'name' value.\n */\n value: {\n type: [String, Boolean] as PropType<Optional<string | true>>,\n default: true\n },\n /**\n * HTML ID to use, must be globally unique. If not specified, a random ID will be generated. One is necessary to properly associate the label and radio.\n */\n id: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n hideLabel: {\n type: Boolean,\n default: false\n },\n size: {\n type: String as PropType<Optional<Size>>,\n default: 'base'\n }\n})\n\nconst generateRandomId = (prefix: string) => `${prefix}-${nanoid()}`\n\ndefineEmits<{\n (e: 'update:modelValue', val: ValueType): void\n}>()\n\nconst radioValue = computed(() => props.value || props.name)\n\nconst {\n checked: coreChecked,\n errorMessage,\n handleChange,\n value: coreValue\n} = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n type: 'radio',\n checkedValue: radioValue,\n initialValue: props.modelValue || undefined\n})\n\nconst title = computed(() => props.label || props.name)\n\nconst computedClasses = computed((): string => {\n return errorMessage.value ? 'border-danger-lighter' : 'border-foreground-4 '\n})\n\nconst descriptionText = computed(() => props.description || errorMessage.value)\nconst descriptionId = computed(() => `${props.name}-description`)\nconst descriptionClasses = computed((): string => {\n const classParts: string[] = ['text-body-3xs']\n\n if (errorMessage.value) {\n classParts.push('text-danger')\n } else {\n classParts.push('text-foreground-2')\n }\n\n return classParts.join(' ')\n})\n\nconst implicitId = ref<Optional<string>>(generateRandomId('radio'))\nconst finalId = computed(() => props.id || implicitId.value)\n\nconst onChange = (e: unknown) => {\n if (props.disabled) return\n handleChange(e)\n}\n\n/**\n * Bugfix for strange issue where radio appears checked even tho it shouldnt be.\n * It's not clear why this happens, but for some reason coreValue.value shows that the radio\n * is checked, even tho props.modelValue is undefined.\n */\nonMounted(() => {\n const newModelValue = props.modelValue\n const newCoreValue = coreValue.value\n\n const shouldBeChecked = Array.isArray(newModelValue)\n ? newModelValue.includes(props.value as any)\n : newModelValue === props.value\n\n const isCoreChecked = Array.isArray(newCoreValue)\n ? newCoreValue.includes(props.value as any)\n : newCoreValue === props.value\n\n if (shouldBeChecked !== isCoreChecked) {\n handleChange(newModelValue)\n }\n})\n</script>\n","<template>\n <div class=\"w-full\">\n <div\n class=\"flex items-stretch w-full\"\n :class=\"\n isStacked\n ? 'flex-col space-y-3 '\n : 'flex-col sm:flex-row space-y-3 sm:space-y-0 sm:space-x-3'\n \"\n >\n <div v-for=\"option in options\" :key=\"option.value\" class=\"w-full flex flex-col\">\n <button\n class=\"bg-foundation relative w-full h-full select-none rounded-md border shadow\"\n :class=\"[\n selected === option.value ? 'border-outline-4' : 'border-outline-2',\n disabled || option.disabled\n ? 'opacity-60 cursor-not-allowed'\n : 'hover:border-outline-1'\n ]\"\n :disabled=\"disabled || option.disabled\"\n type=\"button\"\n @click=\"selectItem(option.value)\"\n >\n <div\n class=\"flex flex-col space-y-2 h-full\"\n :class=\"props.size === 'sm' ? 'p-3' : 'p-4 '\"\n >\n <div\n class=\"flex justify-between gap-x-3\"\n :class=\"option.icon ? 'items-start' : 'items-center'\"\n >\n <div class=\"flex flex-1 items-center text-left gap-x-2\">\n <component\n :is=\"option.icon\"\n v-if=\"option.icon\"\n class=\"text-foreground h-5 w-5\"\n />\n <div class=\"flex flex-col\">\n <h4\n class=\"text-foreground\"\n :class=\"props.size === 'sm' ? 'text-heading-sm' : 'text-heading'\"\n >\n {{ option.title }}\n </h4>\n <h5 v-if=\"option.subtitle\" class=\"text-foreground-3 text-body-xs\">\n {{ option.subtitle }}\n </h5>\n </div>\n </div>\n <div\n class=\"h-5 w-5 rounded-full flex items-center justify-center border-[1.5px] border-outline-5\"\n >\n <div\n v-if=\"selected === option.value\"\n class=\"h-2.5 w-2.5 rounded-full bg-primary flex\"\n ></div>\n </div>\n </div>\n <div\n v-if=\"option.introduction\"\n class=\"text-body-2xs text-foreground-2 select-none text-left pr-8\"\n >\n {{ option.introduction }}\n </div>\n <slot :name=\"option.value\" />\n </div>\n </button>\n <div\n v-if=\"option.help\"\n class=\"sm:hidden text-xs flex space-x-0.5 mt-2 text-foreground\"\n >\n <InformationCircleIcon class=\"h-4 w-4\" />\n {{ option.help }}\n </div>\n </div>\n </div>\n <div v-if=\"!isStacked\" class=\"hidden sm:flex space-x-3 w-full\">\n <div v-for=\"option in options\" :key=\"option.value\" class=\"w-full\">\n <div\n v-if=\"option.help\"\n class=\"text-xs flex space-x-0.5 mt-2 text-foreground select-none\"\n >\n <InformationCircleIcon class=\"h-4 w-4\" />\n {{ option.help }}\n </div>\n </div>\n </div>\n <div v-if=\"errorMessage\" class=\"text-danger text-body-2xs mt-2\">\n {{ errorMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"Value extends string\">\nimport { InformationCircleIcon } from '@heroicons/vue/24/outline'\nimport { useField, type RuleExpression } from 'vee-validate'\nimport { computed } from 'vue'\nimport type { FormRadioGroupItem } from '~~/src/helpers/common/components'\n\ndefineEmits<{\n (e: 'update:modelValue', v: Value): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n name?: string\n modelValue?: Value\n options: FormRadioGroupItem<Value>[]\n disabled?: boolean\n isStacked?: boolean\n size?: 'sm' | 'base'\n rules?: RuleExpression<Value>\n }>(),\n {\n size: 'base',\n name: 'formRadioGroup'\n }\n)\n\nconst { value, errorMessage } = useField<Value>(props.name, props.rules, {\n initialValue: props.modelValue as Value\n})\n\nconst selected = computed({\n get: () => value.value,\n set: (newVal: Value) => (value.value = newVal)\n})\n\nconst selectItem = (value: Value) => {\n selected.value = value\n}\n</script>\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, onMounted, ref, unref, watch } from 'vue'\nimport type { Ref, ToRefs } from 'vue'\nimport type { MaybeNullOrUndefined, Nullable } from '@speckle/shared'\nimport { nanoid } from 'nanoid'\nimport {\n debounce,\n includes,\n isArray,\n isBoolean,\n isString,\n isUndefined,\n noop\n} from '#lodash'\nimport type { LabelPosition } from './input'\n\nexport type InputColor = 'page' | 'foundation' | 'transparent' | 'fully-transparent'\n\n/**\n * Common setup for text input & textarea fields\n */\nexport function useTextInputCore<V extends string | string[] = string>(params: {\n props: ToRefs<{\n name: string\n help?: string\n label?: string\n showLabel?: boolean\n rules?: RuleExpression<V>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n modelValue?: V\n autoFocus?: boolean\n showClear?: boolean\n useLabelInErrors?: boolean\n customErrorMessage?: string\n hideErrorMessage?: boolean\n color?: InputColor\n labelPosition?: LabelPosition\n customHelpClass?: string\n }>\n emit: {\n (e: 'change', val: { event?: Event; value: V }): void\n (e: 'clear'): void\n }\n inputEl: Ref<Nullable<HTMLInputElement | HTMLTextAreaElement>>\n options?: Partial<{\n customClear: () => void\n }>\n}) {\n const { props, inputEl, emit, options } = params\n\n const { value, errorMessage: veeErrorMessage } = useField<V>(\n props.name,\n props.rules,\n {\n validateOnMount: unref(props.validateOnMount),\n validateOnValueUpdate: unref(props.validateOnValueUpdate),\n initialValue: unref(props.modelValue) || undefined\n }\n )\n\n const labelClasses = computed(() => {\n const classParts = [\n 'flex text-body-xs font-medium gap-1 items-center',\n unref(props.color) === 'foundation' ? 'text-foreground' : 'text-foreground-2',\n unref(props.labelPosition) !== 'left' ? 'pb-1' : null\n ]\n if (!unref(props.showLabel)) {\n classParts.push('sr-only')\n }\n\n return classParts.join(' ')\n })\n\n const coreInputClasses = computed(() => {\n const classParts: string[] = [\n 'focus:outline-none disabled:cursor-not-allowed disabled:bg-foundation-disabled',\n 'disabled:text-disabled-muted placeholder:text-foreground-2',\n 'rounded-md'\n ]\n\n return classParts.join(' ')\n })\n\n const coreClasses = computed(() => {\n const color = unref(props.color)\n const classParts = ['block w-full text-foreground', coreInputClasses.value]\n\n if (color !== 'fully-transparent') {\n classParts.push('py-2 px-3')\n } else {\n classParts.push('p-0')\n }\n\n if (hasError.value) {\n classParts.push('!border-danger')\n } else {\n classParts.push('border-0')\n if (color !== 'fully-transparent') {\n classParts.push('transition-all focus:ring-2 focus:ring-outline-2')\n } else {\n classParts.push('focus:ring-0')\n }\n }\n\n if (color === 'foundation') {\n classParts.push(\n 'bg-foundation !border border-outline-2 hover:border-outline-5 focus-visible:border-outline-4 !ring-0 focus-visible:!outline-0'\n )\n } else if (includes(['transparent', 'fully-transparent'], color)) {\n classParts.push('bg-transparent')\n } else {\n classParts.push('bg-foundation-page')\n }\n\n return classParts.join(' ')\n })\n\n const internalHelpTipId = ref(nanoid())\n\n const title = computed(() => unref(props.label) || unref(props.name))\n\n const errorMessage = computed(() => {\n if (unref(props.customErrorMessage)) {\n return unref(props.customErrorMessage)\n }\n\n const base = veeErrorMessage.value\n if (!base || !unref(props.useLabelInErrors)) return base\n return base.replace('Value', title.value)\n })\n\n const hasError = computed(() => !!errorMessage.value)\n\n const hideHelpTip = computed(\n () => errorMessage.value && unref(props.hideErrorMessage)\n )\n const helpTip = computed(() => errorMessage.value || unref(props.help))\n const hasHelpTip = computed(() => !!helpTip.value)\n const customHelpTipClass = computed(() => unref(props.customHelpClass))\n const helpTipId = computed(() =>\n hasHelpTip.value ? `${unref(props.name)}-${internalHelpTipId.value}` : undefined\n )\n\n const helpTipClasses = computed((): string => {\n const classParts = ['text-body-2xs break-words']\n classParts.push(hasError.value ? 'text-danger' : 'text-foreground-2')\n if (customHelpTipClass.value) {\n classParts.push(customHelpTipClass.value)\n }\n return classParts.join(' ')\n })\n\n const shouldShowClear = computed(() => {\n if (!unref(props.showClear)) return false\n return (value.value?.length || 0) > 0\n })\n\n const focus = () => {\n inputEl.value?.focus()\n }\n\n const clear = () => {\n value.value = (isArray(value.value) ? [] : '') as V\n options?.customClear?.()\n\n emit('change', { value: value.value })\n emit('clear')\n }\n\n onMounted(() => {\n if (unref(props.autoFocus)) {\n focus()\n }\n })\n\n return {\n coreInputClasses,\n coreClasses,\n title,\n value,\n helpTipId,\n helpTipClasses,\n helpTip,\n hideHelpTip,\n errorMessage,\n clear,\n focus,\n labelClasses,\n shouldShowClear,\n hasError\n }\n}\n\ntype FormInputChangeEvent = { event?: Event; value: string }\n\n/**\n * Attach returned on and bind using v-on and v-bind, and then you can use the returned `value`\n * ref to get the input's value while ensuring normal input events are debounced and only change/clear\n * events cause the value to propagate immediately\n *\n * Very useful for search inputs and other kind of auto-submitting inputs!\n */\nexport function useDebouncedTextInput(params?: {\n /**\n * For how long should basic input events be debounced.\n * Default: 1000 (ms)\n */\n debouncedBy?: number\n\n /**\n * If enabled, value will only change on submit/enter, and just typing in values will never\n * register.\n * Default: false\n */\n disableDebouncedInput?: boolean\n\n /**\n * Optionally pass in the model ref that should be used as the source of truth\n */\n model?: Ref<MaybeNullOrUndefined<string>>\n\n /**\n * Set to true if you're tracking changes on a basic HTML input element. This will change the events\n * being used (e.g. input instead of update:modelValue)\n *\n * Default: false\n */\n isBasicHtmlInput?: boolean\n\n /**\n * Set to false if you don't want the change event to be emitted on Enter key press.\n * Setting only works for basic html inputs currently!\n *\n * Default: Default behavior (true for input, false for textarea)\n */\n submitOnEnter?: boolean\n\n /**\n * Set to true if you want to see debug output for how events fire and are handled\n */\n debug?: boolean | ((...logArgs: unknown[]) => void)\n\n /**\n * Callback function that gets called when a new value is actually written to the model\n */\n onWrite?: (val: string) => void\n}) {\n const {\n debouncedBy = 1000,\n isBasicHtmlInput = false,\n submitOnEnter,\n disableDebouncedInput,\n onWrite\n } = params || {}\n const log = params?.debug\n ? isBoolean(params.debug)\n ? console.debug\n : params.debug\n : noop\n\n // The actual source of truth holding the final value\n const value = params?.model || ref('')\n\n // The internal model of the input\n const model = ref(value.value)\n\n const getValue = (val: string | InputEvent | Event | FormInputChangeEvent) => {\n if (isString(val)) return val\n if ('value' in val) return val.value\n\n const target = val.target as Nullable<HTMLInputElement | HTMLTextAreaElement>\n return target?.value || ''\n }\n\n /**\n * Persist changes to the core underlying source of truth that's available outwards\n */\n const persistValue = (val: string) => {\n value.value = val\n log('Value updated: ' + val)\n onWrite?.(val)\n }\n\n const debouncedValueUpdate = disableDebouncedInput\n ? undefined\n : debounce((val: string) => {\n persistValue(val)\n }, debouncedBy)\n\n const inputEventName = isBasicHtmlInput ? 'input' : 'update:modelValue'\n const on = {\n [inputEventName]: (val: string | InputEvent) => {\n const newVal = getValue(val)\n model.value = newVal\n debouncedValueUpdate?.(newVal)\n log(`Input event [${inputEventName}] triggered: ${newVal}`)\n },\n clear: () => {\n debouncedValueUpdate?.cancel()\n model.value = ''\n persistValue('')\n log('Clear event')\n },\n change: (val: FormInputChangeEvent | Event) => {\n const newVal = getValue(val)\n debouncedValueUpdate?.cancel()\n persistValue(newVal)\n model.value = newVal\n log('Change event: ' + newVal)\n },\n keydown: (e: KeyboardEvent) => {\n if (!isBasicHtmlInput) return\n if (isUndefined(submitOnEnter)) return\n\n const isEnter = e.key === 'Enter'\n if (!isEnter) return\n\n const isTextarea = e.target instanceof HTMLTextAreaElement\n\n if (isTextarea) {\n if (submitOnEnter) {\n log('Triggering submit on enter')\n e.preventDefault()\n e.stopPropagation()\n on.change(e)\n }\n } else {\n if (!submitOnEnter) {\n log('Preventing submit on enter')\n e.preventDefault()\n e.stopPropagation()\n }\n }\n }\n }\n const bind = computed(() => ({\n modelValue: model.value || ''\n }))\n\n watch(value, (newVal, oldVal) => {\n if (oldVal === newVal && !oldVal && !newVal) return\n if (model.value === value.value) return\n model.value = value.value\n })\n\n const syncFromValue = () => {\n debouncedValueUpdate?.cancel()\n model.value = value.value\n }\n\n return {\n on,\n bind,\n value,\n /**\n * Force sync internal state from the source of truth\n */\n syncFromValue\n }\n}\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div :class=\"computedWrapperClasses\">\n <div\n :class=\"\n labelPosition === 'left'\n ? 'w-full md:w-6/12 flex flex-col justify-center'\n : 'w-full'\n \"\n >\n <label :for=\"name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n <div v-if=\"!showRequired\" class=\"text-body-2xs font-normal\">(optional)</div>\n </label>\n <span\n v-if=\"labelPosition === 'left' && helpTipIdLeft\"\n :id=\"helpTipIdLeft\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </span>\n </div>\n <div\n class=\"relative\"\n :class=\"labelPosition === 'left' ? 'w-full md:w-6/12' : 'w-full'\"\n >\n <textarea\n :id=\"name\"\n ref=\"inputElement\"\n v-model=\"value\"\n :name=\"name\"\n :class=\"[\n coreClasses,\n iconClasses,\n sizeClasses,\n textareaClasses || '',\n 'min-h-[6rem] sm:min-h-[3rem] simple-scrollbar'\n ]\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"errorMessage ? 'true' : 'false'\"\n :aria-describedby=\"labelPosition === 'left' ? helpTipIdLeft : helpTipIdTop\"\n v-bind=\"$attrs\"\n @change=\"$emit('change', { event: $event, value })\"\n @input=\"$emit('input', { event: $event, value })\"\n @keydown.stop\n />\n <a\n v-if=\"shouldShowClear\"\n title=\"Clear input\"\n class=\"absolute top-2 right-0 flex items-center pr-2 cursor-pointer\"\n @click=\"clear\"\n @keydown=\"clear\"\n >\n <span class=\"text-xs sr-only\">Clear input</span>\n <XMarkIcon class=\"h-5 w-5 text-foreground\" aria-hidden=\"true\" />\n </a>\n </div>\n <p\n v-if=\"labelPosition === 'top' && helpTipIdTop\"\n :id=\"helpTipIdTop\"\n :class=\"['mt-1.5', helpTipClasses]\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { XMarkIcon } from '@heroicons/vue/20/solid'\nimport type { Nullable } from '@speckle/shared'\nimport type { RuleExpression } from 'vee-validate'\nimport { computed, ref, toRefs } from 'vue'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport type { InputColor } from '~~/src/composables/form/textInput'\nimport { useTextInputCore } from '~~/src/composables/form/textInput'\n\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: string): void\n (e: 'change', val: { event?: Event; value: string }): void\n (e: 'input', val: { event?: Event; value: string }): void\n (e: 'clear'): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Unique ID for the input (must be unique page-wide)\n */\n name: string\n showLabel?: boolean\n help?: string\n placeholder?: string\n label?: string\n disabled?: boolean\n rules?: RuleExpression<string>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n useLabelInErrors?: boolean\n autoFocus?: boolean\n modelValue?: string\n showClear?: boolean\n fullWidth?: boolean\n showRequired?: boolean\n showOptional?: boolean\n color?: InputColor\n textareaClasses?: string\n size?: InputSize\n labelPosition?: LabelPosition\n wrapperClasses?: string\n }>(),\n {\n useLabelInErrors: true,\n modelValue: '',\n color: 'page',\n labelPosition: 'top',\n wrapperClasses: ''\n }\n)\n\nconst inputElement = ref(null as Nullable<HTMLTextAreaElement>)\n\nconst {\n coreClasses,\n title,\n value,\n helpTipClasses,\n helpTip,\n errorMessage,\n labelClasses,\n clear,\n focus,\n shouldShowClear\n} = useTextInputCore({\n props: toRefs(props),\n emit,\n inputEl: inputElement\n})\n\nconst helpTipIdTop = computed(() => `${props.name}-help-top`)\nconst helpTipIdLeft = computed(() => `${props.name}-help-left`)\n\nconst iconClasses = computed(() => {\n const classParts: string[] = ['pl-2']\n\n if (shouldShowClear.value && errorMessage.value) {\n classParts.push('pr-12')\n } else if (shouldShowClear.value || errorMessage.value) {\n classParts.push('pr-8')\n }\n\n return classParts.join(' ')\n})\n\nconst sizeClasses = computed((): string => {\n switch (props.size) {\n case 'sm':\n return 'text-body sm:text-body-2xs'\n case 'lg':\n return 'text-body sm:text-sm'\n case 'xl':\n return 'text-body sm:text-base'\n case 'base':\n default:\n return 'text-body sm:text-body-xs'\n }\n})\n\nconst computedWrapperClasses = computed(() => {\n const classes = ['flex', props.wrapperClasses]\n if (props.fullWidth) {\n classes.push('w-full')\n }\n\n if (props.labelPosition === 'top') {\n classes.push('flex-col')\n }\n if (props.labelPosition === 'left') {\n classes.push(\n 'w-full space-y-1 sm:space-y-0 sm:space-x-8 flex-col sm:flex-row items-start'\n )\n }\n return classes.join(' ')\n})\n\ndefineExpose({ focus })\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div :class=\"computedWrapperClasses\">\n <div\n :class=\"\n labelPosition === 'left'\n ? 'w-full md:w-6/12 flex flex-col justify-center'\n : 'w-full'\n \"\n >\n <label :for=\"name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n <div v-if=\"showRequired\" class=\"text-danger text-body-xs opacity-80\">*</div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">(optional)</div>\n </label>\n <p\n v-if=\"labelPosition === 'left' && helpTipId && !hideHelpTip\"\n :id=\"helpTipId\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n\n <div\n class=\"group relative\"\n :class=\"labelPosition === 'left' ? 'w-full md:w-6/12' : 'w-full'\"\n >\n <div\n v-if=\"customIcon\"\n class=\"pointer-events-none absolute top-0 bottom-0 left-0 flex items-center pl-2\"\n >\n <Component\n :is=\"customIcon\"\n v-if=\"customIcon\"\n :class=\"leadingIconClasses\"\n aria-hidden=\"true\"\n />\n </div>\n <div\n v-if=\"loading\"\n class=\"absolute top-0 h-full right-0 flex items-center pr-2 text-foreground-3\"\n >\n <CommonLoadingIcon />\n </div>\n\n <div v-tippy=\"tooltipText\">\n <input\n :id=\"name\"\n ref=\"inputElement\"\n v-model=\"value\"\n :type=\"type\"\n :name=\"name\"\n :class=\"[coreClasses, iconClasses, sizeClasses, inputClasses || '']\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-invalid=\"errorMessage ? 'true' : 'false'\"\n :aria-describedby=\"helpTipId\"\n :readonly=\"readOnly\"\n role=\"textbox\"\n v-bind=\"$attrs\"\n :style=\"inputStyle\"\n @change=\"$emit('change', { event: $event, value })\"\n @input=\"$emit('input', { event: $event, value })\"\n @focus=\"$emit('focus')\"\n @blur=\"$emit('blur')\"\n @keydown.stop\n />\n </div>\n <slot name=\"input-right\">\n <a\n v-if=\"rightIcon\"\n :title=\"rightIconTitle\"\n :class=\"[\n sizeClasses,\n readOnly\n ? 'w-full cursor-text border border-transparent group-hover:border-outline-5 rounded-md'\n : 'cursor-pointer'\n ]\"\n class=\"absolute top-0 right-0 hidden group-hover:flex items-center justify-end pr-1 text-foreground-2\"\n @click=\"onRightIconClick\"\n @keydown=\"onRightIconClick\"\n >\n <span class=\"text-body-xs sr-only\">{{ rightIconTitle }}</span>\n <Component\n :is=\"rightIcon\"\n class=\"h-6 w-6 text-foreground\"\n aria-hidden=\"true\"\n />\n </a>\n <a\n v-else-if=\"shouldShowClear\"\n title=\"Clear input\"\n class=\"absolute top-0 bottom-0 right-0 flex items-center pr-2 cursor-pointer\"\n @click=\"clear\"\n @keydown=\"clear\"\n >\n <span class=\"text-body-xs sr-only\">Clear input</span>\n <XMarkIcon class=\"h-5 w-5 text-foreground\" aria-hidden=\"true\" />\n </a>\n <div\n v-else-if=\"!showLabel && showRequired && !errorMessage\"\n class=\"pointer-events-none absolute top-0 bottom-0 mt-2 text-body right-0 flex items-center text-danger pr-2.5\"\n :class=\"[shouldShowClear ? 'pr-8' : 'pr-2']\"\n >\n *\n </div>\n </slot>\n </div>\n <p\n v-if=\"labelPosition === 'top' && helpTipId && !hideHelpTip\"\n :id=\"helpTipId\"\n :class=\"['mt-1.5', helpTipClasses]\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { RuleExpression } from 'vee-validate'\nimport { XMarkIcon } from '@heroicons/vue/20/solid'\nimport { computed, ref, toRefs, useSlots } from 'vue'\nimport type { CSSProperties, PropType } from 'vue'\nimport type { Nullable, Optional } from '@speckle/shared'\nimport { useTextInputCore } from '~~/src/composables/form/textInput'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport type { InputColor } from '~~/src/composables/form/textInput'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { CommonLoadingIcon } from '~~/src/lib'\nimport { directive as vTippy } from 'vue-tippy'\n\ntype InputType = 'text' | 'email' | 'password' | 'url' | 'search' | 'number' | string\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = defineProps({\n /**\n * Input \"type\" value (changes behaviour & look)\n */\n type: {\n type: String as PropType<InputType>,\n default: 'text'\n },\n /**\n * Unique ID for the input (must be unique page-wide)\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Whether to show label (label will always be shown to screen readers)\n */\n showLabel: {\n type: Boolean,\n required: false\n },\n /**\n * Optional help text\n */\n help: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Placeholder text\n */\n placeholder: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Set label text explicitly\n */\n label: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the \"optional\" text\n */\n showOptional: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to disable the component, blocking it from user input\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to disable editing the component, making it read only\n */\n readOnly: {\n type: Boolean,\n default: false\n },\n /**\n * vee-validate validation rules\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<RuleExpression<string>>,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to trigger validation whenever the value changes\n */\n validateOnValueUpdate: {\n type: Boolean,\n default: false\n },\n /**\n * Will replace the generic \"Value\" text with the name of the input in error messages\n */\n useLabelInErrors: {\n type: Boolean,\n default: true\n },\n /**\n * Set a custom icon to use inside the input\n */\n customIcon: {\n type: [Object, Function] as PropType<Optional<PropAnyComponent>>,\n default: undefined\n },\n iconClasses: {\n type: String,\n default: null\n },\n /**\n * Whether to focus on the input when component is mounted\n */\n autoFocus: {\n type: Boolean,\n default: false\n },\n modelValue: {\n type: String,\n default: ''\n },\n size: {\n type: String as PropType<InputSize>,\n default: 'base'\n },\n showClear: {\n type: Boolean,\n default: false\n },\n inputClasses: {\n type: String,\n default: null\n },\n fullWidth: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n },\n hideErrorMessage: {\n type: Boolean,\n default: false\n },\n customErrorMessage: {\n type: String,\n default: null\n },\n wrapperClasses: {\n type: String,\n default: () => ''\n },\n color: {\n type: String as PropType<InputColor>,\n default: 'page'\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n rightIcon: {\n type: [Object, Function] as PropType<Optional<PropAnyComponent>>,\n default: undefined\n },\n rightIconTitle: {\n type: String,\n default: undefined\n },\n tooltipText: {\n type: String,\n default: undefined\n },\n customHelpClass: {\n type: String,\n default: undefined\n }\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: string): void\n (e: 'change', val: { event?: Event; value: string }): void\n (e: 'input', val: { event?: Event; value: string }): void\n (e: 'clear'): void\n (e: 'focus'): void\n (e: 'blur'): void\n (e: 'rightIconClick'): void\n}>()\n\nconst slots = useSlots()\n\nconst inputElement = ref(null as Nullable<HTMLInputElement>)\n\nconst {\n coreClasses,\n title,\n value,\n helpTipId,\n helpTipClasses,\n helpTip,\n hideHelpTip,\n errorMessage,\n clear,\n focus,\n labelClasses,\n shouldShowClear\n} = useTextInputCore({\n props: toRefs(props),\n emit,\n inputEl: inputElement\n})\n\nconst inputStyle = computed((): CSSProperties => {\n if (props.color !== 'fully-transparent') return {}\n\n // In fully transparent mode, we want the input to fully blend in w/ parent styling\n const style: CSSProperties = {\n fontSize: 'inherit'\n }\n return style\n})\n\nconst leadingIconClasses = computed(() => {\n const classParts: string[] = ['h-4 w-4']\n\n if (props.iconClasses) {\n classParts.push(props.iconClasses)\n }\n\n if (errorMessage.value) {\n classParts.push('text-danger')\n } else {\n classParts.push('text-foreground-2')\n }\n\n return classParts.join(' ')\n})\n\nconst iconClasses = computed((): string => {\n const classParts: string[] = []\n\n if (props.customIcon) {\n classParts.push('pl-8')\n }\n\n if (!slots['input-right']) {\n if (props.rightIcon || errorMessage.value || shouldShowClear.value) {\n classParts.push('pr-8')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst sizeClasses = computed((): string => {\n // fully transparent should get sizing/coloring info from parent elements,\n // its supposed to fit into the existing style\n const ifNotFullyTransparent = (val: string) =>\n props.color === 'fully-transparent' ? '' : val\n\n switch (props.size) {\n case 'sm':\n return `h-6 ${ifNotFullyTransparent('text-body sm:text-body-sm')}`\n case 'lg':\n return `h-10 ${ifNotFullyTransparent('text-body sm:text-[13px]')}`\n case 'xl':\n return `h-14 ${ifNotFullyTransparent('text-body sm:text-sm')}`\n case 'base':\n default:\n return `h-8 ${ifNotFullyTransparent('text-body sm:text-body-sm')}`\n }\n})\n\nconst computedWrapperClasses = computed(() => {\n const classes = ['flex', props.wrapperClasses]\n if (props.fullWidth) {\n classes.push('w-full')\n }\n\n if (props.labelPosition === 'top') {\n classes.push('flex-col')\n }\n if (props.labelPosition === 'left') {\n classes.push('w-full space-y-1 sm:space-y-0 sm:space-x-8 flex-col sm:flex-row')\n }\n return classes.join(' ')\n})\n\nconst onRightIconClick = () => {\n emit('rightIconClick')\n}\n\ndefineExpose({ focus })\n</script>\n","import { isString, isUndefined } from '#lodash'\nimport type { GenericValidateFunction } from 'vee-validate'\nimport { isNullOrUndefined } from '@speckle/shared'\n\nexport const VALID_HTTP_URL = /^https?:\\/\\//\nexport const VALID_EMAIL = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\n/**\n * Note about new validators:\n * Make sure you use the word \"Value\" to refer to the value being validated in all error messages, cause the dynamic string replace\n * that replaces that part with the actual field name works based on that\n */\n\n/**\n * E-mail validation rule (not perfect, but e-mails should be validated by sending out confirmation e-mails anyway)\n */\nexport const isEmail: GenericValidateFunction<string> = (val) =>\n (val || '').match(VALID_EMAIL) ? true : 'Value should be a valid e-mail address'\n\n/**\n * Used for placeholders inputs where the user can leave the field empty\n */\nexport const isEmailOrEmpty: GenericValidateFunction<string> = (val) =>\n (val || '').match(VALID_EMAIL) || !val\n ? true\n : 'Value should be a valid e-mail address'\n\nexport const isOneOrMultipleEmails: GenericValidateFunction<string> = (val) => {\n const emails = (val || '').split(',').map((i) => i.trim())\n const valid = emails.every((e) => e.match(VALID_EMAIL))\n return valid || 'Value should be one or multiple comma-delimited e-mail addresses'\n}\n\nexport const isRequired: GenericValidateFunction<unknown> = (val) => {\n if (isString(val)) {\n val = val.trim()\n }\n\n return val ? true : 'Value is required'\n}\n\nexport const isSameAs: (\n otherFieldName: string,\n otherFieldDisplayName?: string\n) => GenericValidateFunction<unknown> =\n (otherFieldName, otherFieldDisplayName) => (val, meta) => {\n return val === meta.form[otherFieldName]\n ? true\n : `Value must be the same as in field '${\n otherFieldDisplayName || otherFieldName\n }'`\n }\n\nexport const isStringOfLength =\n (params: {\n minLength?: number\n maxLength?: number\n }): GenericValidateFunction<string> =>\n (val) => {\n const { minLength, maxLength } = params\n val = isNullOrUndefined(val) ? '' : val\n\n if (!isString(val)) return 'Value should be a text string'\n if (!isUndefined(minLength) && val.length < minLength)\n return `Value needs to be at least ${minLength} characters long`\n if (!isUndefined(maxLength) && val.length > maxLength)\n return `Value can't be longer than ${maxLength} characters`\n return true\n }\n\nexport const stringContains =\n (params: {\n match: string | RegExp\n message: string\n }): GenericValidateFunction<string> =>\n (val) => {\n const { match, message } = params\n\n if (!isString(val)) return 'Value should be a text string'\n if (!match) return true\n\n if (isString(match)) {\n return val.includes(match) ? true : message\n } else {\n return match.test(val) ? true : message\n }\n }\n\nexport const isUrl: GenericValidateFunction<string> = (value) => {\n if (VALID_HTTP_URL.test(value)) {\n return true\n }\n return 'Value is not a valid URL'\n}\n\nexport const isItemSelected: GenericValidateFunction<unknown[]> = (val) => {\n if (Array.isArray(val) && val.length > 0) {\n return true\n }\n return 'Value should have at least a single item selected'\n}\n\nexport const isMultiItemSelected = <T>(val: T[] | unknown): true | string => {\n if (Array.isArray(val) && val.length > 0) {\n return true\n }\n return 'Value should have at least a single item selected'\n}\n","import type { Nullable, Optional } from '@speckle/shared'\nimport { useMutationObserver, useResizeObserver } from '@vueuse/core'\nimport { isUndefined } from '#lodash'\nimport { ref } from 'vue'\nimport type { Ref, ComputedRef } from 'vue'\n\n/**\n * Use this to calculate the number of hidden elements (e.g. user avatars) in a wrapping flex row that\n * is styled to only show the first row. For example, there are 12 users total, there's only space for 5,\n * and this composable will calculate the number of hidden ones to use for the \"+X\" label (+7 in the example)\n *\n * Note: The \"hidden\" items must wrap into another line, because we use their offset from the top of the parent\n * to check if they're hidden (compared to items in the 1st row)\n */\nexport function useWrappingContainerHiddenCount(params: {\n /**\n * Element to watch for any changes\n */\n elementToWatchForChanges: Ref<Nullable<HTMLElement>>\n /**\n * The element that actually contains the potentially visible/hidden items as direct children\n */\n itemContainer: Ref<Nullable<HTMLElement>>\n\n /**\n * Allows you to pause calculations conditionally\n */\n skipCalculation?: ComputedRef<boolean>\n\n /**\n * If true, will track resizing of 'elementToWatchForChanges'.\n * Default: false\n */\n trackResize?: boolean\n\n /**\n * If true, will track descendants being added/removed to 'elementToWatchForChanges'.\n * Default: true\n */\n trackMutations?: boolean\n}) {\n const {\n skipCalculation,\n elementToWatchForChanges,\n itemContainer,\n trackResize = false,\n trackMutations = true\n } = params || {}\n\n /**\n * Dynamically updated to show the number of items currently not visible in the container\n */\n const hiddenItemCount = ref(0)\n\n const recalculate = () => {\n const target = itemContainer.value\n if (skipCalculation?.value || !target) return\n\n const avatarElements = target.children\n\n /**\n * Comparing offset from parent to between all avatars to see when they break off into another line\n * and become invisible\n */\n let visibleCount = 0\n let totalCount = 0\n let firstElOffsetTop = undefined as Optional<number>\n for (const avatarEl of avatarElements) {\n const offsetTop = (avatarEl as HTMLElement).offsetTop\n if (isUndefined(firstElOffsetTop)) {\n firstElOffsetTop = offsetTop\n visibleCount += 1\n } else {\n if (offsetTop === firstElOffsetTop) {\n visibleCount += 1\n }\n }\n\n totalCount += 1\n }\n\n hiddenItemCount.value = totalCount - visibleCount\n }\n\n if (trackResize) {\n useResizeObserver(elementToWatchForChanges, recalculate)\n }\n\n if (trackMutations) {\n useMutationObserver(elementToWatchForChanges, recalculate, {\n childList: true,\n subtree: true\n })\n }\n\n return {\n hiddenItemCount\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport { isArray } from '#lodash'\nimport { computed, ref } from 'vue'\nimport type { Ref, ToRefs } from 'vue'\nimport type { Nullable } from '@speckle/shared'\nimport { useWrappingContainerHiddenCount } from '~~/src/composables/layout/resize'\n\ntype GenericSelectValueType<T> = T | T[] | undefined\n\n/**\n * Common setup for FormSelectBase wrapping selector components\n */\nexport function useFormSelectChildInternals<T>(params: {\n props: ToRefs<{\n modelValue?: GenericSelectValueType<T>\n multiple?: boolean\n }>\n emit: {\n (e: 'update:modelValue', val: GenericSelectValueType<T>): void\n }\n /**\n * @see {useWrappingContainerHiddenCount()}\n */\n dynamicVisibility?: {\n elementToWatchForChanges: Ref<Nullable<HTMLElement>>\n itemContainer: Ref<Nullable<HTMLElement>>\n }\n}) {\n const { props, emit, dynamicVisibility } = params\n\n let hiddenItemCount: Ref<number>\n if (dynamicVisibility) {\n const { elementToWatchForChanges, itemContainer } = dynamicVisibility\n const hiddenCountData = useWrappingContainerHiddenCount({\n skipCalculation: computed(() => !props.multiple?.value),\n elementToWatchForChanges,\n itemContainer\n })\n hiddenItemCount = hiddenCountData.hiddenItemCount\n } else {\n hiddenItemCount = ref(0)\n }\n\n /**\n * Use this to get or set the v-model value of the select input in a proper way\n */\n const selectedValue = computed({\n get: (): GenericSelectValueType<T> => {\n const currentValue = props.modelValue?.value\n if (props.multiple?.value) {\n return isArray(currentValue) ? currentValue : []\n } else {\n return isArray(currentValue) ? undefined : currentValue\n }\n },\n set: (newVal: GenericSelectValueType<T>) => {\n if (props.multiple?.value && !isArray(newVal)) {\n console.warn('Attempting to set non-array value in selector w/ multiple=true')\n return\n } else if (!props.multiple?.value && isArray(newVal)) {\n console.warn('Attempting to set array value in selector w/ multiple=false')\n return\n }\n\n emit('update:modelValue', props.multiple?.value ? newVal || [] : newVal)\n }\n })\n\n const isArrayValue = (v: GenericSelectValueType<T>): v is T[] => isArray(v)\n const isMultiItemArrayValue = (v: GenericSelectValueType<T>): v is T[] =>\n isArray(v) && v.length > 1\n const firstItem = (v: NonNullable<GenericSelectValueType<T>>): T =>\n isArrayValue(v) ? v[0] : v\n\n return {\n selectedValue,\n hiddenSelectedItemCount: hiddenItemCount,\n isArrayValue,\n isMultiItemArrayValue,\n firstItem\n }\n}\n","<template>\n <div\n :class=\"[\n 'relative w-full h-1 bg-blue-500/30 text-xs text-foreground-on-primary overflow-hidden rounded-xl',\n showBar ? 'opacity-100' : 'opacity-0'\n ]\"\n >\n <div class=\"swoosher relative top-0 bg-blue-500/50\"></div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { useMounted } from '@vueuse/core'\nimport { computed } from 'vue'\n\nconst props = defineProps<{ loading: boolean; clientOnly?: boolean }>()\n\nconst mounted = useMounted()\nconst showBar = computed(() => (mounted.value || !props.clientOnly) && props.loading)\n</script>\n<style scoped>\n.swoosher {\n width: 100%;\n height: 100%;\n animation: swoosh 1s infinite linear;\n transform-origin: 0% 30%;\n}\n\n@keyframes swoosh {\n 0% {\n transform: translateX(0) scaleX(0);\n }\n\n 40% {\n transform: translateX(0) scaleX(0.4);\n }\n\n 100% {\n transform: translateX(100%) scaleX(0.5);\n }\n}\n</style>\n","import type { Nullable } from '@speckle/shared'\nimport { isClient } from '@vueuse/core'\nimport type { MaybeRef } from '@vueuse/core'\nimport { debounce, isUndefined, throttle } from '#lodash'\nimport { computed, onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'\n\nexport enum ThrottleOrDebounce {\n Throttle,\n Debounce\n}\n\nexport enum HorizontalDirection {\n Left,\n Right\n}\n\nexport function useWindowResizeHandler(\n handler: (e: UIEvent) => void,\n options?: Partial<{\n wait: number\n throttleOrDebounce: ThrottleOrDebounce\n }>\n) {\n if (!isClient) return\n\n const { wait = 100, throttleOrDebounce = ThrottleOrDebounce.Throttle } = options || {}\n const finalHandler = wait\n ? throttleOrDebounce === ThrottleOrDebounce.Throttle\n ? throttle(handler, wait)\n : debounce(handler, wait)\n : handler\n\n onMounted(() => window.addEventListener('resize', finalHandler))\n onBeforeUnmount(() => window.removeEventListener('resize', finalHandler))\n}\n\nexport function useOnBeforeWindowUnload(handler: (e: BeforeUnloadEvent) => void) {\n onMounted(() => {\n window.addEventListener('beforeunload', handler)\n })\n\n onBeforeUnmount(() => {\n window.removeEventListener('beforeunload', handler)\n })\n}\n\nexport function useResponsiveHorizontalDirectionCalculation(params: {\n el: MaybeRef<Nullable<HTMLElement>>\n defaultDirection?: HorizontalDirection\n /**\n * Stop recalculation below this screen size. Defaults to el.width * 2\n */\n stopUpdatesBelowWidth?: MaybeRef<number>\n}) {\n const { el, defaultDirection } = params\n\n const direction = ref<HorizontalDirection>(\n !isUndefined(defaultDirection) ? defaultDirection : HorizontalDirection.Right\n )\n const stopUpdatesBelowWidth = computed(() => {\n const stopUpdatesBelowWidth = unref(params.stopUpdatesBelowWidth)\n if (!isUndefined(stopUpdatesBelowWidth)) return stopUpdatesBelowWidth\n\n const element = unref(el)\n return element?.offsetWidth ? element.offsetWidth * 2 : undefined\n })\n\n const recalculateDirection = () => {\n if (!isClient) return\n\n const element = unref(el)\n if (!element) return\n\n const rect = element.getBoundingClientRect()\n const showOnLeftSide = rect.x + rect.width > window.innerWidth\n const showOnRightSide = rect.x < 0\n\n // Screen too small - do nothing\n if (\n (showOnLeftSide && showOnRightSide) ||\n (!isUndefined(stopUpdatesBelowWidth.value) &&\n window.innerWidth < stopUpdatesBelowWidth.value)\n )\n return\n\n if (showOnLeftSide) {\n direction.value = HorizontalDirection.Left\n } else if (showOnRightSide) {\n direction.value = HorizontalDirection.Right\n }\n }\n\n useWindowResizeHandler(() => recalculateDirection())\n\n watch(\n () => unref(el),\n (element) => {\n if (element) {\n recalculateDirection()\n }\n }\n )\n\n return {\n direction: computed(() => direction.value),\n recalculateDirection\n }\n}\n","import { isClient, type UseElementBoundingReturn } from '@vueuse/core'\nimport { isUndefined } from '#lodash'\nimport { computed, unref, type ComputedRef, type CSSProperties } from 'vue'\nimport { HorizontalDirection } from '~~/src/composables/common/window'\n\n/**\n * Simplifies correctly and responsively positioning (dropdown/right-click/etc) menus so that they open\n * to the correct direction, can change directions if there's not enough space or even go full screen\n * if there's no space in either direction.\n *\n * Also supports updating vertical position, incase the menu would clip w/ the bottom of the screen\n */\nexport const useBodyMountedMenuPositioning = (params: {\n /**\n * The direction the open should preferably open in, assuming it has the space to do so\n */\n menuOpenDirection?: ComputedRef<HorizontalDirection>\n /**\n * useElementBounding() of the button that opens the menu\n */\n buttonBoundingBox: UseElementBoundingReturn\n /**\n * Set the target menu width. If not available, will try a very basic positioning method\n * that just uses the button width.\n */\n menuWidth: ComputedRef<number | undefined>\n /**\n * Optionally also control target menu height.\n */\n menuHeight?: ComputedRef<number | undefined>\n}) => {\n const menuStyle = computed(() => {\n const style: CSSProperties = {}\n if (!isClient) return style // Not SSR compatible\n\n /**\n * 1.a. If menuWidth is bigger than screen width, use screen width\n * 1.b. If menuWidth is smaller than screen width, use menuWidth\n * 2. If 1.b. but menu is leaving screen bounds, make it open to other direction\n *\n * Also:\n * 1.a. If menuHeight is bigger than screen height, use screen height\n * 1.b. If menuHeight is smaller than screen height, use screenHeight\n * 2. If 1.b. but menu is leaving screen bounds, make it open to other direction (upwards)\n */\n\n const openToLeft = unref(params.menuOpenDirection) === HorizontalDirection.Left\n\n const top = params.buttonBoundingBox.top.value\n const left = params.buttonBoundingBox.left.value\n const width = params.buttonBoundingBox.width.value\n const height = params.buttonBoundingBox.height.value\n const margin = 4 // how much space to leave in full-screen mode or between button and menu\n\n let finalWidth = width\n let finalLeft = left\n let finalTop = top + height + margin\n\n const menuWidth = unref(params.menuWidth)\n const menuHeight = unref(params?.menuHeight)\n\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n const viewportWidthWithoutMargins = viewportWidth - margin * 2\n const viewportHeightWithoutMargins = viewportHeight - margin * 2\n\n if (!isUndefined(menuWidth)) {\n if (menuWidth > viewportWidthWithoutMargins) {\n // Menu too big: use full screen width\n finalWidth = viewportWidthWithoutMargins\n finalLeft = margin\n } else {\n // Open to right or left depending on available space\n finalWidth = menuWidth\n\n if (openToLeft) {\n finalLeft = left + width - menuWidth\n if (finalLeft < margin) {\n finalLeft = margin\n }\n } else {\n if (left + menuWidth > viewportWidthWithoutMargins) {\n finalLeft = Math.max(left + width - menuWidth, margin)\n }\n }\n }\n }\n\n if (!isUndefined(menuHeight)) {\n if (menuHeight > viewportHeightWithoutMargins) {\n finalTop = margin\n } else {\n // By default opens downward, see if we need to move upward instead\n if (top + height + menuHeight > viewportHeightWithoutMargins) {\n finalTop = top - menuHeight - margin\n }\n }\n }\n\n style.left = `${finalLeft}px`\n style.width = `${finalWidth}px`\n style.top = `${finalTop}px`\n\n return style\n })\n\n return { menuStyle }\n}\n","<template>\n <!-- If multiple, use FormSelectMultiple instead -->\n <div>\n <Listbox\n :key=\"forceUpdateKey\"\n v-model=\"wrappedValue\"\n :name=\"name\"\n :multiple=\"multiple\"\n :by=\"by\"\n :disabled=\"isDisabled\"\n as=\"div\"\n :class=\"{\n 'md:flex md:items-center md:space-x-2 md:justify-between': isLeftLabelPosition\n }\"\n >\n <div class=\"flex flex-col\" :class=\"{ 'pb-1': showLabel && !isLeftLabelPosition }\">\n <ListboxLabel\n :id=\"labelId\"\n class=\"flex text-body-xs text-foreground font-medium\"\n :class=\"[{ 'sr-only': !showLabel }, { 'items-center gap-1': showOptional }]\"\n :for=\"buttonId\"\n >\n {{ label }}\n <div v-if=\"showRequired\" class=\"text-danger text-xs opacity-80\">*</div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">\n (optional)\n </div>\n </ListboxLabel>\n <p\n v-if=\"helpTipId && isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n <div v-tippy=\"tooltipText\">\n <div :class=\"buttonsWrapperClasses\">\n <!-- <div class=\"relative flex\"> -->\n <ListboxButton\n :id=\"buttonId\"\n ref=\"listboxButton\"\n v-slot=\"{ open }\"\n :class=\"buttonClasses\"\n >\n <div\n class=\"flex items-center w-full\"\n :class=\"buttonStyle === 'simple' ? 'justify-start' : 'justify-between'\"\n >\n <div\n class=\"block truncate text-left text-xs sm:text-[13px]\"\n :class=\"[\n hasValueSelected ? 'text-foreground' : 'text-foreground-2',\n buttonStyle === 'simple' ? '' : 'grow'\n ]\"\n >\n <template\n v-if=\"\n !wrappedValue || (isArray(wrappedValue) && !wrappedValue.length)\n \"\n >\n <slot name=\"nothing-selected\">\n {{ placeholder ? placeholder : label }}\n </slot>\n </template>\n <template v-else>\n <slot name=\"something-selected\" :value=\"wrappedValue\">\n {{ simpleDisplayText(wrappedValue) }}\n </slot>\n </template>\n </div>\n <div\n class=\"pointer-events-none shrink-0 ml-1 flex items-center space-x-2\"\n >\n <ExclamationCircleIcon\n v-if=\"errorMessage\"\n class=\"h-4 w-4 text-danger\"\n aria-hidden=\"true\"\n />\n <div\n v-else-if=\"!showLabel && showRequired\"\n class=\"text-4xl text-danger opacity-50 h-4 w-4 leading-6\"\n >\n *\n </div>\n <ChevronUpIcon\n v-if=\"open\"\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n <ChevronDownIcon\n v-else\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n <!-- Sync isOpen with dropdown open state -->\n <template v-if=\"(isOpen = open)\"></template>\n </ListboxButton>\n <!-- </div> -->\n <!-- Clear Button -->\n <button\n v-if=\"renderClearButton\"\n :class=\"clearButtonClasses\"\n :disabled=\"disabled\"\n @click=\"clearValue()\"\n >\n <XMarkIcon class=\"w-3 h-3\" />\n </button>\n <Transition\n v-if=\"isMounted\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <Teleport to=\"body\" :disabled=\"!mountMenuOnBody\">\n <ListboxOptions\n ref=\"menuEl\"\n :class=\"listboxOptionsClasses\"\n :style=\"listboxOptionsStyle\"\n @focus=\"searchInput?.focus()\"\n >\n <label v-if=\"hasSearch\" class=\"flex flex-col mx-1 mb-1\">\n <span class=\"sr-only label text-foreground\">Search</span>\n <div class=\"relative\">\n <div\n class=\"pointer-events-none absolute top-0 bottom-0 left-0 flex items-center pl-2\"\n >\n <MagnifyingGlassIcon class=\"h-4 w-4 text-foreground-2\" />\n </div>\n <input\n ref=\"searchInput\"\n v-model=\"searchValue\"\n type=\"text\"\n class=\"py-1 pl-7 w-full bg-foundation placeholder:font-normal normal placeholder:text-foreground-2 text-[13px] focus-visible:[box-shadow:none] rounded-md hover:border-outline-5 focus-visible:border-outline-4\"\n :placeholder=\"searchPlaceholder\"\n @keydown.stop\n />\n </div>\n </label>\n <div\n class=\"overflow-auto simple-scrollbar\"\n :class=\"props.menuMaxHeightClasses || 'max-h-[50vh] xl:max-h-80'\"\n >\n <div v-if=\"isAsyncSearchMode && isAsyncLoading\" class=\"px-1\">\n <CommonLoadingBar :loading=\"true\" />\n </div>\n <div v-else-if=\"isAsyncSearchMode && !currentItems.length\">\n <div class=\"text-foreground-2 text-center\">\n <slot name=\"nothing-found\">Nothing found</slot>\n </div>\n </div>\n <template v-if=\"!isAsyncSearchMode || !isAsyncLoading\">\n <ListboxOption\n v-for=\"item in finalItems\"\n :key=\"itemKey(item)\"\n v-slot=\"{\n active,\n selected\n }: {\n active: boolean,\n selected: boolean\n }\"\n :value=\"(item as SingleItem)\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n >\n <li\n v-tippy=\"\n disabledItemPredicate?.(item)\n ? disabledItemTooltip\n : undefined\n \"\n :class=\"\n listboxOptionClasses({\n active,\n disabled: disabledItemPredicate?.(item) || false\n })\n \"\n >\n <span\n class=\"block px-2 py-1.5 rounded-md\"\n :class=\"[\n selected ? 'bg-highlight-3' : '',\n !hideCheckmarks ? 'pr-8' : 'pr-2',\n !disabledItemPredicate?.(item) && !selected\n ? 'hover:bg-highlight-1'\n : ''\n ]\"\n >\n <slot\n name=\"option\"\n class=\"truncate\"\n :item=\"item\"\n :active=\"active\"\n :selected=\"selected\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n >\n {{ simpleDisplayText(item) }}\n </slot>\n\n <span\n v-if=\"!hideCheckmarks && selected\"\n :class=\"[\n 'absolute top-0 bottom-0 right-0 text-foreground flex items-center pr-4'\n ]\"\n >\n <CheckIcon class=\"h-4 w-4\" aria-hidden=\"true\" />\n </span>\n </span>\n </li>\n </ListboxOption>\n </template>\n </div>\n </ListboxOptions>\n </Teleport>\n </Transition>\n </div>\n </div>\n </Listbox>\n <p\n v-if=\"helpTipId && !isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"mt-2 text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script\n setup\n lang=\"ts\"\n generic=\"SingleItem extends Record<string, unknown> | string | number\"\n>\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n ListboxLabel\n} from '@headlessui/vue'\nimport {\n ChevronDownIcon,\n CheckIcon,\n ChevronUpIcon,\n MagnifyingGlassIcon,\n XMarkIcon,\n ExclamationCircleIcon\n} from '@heroicons/vue/20/solid'\nimport { debounce, isArray, isObjectLike } from '#lodash'\nimport type { CSSProperties, PropType, Ref } from 'vue'\nimport { computed, onMounted, ref, unref, watch } from 'vue'\nimport type { MaybeAsync, Nullable, Optional } from '@speckle/shared'\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { nanoid } from 'nanoid'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\nimport {\n useElementBounding,\n useMounted,\n useIntersectionObserver,\n isClient\n} from '@vueuse/core'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { directive as vTippy } from 'vue-tippy'\nimport { useBodyMountedMenuPositioning } from '~~/src/composables/layout/menu'\nimport { HorizontalDirection } from '~~/src/lib'\n\ntype ButtonStyle = 'base' | 'simple' | 'tinted'\ntype ValueType = SingleItem | SingleItem[] | undefined\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\nconst isObjectLikeType = (v: unknown): v is Record<string, unknown> => isObjectLike(v)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ValueType): void\n}>()\n\nconst props = defineProps({\n size: {\n type: String as PropType<Optional<InputSize>>,\n default: undefined\n },\n multiple: {\n type: Boolean,\n default: false\n },\n items: {\n type: Array as PropType<SingleItem[]>,\n default: () => []\n },\n modelValue: {\n type: [Object, Array, String] as PropType<ValueType>,\n default: undefined\n },\n /**\n * Whether to enable the search bar. You must also set one of the following:\n * * filterPredicate - to allow filtering passed in `items` based on search bar\n * * getSearchResults - to allow asynchronously loading items from server (props.items no longer required in this case,\n * but can be used to prefill initial values)\n */\n search: {\n type: Boolean,\n default: false\n },\n /**\n * If search=true and this is set, you can use this to filter passed in items based on whatever\n * the user enters in the search bar\n */\n filterPredicate: {\n type: Function as PropType<\n Optional<(item: SingleItem, searchString: string) => boolean>\n >,\n default: undefined\n },\n /**\n * Set this to disable certain items in the list\n */\n disabledItemPredicate: {\n type: Function as PropType<Optional<(item: SingleItem) => boolean>>,\n default: undefined\n },\n /**\n * If search=true and this is set, you can use this to load data asynchronously depending\n * on the search query\n */\n getSearchResults: {\n type: Function as PropType<\n Optional<(searchString: string) => MaybeAsync<SingleItem[]>>\n >,\n default: undefined\n },\n searchPlaceholder: {\n type: String,\n default: 'Search'\n },\n /**\n * Label is required at the very least for screen-readers\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Optional text that replaces the label as the placeholder when set.\n */\n placeholder: {\n type: String\n },\n /**\n * Whether to show the label visually\n */\n showLabel: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n required: true\n },\n /**\n * Objects will be compared by the values in the specified prop\n */\n by: {\n type: String,\n required: false\n },\n disabled: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n buttonStyle: {\n type: String as PropType<Optional<ButtonStyle>>,\n default: 'base'\n },\n hideCheckmarks: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n allowUnset: {\n type: Boolean as PropType<Optional<boolean>>,\n default: true\n },\n clearable: {\n type: Boolean,\n default: false\n },\n /**\n * Validation stuff\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<\n Optional<RuleExpression<ValueType>>\n >,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to trigger validation whenever the value changes\n */\n validateOnValueUpdate: {\n type: Boolean,\n default: false\n },\n /**\n * Will replace the generic \"Value\" text with the name of the input in error messages\n */\n useLabelInErrors: {\n type: Boolean,\n default: true\n },\n /**\n * Optional help text\n */\n help: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * @deprecated Use size attribute instead\n */\n fixedHeight: {\n type: Boolean,\n default: false\n },\n /**\n * By default component holds its own internal value state so that even if you don't have it tied up to a real `modelValue` ref somewhere\n * it knows its internal state and can report it on form submits.\n *\n * If you set this to true, its only going to rely on `modelValue` as its primary source of truth so that you can reject updates etc.\n */\n fullyControlValue: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the optional text\n */\n showOptional: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to mount the menu on the body instead of inside the component. Useful when select box is mounted within\n * dialog windows and the menu causes unnecessary overflow.\n */\n mountMenuOnBody: {\n type: Boolean,\n default: false\n },\n labelId: {\n type: String,\n default: undefined\n },\n buttonId: {\n type: String,\n default: undefined\n },\n /**\n * Tooltip shown on disabled items\n */\n disabledItemTooltip: {\n required: false,\n type: String\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n tooltipText: {\n type: String,\n default: undefined\n },\n /**\n * Optionally make the menu width wider/narrower than the button width by specifying the max width in pixels.\n * Only supported when `mountMenuOnBody` is true.\n */\n menuMaxWidth: {\n type: Number,\n default: undefined\n },\n /**\n * If menuMaxWidth is set and menu is wider than the button, this will determine the direction of the menu opening.\n * Default: 'left' (opens to the left of the button)\n */\n menuOpenDirection: {\n type: String as PropType<'left' | 'right'>,\n default: 'left'\n },\n /**\n * Custom max height classes for the dropdown menu. If not provided, defaults to 'max-h-[50vh] xl:max-h-80'\n */\n menuMaxHeightClasses: {\n type: String,\n default: undefined\n }\n})\n\nconst { value, errorMessage: error } = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n validateOnValueUpdate: props.validateOnValueUpdate,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n initialValue: props.modelValue as ValueType\n})\n\nconst isMounted = useMounted()\n\nconst searchInput = ref(null as Nullable<HTMLInputElement>)\nconst menuEl = ref(null as Nullable<{ el: Nullable<HTMLElement> }>)\nconst listboxButton = ref(null as Nullable<{ el: Nullable<HTMLButtonElement> }>)\nconst searchValue = ref('')\nconst currentItems = ref([]) as Ref<SingleItem[]>\nconst isAsyncLoading = ref(false)\nconst forceUpdateKey = ref(1)\nconst internalHelpTipId = ref(nanoid())\nconst isOpen = ref(false)\n\nconst listboxButtonBounding = useElementBounding(\n computed(() => listboxButton.value?.el),\n { windowResize: true, windowScroll: true, immediate: true }\n)\n\nuseIntersectionObserver(\n computed(() => menuEl.value?.el),\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.mountMenuOnBody) {\n listboxButtonBounding.update()\n }\n }\n)\n\nconst { menuStyle } = useBodyMountedMenuPositioning({\n menuOpenDirection: computed(() =>\n props.menuOpenDirection === 'left'\n ? HorizontalDirection.Left\n : HorizontalDirection.Right\n ),\n menuWidth: computed(() => props.menuMaxWidth),\n buttonBoundingBox: listboxButtonBounding\n})\n\nconst title = computed(() => unref(props.label) || unref(props.name))\nconst errorMessage = computed(() => {\n const base = error.value\n if (!base || !unref(props.useLabelInErrors)) return base\n return base.replace('Value', title.value)\n})\nconst helpTip = computed(() => errorMessage.value || unref(props.help))\nconst hasHelpTip = computed(() => !!helpTip.value)\nconst helpTipId = computed(() =>\n hasHelpTip.value ? `${unref(props.name)}-${internalHelpTipId.value}` : undefined\n)\nconst helpTipClasses = computed((): string =>\n error.value ? 'text-danger' : 'text-foreground-2'\n)\n\nconst isLeftLabelPosition = computed(() => props.labelPosition === 'left')\n\nconst renderClearButton = computed(\n () => props.buttonStyle !== 'simple' && props.clearable && !props.disabled\n)\n\nconst sizeClasses = computed((): string => {\n if (!props.size) return ''\n\n switch (props.size) {\n case 'sm':\n return 'h-6 text-body-sm'\n case 'lg':\n return 'h-10 text-[13px]'\n case 'xl':\n return 'h-14 text-sm'\n case 'base':\n default:\n return 'h-8 text-body-sm'\n }\n})\n\nconst buttonsWrapperClasses = computed(() => {\n const classParts: string[] = ['relative flex group']\n\n if (error.value) {\n classParts.push('hover:shadow rounded-md')\n classParts.push('text-danger-darker focus:border-danger')\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('border border-danger')\n }\n } else if (props.buttonStyle !== 'simple') {\n classParts.push('rounded-md border')\n if (isOpen.value) {\n classParts.push('border-outline-4')\n } else {\n classParts.push('border-outline-2 hover:border-outline-5 focus:outline-0')\n }\n }\n\n if (props.fixedHeight) {\n classParts.push('h-8')\n } else if (sizeClasses.value?.length) {\n classParts.push(sizeClasses.value)\n }\n\n if (isLeftLabelPosition.value) {\n classParts.push('md:basis-1/2')\n }\n\n return classParts.join(' ')\n})\n\nconst commonButtonClasses = computed(() => {\n const classParts: string[] = []\n\n if (props.buttonStyle !== 'simple') {\n classParts.push(\n isDisabled.value ? 'bg-foundation-disabled text-foreground-disabled' : ''\n )\n }\n\n if (isDisabled.value) classParts.push('cursor-not-allowed')\n\n return classParts.join(' ')\n})\n\nconst clearButtonClasses = computed(() => {\n const classParts = [\n 'relative z-[1]',\n 'flex items-center justify-center text-center shrink-0',\n 'rounded-r-md overflow-hidden transition-all',\n 'text-foreground',\n hasValueSelected.value ? `w-6 ${commonButtonClasses.value}` : 'w-0'\n ]\n\n if (!isDisabled.value) {\n classParts.push(\n 'hover:bg-primary hover:text-foreground-on-primary dark:text-foreground-on-primary'\n )\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-outline-3')\n } else {\n classParts.push('bg-primary-muted')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst buttonClasses = computed(() => {\n const classParts = [\n 'relative z-[2]',\n 'normal rounded-md cursor-pointer transition truncate flex-1',\n 'flex items-center focus:outline-outline-4 focus:outline-1',\n commonButtonClasses.value\n ]\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('p-2')\n\n if (!isDisabled.value) {\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-foundation text-foreground')\n } else {\n classParts.push('bg-foundation text-foreground')\n }\n }\n }\n\n if (renderClearButton.value && hasValueSelected.value) {\n classParts.push('rounded-r-none')\n }\n\n return classParts.join(' ')\n})\n\nconst hasSearch = computed(\n () => !!(props.search && (props.filterPredicate || props.getSearchResults))\n)\nconst isAsyncSearchMode = computed(() => hasSearch.value && props.getSearchResults)\nconst isDisabled = computed(\n () => props.disabled || (!props.items.length && !isAsyncSearchMode.value)\n)\n\nconst wrappedValue = computed({\n get: () => {\n const currentValue = value.value\n if (props.multiple) {\n return isArray(currentValue) ? currentValue : []\n } else {\n return isArray(currentValue) ? undefined : currentValue\n }\n },\n set: (newVal) => {\n if (props.multiple && !isArray(newVal)) {\n console.warn('Attempting to set non-array value in selector w/ multiple=true')\n return\n } else if (!props.multiple && isArray(newVal)) {\n console.warn('Attempting to set array value in selector w/ multiple=false')\n return\n }\n\n let finalValue: typeof value.value\n if (props.multiple) {\n finalValue = newVal || []\n } else {\n const currentVal = value.value\n const isUnset =\n props.allowUnset &&\n currentVal &&\n newVal &&\n itemKey(currentVal as SingleItem) === itemKey(newVal as SingleItem)\n finalValue = isUnset ? undefined : newVal\n }\n\n if (props.fullyControlValue) {\n // Not setting value.value, cause then we don't give a chance for the parent\n // component to reject the update\n emit('update:modelValue', finalValue)\n } else {\n value.value = finalValue\n }\n\n // hacky, but there's no other way to force ListBox to re-read the modelValue prop which\n // we need in case the update was rejected and ListBox still thinks the value is the one\n // that was clicked on\n forceUpdateKey.value += 1\n }\n})\n\nconst hasValueSelected = computed(() => {\n if (props.multiple && isArray(wrappedValue.value))\n return wrappedValue.value.length !== 0\n else return !!wrappedValue.value\n})\n\nconst clearValue = () => {\n if (props.multiple) wrappedValue.value = []\n else wrappedValue.value = undefined\n}\n\nconst finalItems = computed(() => {\n const searchVal = searchValue.value\n if (!hasSearch.value || !searchVal?.length) return currentItems.value\n\n if (props.filterPredicate) {\n return currentItems.value.filter(\n (i) => props.filterPredicate?.(i, searchVal) || false\n )\n }\n\n return currentItems.value\n})\n\nconst listboxOptionsClasses = computed(() => {\n const classParts = [\n 'rounded-md bg-foundation py-1 label label--light border border-outline-3 shadow-md'\n ]\n\n if (props.mountMenuOnBody) {\n classParts.push('fixed z-50')\n } else {\n classParts.push('absolute top-[100%] w-full z-40 mt-1')\n }\n\n return classParts.join(' ')\n})\n\nconst listboxOptionsStyle = computed(() => {\n let style: CSSProperties = {}\n if (!isClient || !props.mountMenuOnBody) return style\n\n style = {\n ...style,\n ...menuStyle.value\n }\n\n return style\n})\n\nconst simpleDisplayText = (v: ValueType) => JSON.stringify(v)\nconst itemKey = (v: SingleItem): string | number => {\n if (isObjectLikeType(v)) {\n return v[props.by || 'id'] as string\n } else {\n return v\n }\n}\n\nconst triggerSearch = async () => {\n if (!isAsyncSearchMode.value || !props.getSearchResults) return\n\n isAsyncLoading.value = true\n try {\n currentItems.value = await props.getSearchResults(searchValue.value)\n } finally {\n isAsyncLoading.value = false\n }\n}\nconst debouncedSearch = debounce(triggerSearch, 1000)\n\nconst listboxOptionClasses = (params: { active: boolean; disabled: boolean }) => {\n const { disabled } = params || {}\n\n const classParts = ['relative transition select-none py-1 px-2']\n\n if (disabled) {\n classParts.push('opacity-50 cursor-not-allowed')\n } else {\n classParts.push('text-foreground cursor-pointer')\n }\n\n return classParts.join(' ')\n}\n\nwatch(\n () => props.items,\n (newItems) => {\n currentItems.value = newItems.slice()\n },\n { immediate: true }\n)\n\nwatch(searchValue, () => {\n if (!isAsyncSearchMode.value) return\n void debouncedSearch()\n})\n\nwatch(isOpen, (newVal, oldVal) => {\n if (newVal && !oldVal) {\n // Update menu location (to avoid flashing)\n listboxButtonBounding.update()\n }\n})\n\nonMounted(() => {\n if (isAsyncSearchMode.value && !props.items.length) {\n void triggerSearch()\n }\n})\n\ndefineExpose({ triggerSearch })\n</script>\n","<template>\n <CommonBadge\n color-classes=\"text-foreground-on-primary\"\n rounded\n :style=\"{ backgroundColor: sourceApp.bgColor }\"\n >\n {{ sourceApp.short }}\n </CommonBadge>\n</template>\n<script setup lang=\"ts\">\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport type { SourceAppDefinition } from '@speckle/shared'\n\ndefineProps<{\n sourceApp: SourceAppDefinition\n}>()\n</script>\n","<template>\n <FormSelectBase\n v-model=\"selectedValue\"\n :multiple=\"multiple\"\n :items=\"items ?? SourceApps\"\n :search=\"search\"\n :search-placeholder=\"searchPlaceholder\"\n :label=\"label\"\n :show-label=\"showLabel\"\n :name=\"name || 'sourceApps'\"\n :filter-predicate=\"searchFilterPredicate\"\n :clearable=\"clearable\"\n :help=\"help\"\n :label-id=\"labelId\"\n :button-id=\"buttonId\"\n by=\"name\"\n >\n <template #nothing-selected>\n <template v-if=\"selectorPlaceholder\">\n {{ selectorPlaceholder }}\n </template>\n <template v-else>\n {{ multiple ? 'Select apps' : 'Select an app' }}\n </template>\n </template>\n <template #something-selected=\"{ value }\">\n <template v-if=\"isMultiItemArrayValue(value)\">\n <div ref=\"elementToWatchForChanges\" class=\"flex items-center space-x-0.5 h-5\">\n <div\n ref=\"itemContainer\"\n class=\"flex flex-wrap overflow-hidden space-x-0.5 h-5\"\n >\n <SourceAppBadge v-for=\"item in value\" :key=\"item.name\" :source-app=\"item\" />\n </div>\n <div v-if=\"hiddenSelectedItemCount > 0\" class=\"text-foreground-2 normal\">\n +{{ hiddenSelectedItemCount }}\n </div>\n </div>\n </template>\n <template v-else>\n <div class=\"flex items-center\">\n <div\n class=\"h-2 w-2 rounded-full mr-2\"\n :style=\"{ backgroundColor: firstItem(value).bgColor }\"\n />\n <span class=\"truncate\">{{ firstItem(value).name }}</span>\n </div>\n </template>\n </template>\n <template #option=\"{ item }\">\n <div class=\"flex items-center\">\n <div\n class=\"h-2 w-2 rounded-full mr-2\"\n :style=\"{ backgroundColor: item.bgColor }\"\n />\n <span class=\"truncate\">{{ item.name }}</span>\n </div>\n </template>\n </FormSelectBase>\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable, Optional, SourceAppDefinition } from '@speckle/shared'\nimport { SourceApps } from '@speckle/shared'\nimport { ref, toRefs } from 'vue'\nimport type { PropType } from 'vue'\nimport { useFormSelectChildInternals } from '~~/src/composables/form/select'\nimport FormSelectBase from '~~/src/components/form/select/Base.vue'\nimport SourceAppBadge from '~~/src/components/SourceAppBadge.vue'\n\ntype ValueType = SourceAppDefinition | SourceAppDefinition[] | undefined\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ValueType): void\n}>()\n\nconst props = defineProps({\n /**\n * Whether to allow selecting multiple source apps\n */\n multiple: {\n type: Boolean,\n default: false\n },\n modelValue: {\n type: [Object, Array] as PropType<ValueType>,\n default: undefined\n },\n /**\n * Whether to allow filtering source apps through a search box\n */\n search: {\n type: Boolean,\n default: false\n },\n /**\n * Search placeholder text\n */\n searchPlaceholder: {\n type: String,\n default: 'Search apps'\n },\n selectorPlaceholder: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Label is required at the very least for screen-readers\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Whether to show the label visually\n */\n showLabel: {\n type: Boolean,\n default: false\n },\n name: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * Control source apps to show. If left undefined, will show all available options.\n */\n items: {\n type: Array as PropType<Optional<SourceAppDefinition[]>>,\n default: undefined\n },\n clearable: {\n type: Boolean\n },\n help: {\n type: String\n },\n labelId: {\n type: String\n },\n buttonId: {\n type: String\n }\n})\n\nconst elementToWatchForChanges = ref(null as Nullable<HTMLElement>)\nconst itemContainer = ref(null as Nullable<HTMLElement>)\n\nconst { selectedValue, hiddenSelectedItemCount, isMultiItemArrayValue, firstItem } =\n useFormSelectChildInternals<SourceAppDefinition>({\n props: toRefs(props),\n emit,\n dynamicVisibility: { elementToWatchForChanges, itemContainer }\n })\n\nconst searchFilterPredicate = (i: SourceAppDefinition, search: string) =>\n i.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())\n</script>\n","<template>\n <FormSelectBase\n v-model=\"selectedValue\"\n :multiple=\"multiple\"\n :items=\"items\"\n :label=\"label\"\n :name=\"name\"\n :help=\"help\"\n :rules=\"rules\"\n :by=\"by\"\n :label-id=\"labelId\"\n :button-id=\"buttonId\"\n >\n <template #something-selected=\"{ value }\">\n <ul class=\"flex flex-wrap gap-1.5\">\n <li v-for=\"item in isArrayValue(value) ? value : [value]\" :key=\"item[by]\">\n <CommonBadge\n size=\"lg\"\n color-classes=\"border border-outline-2 bg-foundation-page\"\n dot-icon-color-classes=\"text-foreground\"\n rounded\n :clickable-icon=\"true\"\n :icon-left=\"XMarkIcon\"\n @click-icon.stop=\"deselectItem(item)\"\n >\n {{ item.text }}\n </CommonBadge>\n </li>\n </ul>\n </template>\n <template #option=\"{ item }\">\n {{ item.text }}\n </template>\n </FormSelectBase>\n</template>\n\n<script setup lang=\"ts\">\n// Vue components don't support generic props, so having to rely on any\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { toRefs } from 'vue'\nimport FormSelectBase from '~~/src/components/form/select/Base.vue'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport { useFormSelectChildInternals } from '~~/src/composables/form/select'\nimport { XMarkIcon } from '@heroicons/vue/24/solid'\n\ntype SingleItem = any\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: Array<SingleItem>): void\n}>()\n\nconst props = defineProps<{\n items: Array<SingleItem>\n label: string\n name: string\n help?: string\n modelValue?: SingleItem | SingleItem[] | undefined\n multiple?: boolean\n rules?: Array<any>\n by: string\n labelId?: string\n buttonId?: string\n}>()\n\nconst { selectedValue, isArrayValue } = useFormSelectChildInternals<SingleItem>({\n props: toRefs(props),\n emit\n})\n\nconst deselectItem = (item: SingleItem) => {\n if (isArrayValue(selectedValue.value)) {\n selectedValue.value = selectedValue.value.filter((i) => i.id !== item.id)\n } else {\n selectedValue.value = undefined\n }\n}\n</script>\n","<template>\n <div>\n <div\n :key=\"forceUpdateKey\"\n :class=\"{\n 'md:flex md:items-center md:space-x-2 md:justify-between': isLeftLabelPosition\n }\"\n >\n <div class=\"flex flex-col\" :class=\"{ 'pb-1': showLabel && !isLeftLabelPosition }\">\n <label\n :id=\"labelId\"\n class=\"flex text-body-xs text-foreground font-medium pointer-events-none\"\n :class=\"[{ 'sr-only': !showLabel }, { 'items-center gap-1': showOptional }]\"\n :for=\"buttonId\"\n >\n {{ label }}\n <div v-if=\"showRequired\" class=\"text-danger text-xs opacity-80\">*</div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">\n (optional)\n </div>\n </label>\n <p\n v-if=\"helpTipId && isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n <div v-tippy=\"tooltipText\">\n <div :class=\"buttonsWrapperClasses\">\n <button\n :id=\"buttonId\"\n ref=\"listboxButton\"\n type=\"button\"\n :class=\"buttonClasses\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n @click=\"toggleDropdown\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div\n class=\"block truncate grow text-left text-xs sm:text-[13px]\"\n :class=\"[hasValueSelected ? 'text-foreground' : 'text-foreground-2']\"\n >\n <template\n v-if=\"\n !wrappedValue || (isArray(wrappedValue) && !wrappedValue.length)\n \"\n >\n <slot name=\"nothing-selected\">\n {{ placeholder ? placeholder : label }}\n </slot>\n </template>\n <template v-else>\n <slot name=\"something-selected\" :value=\"wrappedValue\">\n {{ simpleDisplayText(wrappedValue) }}\n </slot>\n </template>\n </div>\n <div\n class=\"pointer-events-none shrink-0 ml-1 flex items-center space-x-2\"\n >\n <ExclamationCircleIcon\n v-if=\"errorMessage\"\n class=\"h-4 w-4 text-danger\"\n aria-hidden=\"true\"\n />\n <div\n v-else-if=\"!showLabel && showRequired\"\n class=\"text-4xl text-danger opacity-50 h-4 w-4 leading-6\"\n >\n *\n </div>\n <ChevronUpIcon\n v-if=\"isOpen\"\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n <ChevronDownIcon\n v-else\n class=\"h-4 w-4 text-foreground\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n </button>\n\n <button\n v-if=\"renderClearButton\"\n :class=\"clearButtonClasses\"\n :disabled=\"disabled\"\n @click=\"clearValue()\"\n >\n <XMarkIcon class=\"w-3 h-3\" />\n </button>\n\n <Transition\n v-if=\"isMounted\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <Teleport to=\"body\" :disabled=\"!mountMenuOnBody\">\n <div\n v-if=\"isOpen\"\n ref=\"menuEl\"\n :class=\"listboxOptionsClasses\"\n :style=\"listboxOptionsStyle\"\n role=\"listbox\"\n :aria-labelledby=\"labelId\"\n @focus=\"searchInput?.focus()\"\n >\n <!-- Search input section -->\n <label v-if=\"hasSearch\" class=\"flex flex-col mx-1 mb-1\">\n <span class=\"sr-only label text-foreground\">Search</span>\n <div class=\"relative\">\n <div\n class=\"pointer-events-none absolute top-0 bottom-0 left-0 flex items-center pl-2\"\n >\n <MagnifyingGlassIcon class=\"h-4 w-4 text-foreground-2\" />\n </div>\n <input\n ref=\"searchInput\"\n v-model=\"searchValue\"\n type=\"text\"\n class=\"py-1 pl-7 w-full bg-foundation placeholder:font-normal normal placeholder:text-foreground-2 text-[13px] focus-visible:[box-shadow:none] rounded-md hover:border-outline-5 focus-visible:border-outline-4\"\n :placeholder=\"searchPlaceholder\"\n @keydown.stop\n />\n </div>\n </label>\n\n <div\n ref=\"optionsContainer\"\n class=\"overflow-auto simple-scrollbar max-h-60 xl:max-h-80 gap-1 flex flex-col\"\n >\n <div v-if=\"isAsyncSearchMode && isAsyncLoading\" class=\"px-1\">\n <CommonLoadingBar :loading=\"true\" />\n </div>\n <div v-else-if=\"isAsyncSearchMode && !currentItems.length\">\n <div class=\"text-foreground-2 text-center\">\n <slot name=\"nothing-found\">Nothing found</slot>\n </div>\n </div>\n <template v-if=\"!isAsyncSearchMode || !isAsyncLoading\">\n <button\n v-for=\"item in finalItems\"\n :key=\"itemKey(item)\"\n v-tippy=\"\n disabledItemPredicate?.(item) ? disabledItemTooltip : undefined\n \"\n type=\"button\"\n role=\"option\"\n :aria-selected=\"isSelected(item)\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n :class=\"\n listboxOptionClasses({\n disabled: disabledItemPredicate?.(item) || false\n })\n \"\n @click=\"(e) => selectItem(item, e)\"\n >\n <div\n class=\"block w-full px-2 py-1.5 rounded-md text-left flex items-center gap-1\"\n :class=\"[\n !hideCheckmarks ? 'pr-8' : 'pr-2',\n !disabledItemPredicate?.(item) && !isSelected(item)\n ? 'hover:bg-highlight-1'\n : ''\n ]\"\n >\n <FormCheckbox\n :name=\"`select-${itemKey(item)}`\"\n :checked=\"isSelected(item)\"\n :disabled=\"disabledItemPredicate?.(item)\"\n :hide-label=\"true\"\n @change.stop\n />\n <slot\n name=\"option\"\n class=\"truncate\"\n :item=\"item\"\n :selected=\"isSelected(item)\"\n :disabled=\"disabledItemPredicate?.(item) || false\"\n >\n {{ simpleDisplayText(item) }}\n </slot>\n </div>\n </button>\n </template>\n </div>\n </div>\n </Teleport>\n </Transition>\n </div>\n </div>\n </div>\n <p\n v-if=\"helpTipId && !isLeftLabelPosition\"\n :id=\"helpTipId\"\n class=\"mt-2 text-xs\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </div>\n</template>\n<script\n setup\n lang=\"ts\"\n generic=\"SingleItem extends Record<string, unknown> | string | number\"\n>\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n MagnifyingGlassIcon,\n XMarkIcon,\n ExclamationCircleIcon\n} from '@heroicons/vue/20/solid'\nimport { debounce, isArray, isObjectLike } from '#lodash'\nimport type { CSSProperties, PropType, Ref } from 'vue'\nimport { computed, onMounted, ref, unref, watch, nextTick } from 'vue'\nimport type { MaybeAsync, Nullable, Optional } from '@speckle/shared'\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { nanoid } from 'nanoid'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\nimport {\n useElementBounding,\n useMounted,\n useIntersectionObserver,\n onClickOutside\n} from '@vueuse/core'\nimport type { LabelPosition } from '~~/src/composables/form/input'\nimport { directive as vTippy } from 'vue-tippy'\nimport FormCheckbox from '~~/src/components/form/Checkbox.vue'\n\ntype ButtonStyle = 'base' | 'simple' | 'tinted'\ntype ValueType = SingleItem | SingleItem[] | undefined\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\n\nconst isObjectLikeType = (v: unknown): v is Record<string, unknown> => isObjectLike(v)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: ValueType): void\n}>()\n\nconst props = defineProps({\n size: {\n type: String as PropType<Optional<InputSize>>,\n default: undefined\n },\n items: {\n type: Array as PropType<SingleItem[]>,\n default: () => []\n },\n modelValue: {\n type: [Array, Object, String, Number] as PropType<ValueType>,\n default: undefined\n },\n /**\n * Whether to enable the search bar. You must also set one of the following:\n * * filterPredicate - to allow filtering passed in `items` based on search bar\n * * getSearchResults - to allow asynchronously loading items from server (props.items no longer required in this case,\n * but can be used to prefill initial values)\n */\n search: {\n type: Boolean,\n default: false\n },\n /**\n * If search=true and this is set, you can use this to filter passed in items based on whatever\n * the user enters in the search bar\n */\n filterPredicate: {\n type: Function as PropType<\n Optional<(item: SingleItem, searchString: string) => boolean>\n >,\n default: undefined\n },\n /**\n * Set this to disable certain items in the list\n */\n disabledItemPredicate: {\n type: Function as PropType<Optional<(item: SingleItem) => boolean>>,\n default: undefined\n },\n /**\n * If search=true and this is set, you can use this to load data asynchronously depending\n * on the search query\n */\n getSearchResults: {\n type: Function as PropType<\n Optional<(searchString: string) => MaybeAsync<SingleItem[]>>\n >,\n default: undefined\n },\n searchPlaceholder: {\n type: String,\n default: 'Search'\n },\n /**\n * Label is required at the very least for screen-readers\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Optional text that replaces the label as the placeholder when set.\n */\n placeholder: {\n type: String\n },\n /**\n * Whether to show the label visually\n */\n showLabel: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n required: true\n },\n /**\n * Objects will be compared by the values in the specified prop\n */\n by: {\n type: String,\n required: false\n },\n disabled: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n buttonStyle: {\n type: String as PropType<Optional<ButtonStyle>>,\n default: 'base'\n },\n hideCheckmarks: {\n type: Boolean as PropType<Optional<boolean>>,\n default: false\n },\n allowUnset: {\n type: Boolean as PropType<Optional<boolean>>,\n default: true\n },\n clearable: {\n type: Boolean,\n default: false\n },\n /**\n * Validation stuff\n */\n rules: {\n type: [String, Object, Function, Array] as PropType<\n Optional<RuleExpression<ValueType>>\n >,\n default: undefined\n },\n /**\n * vee-validate validation() on component mount\n */\n validateOnMount: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to trigger validation whenever the value changes\n */\n validateOnValueUpdate: {\n type: Boolean,\n default: false\n },\n /**\n * Will replace the generic \"Value\" text with the name of the input in error messages\n */\n useLabelInErrors: {\n type: Boolean,\n default: true\n },\n /**\n * Optional help text\n */\n help: {\n type: String as PropType<Optional<string>>,\n default: undefined\n },\n /**\n * @deprecated Use size attribute instead\n */\n fixedHeight: {\n type: Boolean,\n default: false\n },\n /**\n * By default component holds its own internal value state so that even if you don't have it tied up to a real `modelValue` ref somewhere\n * it knows its internal state and can report it on form submits.\n *\n * If you set this to true, its only going to rely on `modelValue` as its primary source of truth so that you can reject updates etc.\n */\n fullyControlValue: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the red \"required\" asterisk\n */\n showRequired: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to show the optional text\n */\n showOptional: {\n type: Boolean,\n default: false\n },\n /**\n * Whether to mount the menu on the body instead of inside the component. Useful when select box is mounted within\n * dialog windows and the menu causes unnecessary overflow.\n */\n mountMenuOnBody: {\n type: Boolean,\n default: false\n },\n labelId: {\n type: String,\n default: undefined\n },\n buttonId: {\n type: String,\n default: undefined\n },\n /**\n * Tooltip shown on disabled items\n */\n disabledItemTooltip: {\n required: false,\n type: String\n },\n labelPosition: {\n type: String as PropType<LabelPosition>,\n default: 'top'\n },\n tooltipText: {\n type: String,\n default: undefined\n }\n})\n\nconst { value, errorMessage: error } = useField<ValueType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n validateOnValueUpdate: props.validateOnValueUpdate,\n initialValue: isArray(props.modelValue) ? props.modelValue : []\n})\n\nconst isMounted = useMounted()\n\nconst searchInput = ref(null as Nullable<HTMLInputElement>)\nconst menuEl = ref<HTMLDivElement | null>(null)\nconst listboxButton = ref<HTMLButtonElement | null>(null)\nconst searchValue = ref('')\nconst currentItems = ref([]) as Ref<SingleItem[]>\nconst isAsyncLoading = ref(false)\nconst forceUpdateKey = ref(1)\nconst internalHelpTipId = ref(nanoid())\nconst isOpen = ref(false)\n\nconst listboxButtonBounding = useElementBounding(listboxButton, {\n windowResize: true,\n windowScroll: true,\n immediate: true\n})\n\nuseIntersectionObserver(\n computed(() => menuEl.value),\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.mountMenuOnBody) {\n listboxButtonBounding.update()\n }\n }\n)\n\nconst title = computed(() => unref(props.label) || unref(props.name))\nconst errorMessage = computed(() => {\n const base = error.value\n if (!base || !unref(props.useLabelInErrors)) return base\n return base.replace('Value', title.value)\n})\nconst helpTip = computed(() => errorMessage.value || unref(props.help))\nconst hasHelpTip = computed(() => !!helpTip.value)\nconst helpTipId = computed(() =>\n hasHelpTip.value ? `${unref(props.name)}-${internalHelpTipId.value}` : undefined\n)\nconst helpTipClasses = computed((): string =>\n error.value ? 'text-danger' : 'text-foreground-2'\n)\n\nconst isLeftLabelPosition = computed(() => props.labelPosition === 'left')\n\nconst renderClearButton = computed(\n () => props.buttonStyle !== 'simple' && props.clearable && !props.disabled\n)\n\nconst sizeClasses = computed((): string => {\n if (!props.size) return ''\n\n switch (props.size) {\n case 'sm':\n return 'h-6 text-body-sm'\n case 'lg':\n return 'h-10 text-[13px]'\n case 'xl':\n return 'h-14 text-sm'\n case 'base':\n default:\n return 'h-8 text-body-sm'\n }\n})\n\nconst buttonsWrapperClasses = computed(() => {\n const classParts: string[] = ['relative flex group']\n\n if (error.value) {\n classParts.push('hover:shadow rounded-md')\n classParts.push('text-danger-darker focus:border-danger')\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('border border-danger')\n }\n } else if (props.buttonStyle !== 'simple') {\n classParts.push('rounded-md border')\n if (isOpen.value) {\n classParts.push('border-outline-4')\n } else {\n classParts.push('border-outline-2 hover:border-outline-5 focus:outline-0')\n }\n }\n\n if (props.fixedHeight) {\n classParts.push('h-8')\n } else if (sizeClasses.value?.length) {\n classParts.push(sizeClasses.value)\n }\n\n if (isLeftLabelPosition.value) {\n classParts.push('md:basis-1/2')\n }\n\n return classParts.join(' ')\n})\n\nconst commonButtonClasses = computed(() => {\n const classParts: string[] = []\n\n if (props.buttonStyle !== 'simple') {\n classParts.push(\n isDisabled.value ? 'bg-foundation-disabled text-foreground-disabled' : ''\n )\n }\n\n if (isDisabled.value) classParts.push('cursor-not-allowed')\n\n return classParts.join(' ')\n})\n\nconst clearButtonClasses = computed(() => {\n const classParts = [\n 'relative z-[1]',\n 'flex items-center justify-center text-center shrink-0',\n 'rounded-r-md overflow-hidden transition-all',\n 'text-foreground',\n hasValueSelected.value ? `w-6 ${commonButtonClasses.value}` : 'w-0'\n ]\n\n if (!isDisabled.value) {\n classParts.push(\n 'hover:bg-primary hover:text-foreground-on-primary dark:text-foreground-on-primary'\n )\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-outline-3')\n } else {\n classParts.push('bg-primary-muted')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst buttonClasses = computed(() => {\n const classParts = [\n 'relative z-[2]',\n 'normal rounded-md cursor-pointer transition truncate flex-1',\n 'flex items-center focus:outline-outline-4 focus:outline-1',\n commonButtonClasses.value\n ]\n\n if (props.buttonStyle !== 'simple') {\n classParts.push('p-2')\n\n if (!isDisabled.value) {\n if (props.buttonStyle === 'tinted') {\n classParts.push('bg-foundation text-foreground')\n } else {\n classParts.push('bg-foundation text-foreground')\n }\n }\n }\n\n if (renderClearButton.value && hasValueSelected.value) {\n classParts.push('rounded-r-none')\n }\n\n return classParts.join(' ')\n})\n\nconst hasSearch = computed(\n () => !!(props.search && (props.filterPredicate || props.getSearchResults))\n)\nconst isAsyncSearchMode = computed(() => hasSearch.value && props.getSearchResults)\nconst isDisabled = computed(\n () => props.disabled || (!props.items.length && !isAsyncSearchMode.value)\n)\n\nconst wrappedValue = computed({\n get: () => {\n const currentValue = value.value\n return isArray(currentValue) ? currentValue : []\n },\n set: (newVal) => {\n if (!isArray(newVal)) {\n console.warn('Attempting to set non-array value in selector')\n return\n }\n\n if (props.fullyControlValue) {\n emit('update:modelValue', newVal)\n } else {\n value.value = newVal\n }\n\n forceUpdateKey.value += 1\n }\n})\n\nconst hasValueSelected = computed(() => {\n if (isArray(wrappedValue.value)) return wrappedValue.value.length !== 0\n else return !!wrappedValue.value\n})\n\nconst clearValue = () => {\n wrappedValue.value = []\n}\n\nconst finalItems = computed(() => {\n const searchVal = searchValue.value\n if (!hasSearch.value || !searchVal?.length) return currentItems.value\n\n if (props.filterPredicate) {\n return currentItems.value.filter(\n (i) => props.filterPredicate?.(i, searchVal) || false\n )\n }\n\n return currentItems.value\n})\n\nconst listboxOptionsClasses = computed(() => {\n const classParts = [\n 'rounded-md bg-foundation py-1 label label--light border border-outline-3 shadow-md mt-1 '\n ]\n\n if (props.mountMenuOnBody) {\n classParts.push('fixed z-50')\n } else {\n classParts.push('absolute top-[100%] w-full z-40')\n }\n\n return classParts.join(' ')\n})\n\nconst listboxOptionsStyle = computed(() => {\n const style: CSSProperties = {}\n\n if (props.mountMenuOnBody) {\n const top = listboxButtonBounding.top.value\n const left = listboxButtonBounding.left.value\n const width = listboxButtonBounding.width.value\n const height = listboxButtonBounding.height.value\n\n style.top = `${top + height}px`\n style.left = `${left}px`\n style.width = `${width}px`\n }\n\n return style\n})\n\nconst simpleDisplayText = (v: ValueType) => JSON.stringify(v)\nconst itemKey = (v: SingleItem): string | number => {\n if (isObjectLikeType(v)) {\n return v[props.by || 'id'] as string\n } else {\n return v\n }\n}\n\nconst triggerSearch = async () => {\n if (!isAsyncSearchMode.value || !props.getSearchResults) return\n\n isAsyncLoading.value = true\n try {\n currentItems.value = await props.getSearchResults(searchValue.value)\n } finally {\n isAsyncLoading.value = false\n }\n}\nconst debouncedSearch = debounce(triggerSearch, 1000)\n\nconst listboxOptionClasses = (params: { disabled: boolean }) => {\n const { disabled } = params\n const classParts = ['relative transition select-none px-2']\n\n if (disabled) {\n classParts.push('opacity-50 cursor-not-allowed')\n } else {\n classParts.push('text-foreground cursor-pointer')\n }\n\n return classParts.join(' ')\n}\n\nwatch(\n () => props.items,\n (newItems) => {\n currentItems.value = newItems.slice()\n },\n { immediate: true }\n)\n\nwatch(searchValue, () => {\n if (!isAsyncSearchMode.value) return\n void debouncedSearch()\n})\n\nonMounted(() => {\n if (isAsyncSearchMode.value && !props.items.length) {\n void triggerSearch()\n }\n})\n\nconst toggleDropdown = () => {\n if (!isDisabled.value) {\n isOpen.value = !isOpen.value\n }\n}\n\nconst isSelected = (item: SingleItem) => {\n return wrappedValue.value.some((v) => itemKey(v) === itemKey(item))\n}\n\nconst optionsContainer = ref<HTMLDivElement | null>(null)\nconst scrollPosition = ref(0)\n\nconst selectItem = (item: SingleItem, event?: Event) => {\n if (props.disabledItemPredicate?.(item)) return\n event?.stopPropagation()\n\n scrollPosition.value = optionsContainer.value?.scrollTop || 0\n\n const currentValue = wrappedValue.value\n const itemExists = currentValue.some((v) => itemKey(v) === itemKey(item))\n\n wrappedValue.value = itemExists\n ? currentValue.filter((v) => itemKey(v) !== itemKey(item))\n : [...currentValue, item]\n\n void nextTick(() => {\n if (optionsContainer.value) {\n optionsContainer.value.scrollTop = scrollPosition.value\n }\n })\n}\n\nonClickOutside(\n menuEl,\n () => {\n if (isOpen.value) {\n isOpen.value = false\n }\n },\n {\n ignore: [listboxButton]\n }\n)\n\ndefineExpose({ triggerSearch })\n</script>\n","<template>\n <div class=\"flex items-center space-x-2\">\n <HeadlessSwitch\n :id=\"id || name\"\n v-model=\"enabled\"\n :class=\"switchClasses\"\n :name=\"name\"\n :disabled=\"disabled\"\n >\n <span :class=\"sliderClasses\"></span>\n </HeadlessSwitch>\n <label :for=\"id || name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n </label>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Switch as HeadlessSwitch } from '@headlessui/vue'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n showLabel?: boolean\n name: string\n label?: string\n disabled?: boolean\n id?: string\n }>(),\n {\n showLabel: true\n }\n)\n\nconst enabled = defineModel<boolean>()\n\nconst title = computed(() => props.label || props.name)\n\nconst labelClasses = computed(() => {\n const classParts = ['block label-light']\n\n if (!props.showLabel) {\n classParts.push('sr-only')\n }\n\n return classParts.join(' ')\n})\n\nconst switchClasses = computed(() => {\n const classParts = [\n 'relative inline-flex flex-shrink-0 h-[18px] w-[30px] rounded-full',\n 'transition-colors ease-in-out duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary',\n 'cursor-pointer disabled:cursor-not-allowed disabled:opacity-40'\n ]\n\n if (enabled.value) {\n classParts.push('bg-primary')\n } else {\n classParts.push('bg-foreground-3')\n }\n\n return classParts.join(' ')\n})\n\nconst sliderClasses = computed(() => {\n const classParts = [\n 'pointer-events-none inline-block h-3 w-3 rounded-full mt-[3px] ml-[3px]',\n 'ring-0 transition ease-in-out duration-200 bg-foreground-on-primary'\n ]\n\n if (enabled.value) {\n classParts.push('translate-x-[12px]')\n } else {\n classParts.push('translate-x-0')\n }\n\n return classParts.join(' ')\n})\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div\n class=\"relative group bg-foundation border border-outline-2 p-2 rounded-lg pr-20\"\n >\n <div\n v-if=\"isMultiline\"\n class=\"relative z-10 text-body-2xs select-all text-foreground font-mono break-all p-2 pl-3 max-h-[4.8rem] simple-scrollbar overflow-y-auto\"\n @keypress=\"keyboardClick(selectAllText)\"\n >\n {{ value }}\n </div>\n <FormTextInput\n v-else\n color=\"transparent\"\n name=\"contentInput\"\n readonly\n :model-value=\"value\"\n class=\"relative z-10 !text-body-2xs sm:!text-body-xs text-foreground font-mono select-all\"\n />\n <div class=\"absolute top-3 right-2 flex justify-end items-center\">\n <FormButton\n :color=\"ctaColor\"\n size=\"sm\"\n :icon-left=\"\n isIconButton\n ? copied\n ? ClipboardDocumentCheckIcon\n : ClipboardDocumentIcon\n : undefined\n \"\n :hide-text=\"isIconButton\"\n @click=\"handleCopy\"\n >\n {{ copied ? 'Copied' : 'Copy' }}\n </FormButton>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useClipboard } from '@vueuse/core'\nimport {\n ClipboardDocumentIcon,\n ClipboardDocumentCheckIcon\n} from '@heroicons/vue/24/outline'\nimport { FormTextInput, FormButton } from '~~/src/lib'\nimport { ref } from 'vue'\nimport { keyboardClick } from '~~/src/helpers/global/accessibility'\nimport type { FormButtonStyle } from '~~/src/helpers/form/button'\n\ntype Props = {\n value: string\n isMultiline?: boolean\n isIconButton?: boolean\n rows?: number\n ctaColor?: FormButtonStyle\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n isMultiline: false,\n ctaColor: 'outline'\n})\n\nconst emit = defineEmits<{ (e: 'copy', val: string): void }>()\n\nconst { copy } = useClipboard({ legacy: true })\n\nconst copied = ref(false)\n\nconst handleCopy = async () => {\n if (props.value) {\n await copy(props.value)\n copied.value = true\n emit('copy', props.value)\n\n setTimeout(() => {\n copied.value = false\n }, 2000)\n }\n}\n\nconst selectAllText = (event: Event) => {\n const textElement = event.target as HTMLElement\n\n const selection = window.getSelection()\n if (selection) {\n const range = document.createRange()\n range.selectNodeContents(textElement)\n selection.removeAllRanges()\n selection.addRange(range)\n }\n}\n</script>\n","<template>\n <div class=\"flex flex-col items-center\">\n <div class=\"flex gap-2\">\n <div v-for=\"(_, index) in digitCount\" :key=\"index\" class=\"w-10\">\n <FormTextInput\n ref=\"inputRefs\"\n v-model=\"digits[index]\"\n class=\"text-center !text-[14px] py-6 !px-2 font-semibold\"\n color=\"foundation\"\n :name=\"`code-${index}`\"\n type=\"text\"\n inputmode=\"numeric\"\n :disabled=\"disabled\"\n :error=\"internalError\"\n :custom-error-message=\"internalError ? ' ' : undefined\"\n maxlength=\"1\"\n size=\"lg\"\n @input=\"onInput(index)\"\n @keydown=\"onKeyDown(index, $event)\"\n @paste=\"onPaste\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, watch } from 'vue'\nimport { FormTextInput } from '~~/src/lib'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string\n digitCount?: number\n disabled?: boolean\n error?: boolean\n clearErrorOnEdit?: boolean\n }>(),\n {\n digitCount: 6,\n clearErrorOnEdit: true\n }\n)\n\nconst emit = defineEmits(['update:modelValue', 'complete'])\n\nconst inputRefs = ref<Array<HTMLInputElement | null>>([])\nconst digits = ref<string[]>(new Array(props.digitCount).fill('') as string[])\nconst internalError = ref(props.error)\n\nconst onInput = (index: number) => {\n if (props.clearErrorOnEdit) {\n internalError.value = false\n }\n\n digits.value[index] = digits.value[index].replace(/[^0-9]/g, '')\n\n // Move to next input if available\n if (digits.value[index] && index < props.digitCount - 1) {\n inputRefs.value[index + 1]?.focus()\n }\n}\n\nconst onKeyDown = (index: number, event: KeyboardEvent) => {\n if (event.key === 'Backspace' && !digits.value[index] && index > 0) {\n if (props.clearErrorOnEdit) {\n internalError.value = false\n }\n // Move to previous input on backspace if current is empty\n digits.value[index - 1] = ''\n inputRefs.value[index - 1]?.focus()\n } else if (event.key === 'ArrowLeft' && index > 0) {\n // Move to previous input on left arrow\n inputRefs.value[index - 1]?.focus()\n } else if (event.key === 'ArrowRight' && index < props.digitCount - 1) {\n // Move to next input on right arrow\n inputRefs.value[index + 1]?.focus()\n }\n}\n\nconst onPaste = (event: ClipboardEvent) => {\n if (props.clearErrorOnEdit) {\n internalError.value = false\n }\n event.preventDefault()\n const pastedData = event.clipboardData?.getData('text')\n if (!pastedData) return\n\n const numbers = pastedData.replace(/[^0-9]/g, '').split('')\n\n digits.value = [\n ...numbers.slice(0, props.digitCount),\n ...(Array(Math.max(0, props.digitCount - numbers.length)).fill('') as string[])\n ]\n\n // Focus the next empty input or the last input\n const nextEmptyIndex = digits.value.findIndex((d) => !d)\n if (nextEmptyIndex !== -1) {\n inputRefs.value[nextEmptyIndex]?.focus()\n } else {\n inputRefs.value[props.digitCount - 1]?.focus()\n }\n}\n\n// Focus first input on mount\nonMounted(() => {\n if (inputRefs.value[0]) {\n inputRefs.value[0].focus()\n }\n})\n\n// Watch external error prop changes\nwatch(\n () => props.error,\n (newValue) => {\n internalError.value = newValue\n }\n)\n\n// Watch for external value changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue) {\n const newDigits = newValue.split('')\n digits.value = [\n ...newDigits,\n ...(Array(props.digitCount - newDigits.length).fill('') as string[])\n ]\n } else {\n digits.value = Array(props.digitCount).fill('') as string[]\n }\n },\n { immediate: true }\n)\n\n// Watch for completion\nwatch(\n digits,\n (newDigits) => {\n const value = newDigits.join('')\n emit('update:modelValue', value)\n\n // Emit complete when all digits are filled\n if (value.length === props.digitCount) {\n emit('complete', value)\n }\n },\n { deep: true }\n)\n</script>\n","import { getClientOperatingSystem, OperatingSystem } from '@speckle/shared'\n\nexport enum ModifierKeys {\n CtrlOrCmd = 'cmd-or-ctrl',\n AltOrOpt = 'alt-or-opt',\n Shift = 'shift'\n}\n\nexport const clientOs = getClientOperatingSystem()\n\nexport const ModifierKeyTitles: Record<ModifierKeys, string> = {\n [ModifierKeys.CtrlOrCmd]: clientOs === OperatingSystem.Mac ? '⌘' : '⌃',\n [ModifierKeys.AltOrOpt]: clientOs === OperatingSystem.Mac ? '⌥' : 'Alt',\n [ModifierKeys.Shift]: '⇧'\n}\n\nexport function getKeyboardShortcutTitle(keys: Array<string | ModifierKeys>) {\n const isModifierKey = (k: string): k is ModifierKeys =>\n (Object.values(ModifierKeys) as string[]).includes(k)\n\n return keys.map((v) => (isModifierKey(v) ? ModifierKeyTitles[v] : v)).join('')\n}\n","import { useMagicKeys, whenever } from '@vueuse/core'\nimport { OperatingSystem } from '@speckle/shared'\nimport { clientOs, ModifierKeys } from '~~/src/helpers/form/input'\nimport { computed, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport type LabelPosition = 'top' | 'left' | 'right'\n\n/**\n * onKeyDown wrapper that also checks for modifier keys being pressed\n */\nexport function onKeyboardShortcut(\n modifiers: ModifierKeys[],\n key: string,\n callback: () => void\n) {\n const keys = useMagicKeys()\n\n const modifierKeys = modifiers.map((modifier) => {\n switch (modifier) {\n case ModifierKeys.CtrlOrCmd:\n return clientOs === OperatingSystem.Mac ? 'Meta' : 'Control'\n case ModifierKeys.AltOrOpt:\n return 'Alt'\n case ModifierKeys.Shift:\n return 'Shift'\n default:\n return ''\n }\n })\n\n const keyCombination = `${modifierKeys.join('+')}+${key}`\n\n whenever(keys[keyCombination], callback)\n}\n\n/**\n * To support group checkboxes, the checkbox v-model API is a bit confusing: The value is `true` or `undefined`\n * not `true` or `false`.\n *\n * To simplify working with single checkboxes, you can use the model returned from this composable\n * as the model and `isChecked` as a helpful wrapper that allows you to deal with boolean values only\n */\nexport function useFormCheckboxModel(\n options?: Partial<{\n model: Ref<true | undefined>\n }>\n) {\n const model = options?.model || ref<true | undefined>()\n const isChecked = computed({\n get: () => !!model.value,\n set: (newVal) => (model.value = newVal ? true : undefined)\n })\n\n return { model, isChecked }\n}\n","<template>\n <TransitionRoot as=\"template\" :show=\"open\">\n <Dialog as=\"div\" class=\"relative z-50\" open @close=\"onClose\">\n <TransitionChild\n as=\"template\"\n enter=\"ease-out duration-300\"\n enter-from=\"opacity-0\"\n enter-to=\"opacity-100\"\n leave=\"ease-in duration-400\"\n leave-from=\"opacity-100\"\n leave-to=\"opacity-0\"\n >\n <div\n class=\"fixed top-0 left-0 w-full h-full backdrop-blur-xs bg-black/60 dark:bg-neutral-900/60 transition-opacity\"\n />\n </TransitionChild>\n <div class=\"fixed top-0 left-0 z-10 h-screen !h-[100dvh] w-screen\">\n <div\n class=\"flex md:justify-center h-full w-full md:p-6\"\n :class=\"[\n fullscreen === 'none' || fullscreen === 'desktop'\n ? 'p-4 items-center'\n : 'items-end md:items-center'\n ]\"\n >\n <TransitionChild\n as=\"template\"\n enter=\"ease-out duration-5000\"\n :enter-from=\"`md:opacity-0 ${\n fullscreen === 'mobile' || fullscreen === 'all'\n ? 'translate-y-[100%]'\n : 'translate-y-4'\n } md:translate-y-4`\"\n enter-to=\"md:opacity-100 translate-y-0\"\n leave=\"ease-in duration-5000\"\n leave-from=\"md:opacity-100 translate-y-0\"\n :leave-to=\"`md:opacity-0 ${\n fullscreen === 'mobile' || fullscreen === 'all'\n ? 'translate-y-[100%]'\n : 'translate-y-4'\n } md:translate-y-4`\"\n @after-leave=\"onFullyClosed\"\n >\n <DialogPanel\n :class=\"dialogPanelClasses\"\n dialog-panel-classes\n :as=\"isForm ? 'form' : 'div'\"\n @submit.prevent=\"onFormSubmit\"\n >\n <div\n v-if=\"hasTitle\"\n class=\"border-b border-outline-3\"\n :class=\"scrolledFromTop && 'relative z-20 shadow-lg'\"\n >\n <div\n class=\"flex items-center justify-start rounded-t-lg shrink-0 min-h-[2rem] sm:min-h-[3rem] px-6 py-4 truncate text-heading-sm\"\n >\n <div class=\"flex items-center pr-12\">\n <ChevronLeftIcon\n v-if=\"showBackButton\"\n class=\"w-5 h-5 -ml-1 mr-3\"\n @click=\"$emit('back')\"\n />\n <div class=\"w-full truncate\">\n {{ title }}\n <slot name=\"header\" />\n </div>\n </div>\n </div>\n </div>\n\n <!--\n Due to how forms work, if there's no other submit button, on form submission the first button\n will be clicked. This is a workaround to prevent the close button from being that first button.\n https://stackoverflow.com/a/4763911/3194577\n -->\n <button class=\"hidden\" type=\"button\" />\n\n <FormButton\n v-if=\"!hideCloser\"\n color=\"subtle\"\n size=\"sm\"\n class=\"absolute z-20 top-4 right-5 shrink-0 !w-6 !h-6 !p-0 text-foreground-2\"\n :class=\"closerClasses\"\n @click=\"open = false\"\n >\n <XMarkIcon class=\"h-6 w-6\" />\n </FormButton>\n <div\n ref=\"slotContainer\"\n v-memo=\"isClosing ? [memoKey] : [(memoKey = Math.random())]\"\n :class=\"slotContainerClasses\"\n @scroll=\"onScroll\"\n >\n <slot>Put your content here!</slot>\n </div>\n <div\n v-if=\"hasButtons\"\n class=\"relative z-50 flex justify-end px-6 pb-6 space-x-2 shrink-0 bg-foundation-page\"\n :class=\"{\n 'shadow-t pt-6': !scrolledToBottom,\n [buttonsWrapperClasses || '']: true\n }\"\n >\n <template v-if=\"buttons\">\n <div\n v-for=\"(button, index) in buttons\"\n :key=\"button.id || index\"\n v-tippy=\"\n button.props?.disabled || button.disabled\n ? button.disabledMessage\n : undefined\n \"\n >\n <FormButton\n v-bind=\"button.props || {}\"\n :disabled=\"button.props?.disabled || button.disabled\"\n :submit=\"button.props?.submit || button.submit\"\n @click=\"($event) => button.onClick?.($event)\"\n >\n {{ button.text }}\n </FormButton>\n </div>\n </template>\n <template v-else>\n <slot name=\"buttons\" />\n </template>\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </Dialog>\n </TransitionRoot>\n</template>\n<script setup lang=\"ts\">\nimport { Dialog, DialogPanel, TransitionChild, TransitionRoot } from '@headlessui/vue'\nimport { FormButton, type LayoutDialogButton } from '~~/src/lib'\nimport { XMarkIcon, ChevronLeftIcon } from '@heroicons/vue/24/outline'\nimport { isClient, useResizeObserver, type ResizeObserverCallback } from '@vueuse/core'\nimport { computed, onUnmounted, ref, useSlots, watch, type SetupContext } from 'vue'\nimport { throttle } from '#lodash'\nimport { directive as vTippy } from 'vue-tippy'\n\ntype MaxWidthValue = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\ntype FullscreenValues = 'mobile' | 'desktop' | 'all' | 'none'\n\nconst emit = defineEmits<{\n (e: 'update:open', v: boolean): void\n (e: 'fully-closed'): void\n (e: 'back'): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n open: boolean\n maxWidth?: MaxWidthValue\n fullscreen?: FullscreenValues\n hideCloser?: boolean\n showBackButton?: boolean\n /**\n * Prevent modal from closing when the user clicks outside of the modal or presses Esc\n */\n preventCloseOnClickOutside?: boolean\n title?: string\n buttons?: Array<LayoutDialogButton>\n /**\n * Extra classes to apply to the button container.\n */\n buttonsWrapperClasses?: string\n /**\n * If set, the modal will be wrapped in a form element and the `onSubmit` callback will be invoked when the user submits the form\n */\n onSubmit?: (e: SubmitEvent) => void\n isTransparent?: boolean\n closerClasses?: string\n hideTitle?: boolean\n hideButtons?: boolean\n }>(),\n {\n fullscreen: 'mobile'\n }\n)\n\nconst slots: SetupContext['slots'] = useSlots()\n\nconst isClosing = ref(false)\nconst memoKey = ref(Math.random())\n\nconst scrolledFromTop = ref(false)\nconst scrolledToBottom = ref(true)\nconst slotContainer = ref<HTMLElement | null>(null)\n\nuseResizeObserver(\n slotContainer,\n throttle<ResizeObserverCallback>(() => {\n // Triggering onScroll on size change too so that we don't get stuck with shadows\n // even tho the new content is not scrollable\n onScroll({ target: slotContainer.value })\n }, 60)\n)\n\nconst isForm = computed(() => !!props.onSubmit)\nconst hasButtons = computed(\n () => (props.buttons || slots.buttons) && !props.hideButtons\n)\nconst hasTitle = computed(() => !props.hideTitle && (!!props.title || !!slots.header))\n\nconst open = computed({\n get: () => props.open,\n set: (newVal) => emit('update:open', newVal)\n})\n\nconst maxWidthWeight = computed(() => {\n switch (props.maxWidth) {\n case 'xs':\n return 0\n case 'sm':\n return 1\n case 'md':\n return 2\n case 'lg':\n return 3\n case 'xl':\n return 4\n default:\n return 10000\n }\n})\n\nconst widthClasses = computed(() => {\n const classParts: string[] = ['w-full', 'sm:w-full']\n\n if (!isFullscreenDesktop.value) {\n if (maxWidthWeight.value === 0) {\n classParts.push('md:max-w-sm')\n }\n if (maxWidthWeight.value >= 1) {\n classParts.push('md:max-w-lg')\n }\n if (maxWidthWeight.value >= 2) {\n classParts.push('md:max-w-2xl')\n }\n if (maxWidthWeight.value >= 3) {\n classParts.push('lg:max-w-3xl')\n }\n if (maxWidthWeight.value >= 4) {\n classParts.push('xl:max-w-6xl')\n } else {\n classParts.push('md:max-w-2xl')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst isFullscreenDesktop = computed(\n () => props.fullscreen === 'desktop' || props.fullscreen === 'all'\n)\n\nconst dialogPanelClasses = computed(() => {\n const classParts: string[] = [\n 'transform md:rounded-xl text-foreground overflow-hidden transition-all text-left flex flex-col md:h-auto'\n ]\n\n if (!props.isTransparent) {\n classParts.push('bg-foundation-page shadow-xl border border-outline-2')\n }\n\n if (isFullscreenDesktop.value) {\n classParts.push('md:h-full')\n } else {\n classParts.push('md:max-h-[90vh]')\n }\n\n if (props.fullscreen === 'mobile' || props.fullscreen === 'all') {\n classParts.push('max-md:h-[98vh] max-md:!h-[98dvh]')\n }\n\n if (props.fullscreen === 'none' || props.fullscreen === 'desktop') {\n classParts.push('rounded-lg max-h-[90vh]')\n } else {\n classParts.push('rounded-t-lg')\n }\n\n classParts.push(widthClasses.value)\n return classParts.join(' ')\n})\n\nconst slotContainerClasses = computed(() => {\n const classParts: string[] = ['flex-1 simple-scrollbar overflow-y-auto text-body-xs']\n\n if (!props.isTransparent) {\n if (hasTitle.value) {\n classParts.push('px-6 py-4')\n if (isFullscreenDesktop.value) {\n classParts.push('md:p-0')\n }\n } else if (!isFullscreenDesktop.value) {\n classParts.push('px-6 py-4')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst onClose = () => {\n if (props.preventCloseOnClickOutside) return\n open.value = false\n}\n\nconst onFullyClosed = () => {\n emit('fully-closed')\n isClosing.value = false\n}\n\nconst onFormSubmit = (e: SubmitEvent) => {\n props.onSubmit?.(e)\n}\n\nconst onScroll = throttle((e: { target: EventTarget | null }) => {\n if (!e.target) return\n\n const target = e.target as HTMLElement\n const { scrollTop, offsetHeight, scrollHeight } = target\n scrolledFromTop.value = scrollTop > 0\n scrolledToBottom.value = scrollTop + offsetHeight >= scrollHeight\n}, 60)\n\nwatch(\n open,\n (newValue, oldValue) => {\n if (isClient) {\n // Toggle 'dialog-open' class on <html> to prevent scroll jumping and disable background scroll.\n // This maintains user scroll position when Headless UI dialogs are activated.\n const html = document.documentElement\n if (newValue) {\n html.classList.add('dialog-open')\n } else {\n html.classList.remove('dialog-open')\n }\n }\n\n if (!newValue && oldValue) {\n isClosing.value = true\n }\n },\n { flush: 'sync' }\n)\n\n// Clean up when the component unmounts\nonUnmounted(() => {\n document.documentElement.classList.remove('dialog-open')\n})\n</script>\n<style>\nhtml.dialog-open {\n overflow: visible !important;\n}\nhtml.dialog-open body {\n overflow: hidden !important;\n}\n</style>\n","<template>\n <div\n class=\"flex flex-col border-primary-muted\"\n :class=\"{\n 'border-t': borderT,\n 'border-b': borderB,\n 'relative z-10': isExpanded\n }\"\n >\n <div\n class=\"flex justify-between items-center space-x-4 sm:space-x-8 py-2.5 px-2\"\n :class=\"backgroundClass\"\n tabindex=\"0\"\n v-on=\"\n !button && !alwaysOpen\n ? {\n click: toggleExpansion,\n keypress: keyboardClick(toggleExpansion)\n }\n : {}\n \"\n >\n <div\n class=\"text-heading-sm flex items-center space-x-1 sm:space-x-2 select-none\"\n :class=\"titleClasses\"\n >\n <div v-if=\"$slots.icon || icon\" class=\"h-4 w-4 empty:h-0 empty:w-0\">\n <slot v-if=\"$slots.icon\" name=\"icon\" />\n <Component :is=\"icon\" v-if=\"icon\" class=\"w-full h-full\" />\n </div>\n <span>{{ title }}</span>\n </div>\n <div>\n <ChevronDownIcon\n v-if=\"!button && !alwaysOpen\"\n class=\"w-4 h-4 transition-all duration-400\"\n :class=\"isExpanded && 'rotate-180'\"\n />\n <FormButton\n v-if=\"button\"\n :to=\"button.expandContent ? undefined : button.to\"\n :color=\"button.expandContent && isExpanded ? 'outline' : button.color\"\n :icon-right=\"\n button.expandContent && isExpanded ? undefined : button.iconRight\n \"\n size=\"sm\"\n @click=\"button?.onClick\"\n v-on=\"button?.expandContent ? { click: toggleExpansion } : {}\"\n >\n {{ button.expandContent && isExpanded ? 'Cancel' : button.text }}\n </FormButton>\n </div>\n </div>\n <div\n class=\"transition-all duration-300 overflow-hidden\"\n :class=\"[\n allowOverflow && isExpanded ? '!overflow-visible' : '',\n isExpanded ? 'mb-2 mt-1' : '',\n !button && !alwaysOpen ? 'cursor-pointer hover:bg-foundation-page' : ''\n ]\"\n :style=\"\n alwaysOpen\n ? 'max-height: none;'\n : `max-height: ${isExpanded ? contentHeight + 'px' : '0px'}`\n \"\n >\n <template v-if=\"props.lazyLoad\">\n <div\n v-if=\"isExpanded || props.alwaysOpen\"\n ref=\"content\"\n class=\"rounded-md text-sm pb-3 px-2 mt-1\"\n >\n <slot>Panel contents</slot>\n </div>\n </template>\n\n <template v-else>\n <div ref=\"content\" class=\"rounded-md text-sm pb-3 px-2 mt-1\">\n <slot>Panel contents</slot>\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, unref, computed, nextTick } from 'vue'\nimport type { PropType, Ref } from 'vue'\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline'\nimport { FormButton } from '~~/src/lib'\nimport { keyboardClick } from '~~/src/helpers/global/accessibility'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport type { FormButtonStyle } from '~~/src/helpers/form/button'\n\ntype TitleColor = 'default' | 'danger' | 'warning' | 'success' | 'secondary' | 'info'\n\nconst props = defineProps({\n title: String,\n borderT: Boolean,\n borderB: Boolean,\n allowOverflow: Boolean,\n titleColor: {\n type: String as () => TitleColor,\n default: 'default'\n },\n button: Object as () =>\n | {\n expandContent?: boolean\n text: string\n to?: string\n color: FormButtonStyle\n iconRight?: PropAnyComponent | undefined\n onClick?: () => void\n }\n | undefined,\n alwaysOpen: Boolean,\n lazyLoad: {\n type: Boolean,\n default: false\n },\n icon: {\n type: [Function, Object] as PropType<PropAnyComponent>,\n default: undefined\n }\n})\n\nconst content: Ref<HTMLElement | null> = ref(null)\nconst contentHeight = ref(0)\nconst isExpanded = ref(false)\n\nconst backgroundClass = computed(() => {\n const classes = []\n\n if (!props.button && !props.alwaysOpen) {\n classes.push('cursor-pointer', 'hover:bg-foundation-page-2')\n }\n\n return classes\n})\n\nconst titleClasses = computed(() => {\n switch (props.titleColor) {\n case 'danger':\n return 'text-danger'\n case 'warning':\n return 'text-warning'\n case 'success':\n return 'text-success'\n case 'secondary':\n return 'text-secondary'\n case 'info':\n return 'text-info'\n default:\n return 'text-foreground'\n }\n})\n\nconst toggleExpansion = async () => {\n isExpanded.value = !isExpanded.value\n\n if (isExpanded.value) {\n await nextTick()\n contentHeight.value = (unref(content)?.scrollHeight || 0) + 64\n }\n}\n</script>\n","<template>\n <div>\n <HeadlessDisclosure>\n <DisclosureButton :class=\"buttonClasses\" @click=\"toggle\">\n <div class=\"inline-flex items-center space-x-2 overflow-hidden pr-1 w-full\">\n <Component :is=\"icon\" v-if=\"icon\" class=\"h-5 w-5\" />\n <span v-if=\"!editTitle\" class=\"text-left w-full truncate\">\n {{ title }}\n </span>\n <FormTextInput\n v-else\n v-bind=\"bind\"\n name=\"disclosureTitle\"\n color=\"fully-transparent\"\n :input-classes=\"buttonTextClasses\"\n :auto-focus=\"true\"\n wrapper-classes=\"flex-1\"\n v-on=\"on\"\n @click.stop\n @blur=\"onTitleInputBlur\"\n />\n <slot name=\"title-actions\" />\n </div>\n <ChevronUpIcon :class=\"chevronClasses\" />\n </DisclosureButton>\n <DisclosurePanel v-if=\"open\" :class=\"panelClasses\" static>\n <div v-if=\"!lazyLoad || open\" class=\"label-light\">\n <slot>Panel contents</slot>\n </div>\n </DisclosurePanel>\n </HeadlessDisclosure>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {\n DisclosureButton,\n Disclosure as HeadlessDisclosure,\n DisclosurePanel\n} from '@headlessui/vue'\nimport { ChevronUpIcon } from '@heroicons/vue/24/solid'\nimport { computed, watch } from 'vue'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport { FormTextInput, useDebouncedTextInput } from '~~/src/lib'\n\ntype DisclosureColor = 'default' | 'danger' | 'success' | 'warning' | 'subtle'\n\nconst props = withDefaults(\n defineProps<{\n /**\n * HeadlessUI icon component to use\n */\n icon?: PropAnyComponent\n color?: DisclosureColor\n /**\n * Whether to lazy load the panel contents only upon opening\n */\n lazyLoad?: boolean\n /**\n * If edit mode enabled - it will exit mode when user unfocuses\n */\n exitEditModeOnBlur?: boolean\n }>(),\n {\n color: 'default',\n exitEditModeOnBlur: true\n }\n)\n\nconst editTitle = defineModel<boolean>('editTitle')\nconst title = defineModel<string>('title')\nconst open = defineModel<boolean>('open', {\n default: false\n})\n\nconst { on, bind, syncFromValue } = useDebouncedTextInput({\n disableDebouncedInput: true,\n model: title\n})\n\nconst buttonTextClasses = computed(() => {\n const classParts = ['font-medium']\n\n switch (props.color) {\n case 'warning':\n classParts.push('text-warning')\n break\n case 'success':\n classParts.push('text-success')\n break\n case 'danger':\n classParts.push('text-danger')\n break\n case 'subtle':\n classParts.push('text-foreground text-body-2xs')\n break\n case 'default':\n default:\n classParts.push('text-primary')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst buttonClasses = computed(() => {\n let classParts: string[] = []\n\n // Common classes shared between subtle and other variants\n classParts = [\n 'w-full',\n 'flex',\n 'items-center',\n 'transition',\n 'group/disclosure',\n\n buttonTextClasses.value\n ]\n\n if (props.color === 'subtle') {\n // Subtle variant specific styling\n classParts.push(\n 'h-7',\n 'justify-normal',\n 'pl-1',\n 'pr-0.5',\n\n 'rounded-md',\n 'hover:bg-highlight-1',\n 'ring-none'\n )\n } else {\n // Default styling for other variants\n classParts.push(\n 'pr-3',\n 'h-10',\n 'justify-between',\n 'border-l-2',\n 'px-2',\n 'rounded',\n 'ring-1'\n )\n }\n\n // Add color-specific styling\n switch (props.color) {\n case 'warning':\n classParts.push('border-warning ring-warning-lighter hover:ring-warning')\n break\n case 'success':\n classParts.push('border-success ring-success-lighter hover:ring-success')\n break\n case 'danger':\n classParts.push('border-danger ring-danger-lighter hover:ring-danger')\n break\n case 'subtle':\n classParts.push('border-none ring-none flex-row-reverse gap-x-1 justify-end')\n break\n case 'default':\n default:\n classParts.push('border-primary ring-primary-muted hover:ring-primary')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst panelClasses = computed(() => {\n const classParts = ['p-3 border-x border-b rounded-b-md']\n\n switch (props.color) {\n case 'warning':\n classParts.push('border-warning-lighter')\n break\n case 'success':\n classParts.push('border-success-lighter')\n break\n case 'danger':\n classParts.push('border-danger-lighter')\n break\n case 'subtle':\n classParts.push('border-none pl-0 pr-0 pb-0 pt-0 rounded-none')\n break\n case 'default':\n default:\n classParts.push('border-primary-muted')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst chevronClasses = computed(() => {\n const baseClasses = 'h-4 w-4 transition-transform shrink-0 duration-200 ease-in-out'\n\n if (props.color === 'subtle') {\n // Subtle variant: 90° when closed, 0° when open\n return open.value\n ? `${baseClasses} rotate-180 transform`\n : `${baseClasses} rotate-90 transform`\n } else {\n // Other variants: rotate when closed (default behavior)\n return !open.value ? `${baseClasses} rotate-180 transform` : baseClasses\n }\n})\n\nconst toggle = () => {\n open.value = !open.value\n}\n\nconst onTitleInputBlur = () => {\n if (!props.exitEditModeOnBlur) return\n\n editTitle.value = false\n}\n\nwatch(editTitle, (newVal, oldVal) => {\n // Reset input value on turning on edit mode\n if (newVal && !oldVal) {\n syncFromValue()\n }\n})\n</script>\n","import type { ConcreteComponent } from 'vue'\nimport type { FormButton } from '~~/src/lib'\n\ntype FormButtonProps = InstanceType<typeof FormButton>['$props']\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport type { MaybeNullOrUndefined } from '@speckle/shared'\n\nexport enum GridListToggleValue {\n Grid = 'grid',\n List = 'list'\n}\n\nexport type LayoutTabItem<I extends string = string> = {\n title: string\n id: I\n}\n\nexport type LayoutPageTabItem<I extends string = string> = {\n title: string\n id: I\n count?: number\n tag?: string\n icon?: PropAnyComponent\n disabled?: boolean\n disabledMessage?: string\n}\n\nexport type LayoutMenuItem<I extends string = string> = {\n icon?: ConcreteComponent\n title: string\n id: I\n disabled?: MaybeNullOrUndefined<boolean>\n disabledTooltip?: MaybeNullOrUndefined<string>\n color?: 'danger' | 'info'\n active?: boolean\n}\n\nexport type LayoutDialogButton = {\n text: string\n props?: Record<string, unknown> & FormButtonProps\n onClick?: (e: MouseEvent) => void\n disabled?: boolean\n disabledMessage?: string\n submit?: boolean\n /**\n * This should uniquely identify the button within the form. Even if you have different sets\n * of buttons rendered on different steps of a wizard, all of them should have unique IDs to\n * ensure proper form functionality.\n */\n id?: string\n}\n\nexport type LayoutHeaderButton = {\n label: string\n props: Record<string, unknown> & FormButtonProps\n onClick?: (e: MouseEvent) => void\n}\n\nexport type LayoutTableColours = 'primary' | 'outline' | 'subtle' | 'danger'\n","<template>\n <button\n class=\"max-w-max transition flex justify-center items-center space-x-2 outline-none select-none h-8 text-foreground border-2 border-primary-muted dark:border-foundation bg-primary-muted rounded-md active:scale-[0.97] grow\"\n @click=\"onClick\"\n >\n <div class=\"relative flex bg-primary-muted rounded-md\">\n <div\n class=\"absolute transition\"\n :class=\"{\n 'translate-x-7': value !== GridListToggleValue.List\n }\"\n >\n <div\n class=\"w-7 h-7 bg-foundation dark:bg-foundation-2 transition rounded shadow\"\n />\n </div>\n <div\n v-tippy=\"'List View'\"\n class=\"relative z-10 flex space-x-1 items-center p-1 rounded-l\"\n >\n <Bars3Icon class=\"h-5 w-5\" />\n </div>\n <div\n v-tippy=\"'Grid View'\"\n class=\"relative z-10 flex space-x-1 items-center p-1 rounded-r\"\n >\n <Squares2X2Icon class=\"h-5 w-5\" />\n </div>\n </div>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { Bars3Icon, Squares2X2Icon } from '@heroicons/vue/24/solid'\nimport { computed } from 'vue'\nimport { GridListToggleValue } from '~~/src/helpers/layout/components'\n\nconst emit = defineEmits<{\n (e: 'click', v: MouseEvent): void\n (e: 'update:modelValue', v: GridListToggleValue): void\n}>()\n\nconst props = defineProps<{\n modelValue?: GridListToggleValue\n}>()\n\nconst value = computed({\n get: () => props.modelValue || GridListToggleValue.Grid,\n set: (newVal) => emit('update:modelValue', newVal)\n})\n\nconst onClick = (e: MouseEvent) => {\n emit('click', e)\n\n const newVal =\n value.value === GridListToggleValue.Grid\n ? GridListToggleValue.List\n : GridListToggleValue.Grid\n value.value = newVal\n}\n</script>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.8849 5.91851L7.25614 11.74L3.99951 8.48337L4.93388 7.549L7.24028 9.8554L11.9349 5L12.8849 5.91851Z\"\n fill=\"currentColor\"\n />\n </svg>\n</template>\n","<template>\n <HeadlessMenu v-slot=\"{ open: isMenuOpen }\" as=\"div\" class=\"relative inline-block\">\n <div>\n <MenuButton :id=\"menuId\" ref=\"menuButton\" class=\"hidden\" @click.stop.prevent />\n <!-- conditional pointer-events-none is necessary to avoid double events when clicking on the button when the menu is already open -->\n <div ref=\"menuButtonWrapper\" :class=\"isMenuOpen ? 'pointer-events-none' : ''\">\n <slot :toggle=\"toggle\" :open=\"processOpen(isMenuOpen)\" />\n </div>\n </div>\n <Teleport to=\"body\" :disabled=\"!mountMenuOnBody\">\n <MenuItems\n v-if=\"isMenuOpen\"\n ref=\"menuItems\"\n :class=\"menuItemsClasses\"\n :style=\"menuItemsStyles\"\n >\n <div v-for=\"(group, i) in items\" :key=\"i\" class=\"p-1\">\n <MenuItem\n v-for=\"item in group\"\n v-slot=\"{ active, disabled }\"\n :key=\"item.id\"\n :disabled=\"item.disabled || undefined\"\n :color=\"item.color\"\n >\n <span v-tippy=\"item.disabled && item.disabledTooltip\">\n <button\n :class=\"buildButtonClassses({ active, disabled, color: item.color })\"\n :disabled=\"disabled\"\n @click=\"chooseItem(item, $event)\"\n >\n <Component :is=\"item.icon\" v-if=\"item.icon\" class=\"h-4 w-4\" />\n <div v-if=\"showTicks === true\" class=\"w-5 shrink-0\">\n <IconCheck v-if=\"item.active\" class=\"h-4 w-4 text-foreground-2\" />\n </div>\n <slot name=\"item\" :item=\"item\">\n <div :class=\"{ grow: !!showTicks }\">{{ item.title }}</div>\n </slot>\n <div v-if=\"showTicks === 'right' && item.active\" class=\"w-5 shrink-0\">\n <IconCheck v-if=\"item.active\" class=\"h-4 w-4 text-foreground-2\" />\n </div>\n </button>\n </span>\n </MenuItem>\n </div>\n </MenuItems>\n </Teleport>\n </HeadlessMenu>\n</template>\n\n<script setup lang=\"ts\" generic=\"MenuIds extends string = string\">\nimport { directive as vTippy } from 'vue-tippy'\nimport { Menu as HeadlessMenu, MenuButton, MenuItems, MenuItem } from '@headlessui/vue'\nimport type { Nullable } from '@speckle/shared'\nimport { computed, ref, watch, onMounted } from 'vue'\nimport {\n HorizontalDirection,\n useResponsiveHorizontalDirectionCalculation\n} from '~~/src/composables/common/window'\nimport type { LayoutMenuItem } from '~~/src/helpers/layout/components'\nimport { useElementBounding, useElementSize, useEventListener } from '@vueuse/core'\nimport { useBodyMountedMenuPositioning } from '~~/src/composables/layout/menu'\nimport { isNumber } from '#lodash'\nimport IconCheck from '~~/src/components/global/icon/Check.vue'\n\nconst emit = defineEmits<{\n (e: 'update:open', val: boolean): void\n (e: 'chosen', val: { event: MouseEvent; item: LayoutMenuItem<MenuIds> }): void\n}>()\n\nconst props = defineProps<{\n open?: boolean\n /**\n * 2D array so that items can be grouped with dividers between them\n */\n items: LayoutMenuItem<MenuIds>[][]\n size?: 'base' | 'lg' | number\n menuId?: string\n /**\n * Preferable menu position/directed. This can change depending on available space.\n */\n menuPosition?: HorizontalDirection\n mountMenuOnBody?: boolean\n customMenuItemsClasses?: string[]\n showTicks?: boolean | 'right'\n}>()\n\nconst menuItems = ref(null as Nullable<{ el: HTMLDivElement }>)\nconst menuButton = ref(null as Nullable<{ el: HTMLButtonElement }>)\nconst menuButtonWrapper = ref(null as Nullable<HTMLElement>)\nconst isOpenInternally = ref(false)\nconst isMounted = ref(false)\n\nconst finalOpen = computed({\n get: () => props.open || false,\n set: (newVal) => emit('update:open', newVal)\n})\n\nconst menuButtonBounding = useElementBounding(menuButtonWrapper, {\n windowResize: true,\n windowScroll: true,\n immediate: true\n})\n\nconst menuItemsSize = useElementSize(computed(() => menuItems.value?.el || null))\n\nconst { direction: calculatedDirection } = useResponsiveHorizontalDirectionCalculation({\n el: computed(() => menuItems.value?.el || null),\n defaultDirection: props.menuPosition,\n stopUpdatesBelowWidth: 300\n})\n\nconst menuDirection = computed(() => {\n return props.menuPosition || calculatedDirection.value\n})\n\nconst { menuStyle } = useBodyMountedMenuPositioning({\n menuOpenDirection: menuDirection,\n buttonBoundingBox: menuButtonBounding,\n menuWidth: computed(() => {\n if (isNumber(props.size)) return props.size\n\n switch (props.size) {\n case 'lg':\n return 208\n case 'base':\n default:\n return 176\n }\n }),\n menuHeight: computed(() => menuItemsSize.height.value)\n})\n\nconst menuItemsStyles = computed(() => {\n // Only add styles for body mounted menus\n if (!props.mountMenuOnBody) return {}\n if (!menuButtonBounding.width.value) return {}\n\n return {\n position: 'fixed',\n zIndex: 50,\n ...menuStyle.value\n }\n})\n\nconst menuItemsClasses = computed(() => {\n const classParts = [\n 'w-44 origin-top-right divide-y divide-outline-3 rounded-md bg-foundation shadow-lg border border-outline-2 z-50'\n ]\n\n if (props.customMenuItemsClasses) {\n classParts.push(...props.customMenuItemsClasses)\n }\n\n if (props.mountMenuOnBody) {\n classParts.push('fixed')\n } else {\n classParts.push('absolute mt-1')\n\n if (menuDirection.value === HorizontalDirection.Left) {\n classParts.push('right-0')\n }\n }\n\n if (props.size === 'lg') {\n classParts.push('w-52')\n } else {\n classParts.push('w-44')\n }\n\n return classParts.join(' ')\n})\n\nconst buildButtonClassses = (params: {\n active?: boolean\n disabled?: boolean\n color?: 'danger' | 'info'\n}) => {\n const { active, disabled, color } = params\n const classParts = [\n 'group flex space-x-2 w-full items-center rounded-md px-2 py-1 text-body-xs text-left'\n ]\n\n if (active && !color) {\n classParts.push('bg-primary-muted text-foreground')\n } else if (disabled) {\n classParts.push('opacity-40')\n } else if (color === 'danger' && active) {\n classParts.push('text-foreground-on-primary bg-danger')\n } else if (color === 'danger' && !active) {\n classParts.push('text-danger')\n } else if (color === 'info' && active) {\n classParts.push('text-foreground-on-primary bg-info')\n } else if (color === 'info' && !active) {\n classParts.push('text-info')\n } else {\n classParts.push('text-foreground')\n }\n\n return classParts.join(' ')\n}\n\nconst chooseItem = (item: LayoutMenuItem<MenuIds>, event: MouseEvent) => {\n emit('chosen', { item, event })\n setOpen(false)\n}\n\nconst toggle = () => {\n menuButton.value?.el.click()\n if (props.mountMenuOnBody) {\n menuButtonBounding.update()\n }\n}\n\nconst setOpen = (open: boolean) => {\n if (isOpenInternally.value === open) return\n toggle()\n}\n\n// ok this is a bit hacky, but it's done because of headlessui's limited API\n// the point of this is 1) cast any to bool 2) store 'open' state locally\n// so that we can access it outside of the template\nconst processOpen = (val: unknown): val is boolean => {\n const isOpen = !!val\n isOpenInternally.value = isOpen\n return isOpen\n}\n\nwatch(isOpenInternally, (newVal, oldVal) => {\n if (newVal === oldVal) return\n finalOpen.value = newVal\n})\n\nwatch(finalOpen, (shouldBeOpen) => {\n if (shouldBeOpen && !isOpenInternally.value) {\n toggle()\n } else if (!shouldBeOpen && isOpenInternally.value) {\n toggle()\n }\n})\n\nonMounted(() => {\n isMounted.value = true\n})\n\nuseEventListener(window, 'resize', () => {\n menuButtonBounding.update()\n})\n\nuseEventListener(window, 'scroll', () => {\n menuButtonBounding.update()\n})\n</script>\n","<template>\n <div class=\"relative z-10 flex flex-col !mt-0\">\n <!-- Left Arrow Button -->\n <div\n class=\"absolute left-[-2px] top-[-2px] z-20 pr-8 bg-gradient-to-r from-foundation-page to-transparent\"\n >\n <button\n v-if=\"showLeftArrow\"\n class=\"bg-foundation p-1 rounded-full border border-outline-4 shadow\"\n @click=\"scrollLeft\"\n >\n <ArrowLongLeftIcon class=\"h-4 w-4\" />\n </button>\n </div>\n <div class=\"absolute left-0 z-10 w-full h-[1px] mt-px bg-outline-3 top-7\"></div>\n <div\n ref=\"scrollContainer\"\n class=\"relative overflow-x-auto hide-scrollbar w-full\"\n @scroll=\"handleScroll\"\n >\n <div\n :style=\"borderStyle\"\n class=\"h-[2px] absolute bottom-0 z-20 transition-[left,width] duration-300\"\n :class=\"isInitialSetup ? 'bg-transparent' : 'bg-primary'\"\n ></div>\n\n <div ref=\"buttonContainer\" class=\"flex w-full space-x-4\">\n <button\n v-for=\"item in items\"\n :key=\"item.id\"\n :data-tab-id=\"item.id\"\n :class=\"[\n buttonClass(item),\n { '!border-primary': isActiveItem(item) && isInitialSetup }\n ]\"\n class=\"tab-button\"\n :disabled=\"item.disabled\"\n @click=\"setActiveItem(item)\"\n >\n <div class=\"flex space-x-2 items-center\">\n <component\n :is=\"item.icon\"\n v-if=\"item.icon\"\n class=\"shrink-0 h-4 w-4 stroke-[2px]\"\n />\n\n <div class=\"min-w-6\">\n <span\n v-if=\"item.disabled && item.disabledMessage\"\n v-tippy=\"item.disabledMessage\"\n >\n {{ item.title }}\n </span>\n <span v-else>{{ item.title }}</span>\n </div>\n <div\n v-if=\"item.count\"\n class=\"rounded-full px-2 text-body-3xs transition-all min-w-6\"\n :class=\"\n activeItem?.id === item.id\n ? 'text-primary bg-info-lighter dark:text-foreground'\n : 'text-foreground-2 bg-highlight-3'\n \"\n >\n <span>{{ item.count }}</span>\n </div>\n <CommonBadge v-if=\"item.tag\">\n {{ item.tag }}\n </CommonBadge>\n </div>\n </button>\n </div>\n </div>\n\n <!-- Right Arrow Button -->\n <div\n class=\"absolute right-[-2px] top-[-2px] z-20 pl-8 bg-gradient-to-l from-foundation-page to-transparent\"\n >\n <button\n v-if=\"showRightArrow\"\n class=\"bg-foundation p-1 rounded-full border border-outline-3 shadow\"\n @click=\"scrollRight\"\n >\n <ArrowLongRightIcon class=\"h-4 w-4\" />\n </button>\n </div>\n <div class=\"pt-4\">\n <slot :active-item=\"activeItem\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, watch, onBeforeUnmount } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport type { LayoutPageTabItem } from '~~/src/helpers/layout/components'\nimport { isClient } from '@vueuse/core'\nimport { ArrowLongRightIcon, ArrowLongLeftIcon } from '@heroicons/vue/24/outline'\nimport type { Nullable } from '@speckle/shared'\nimport { throttle } from '#lodash'\nimport { useResizeObserver } from '@vueuse/core'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\n\nconst props = defineProps<{\n items: LayoutPageTabItem[]\n}>()\n\nconst activeItem = defineModel<LayoutPageTabItem>('activeItem', { required: true })\n\nconst buttonContainer = ref(null as Nullable<HTMLDivElement>)\nconst scrollContainer = ref<HTMLElement | null>(null)\nconst showLeftArrow = ref(false)\nconst showRightArrow = ref(false)\nconst isInitialSetup = ref(true)\n\nconst underlineLeft = ref('0px')\nconst underlineWidth = ref('0px')\n\nconst buttonClass = computed(() => {\n return (item: LayoutPageTabItem) => {\n const isActive = activeItem.value?.id === item.id\n const baseClasses = [\n 'relative',\n 'z-10',\n 'flex',\n 'items-center',\n 'disabled:opacity-60 disabled:hover:border-transparent disabled:cursor-not-allowed disabled:hover:bg-transparent',\n 'text-body-xs',\n 'hover:sm:border-outline-2',\n 'pb-2',\n 'border-b-[2px]',\n 'border-transparent',\n 'max-w-max',\n 'last:mr-6',\n 'whitespace-nowrap'\n ]\n\n if (isActive) baseClasses.push('text-primary', 'hover:text-primary')\n else baseClasses.push('text-foreground')\n\n return baseClasses\n }\n})\n\nconst activeItemRef = computed(() => {\n const id = activeItem.value?.id\n if (!id) return null\n\n const parent = buttonContainer.value\n if (!parent) return null\n\n const btns = [...parent.getElementsByClassName('tab-button')] as HTMLElement[]\n return btns.find((b) => b.dataset['tabId'] === id) || null\n})\n\nconst borderStyle = computed<CSSProperties>(() => ({\n left: underlineLeft.value,\n width: underlineWidth.value\n}))\n\nconst updateUnderline = () => {\n const el = activeItemRef.value\n if (!el) return\n\n underlineLeft.value = `${el.offsetLeft}px`\n underlineWidth.value = `${el.clientWidth}px`\n}\n\nconst setActiveItem = (item: LayoutPageTabItem) => {\n activeItem.value = item\n isInitialSetup.value = false\n}\n\nconst isActiveItem = (item: LayoutPageTabItem) => {\n return activeItem.value?.id === item.id\n}\n\nconst checkArrowsVisibility = () => {\n const container = scrollContainer.value\n if (!container) return\n\n const scrollWidth = container.scrollWidth\n const clientWidth = container.clientWidth\n const scrollLeft = container.scrollLeft\n const buffer = 1\n\n showLeftArrow.value = scrollLeft > buffer\n showRightArrow.value = scrollLeft < scrollWidth - clientWidth - buffer\n}\n\nconst scrollLeft = () => {\n scrollContainer.value?.scrollBy({ left: -100, behavior: 'smooth' }) // Adjust the scroll amount as needed\n checkArrowsVisibility()\n}\n\nconst scrollRight = () => {\n scrollContainer.value?.scrollBy({ left: 100, behavior: 'smooth' }) // Adjust the scroll amount as needed\n checkArrowsVisibility()\n}\n\nconst handleScroll = throttle(() => {\n checkArrowsVisibility()\n}, 250)\n\nconst ensureActiveItemVisible = () => {\n const activeButton = activeItemRef.value\n if (activeButton && scrollContainer.value) {\n activeButton.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center'\n })\n }\n}\n\nonMounted(() => {\n if (isClient) {\n if (props.items.length && !activeItem.value) {\n setActiveItem(props.items[0])\n }\n checkArrowsVisibility()\n ensureActiveItemVisible()\n }\n})\n\nwatch(\n () => [props.items, activeItem.value] as const,\n ([newItems]) => {\n if (Array.isArray(newItems) && newItems.length && !activeItem.value) {\n setActiveItem(newItems[0])\n }\n checkArrowsVisibility()\n }\n)\n\nconst { stop: stopResizeObserver } = useResizeObserver(activeItemRef, () =>\n updateUnderline()\n)\n\nonBeforeUnmount(() => {\n handleScroll.cancel()\n stopResizeObserver()\n})\n</script>\n<style>\n/* Hide scrollbar for Chrome, Safari and Opera */\n.hide-scrollbar::-webkit-scrollbar {\n display: none;\n}\n\n/* Hide scrollbar for IE, Edge and Firefox */\n.hide-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n</style>\n","<template>\n <div class=\"flex space-y-8 lg:space-y-0 lg:space-x-8 flex-col lg:flex-row\">\n <div class=\"lg:w-2/12\">\n <div class=\"flex w-full flex-col space-y-1\">\n <button\n v-for=\"item in items\"\n :key=\"item.id\"\n :data-tab-id=\"item.id\"\n :class=\"[buttonClass(item)]\"\n :disabled=\"item.disabled\"\n @click=\"setActiveItem(item)\"\n >\n <div\n v-tippy=\"\n item.disabled && item.disabledMessage ? item.disabledMessage : undefined\n \"\n class=\"absolute top-0 right-0 left-0 bottom-0\"\n ></div>\n <div class=\"flex space-x-2 items-center px-2\">\n <component\n :is=\"item.icon\"\n v-if=\"item.icon\"\n class=\"shrink-0 h-4 w-4 stroke-[2px]\"\n ></component>\n <span class=\"min-w-6\">{{ item.title }}</span>\n <div\n v-if=\"item.count\"\n class=\"rounded-full px-2 text-body-3xs transition-all min-w-6\"\n :class=\"\n activeItem?.id === item.id\n ? 'text-primary bg-info-lighter dark:text-foreground'\n : 'text-foreground-2 bg-foundation-2'\n \"\n >\n <span>{{ item.count }}</span>\n </div>\n <div\n v-if=\"item.tag\"\n class=\"text-body-3xs font-medium py-0.5 px-1.5 text-foreground-2 bg-foundation-2 uppercase text-outline-4 rounded\"\n >\n {{ item.tag }}\n </div>\n </div>\n </button>\n </div>\n </div>\n\n <div class=\"lg:w-10/12\">\n <slot :active-item=\"activeItem\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, watch } from 'vue'\nimport type { LayoutPageTabItem } from '~~/src/helpers/layout/components'\nimport { isClient } from '@vueuse/core'\n\nconst props = defineProps<{\n items: LayoutPageTabItem[]\n}>()\n\nconst activeItem = defineModel<LayoutPageTabItem>('activeItem', { required: true })\n\nconst buttonClass = computed(() => {\n return (item: LayoutPageTabItem) => {\n const isActive = activeItem.value?.id === item.id\n const baseClasses = [\n 'relative',\n 'flex items-center space-x-1.5',\n 'hover:bg-highlight-2',\n 'disabled:opacity-60 disabled:hover:border-transparent disabled:cursor-not-allowed disabled:hover:bg-transparent rounded-md',\n 'text-body-xs font-medium',\n 'py-1'\n ]\n\n if (isActive) baseClasses.push('bg-primary-muted')\n else baseClasses.push('border-transparent text-foreground')\n\n return baseClasses\n }\n})\n\nconst setActiveItem = (item: LayoutPageTabItem) => {\n activeItem.value = item\n}\n\nonMounted(() => {\n if (isClient) {\n if (props.items.length && !activeItem.value) {\n setActiveItem(props.items[0])\n }\n }\n})\n\nwatch(\n () => [props.items, activeItem.value],\n ([newItems]) => {\n if (Array.isArray(newItems) && newItems.length && !activeItem.value) {\n setActiveItem(newItems[0])\n }\n }\n)\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <div :class=\"tableClasses\">\n <div :class=\"headerRowClasses\" :style=\"{ paddingRight: paddingRightStyle }\">\n <div\n v-for=\"(column, colIndex) in columns\"\n :key=\"column.id\"\n :class=\"getHeaderClasses(column.id, colIndex)\"\n >\n {{ column.header }}\n </div>\n </div>\n <div :class=\"resultContainerClasses\">\n <div\n v-if=\"loading || !items\"\n class=\"flex items-center justify-center py-3\"\n tabindex=\"0\"\n >\n <CommonLoadingIcon />\n </div>\n <template v-else-if=\"items?.length\">\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n :style=\"{ paddingRight: paddingRightStyle }\"\n :class=\"rowsWrapperClasses\"\n tabindex=\"0\"\n @click=\"handleRowClick(item)\"\n @keypress=\"handleRowClick(item)\"\n >\n <template v-for=\"(column, colIndex) in columns\" :key=\"column.id\">\n <div :class=\"getClasses(column.id, colIndex)\" tabindex=\"0\">\n <slot :name=\"column.id\" :item=\"item\">\n <div class=\"text-foreground-2 font-medium order-1\">Placeholder</div>\n </slot>\n </div>\n </template>\n <div\n v-if=\"buttons\"\n class=\"absolute right-1.5 space-x-1 flex items-center p-0 h-full\"\n >\n <div v-for=\"button in buttons\" :key=\"button.label\">\n <FormButton\n v-tippy=\"button.tooltip\"\n :icon-left=\"button.icon\"\n size=\"sm\"\n color=\"outline\"\n hide-text\n :disabled=\"button.disabled\"\n :class=\"button.class\"\n :to=\"isString(button.action) ? button.action : undefined\"\n @click.stop=\"!isString(button.action) ? button.action(item) : noop\"\n />\n </div>\n </div>\n </div>\n </template>\n <div\n v-else\n tabindex=\"0\"\n :style=\"{ paddingRight: paddingRightStyle }\"\n :class=\"rowsWrapperClasses\"\n >\n <div :class=\"getClasses(undefined, 0)\" tabindex=\"0\">\n <slot name=\"empty\">\n <div class=\"w-full text-center label-light text-foreground-2 italic\">\n {{ emptyMessage }}\n </div>\n </slot>\n </div>\n </div>\n <slot name=\"loader\" />\n </div>\n </div>\n</template>\n<script setup lang=\"ts\" generic=\"T extends {id: string}, C extends string\">\nimport { noop, isString } from '#lodash'\nimport { computed } from 'vue'\nimport type { PropAnyComponent } from '~~/src/helpers/common/components'\nimport { CommonLoadingIcon, FormButton } from '~~/src/lib'\nimport { directive as vTippy } from 'vue-tippy'\n\nexport type TableColumn<I> = {\n id: I\n header: string\n classes: string\n}\n\nexport type RowButton<T = unknown> = {\n icon: PropAnyComponent\n label: string\n action: (item: T) => unknown\n class?: string\n tooltip?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n items: T[] | undefined | null\n buttons?: RowButton<T>[]\n columns: TableColumn<C>[]\n overflowCells?: boolean\n onRowClick?: (item: T) => void\n rowItemsAlign?: 'center' | 'stretch'\n emptyMessage?: string\n loading?: boolean\n }>(),\n { rowItemsAlign: 'center', emptyMessage: 'No data found' }\n)\n\nconst tableClasses = computed(() => {\n const classParts = [\n 'w-full text-foreground text-sm border border-outline-3 rounded-lg',\n 'overflow-x-auto simple-scrollbar',\n 'h-full flex flex-col'\n ]\n return classParts.join(' ')\n})\n\nconst sharedContainerClasses = computed(() => {\n const classParts = ['w-full min-w-[750px]']\n return classParts.join(' ')\n})\n\nconst resultContainerClasses = computed(() => {\n const classParts = [\n 'divide-y divide-outline-3 overflow-y-auto overflow-x-hidden simple-scrollbar',\n sharedContainerClasses.value\n ]\n\n if (props.overflowCells) {\n classParts.push('pb-32')\n }\n\n return classParts.join(' ')\n})\n\nconst buttonCount = computed(() => {\n return (props.buttons || []).length\n})\nconst paddingRightStyle = computed(() => {\n let padding = 16\n if (buttonCount.value > 0) {\n padding = 48 + (buttonCount.value - 1) * 42\n }\n return `${padding}px`\n})\n\nconst rowsWrapperClasses = computed(() => {\n const classParts = [\n 'relative grid grid-cols-12 items-center space-x-6 px-4 py-0.5 min-w-[750px] text-body-xs'\n ]\n\n if (props.onRowClick && props.items?.length) {\n classParts.push('cursor-pointer hover:bg-highlight-1')\n }\n\n switch (props.rowItemsAlign) {\n case 'center':\n classParts.push('items-center')\n break\n case 'stretch':\n classParts.push('items-stretch')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst getHeaderClasses = (\n column: C | undefined,\n colIndex: number,\n options?: Partial<{\n noPadding: boolean\n }>\n): string => {\n const columnClasses = column\n ? props.columns.find((c) => c.id === column)?.classes\n : ''\n const classParts = [columnClasses || '']\n\n if (!options?.noPadding) {\n if (colIndex === 0) {\n classParts.push('px-1')\n } else {\n classParts.push('lg:p-0 px-1')\n }\n }\n\n return classParts.join(' ')\n}\n\nconst getClasses = (\n column: C | undefined,\n colIndex: number,\n options?: Partial<{\n noPadding: boolean\n }>\n): string => {\n const classParts = [getHeaderClasses(column, colIndex, options)]\n\n if (colIndex === 0) {\n classParts.push(`bg-transparent py-2 ${column ? 'pr-5' : 'col-span-full'}`)\n } else {\n classParts.push(`my-2`)\n }\n\n return classParts.join(' ')\n}\n\nconst handleRowClick = (item: T) => {\n props.onRowClick?.(item)\n}\n\nconst headerRowClasses = computed(() => [\n 'z-10 grid grid-cols-12 items-center',\n 'space-x-6',\n 'px-4 py-3',\n 'bg-foundation-2 rounded-t-lg',\n 'font-medium text-body-2xs text-foreground-2',\n 'border-b border-outline-3',\n sharedContainerClasses.value\n])\n</script>\n","<template>\n <div ref=\"wrapper\">\n <InternalInfiniteLoading\n v-if=\"initializeLoader\"\n v-bind=\"$props.settings || {}\"\n @infinite=\"$emit('infinite', $event)\"\n >\n <template #spinner>\n <CommonLoadingBar :loading=\"true\" class=\"my-2\" />\n </template>\n <template #complete>\n <!-- No \"No more items\" message, instead a small amount of spacing -->\n <div :class=\"{ 'h-8': !hideWhenComplete }\"></div>\n </template>\n <template #error=\"{ retry }\">\n <div class=\"w-full flex flex-col items-center my-2 space-y-2 mt-4\">\n <div class=\"inline-flex items-center space-x-1\">\n <ExclamationTriangleIcon class=\"w-5 h-5 text-danger\" />\n <span class=\"text-foreground-2\">An error occurred while loading</span>\n </div>\n <FormButton v-if=\"allowRetry\" @click=\"retry\">Retry</FormButton>\n </div>\n </template>\n </InternalInfiniteLoading>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport InternalInfiniteLoading from 'v3-infinite-loading'\nimport { ExclamationTriangleIcon } from '@heroicons/vue/24/outline'\nimport type { InfiniteLoaderState } from '~~/src/helpers/global/components'\nimport type { Nullable } from '@speckle/shared'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\nimport { onMounted, ref } from 'vue'\nimport { isClient } from '@vueuse/core'\nimport FormButton from '~~/src/components/form/Button.vue'\n\ndefineEmits<{\n (e: 'infinite', $state: InfiniteLoaderState): void\n}>()\n\ndefineProps<{\n /**\n * v3-infinite-loading props, see docs or type definitions\n */\n settings?: {\n target?: string\n distance?: number\n top?: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n identifier?: any\n firstload?: boolean\n }\n /**\n * Whether to allow retry and show a retry button when loading fails\n */\n allowRetry?: boolean\n /**\n * Hide completely and prevent taking any space when not loading\n */\n hideWhenComplete?: boolean\n}>()\n\nconst wrapper = ref(null as Nullable<HTMLElement>)\nconst initializeLoader = ref(false)\n\n// This hack is necessary cause sometimes v3-infinite-loading initializes too early and doesnt trigger\nif (isClient) {\n onMounted(() => {\n const int = setInterval(() => {\n if (wrapper.value?.isConnected) {\n initializeLoader.value = true\n clearInterval(int)\n }\n }, 200)\n })\n}\n</script>\n","<template>\n <div class=\"relative group\">\n <div\n v-if=\"fancyGlow\"\n class=\"absolute -top-1 -left-1 -right-1 -bottom-1 bg-blue-300 dark:bg-blue-500 opacity-5 dark:opacity-0 rounded-md blur-sm group-hover:opacity-60 dark:group-hover:opacity-30 transition duration-500\"\n ></div>\n <Component\n :is=\"form ? 'form' : 'div'\"\n :class=\"[\n 'relative divide-outline-3 bg-foundation text-foreground flex flex-col divide-y overflow-hidden',\n computedClasses\n ]\"\n @submit=\"emit('submit', $event)\"\n >\n <div v-if=\"$slots.header\" :class=\"secondarySlotPaddingClasses\">\n <slot name=\"header\" />\n </div>\n <div :class=\"['grow', defaultSlotPaddingClasses]\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" :class=\"secondarySlotPaddingClasses\">\n <slot name=\"footer\" />\n </div>\n </Component>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst emit = defineEmits<{ (e: 'submit', val: SubmitEvent): void }>()\n\nconst props = defineProps({\n /**\n * Use a `<form/>` element as a wrapper that will emit 'submit' events out from the component when they occur\n */\n form: {\n type: Boolean,\n default: false\n },\n /**\n * Add a ring outline on hover\n */\n ring: {\n type: Boolean,\n default: false\n },\n /**\n * Add a primary-colored glow on hover\n */\n fancyGlow: {\n type: Boolean,\n default: false\n },\n customPadding: {\n type: Boolean,\n default: false\n },\n noShadow: {\n type: Boolean,\n default: false\n },\n panelClasses: {\n type: String\n }\n})\n\nconst secondarySlotPaddingClasses = computed(() =>\n props.customPadding ? '' : 'px-4 py-4 sm:px-6'\n)\nconst defaultSlotPaddingClasses = computed(() =>\n props.customPadding ? '' : 'px-4 py-4 sm:p-6'\n)\n\nconst computedClasses = computed(() => {\n const classParts: string[] = ['rounded-lg']\n\n if (!props.noShadow) classParts.push('shadow')\n if (props.ring) {\n classParts.push('ring-outline-1 hover:ring-1')\n }\n if (props.panelClasses) {\n classParts.push(props.panelClasses)\n }\n\n return classParts.join(' ')\n})\n</script>\n","<template>\n <!-- If promo content is defined, scroll the menu items. If not, scroll the whole aside -->\n <aside\n class=\"flex flex-col justify-between h-full w-full\"\n :class=\"$slots.promo ? '' : 'overflow-y-auto overflow-x-hidden simple-scrollbar'\"\n >\n <div\n class=\"flex flex-col h-full w-full\"\n :class=\"$slots.promo ? 'overflow-y-auto overflow-x-hidden simple-scrollbar' : ''\"\n >\n <slot></slot>\n </div>\n <div v-if=\"$slots.promo\" class=\"shrink-0 pt-2\">\n <slot name=\"promo\"></slot>\n </div>\n </aside>\n</template>\n","<template>\n <div\n class=\"flex flex-col gap-y-1 sm:gap-y-2 border border-outline-3 rounded-lg py-2 px-3 sm:p-4 select-none\"\n >\n <h6\n v-if=\"title\"\n class=\"text-body-xs sm:text-heading-sm font-medium text-foreground\"\n >\n {{ title }}\n </h6>\n <p v-if=\"text\" class=\"text-body-2xs sm:text-body-xs text-foreground-2 !leading-5\">\n {{ text }}\n </p>\n <FormButton\n v-if=\"buttonText\"\n size=\"sm\"\n class=\"mt-1\"\n :to=\"to\"\n :target=\"to ? '_blank' : undefined\"\n @click=\"$emit('onClick')\"\n >\n {{ buttonText }}\n </FormButton>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport FormButton from '~~/src/components/form/Button.vue'\n\ndefineEmits(['onClick'])\n\ndefineProps<{\n title?: string\n text?: string\n to?: string\n buttonText?: string\n}>()\n</script>\n","<template>\n <nav class=\"flex flex-col\">\n <slot></slot>\n </nav>\n</template>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M8 3V13M3 8H13\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n </svg>\n</template>\n","<template>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.66748 3.66687H3.00081C2.64719 3.66687 2.30805 3.80735 2.058 4.05739C1.80796 4.30744 1.66748 4.64658 1.66748 5.0002V11.0002C1.66748 11.3538 1.80796 11.693 2.058 11.943C2.30805 12.1931 2.64719 12.3335 3.00081 12.3335H9.00081C9.35443 12.3335 9.69357 12.1931 9.94362 11.943C10.1937 11.693 10.3341 11.3538 10.3341 11.0002V10.3335\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12.59 3.39007C12.8526 3.12751 13.0001 2.77139 13.0001 2.40007C13.0001 2.02875 12.8526 1.67264 12.59 1.41007C12.3274 1.14751 11.9713 1 11.6 1C11.2287 1 10.8726 1.14751 10.61 1.41007L5 7.00007V9.00007H7L12.59 3.39007Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M9.66748 2.33313L11.6675 4.33313\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n</template>\n","<template>\n <svg\n width=\"16\"\n height=\"32\"\n viewBox=\"0 0 16 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.64645 17.7498C7.84171 17.9451 8.15829 17.9451 8.35355 17.7498L11.1464 14.9569C11.4614 14.642 11.2383 14.1034 10.7929 14.1034H5.20711C4.76165 14.1034 4.53857 14.642 4.85355 14.9569L7.64645 17.7498Z\"\n fill=\"currentColor\"\n />\n </svg>\n</template>\n","<template>\n <div class=\"flex flex-col group\">\n <div\n v-if=\"title\"\n class=\"h-8 flex items-center justify-between select-none rounded-md\"\n :class=\"[collapsible && !noHover && 'hover:bg-highlight-1']\"\n >\n <component\n :is=\"collapsible ? 'button' : 'div'\"\n class=\"flex items-center w-full\"\n :class=\"[\n collapsible ? 'group rounded-md gap-x-1' : 'space-x-1 p-1 text-foreground-2',\n collapsible && !noHover ? 'py-0.5 px-2' : 'pl-2'\n ]\"\n @click=\"collapsible ? (isCollapsed = !isCollapsed) : undefined\"\n >\n <ArrowFilled\n v-if=\"collapsible\"\n :class=\"[isCollapsed ? '-rotate-90' : '', noHover ? '-ml-1' : '']\"\n class=\"text-foreground-2 shrink-0\"\n />\n <div\n v-if=\"$slots['title-icon']\"\n class=\"flex items-center justify-center\"\n :class=\"[collapsible ? 'ml-1 mr-2' : '']\"\n >\n <slot name=\"title-icon\"></slot>\n </div>\n <div class=\"flex flex-1 items-center truncate justify-between\">\n <h6\n class=\"truncate text-body-2xs pr-2\"\n :class=\"[nested ? 'text-foreground' : 'font-semibold text-foreground-2']\"\n >\n {{ title }}\n </h6>\n <CommonBadge v-if=\"tag\" rounded>\n {{ tag }}\n </CommonBadge>\n </div>\n </component>\n <button\n v-if=\"iconClick\"\n v-tippy=\"iconText ? iconText : undefined\"\n :disabled=\"iconDisabled\"\n class=\"group-hover:flex p-1 shrink-0 hover:bg-primary-muted rounded text-foreground-2\"\n :class=\"[\n noHover ? '' : 'mr-2',\n alwaysShowIcon ? 'flex' : 'hidden',\n iconDisabled ? 'opacity-50 cursor-not-allowed' : ''\n ]\"\n @click=\"iconClick\"\n >\n <Edit v-if=\"icon === 'edit'\" class=\"h-4 w-4\" />\n <ChevronRightIcon v-else-if=\"icon === 'view'\" class=\"h-4 w-4\" />\n <Plus v-else class=\"h-4 w-4\" />\n </button>\n </div>\n\n <div v-show=\"!isCollapsed\" class=\"flex flex-col\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Plus from '~~/src/components/global/icon/Plus.vue'\nimport Edit from '~~/src/components/global/icon/Edit.vue'\nimport ArrowFilled from '~~/src/components/global/icon/ArrowFilled.vue'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport { ChevronRightIcon } from '@heroicons/vue/24/outline'\n\ndefineProps<{\n tag?: string\n title?: string\n collapsible?: boolean\n collapsed?: boolean\n icon?: 'add' | 'edit' | 'view'\n iconText?: string\n iconClick?: () => void\n iconDisabled?: boolean\n noHover?: boolean\n nested?: boolean\n alwaysShowIcon?: boolean\n}>()\n\nconst isCollapsed = defineModel<boolean>('collapsed')\n</script>\n","<template>\n <div\n v-if=\"!hasChildren\"\n v-tippy=\"tooltipText\"\n :to=\"to\"\n class=\"group/item flex items-center justify-between space-x-2 shrink-0 text-body-xs text-foreground select-none rounded-md w-full py-1\"\n :class=\"[\n !disabled && 'cursor-pointer hover:bg-highlight-1',\n disabled && 'cursor-not-allowed',\n active && 'bg-highlight-3 hover:!bg-highlight-3',\n $slots.icon ? 'pl-1 pr-2' : 'pr-2 pl-7',\n extraPadding && '!pl-14'\n ]\"\n >\n <div\n class=\"flex items-center space-x-2 truncate\"\n :class=\"[disabled && 'opacity-60']\"\n >\n <div v-if=\"$slots.icon\" class=\"h-6 w-6 flex items-center justify-center\">\n <slot name=\"icon\" />\n </div>\n <span class=\"truncate\">\n {{ label }}\n </span>\n <ArrowUpRightIcon\n v-if=\"external\"\n class=\"h-2.5 w-2.5 !stroke-[3px] -ml-1 -mt-1.5 opacity-0 group-hover/item:opacity-100 shrink-0\"\n />\n </div>\n <CommonBadge\n v-if=\"tag\"\n rounded\n :color-classes=\"\n colorClasses ?? (disabled ? 'text-foreground-2 bg-primary-muted' : undefined)\n \"\n >\n {{ tag }}\n </CommonBadge>\n </div>\n <div v-else class=\"flex flex-col\">\n <button\n v-tippy=\"tooltipText\"\n class=\"flex space-x-1.5 items-center w-full rounded-md p-0.5\"\n :class=\"[\n !disabled && 'cursor-pointer text-foreground-2 hover:text-foreground',\n disabled && 'opacity-60'\n ]\"\n @click=\"toggleOpen\"\n >\n <ArrowFilled class=\"h-1 w-2 shrink-0\" :class=\"[isOpen ? '' : '-rotate-90']\" />\n\n <h6 class=\"text-heading-sm flex items-center space-x-1.5\">\n {{ label }}\n </h6>\n </button>\n <div v-show=\"isOpen\" class=\"pl-4\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, useSlots, type SetupContext } from 'vue'\nimport ArrowFilled from '~~/src/components/global/icon/ArrowFilled.vue'\nimport { ArrowUpRightIcon } from '@heroicons/vue/24/outline'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\n\nconst props = defineProps<{\n label: string\n to?: string\n tag?: string\n external?: boolean\n disabled?: boolean\n active?: boolean\n tooltipText?: string\n extraPadding?: boolean\n colorClasses?: string\n}>()\n\nconst isOpen = ref(true)\n\nconst slots: SetupContext['slots'] = useSlots()\n\nconst hasChildren = !!slots.default\n\nconst toggleOpen = () => {\n if (!props.disabled) {\n isOpen.value = !isOpen.value\n }\n}\n</script>\n","<template>\n <div :class=\"containerClasses\">\n <div :class=\"subcontainerClasses\">\n <div v-if=\"!hideIcon\">\n <Component :is=\"icon\" :class=\"iconClasses\" aria-hidden=\"true\" />\n </div>\n <div class=\"flex-1\">\n <h3 v-if=\"hasTitle\" :class=\"titleClasses\">\n <slot name=\"title\">Title</slot>\n </h3>\n <div v-if=\"hasDescription\" :class=\"descriptionClasses\">\n <slot name=\"description\">\n Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid pariatur,\n ipsum similique veniam.\n </slot>\n </div>\n </div>\n <div class=\"flex gap-x-2\">\n <FormButton\n v-for=\"(action, i) in actions || []\"\n :key=\"i\"\n color=\"outline\"\n size=\"sm\"\n :to=\"action.url\"\n :external=\"action.externalUrl || false\"\n :disabled=\"action.disabled || false\"\n @click=\"handleActionClick(action)\"\n >\n {{ action.title }}\n </FormButton>\n </div>\n <div\n v-if=\"withDismiss\"\n class=\"flex\"\n :class=\"[hasDescription ? 'items-start' : 'items-center']\"\n >\n <FormButton type=\"button\" color=\"subtle\" size=\"sm\" @click=\"$emit('dismiss')\">\n Dismiss\n </FormButton>\n </div>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {\n CheckCircleIcon,\n XCircleIcon,\n InformationCircleIcon,\n ExclamationCircleIcon\n} from '@heroicons/vue/24/outline'\nimport { noop } from '#lodash'\nimport { computed, useSlots, type SetupContext } from 'vue'\nimport FormButton from '~~/src/components/form/Button.vue'\nimport type {\n PropAnyComponent,\n AlertAction,\n AlertColor\n} from '~~/src/helpers/common/components'\n\ntype Size = 'default' | 'xs' | '2xs'\n\ndefineEmits<{ (e: 'dismiss'): void }>()\n\nconst props = withDefaults(\n defineProps<{\n color?: AlertColor\n withDismiss?: boolean\n actions?: Array<AlertAction>\n customIcon?: PropAnyComponent\n hideIcon?: boolean\n size?: Size\n }>(),\n {\n color: 'success',\n size: 'default'\n }\n)\n\nconst slots: SetupContext['slots'] = useSlots()\nconst hasDescription = computed(() => !!slots['description'])\nconst hasTitle = computed(() => !!slots['title'])\n\nconst icon = computed(() => {\n if (props.customIcon) return props.customIcon\n\n switch (props.color) {\n case 'info':\n return InformationCircleIcon\n case 'warning':\n return ExclamationCircleIcon\n case 'danger':\n return XCircleIcon\n case 'success':\n return CheckCircleIcon\n default:\n return InformationCircleIcon\n }\n})\n\nconst containerClasses = computed(() => {\n const classParts: string[] = ['rounded-lg text-foreground border']\n\n switch (props.size) {\n case '2xs':\n case 'xs':\n classParts.push('p-2')\n break\n case 'default':\n default:\n classParts.push(hasDescription.value ? 'p-3 sm:p-4' : 'p-2')\n break\n }\n\n switch (props.color) {\n case 'success':\n classParts.push('bg-success-lightest border-outline-2')\n break\n case 'info':\n classParts.push('bg-foundation-2 border-outline-3')\n break\n case 'danger':\n classParts.push('bg-danger-lightest border-outline-2')\n break\n case 'warning':\n classParts.push('bg-warning-lightest border-outline-2')\n break\n case 'neutral':\n classParts.push('bg-foundation border-outline-2')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst subcontainerClasses = computed(() => {\n const classParts: string[] = ['flex items-center w-full']\n\n switch (props.size) {\n case '2xs':\n case 'xs':\n classParts.push('gap-x-1.5')\n break\n case 'default':\n default:\n classParts.push('gap-x-3')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = []\n\n switch (props.size) {\n case '2xs':\n classParts.push('h-4 w-4')\n break\n case 'xs':\n classParts.push('h-5 w-5')\n break\n case 'default':\n default:\n classParts.push('h-6 w-6')\n break\n }\n\n switch (props.color) {\n case 'success':\n classParts.push('text-success-darker')\n break\n case 'info':\n classParts.push('text-info-darker dark:text-primary')\n break\n case 'danger':\n classParts.push('text-danger-darker')\n break\n case 'warning':\n classParts.push('text-warning-darker')\n break\n case 'neutral':\n classParts.push('text-foreground-2')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst titleClasses = computed(() => {\n const classParts: string[] = ['font-medium']\n\n switch (props.size) {\n case '2xs':\n classParts.push('text-body-2xs')\n break\n case 'default':\n default:\n classParts.push('text-body-xs')\n break\n }\n\n return classParts.join(' ')\n})\n\nconst descriptionClasses = computed(() => {\n const classParts: string[] = ['whitespace-normal']\n\n switch (props.size) {\n case '2xs':\n classParts.push('text-body-2xs pt-0.5')\n break\n case 'default':\n default:\n classParts.push('text-body-xs')\n break\n }\n\n return classParts.join(' ')\n})\n\nfunction handleActionClick(action: AlertAction) {\n if (action.onClick) {\n action.onClick()\n } else {\n noop()\n }\n}\n</script>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type MaybeAsync, buildManualPromise } from '@speckle/shared'\nimport { computedAsync } from '@vueuse/core'\nimport type { AsyncComputedOptions } from '@vueuse/core'\nimport { computed } from 'vue'\nimport type { ComputedRef } from 'vue'\n\nexport interface AsyncWritableComputedOptions<T> {\n get: (...args: any[]) => MaybeAsync<T>\n set: (value: T) => MaybeAsync<void>\n initialState: T\n readOptions?: AsyncComputedOptions\n asyncRead?: boolean\n debugging?: Partial<{\n log: {\n name: string\n writesOnly?: boolean\n readsOnly?: boolean\n logger?: (msg: string, ...args: any[]) => void\n }\n }>\n}\n\nexport type AsyncWritableComputedRef<T> = ComputedRef<T> & {\n update: AsyncWritableComputedOptions<T>['set']\n}\n\n/**\n * Allows async read/write from/to computed. Use `res.value` to read and `res.update` to write. If you only need\n * the computed to be read-only then use vueuse's `computedAsync`. If you only need async writes you can\n * disable async reads through the `asyncRead` param.\n * @param params\n */\nexport function writableAsyncComputed<T>(\n params: AsyncWritableComputedOptions<T>\n): AsyncWritableComputedRef<T> {\n const { get, initialState, readOptions, set, asyncRead = true, debugging } = params\n const logSettings = debugging?.log\n const getTrace = () => (new Error('Trace:').stack || '').substring(7)\n const logger = params.debugging?.log?.logger || console.debug\n\n const finalGet: typeof get =\n logSettings && !logSettings.writesOnly\n ? () => {\n const res = get()\n logger(`debugging: '${logSettings.name}' read`, res, getTrace())\n return res\n }\n : get\n\n const finalSet: typeof set =\n logSettings && !logSettings.readsOnly\n ? (newVal) => {\n logger(`debugging: '${logSettings.name}' written to`, newVal, getTrace())\n return set(newVal)\n }\n : set\n\n const readValue = asyncRead\n ? computedAsync(finalGet, initialState, readOptions)\n : computed(finalGet)\n\n const getter = computed(() => readValue.value) as AsyncWritableComputedRef<T>\n getter.update = finalSet\n\n return getter\n}\n\nexport { buildManualPromise }\n","<template>\n <slot />\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable, Optional } from '@speckle/shared'\nimport { getCurrentInstance, inject } from 'vue'\nimport type { ComponentInternalInstance, Ref } from 'vue'\n\n/**\n * Sort of hacky - we need to manipulate the @headlessui combobox state, but it can't be injected\n * from its parent component (Tags.vue). This being initialized inside of a slot of the combobox,\n * it has access to the context\n *\n * Also the context is inaccessible due to it being tied to a private symbol, so we need\n * to retrieve that a bit hackily too.\n */\n\n// Copied from headlessui\nenum Focus {\n /** Focus the first non-disabled item. */\n First,\n\n /** Focus the previous non-disabled item. */\n Previous,\n\n /** Focus the next non-disabled item. */\n Next,\n\n /** Focus the last non-disabled item. */\n Last,\n\n /** Focus a specific item based on the `id` of the item. */\n Specific,\n\n /** Focus no items at all. */\n Nothing\n}\n\nenum ComboboxStates {\n Open,\n Closed\n}\n\nconst instance = getCurrentInstance() as ComponentInternalInstance & {\n provides: Record<symbol | string, unknown>\n}\nconst provides = instance['provides']\nconst ctxKey = Object.getOwnPropertySymbols(provides).find(\n (s) => s.description === 'ComboboxContext'\n)\nif (!ctxKey) {\n console.error('FormTagsContextManager ctx key not found!')\n}\n\nconst state = inject(ctxKey || '__undefined') as Optional<{\n goToOption: (focus: Focus) => void\n openCombobox: () => void\n closeCombobox: () => void\n activeOptionIndex: Ref<Nullable<number>>\n selectActiveOption: () => void\n comboboxState: Ref<ComboboxStates>\n}>\n\nif (!state) {\n console.error('FormTagsContextManager ctx not found!')\n}\n\nconst goUp = () => {\n state?.goToOption(Focus.Previous)\n}\nconst goDown = () => {\n state?.goToOption(Focus.Next)\n}\nconst open = () => {\n if (!state) return\n state.openCombobox()\n}\nconst close = () => {\n state?.closeCombobox()\n}\nconst selectActive = () => {\n state?.selectActiveOption()\n}\nconst isOpen = () => state?.comboboxState.value === ComboboxStates.Open\n\ndefineExpose({ goUp, goDown, open, close, selectActive, isOpen })\n</script>\n","<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <Combobox\n v-model=\"selectedItems\"\n as=\"div\"\n multiple\n clearable\n :class=\"[wrapperClasses]\"\n >\n <FormTagsContextManager ref=\"ctxManager\">\n <label :for=\"name\" :class=\"labelClasses\">\n <span>{{ title }}</span>\n </label>\n <div\n class=\"relative flex flex-wrap items-center space-x-1 px-2 py-1\"\n :class=\"inputWrapperClasses\"\n >\n <CommonBadge\n v-for=\"tag in selectedItems\"\n :key=\"tag\"\n :icon-left=\"!disabled ? XMarkIcon : undefined\"\n clickable-icon\n size=\"lg\"\n @click-icon=\"() => removeTag(tag)\"\n >\n {{ tag }}\n </CommonBadge>\n <input\n ref=\"inputEl\"\n v-model=\"query\"\n :disabled=\"disabled\"\n class=\"bg-transparent grow shrink border-0 focus:ring-0 p-0\"\n :class=\"[coreInputClasses, sizeClasses]\"\n style=\"flex-basis: 70px; min-width: 70px\"\n :placeholder=\"!selectedItems.length ? placeholder : undefined\"\n @input=\"onQueryInput\"\n @keydown.escape=\"onQueryEscape\"\n @keydown.enter.stop.prevent=\"onQueryInput($event, true)\"\n @keydown.tab=\"onQueryInput\"\n @keydown.backspace=\"onQueryBackspace\"\n @keydown.arrow-up=\"onQueryArrowUp\"\n @keydown.arrow-down=\"onQueryArrowDown\"\n @blur=\"isAutocompleteOpen = false\"\n />\n <a\n v-if=\"shouldShowClear\"\n title=\"Clear input\"\n class=\"absolute top-2 right-0 flex items-center pr-2 cursor-pointer\"\n @click=\"clear\"\n @keydown=\"clear\"\n >\n <span class=\"text-xs sr-only\">Clear input</span>\n <XMarkIcon class=\"h-5 w-5 text-foreground\" aria-hidden=\"true\" />\n </a>\n <div\n v-if=\"errorMessage\"\n :class=\"[\n 'pointer-events-none absolute top-[10px] right-0 flex items-center',\n shouldShowClear ? 'pr-8' : 'pr-2'\n ]\"\n >\n <ExclamationCircleIcon class=\"h-4 w-4 text-danger\" aria-hidden=\"true\" />\n </div>\n <div\n v-else-if=\"showRequired\"\n class=\"pointer-events-none absolute top-[2px] text-4xl right-0 flex items-center text-danger opacity-50\"\n :class=\"shouldShowClear ? 'pr-8' : 'pr-2'\"\n >\n *\n </div>\n <div v-else-if=\"showOptional\" class=\"text-body-2xs font-normal\">(optional)</div>\n </div>\n <TransitionRoot\n leave=\"transition ease-in duration-100\"\n leave-from=\"opacity-100\"\n leave-to=\"opacity-0\"\n class=\"relative px-0.5\"\n >\n <ComboboxOptions\n class=\"absolute top-1 max-h-60 w-full overflow-auto simple-scrollbar rounded-md bg-foundation py-1 shadow label label--light outline outline-2 outline-primary-muted focus:outline-none\"\n >\n <div\n v-if=\"isAutocompleteLoading\"\n class=\"px-1\"\n :class=\"autocompleteItems.length ? 'mb-1' : ''\"\n >\n <CommonLoadingBar :loading=\"true\" />\n </div>\n <div v-if=\"!autocompleteItems.length && !isAutocompleteLoading\">\n <div class=\"text-foreground-2 text-center\">\n Press\n <strong>Enter</strong>\n to create tag ⚡\n </div>\n </div>\n <template v-if=\"autocompleteItems.length\">\n <ComboboxOption\n v-for=\"tag in autocompleteItems\"\n :key=\"tag\"\n v-slot=\"{ selected, active }\"\n as=\"template\"\n :value=\"tag\"\n >\n <li\n class=\"relative cursor-pointer select-none py-1.5 pl-3\"\n :class=\"{\n 'text-primary': active,\n 'text-foreground': !active\n }\"\n >\n <span\n class=\"block truncate\"\n :class=\"{ 'font-medium': selected, 'font-normal': !selected }\"\n >\n {{ tag }}\n </span>\n <span\n v-if=\"selected\"\n class=\"absolute top-0 bottom-0 right-0 flex items-center pr-4\"\n :class=\"{ 'text-primary': active, 'text-foreground': !active }\"\n >\n <CheckIcon class=\"h-5 w-5\" aria-hidden=\"true\" />\n </span>\n </li>\n </ComboboxOption>\n </template>\n </ComboboxOptions>\n </TransitionRoot>\n <p\n v-if=\"helpTipId && !hideHelpTip\"\n :id=\"helpTipId\"\n class=\"mt-2\"\n :class=\"helpTipClasses\"\n >\n {{ helpTip }}\n </p>\n </FormTagsContextManager>\n </Combobox>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, toRefs, watch, onMounted } from 'vue'\nimport {\n Combobox,\n ComboboxOptions,\n ComboboxOption,\n TransitionRoot\n} from '@headlessui/vue'\nimport { CheckIcon, XMarkIcon, ExclamationCircleIcon } from '@heroicons/vue/20/solid'\nimport { debounce, uniq } from '#lodash'\nimport { useTextInputCore } from '~~/src/composables/form/textInput'\nimport type { InputColor } from '~~/src/composables/form/textInput'\nimport type { RuleExpression } from 'vee-validate'\nimport type { MaybeAsync, Nullable } from '@speckle/shared'\nimport CommonBadge from '~~/src/components/common/Badge.vue'\nimport FormTagsContextManager from '~~/src/components/form/tags/ContextManager.vue'\nimport { useFocus } from '@vueuse/core'\nimport CommonLoadingBar from '~~/src/components/common/loading/Bar.vue'\n\ntype InputSize = 'sm' | 'base' | 'lg' | 'xl'\ntype Tag = string\nconst isInputEvent = (e: Event): e is InputEvent => e.type === 'input'\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: Tag[]): void\n (e: 'change', val: { event?: Event; value: Tag[] }): void\n (e: 'clear'): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n name: string\n help?: string\n label?: string\n showLabel?: boolean\n rules?: RuleExpression<Tag[]>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n autoFocus?: boolean\n showClear?: boolean\n showRequired?: boolean\n showOptional?: boolean\n color?: InputColor\n wrapperClasses?: string\n size?: InputSize\n placeholder?: string\n disabled?: boolean\n useLabelInErrors?: boolean\n getAutocompleteItems?: (query: string) => MaybeAsync<Tag[]>\n modelValue?: Tag[]\n }>(),\n {\n size: 'base',\n color: 'page',\n useLabelInErrors: true\n }\n)\n\n// const localValue = defineModel<Tag[]>({ local: true })\nconst inputEl = ref(null as Nullable<HTMLInputElement>)\nconst { focused: isInputFocused } = useFocus(inputEl)\n\nconst ctxManager = ref(\n null as Nullable<{\n goUp: () => void\n goDown: () => void\n open: () => void\n close: () => void\n selectActive: () => void\n isOpen: () => boolean\n }>\n)\n\nconst {\n coreInputClasses,\n coreClasses,\n labelClasses,\n title,\n helpTip,\n helpTipId,\n hideHelpTip,\n helpTipClasses,\n errorMessage,\n clear,\n value\n} = useTextInputCore({\n props: toRefs(props),\n emit,\n inputEl\n // options: {\n // customClear: () => (selectedItems.value = [])\n // }\n})\n\nconst autocompleteItems = ref([] as string[])\nconst isAutocompleteLoading = ref(false)\nconst isAutocompleteOpen = ref(false)\nconst query = ref('')\n\nconst selectedItems = computed({\n get: () => value.value || [],\n set: (newVal) => {\n value.value = uniq(newVal).filter((t) => !!t.length)\n }\n})\n\nconst sizeClasses = computed((): string => {\n switch (props.size) {\n case 'sm':\n return 'h-6'\n case 'lg':\n return 'h-10'\n case 'xl':\n return 'h-14'\n case 'base':\n default:\n return 'h-8'\n }\n})\n\nconst shouldShowClear = computed(() => props.showClear && !!selectedItems.value.length)\n\nconst inputWrapperClasses = computed(() => {\n const classParts: string[] = [\n coreClasses.value,\n props.disabled\n ? 'cursor-not-allowed !bg-foundation-disabled !text-disabled-muted'\n : ''\n ]\n\n if (shouldShowClear.value && (errorMessage.value || props.showRequired)) {\n classParts.push('pr-14')\n } else if (shouldShowClear.value || errorMessage.value || props.showRequired) {\n classParts.push('pr-8')\n }\n\n if (errorMessage.value) {\n classParts.push('border-2 border-danger text-danger-darker')\n if (isInputFocused.value) {\n classParts.push('ring-1 ring-danger')\n }\n } else {\n classParts.push('border border-outline-3')\n if (isInputFocused.value) {\n classParts.push('ring-1 ring-outline-3')\n }\n }\n\n return classParts.join(' ')\n})\n\nconst removeTag = (tag: Tag) => {\n if (props.disabled) return\n\n const idx = selectedItems.value.indexOf(tag)\n if (idx !== -1) {\n const newSelected = selectedItems.value.slice()\n newSelected.splice(idx, 1)\n\n selectedItems.value = newSelected\n }\n}\n\nconst onQueryEscape = () => {\n inputEl.value?.blur()\n isAutocompleteOpen.value = false\n}\n\nconst onQueryBackspace = (e: KeyboardEvent) => {\n if (e.key !== 'Backspace') return\n if (query.value.length) return\n\n // Clear last tag\n const newTags = selectedItems.value.slice()\n newTags.pop()\n selectedItems.value = newTags\n isAutocompleteOpen.value = false\n}\n\nconst onQueryArrowUp = () => {\n if (ctxManager.value?.isOpen()) {\n ctxManager.value?.goUp()\n } else {\n ctxManager.value?.open()\n }\n}\n\nconst onQueryArrowDown = () => {\n if (ctxManager.value?.isOpen()) {\n ctxManager.value?.goDown()\n } else {\n ctxManager.value?.open()\n }\n}\n\nconst resolveAutocompleteItems = async () => {\n if (!props.getAutocompleteItems) return\n\n isAutocompleteLoading.value = true\n autocompleteItems.value = await Promise.resolve(\n props.getAutocompleteItems(query.value)\n )\n isAutocompleteLoading.value = false\n}\nconst debouncedResolve = debounce(resolveAutocompleteItems, 1000)\nconst debouncedResolveAndMarkLoading = async () => {\n isAutocompleteLoading.value = true\n await debouncedResolve()\n}\n\nconst onQueryInput = (e: Event, forceCreateFromInput?: boolean) => {\n const isAddingTag = isInputEvent(e)\n ? e.data === ' ' || e.data === ',' || e.data === ';'\n : true\n\n if (isAddingTag) {\n let selected = false\n if (\n ctxManager.value?.isOpen() &&\n autocompleteItems.value.length &&\n !forceCreateFromInput\n ) {\n // Add from opened autocomplete panel\n ctxManager.value?.selectActive()\n selected = true\n } else {\n // Add from query\n const newTag = query.value\n .trim()\n .substring(0, query.value.length - (isInputEvent(e) ? 1 : 0))\n\n const tagExists = selectedItems.value.includes(newTag)\n if (newTag.length > 0 && !tagExists) {\n selectedItems.value = [...selectedItems.value, newTag]\n selected = true\n }\n }\n\n if (selected) {\n query.value = ''\n isAutocompleteOpen.value = false\n }\n } else {\n isAutocompleteOpen.value = !!query.value.length\n }\n}\n\nwatch(isAutocompleteOpen, (newIsOpen, oldIsOpen) => {\n if (newIsOpen && !oldIsOpen) {\n if (props.getAutocompleteItems) ctxManager.value?.open()\n } else if (!newIsOpen && oldIsOpen) {\n ctxManager.value?.close()\n }\n})\n\nwatch(query, () => {\n void debouncedResolveAndMarkLoading()\n})\n\n// // syncing value w/ vee-validate internal state\n// watch(\n// selectedItems,\n// (newVal) => {\n// value.value = newVal.slice()\n// },\n// { deep: true, immediate: true }\n// )\n\nonMounted(() => {\n void resolveAutocompleteItems()\n})\n\ndefineExpose({ resolveAutocompleteItems })\n</script>\n","import { computed } from 'vue'\nimport type { ToRefs } from 'vue'\n\nexport type AvatarUser = {\n name: string\n avatar?: string | null\n}\n\nexport type AvatarUserWithId = AvatarUser & { id: string }\n\nexport type UserAvatarSize =\n | '2xs'\n | 'xs'\n | 'sm'\n | 'base'\n | 'lg'\n | 'xl'\n | 'xxl'\n | '3xl'\n | 'editable'\n\nexport function useAvatarSizeClasses(params: {\n props: ToRefs<{\n size?: UserAvatarSize\n }>\n}) {\n const { props } = params\n\n const heightClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n return 'h-4'\n case 'xs':\n return 'h-5'\n case 'sm':\n return 'h-6'\n case 'lg':\n return 'h-10'\n case 'xl':\n return 'h-14'\n case 'xxl':\n return 'h-24'\n case '3xl':\n return 'h-32'\n case 'editable':\n return 'h-60'\n case 'base':\n default:\n return 'h-8'\n }\n })\n\n const widthClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n return 'w-4'\n case 'xs':\n return 'w-5'\n case 'sm':\n return 'w-6'\n case 'lg':\n return 'w-10'\n case 'xl':\n return 'w-14'\n case 'xxl':\n return 'w-24'\n case '3xl':\n return 'w-32'\n case 'editable':\n return 'w-60'\n case 'base':\n default:\n return 'w-8'\n }\n })\n\n const textClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n case 'xs':\n return 'text-tiny'\n case 'sm':\n return 'text-xs'\n case 'lg':\n return 'text-md'\n case 'xl':\n return 'text-2xl'\n case 'xxl':\n return 'text-2xl'\n case '3xl':\n return 'text-3xl'\n case 'editable':\n return 'h1'\n case 'base':\n default:\n return 'text-body-2xs'\n }\n })\n\n const iconClasses = computed(() => {\n const size = props.size?.value\n switch (size) {\n case '2xs':\n case 'xs':\n return 'w-3 h-3'\n case 'sm':\n return 'w-3 h-3'\n case 'lg':\n return 'w-5 h-5'\n case 'xl':\n return 'w-8 h-8'\n case 'xxl':\n return 'w-10 h-10'\n case 'editable':\n return 'w-20 h-20'\n case 'base':\n default:\n return 'w-4 h-4'\n }\n })\n\n const sizeClasses = computed(\n () => `${widthClasses.value} ${heightClasses.value} ${textClasses.value}`\n )\n\n return { heightClasses, widthClasses, sizeClasses, iconClasses }\n}\n","<template>\n <div\n :class=\"[\n 'text-foreground-on-primary flex shrink-0 items-center justify-center overflow-hidden uppercase transition',\n rounded ? 'rounded-full' : 'rounded-md',\n sizeClasses,\n bgClasses,\n borderClasses,\n hoverClasses,\n activeClasses\n ]\"\n >\n <slot>\n <div\n v-if=\"user?.avatar\"\n v-tippy=\"!hideTooltip ? props.user?.name : undefined\"\n class=\"h-full w-full bg-cover bg-center bg-no-repeat\"\n :style=\"{ backgroundImage: `url('${user.avatar}')` }\"\n />\n <div\n v-else-if=\"initials\"\n v-tippy=\"!hideTooltip ? props.user?.name : undefined\"\n :class=\"textClasses\"\n class=\"flex h-full w-full select-none items-center justify-center\"\n >\n {{ initials }}\n </div>\n <div v-else><UserCircleIcon :class=\"iconClasses\" /></div>\n </slot>\n <slot name=\"absolute-anchor\" />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { UserCircleIcon } from '@heroicons/vue/24/solid'\nimport type { MaybeNullOrUndefined } from '@speckle/shared'\nimport { computed, toRefs } from 'vue'\nimport { useAvatarSizeClasses } from '~~/src/composables/user/avatar'\nimport type { AvatarUser, UserAvatarSize } from '~~/src/composables/user/avatar'\n\nconst props = withDefaults(\n defineProps<{\n user?: MaybeNullOrUndefined<AvatarUser>\n size?: UserAvatarSize\n hoverEffect?: boolean\n active?: boolean\n noBorder?: boolean\n noBg?: boolean\n hideTooltip?: boolean\n rounded?: boolean\n lightStyle?: boolean\n }>(),\n {\n size: 'base',\n hoverEffect: false,\n user: null,\n rounded: true,\n lightStyle: false\n }\n)\n\nconst { sizeClasses, iconClasses } = useAvatarSizeClasses({ props: toRefs(props) })\n\nconst initials = computed(() => {\n if (!props.user?.name?.length) return\n const parts = props.user.name.split(' ')\n const firstLetter = parts[0]?.[0] || ''\n const secondLetter = parts[1]?.[0] || ''\n\n if (props.size === 'sm' || props.size === 'xs') return firstLetter\n return firstLetter + secondLetter\n})\n\nconst borderClasses = computed(() => {\n if (props.noBorder) return ''\n if (props.lightStyle) return 'border border-outline-2'\n return 'border border-foundation'\n})\n\nconst bgClasses = computed(() => {\n if (props.noBg) return ''\n if (props.lightStyle) return 'bg-foundation-2'\n return 'bg-info-darker'\n})\n\nconst hoverClasses = computed(() => {\n if (props.hoverEffect)\n return 'hover:border-primary focus:border-primary active:scale-95'\n return ''\n})\n\nconst activeClasses = computed(() => {\n if (props.active) return 'border-primary'\n return ''\n})\n\nconst textClasses = computed(() => {\n if (props.lightStyle) return 'text-foreground-3'\n return ''\n})\n</script>\n","<template>\n <div ref=\"elementToWatchForChanges\" :class=\"`flex ${overlap ? '-space-x-2' : ''}`\">\n <div\n ref=\"itemContainer\"\n :class=\"`flex flex-wrap overflow-hidden ${\n overlap ? '-space-x-2 ' : ''\n } ${heightClasses}`\"\n >\n <UserAvatar\n v-for=\"(user, i) in visibleUsers\"\n :key=\"user.id || i\"\n :user=\"user\"\n :size=\"size\"\n :hide-tooltip=\"hideTooltips\"\n />\n </div>\n <UserAvatar\n v-if=\"totalHiddenCount\"\n :size=\"size\"\n class=\"select-none\"\n :class=\"{ 'cursor-pointer': !!onHiddenCountClick }\"\n @click=\"onHiddenCountClick && onHiddenCountClick()\"\n >\n +{{ totalHiddenCount }}\n </UserAvatar>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable } from '@speckle/shared'\nimport { computed, ref, toRefs } from 'vue'\nimport UserAvatar from '~~/src/components/user/Avatar.vue'\nimport { useWrappingContainerHiddenCount } from '~~/src/composables/layout/resize'\nimport { useAvatarSizeClasses } from '~~/src/composables/user/avatar'\nimport type { UserAvatarSize, AvatarUserWithId } from '~~/src/composables/user/avatar'\n\nconst props = withDefaults(\n defineProps<{\n users: AvatarUserWithId[]\n overlap?: boolean\n size?: UserAvatarSize\n maxCount?: number\n hideTooltips?: boolean\n maxAvatars?: number\n onHiddenCountClick?: () => void\n }>(),\n {\n users: () => [],\n overlap: true,\n size: 'base',\n maxCount: undefined,\n hideTooltips: false,\n maxAvatars: undefined,\n onHiddenCountClick: undefined\n }\n)\n\nconst elementToWatchForChanges = ref(null as Nullable<HTMLElement>)\nconst itemContainer = ref(null as Nullable<HTMLElement>)\n\nconst { hiddenItemCount } = useWrappingContainerHiddenCount({\n elementToWatchForChanges,\n itemContainer,\n trackResize: true,\n trackMutations: true\n})\n\nconst { heightClasses } = useAvatarSizeClasses({ props: toRefs(props) })\n\nconst maxCountHiddenItemCount = computed(() => {\n if (!props.maxCount) return 0\n return Math.max(props.users.length - props.maxCount, 0)\n})\n\nconst visibleUsers = computed(() => {\n const result = props.users\n const limit = Math.min(props.maxCount ?? Infinity, props.maxAvatars ?? Infinity)\n return result.slice(0, limit)\n})\n\nconst maxAvatarsHiddenCount = computed(() => {\n if (!props.maxAvatars) return 0\n return Math.max(props.users.length - props.maxAvatars, 0)\n})\n\nconst totalHiddenCount = computed(\n () =>\n hiddenItemCount.value + maxCountHiddenItemCount.value + maxAvatarsHiddenCount.value\n)\n</script>\n","<template>\n <svg\n class=\"spinner\"\n :class=\"iconClasses\"\n width=\"32px\"\n height=\"40px\"\n viewBox=\"0 0 66 66\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n class=\"path\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n cx=\"33\"\n cy=\"33\"\n r=\"30\"\n ></circle>\n </svg>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype Size = 'base' | 'sm' | 'lg'\n\nconst props = withDefaults(defineProps<{ loading?: boolean; size?: Size }>(), {\n size: 'base',\n loading: true\n})\n\nconst iconClasses = computed(() => {\n const classParts: string[] = ['']\n classParts.push(props.loading ? 'opacity-100' : 'opacity-0')\n\n switch (props.size) {\n case 'base':\n classParts.push('h-5 w-5')\n break\n case 'sm':\n classParts.push('h-4 w-4')\n break\n case 'lg':\n classParts.push('h-8 w-8')\n break\n }\n\n return classParts.join(' ')\n})\n</script>\n\n<style scoped>\n@keyframes rotator {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n}\n\n@keyframes dash {\n 0% {\n stroke-dashoffset: 187;\n }\n 50% {\n stroke-dashoffset: 46.75;\n transform: rotate(135deg);\n }\n 100% {\n stroke-dashoffset: 187;\n transform: rotate(450deg);\n }\n}\n\n.spinner {\n animation: rotator 1.4s linear infinite;\n}\n\n.path {\n stroke-dasharray: 187;\n stroke-dashoffset: 0;\n transform-origin: center;\n animation: dash 1.4s ease-in-out infinite;\n}\n</style>\n","<template>\n <div class=\"flex flex-col items-center space-y-2\">\n <LazyUserAvatarEditor\n v-if=\"editMode\"\n :user=\"modelAsUser\"\n :disabled=\"disabled\"\n :size=\"size\"\n :rounded=\"rounded\"\n @cancel=\"editMode = false\"\n @save=\"onSave\"\n />\n <div v-else class=\"relative group\">\n <img\n v-if=\"!modelAsUser.avatar && defaultImg\"\n :src=\"defaultImg\"\n :alt=\"modelAsUser.name\"\n :class=\"sizeClasses\"\n />\n <UserAvatar\n v-else\n hide-tooltip\n :user=\"modelAsUser\"\n :size=\"size\"\n :light-style=\"lightStyle\"\n :rounded=\"rounded\"\n />\n <div\n class=\"opacity-0 transition-all absolute group-hover:opacity-100 top-0 right-0 left-0 bottom-0 flex items-end justify-center bottom-4\"\n >\n <FormButton\n size=\"sm\"\n :disabled=\"disabled\"\n color=\"outline\"\n @click=\"editMode = true\"\n >\n Change\n </FormButton>\n </div>\n </div>\n <div v-if=\"errorMessage\" class=\"w-full text-center text-danger text-sm\">\n {{ errorMessage }}\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { MaybeNullOrUndefined, Nullable } from '@speckle/shared'\nimport { computed, defineAsyncComponent, toRefs } from 'vue'\nimport FormButton from '~~/src/components/form/Button.vue'\nimport UserAvatar from '~~/src/components/user/Avatar.vue'\nimport type { AvatarUser, UserAvatarSize } from '~~/src/composables/user/avatar'\nimport CommonLoadingIcon from '~~/src/components/common/loading/Icon.vue'\nimport { useField } from 'vee-validate'\nimport type { RuleExpression } from 'vee-validate'\nimport { useAvatarSizeClasses } from '~~/src/composables/user/avatar'\n\ntype ModelType = MaybeNullOrUndefined<string>\n\nconst LazyUserAvatarEditor = defineAsyncComponent({\n loader: () => import('~~/src/components/user/AvatarEditor.vue'),\n loadingComponent: CommonLoadingIcon,\n delay: 100\n})\n\nconst emit = defineEmits<{\n (e: 'save', newUrl: ModelType): void\n (e: 'update:modelValue', value: ModelType): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: ModelType\n /**\n * Placeholder name that will be used to generate and show initials if no avatar is present\n */\n placeholder: string\n /**\n * Name of the field. Used for validation & form submits\n */\n name: string\n rules?: RuleExpression<ModelType>\n validateOnMount?: boolean\n validateOnValueUpdate?: boolean\n disabled?: boolean\n size?: UserAvatarSize\n defaultImg?: string\n rounded?: boolean\n lightStyle?: boolean\n }>(),\n {\n rounded: true,\n lightStyle: false\n }\n)\n\nconst { value, errorMessage } = useField<ModelType>(props.name, props.rules, {\n validateOnMount: props.validateOnMount,\n validateOnValueUpdate: props.validateOnValueUpdate,\n initialValue: props.modelValue || undefined\n})\nconst { sizeClasses } = useAvatarSizeClasses({ props: toRefs(props) })\n\nconst editMode = defineModel<boolean>('editMode')\n\nconst modelAsUser = computed(\n (): AvatarUser => ({\n avatar: value.value,\n name: props.placeholder\n })\n)\n\nconst onSave = (newUrl: Nullable<string>) => {\n value.value = newUrl\n emit('save', newUrl)\n}\n\nconst open = () => (editMode.value = true)\nconst close = () => (editMode.value = false)\n\ndefineExpose({ open, close })\n</script>\n","/**\n * Base ObjectLoader error\n */\nexport abstract class BaseError extends Error {\n /**\n * Default message if none is passed\n */\n static defaultMessage = 'Unexpected error occurred'\n\n constructor(message?: string, options?: ErrorOptions) {\n message ||= new.target.defaultMessage\n super(message, options)\n }\n}\n\n/**\n * Throw these in execution branches that should never occur unless if there's a bug\n */\nexport class LogicError extends BaseError {\n static defaultMessage = 'An unexpected logic error occurred!'\n}\n\nexport class UninitializedResourceAccessError extends BaseError {\n static defaultMessage = 'Attempting to access an uninitialized resource'\n}\n\nexport class ComposableInvokedOutOfScopeError extends BaseError {\n static defaultMessage =\n 'getCurrentInstance() returned null. Method must be called at the top of a setup function'\n}\n\n/**\n * Throw this when something that's only supported during CSR is invoked during SSR or vice versa\n */\nexport class UnsupportedEnvironmentError extends BaseError {\n static defaultMessage =\n 'Operation not supported in current (server or client) environment'\n}\n","import { difference, intersection } from '#lodash'\nimport { md5 } from '@speckle/shared'\nimport type { Nullable } from '@speckle/shared'\nimport { BaseError } from '~~/src/helpers/common/error'\n\nexport type FileTypeSpecifier = UniqueFileTypeSpecifier | `.${string}`\n\nexport enum UniqueFileTypeSpecifier {\n AnyAudio = 'audio/*',\n AnyVideo = 'video/*',\n AnyImage = 'image/*'\n}\n\n/**\n * Validate if file has the allowed type. While we could also test for MIME types\n * not in UniqueFileTypeSpecifier, this function is meant to be equivalent to the\n * 'accept' attribute, which only allows for extensions or UniqueFileTypeSpecifier\n * values.\n * @param file\n * @param allowedTypes The file must have one of these types\n * @returns True if valid, Error object if not\n */\nexport function validateFileType(\n file: File,\n allowedTypes: FileTypeSpecifier[]\n): true | Error {\n // Check one of the unique file type specifiers first\n const allowedUniqueTypes = intersection(\n Object.values(UniqueFileTypeSpecifier),\n allowedTypes\n )\n for (const allowedUniqueType of allowedUniqueTypes) {\n switch (allowedUniqueType) {\n case UniqueFileTypeSpecifier.AnyAudio:\n if (file.type.startsWith('audio')) return true\n break\n case UniqueFileTypeSpecifier.AnyImage:\n if (file.type.startsWith('image')) return true\n break\n case UniqueFileTypeSpecifier.AnyVideo:\n if (file.type.startsWith('video')) return true\n break\n }\n }\n\n // Check file extensions\n const allowedExtensions = difference(allowedTypes, allowedUniqueTypes)\n const fileExt = resolveFileExtension(file.name)\n if (!fileExt) return new MissingFileExtensionError()\n\n for (const allowedExtension of allowedExtensions) {\n if (allowedExtension.toLowerCase() === fileExt.toLowerCase()) return true\n }\n\n return new ForbiddenFileTypeError()\n}\n\n/**\n * Resolve file extension (with leading dot)\n */\nexport function resolveFileExtension(fileName: string): Nullable<FileTypeSpecifier> {\n const fileNameParts = fileName.split('.')\n if (fileNameParts.length < 2) return null\n\n const ext = fileNameParts.pop() || null\n return ext ? `.${ext}` : null\n}\n\n/**\n * Check if string is a FileTypeSpecifier\n */\nexport function isFileTypeSpecifier(type: string): type is FileTypeSpecifier {\n return (\n type.startsWith('.') ||\n Object.values(UniqueFileTypeSpecifier as Record<string, string>).includes(type)\n )\n}\n\n/**\n * Create a human readable file size string from the numeric size in bytes\n */\nexport function prettyFileSize(sizeInBytes: number): string {\n const removeTrailingZeroes = (fileSize: number) =>\n parseFloat(fileSize.toFixed(2)).toString()\n\n if (sizeInBytes < 1024) {\n return `${sizeInBytes}bytes`\n }\n\n const kbSize = sizeInBytes / 1024\n if (kbSize < 1024) {\n return `${removeTrailingZeroes(kbSize)}KB`\n }\n\n const mbSize = kbSize / 1024\n if (mbSize < 1024) {\n return `${removeTrailingZeroes(mbSize)}MB`\n }\n\n const gbSize = mbSize / 1024\n return `${removeTrailingZeroes(gbSize)}GB`\n}\n\n/**\n * Generate an ID that uniquely identifies a specific file. The same file\n * will always have the same ID.\n */\nexport function generateFileId(file: File): string {\n const importantData = {\n name: file.name,\n lastModified: file.lastModified,\n size: file.size,\n type: file.type\n }\n\n return md5(JSON.stringify(importantData))\n}\n\nexport class MissingFileExtensionError extends BaseError {\n static defaultMessage = 'The selected file has a missing extension'\n}\n\nexport class ForbiddenFileTypeError extends BaseError {\n static defaultMessage = 'The selected file type is forbidden'\n}\n","import type { MaybeRef } from '@vueuse/core'\nimport type { MaybeNullOrUndefined, Nullable, Optional } from '@speckle/shared'\nimport {\n generateFileId,\n isFileTypeSpecifier,\n prettyFileSize,\n validateFileType\n} from '~~/src/helpers/form/file'\nimport type { FileTypeSpecifier } from '~~/src/helpers/form/file'\nimport { computed, unref } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport { BaseError } from '~~/src/lib'\nimport type { BlobUploadStatus } from '@speckle/shared/blobs'\n\n/**\n * A file, as emitted out from FileUploadZone\n */\nexport interface UploadableFileItem {\n file: File\n error: Nullable<Error>\n /**\n * You can use this ID to check for File equality\n */\n id: string\n}\n\nexport type BlobPostResultItem = {\n blobId?: string\n fileName?: string\n fileSize?: number\n formKey: string\n /**\n * Success = 1, Failure = 2\n */\n uploadStatus: BlobUploadStatus\n uploadError: string\n}\n\nexport interface UploadFileItem extends UploadableFileItem {\n /**\n * Progress between 0 and 100\n */\n progress: number\n\n /**\n * When upload has finished this contains a BlobPostResultItem\n */\n result: Optional<BlobPostResultItem>\n\n /**\n * When a blob gets assigned to a resource, it should count as in use, and this will\n * prevent it from being deleted as junk\n */\n inUse?: boolean\n}\n\nfunction buildFileTypeSpecifiers(\n accept: Optional<string>\n): Optional<FileTypeSpecifier[]> {\n if (!accept) return undefined\n const specifiers = accept\n .split(',')\n .map((s) => (isFileTypeSpecifier(s) ? s : null))\n .filter((s): s is FileTypeSpecifier => s !== null)\n\n return specifiers.length ? specifiers : undefined\n}\n\nexport function usePrepareUploadableFiles(params: {\n disabled?: MaybeRef<Optional<boolean>>\n accept?: MaybeRef<Optional<string>>\n multiple?: MaybeRef<Optional<boolean>>\n countLimit?: MaybeRef<Optional<number>>\n sizeLimit: MaybeRef<number>\n}) {\n const { disabled, accept, multiple, sizeLimit, countLimit } = params\n\n const fileTypeSpecifiers = computed(() => buildFileTypeSpecifiers(unref(accept)))\n\n const handleFiles = (files: File[]): UploadableFileItem[] => {\n const results: UploadableFileItem[] = []\n const allowedTypes = fileTypeSpecifiers.value\n\n for (const file of files) {\n const id = generateFileId(file)\n const finalCountLimit = !unref(multiple) ? 1 : unref(countLimit)\n\n // skip file, if it's selected twice somehow\n if (results.find((r) => r.id === id)) continue\n\n // Only allow a single file if !multiple\n if (finalCountLimit && results.length >= finalCountLimit) {\n break\n }\n\n if (allowedTypes) {\n const validationResult = validateFileType(file, allowedTypes)\n if (validationResult instanceof Error) {\n results.push({\n file,\n id,\n error: validationResult\n })\n continue\n }\n }\n\n if (file.size > unref(sizeLimit)) {\n results.push({\n file,\n id,\n error: new FileTooLargeError(\n `The selected file's size (${prettyFileSize(\n file.size\n )}) is too big (over ${prettyFileSize(unref(sizeLimit))})`\n )\n })\n continue\n }\n\n results.push({ file, id, error: null })\n }\n\n return results\n }\n\n return {\n /**\n * Validate incoming files and build UploadableFileItem structs out of them\n */\n buildUploadableFiles: (files: File[]) => {\n if (unref(disabled || false)) return\n return handleFiles(files)\n }\n }\n}\n\nexport class FileTooLargeError extends BaseError {\n static defaultMessage = \"The selected file's size is too large\"\n}\n\nexport function useFileUploadProgressCore(params: {\n item: MaybeRef<MaybeNullOrUndefined<UploadFileItem>>\n}) {\n const errorMessage = computed(() => {\n const item = unref(params.item)\n if (!item) return null\n\n const itemError = item.error\n if (itemError) return itemError.message\n\n const uploadError = item.result?.uploadError\n if (uploadError) return uploadError\n\n return null\n })\n\n const progressBarColorClass = computed(() => {\n const item = unref(params.item)\n if (errorMessage.value) return 'bg-danger'\n if (item && item.progress >= 100) return 'bg-success'\n return 'bg-primary'\n })\n\n const progressBarClasses = computed(() => {\n return ['h-1', progressBarColorClass.value].join(' ')\n })\n\n const progressBarStyle = computed((): CSSProperties => {\n const item = unref(params.item)\n return {\n width: `${item ? item.progress : 0}%`\n }\n })\n\n return { errorMessage, progressBarClasses, progressBarStyle }\n}\n","<!-- eslint-disable vuejs-accessibility/form-control-has-label -->\n<template>\n <div ref=\"fileUploadZone\" class=\"file-upload-zone\">\n <slot\n :is-dragging-files=\"isOverDropZone\"\n :open-file-picker=\"triggerPicker\"\n :activator-on=\"{ click: triggerPicker }\"\n />\n <input\n ref=\"fileInput\"\n type=\"file\"\n class=\"hidden\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n @click.stop\n @change=\"onInputChange\"\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport type { Nullable } from '@speckle/shared'\nimport { useDropZone } from '@vueuse/core'\nimport { computed, ref } from 'vue'\nimport { usePrepareUploadableFiles } from '~~/src/composables/form/fileUpload'\nimport type { UploadableFileItem } from '~~/src/composables/form/fileUpload'\n\nconst emit = defineEmits<{\n (e: 'files-selected', v: { files: UploadableFileItem[] }): void\n}>()\n\nconst props = withDefaults(\n defineProps<{\n /**\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept\n */\n accept?: string\n /**\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/multiple\n */\n multiple?: boolean\n /**\n * Max file size in bytes\n */\n sizeLimit?: number\n /**\n * Max file count if 'multiple' is set\n */\n countLimit?: number\n disabled?: boolean\n }>(),\n {\n sizeLimit: 1024 * 1024 * 100 // 100mb\n }\n)\n\nconst fileUploadZone = ref(null as Nullable<HTMLDivElement>)\nconst fileInput = ref(null as Nullable<HTMLInputElement>)\n\nconst { buildUploadableFiles } = usePrepareUploadableFiles({\n sizeLimit: computed(() => props.sizeLimit),\n countLimit: computed(() => props.countLimit),\n accept: computed(() => props.accept),\n multiple: computed(() => props.multiple),\n disabled: computed(() => props.disabled)\n})\nconst handleIncomingFiles = (files: File[]) => {\n const fileItems = buildUploadableFiles(files)\n if (!fileItems?.length) return\n emit('files-selected', { files: fileItems })\n}\n\nconst { isOverDropZone } = useDropZone(fileUploadZone, (files) => {\n if (!files?.length) return\n handleIncomingFiles(files)\n})\n\nconst onInputChange = () => {\n const input = fileInput.value\n if (!input) return\n\n const files = [...(input.files || [])]\n input.value = '' // Resetting value\n\n if (!files.length) return\n handleIncomingFiles(files)\n}\n\nconst triggerPicker = () => {\n fileInput.value?.click()\n}\n\ndefineExpose({\n triggerPicker\n})\n</script>\n","import type { Optional } from '@speckle/shared'\nimport type { Directive } from 'vue'\n\nconst keyboardClickableKeypressHandler = (e: KeyboardEvent) => {\n if (e.code !== 'Enter') return\n ;(e.target as Optional<HTMLElement>)?.click()\n}\n\n/**\n * Makes it possible to navigate to and click on the element using the keyboard\n */\nexport const vKeyboardClickable: Directive<HTMLElement> = {\n created(el) {\n el.setAttribute('tabindex', '0')\n el.addEventListener('keypress', keyboardClickableKeypressHandler)\n },\n unmounted(el) {\n el.removeEventListener('keypress', keyboardClickableKeypressHandler)\n }\n}\n","<template>\n <div class=\"relative w-full bg-outline-3 rounded h-1.5 overflow-hidden\">\n <div\n class=\"aboslute left-0 top-0 rounded h-1.5\"\n :class=\"colorClass\"\n :style=\"{ width: `${percentage <= 100 ? percentage : 100}%` }\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n currentValue: number\n maxValue: number\n}>()\n\nconst percentage = computed(() => (props.currentValue / props.maxValue) * 100)\nconst colorClass = computed(() => {\n if (percentage.value >= 100) {\n return 'bg-danger'\n }\n if (percentage.value >= 80) {\n return 'bg-warning'\n }\n\n return 'bg-success'\n})\n</script>\n","<template>\n <div\n class=\"bg-foundation-page shadow-sm flex flex-col gap-y-1 sm:gap-y-2 border border-outline-3 rounded-lg py-2 px-3 sm:p-4 select-none\"\n >\n <div class=\"flex justify-between items-center\">\n <h6\n v-if=\"title\"\n class=\"text-body-xs sm:text-heading-sm font-medium text-foreground\"\n >\n {{ title }}\n </h6>\n <X\n v-if=\"showCloser\"\n v-keyboard-clickable\n class=\"h-4 w-4 cursor-pointer focus:outline-none\"\n @click=\"$emit('close', $event)\"\n />\n </div>\n <p v-if=\"text\" class=\"text-body-2xs sm:text-body-xs text-foreground-2 !leading-5\">\n {{ text }}\n </p>\n <div class=\"flex justify-end\">\n <FormButton\n v-if=\"button\"\n size=\"sm\"\n class=\"mt-1\"\n :to=\"button.to\"\n :target=\"button.to ? '_blank' : undefined\"\n @click=\"$emit('click', $event)\"\n >\n {{ button.title }}\n </FormButton>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport FormButton from '~~/src/components/form/Button.vue'\nimport { X } from 'lucide-vue-next'\nimport { vKeyboardClickable } from '~~/src/directives/accessibility'\n\ndefineEmits<{\n click: [e: MouseEvent]\n close: [e: MouseEvent]\n}>()\n\ndefineProps<{\n title?: string\n text?: string\n button?: { to?: string; title: string }\n showCloser?: boolean\n}>()\n</script>\n","<template>\n <div class=\"w-full flex flex-col gap-1.5\" :style=\"props.style\">\n <div v-if=\"!hideHeader\" class=\"flex items-center justify-between\">\n <label\n :for=\"name\"\n class=\"block text-body-2xs\"\n :class=\"disabled ? 'text-foreground-2' : 'text-foreground'\"\n >\n {{ label || name }}\n </label>\n <input\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"currentValue\"\n :disabled=\"disabled\"\n :aria-label=\"`${label} current value`\"\n class=\"w-8 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-0.5 text-right\"\n @input=\"handleNumberInput\"\n @blur=\"validateAndClamp\"\n />\n </div>\n\n <input\n :id=\"name\"\n :name=\"name\"\n type=\"range\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"currentValue\"\n :disabled=\"disabled\"\n class=\"mt-1.5 w-full h-4 outline-none slider slider-gradient\"\n :class=\"{\n 'disabled:opacity-50 disabled:cursor-not-allowed': disabled,\n '!mt-0': inputBelowSlider\n }\"\n :aria-label=\"label\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"currentValue\"\n @input=\"handleInput\"\n />\n <input\n v-if=\"inputBelowSlider\"\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"currentValue\"\n :disabled=\"disabled\"\n :aria-label=\"`${label} current value`\"\n class=\"w-16 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-1\"\n @input=\"handleNumberInput\"\n @blur=\"validateAndClamp\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = defineProps<{\n min: number\n max: number\n step: number\n name: string\n label: string\n disabled?: boolean\n hideHeader?: boolean\n inputBelowSlider?: boolean\n style?: Record<string, string | number>\n}>()\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst currentValue = defineModel({\n type: Number,\n default: 0\n})\n\nconst clampValue = (value: number): number => {\n return Math.max(props.min, Math.min(props.max, value))\n}\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = Number(target.value)\n const clampedValue = clampValue(value)\n currentValue.value = clampedValue\n emit('update:modelValue', clampedValue)\n}\n\nconst handleNumberInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = Number(target.value)\n // Don't clamp during typing, only set the value\n currentValue.value = value\n emit('update:modelValue', value)\n}\n\nconst validateAndClamp = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = Number(target.value)\n const clampedValue = clampValue(value)\n\n if (value !== clampedValue) {\n target.value = clampedValue.toString()\n }\n\n currentValue.value = clampedValue\n emit('update:modelValue', clampedValue)\n}\n</script>\n\n<style lang=\"postcss\" scoped>\ninput[type='number']::-webkit-outer-spin-button,\ninput[type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\ninput[type='number'] {\n -moz-appearance: textfield;\n appearance: textfield;\n}\n\n.slider::-webkit-slider-runnable-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider::-moz-range-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider::-webkit-slider-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider::-moz-range-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n}\n\n/* Gradient styling for slider inputs when gradient custom properties are set */\n.slider-gradient::-webkit-slider-runnable-track {\n background: linear-gradient(\n to right,\n var(--gradient-from, var(--highlight-1)),\n var(--gradient-to, var(--highlight-1))\n ) !important;\n}\n</style>\n","<template>\n <div>\n <div class=\"w-full h-5 max-w-96\" :style=\"props.style\">\n <div class=\"relative\">\n <!-- Min range input -->\n <input\n :id=\"`${name}-min`\"\n :name=\"`${name}-min`\"\n type=\"range\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue.min\"\n :disabled=\"disabled\"\n class=\"absolute w-full h-4 outline-none slider slider-min\"\n style=\"-webkit-appearance: none; appearance: none; pointer-events: none\"\n :class=\"{ 'disabled:opacity-50 disabled:cursor-not-allowed': disabled }\"\n :aria-label=\"`${name} minimum`\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue.min\"\n @input=\"handleMinInput\"\n />\n\n <!-- Max range input -->\n <input\n :id=\"`${name}-max`\"\n :name=\"`${name}-max`\"\n type=\"range\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue.max\"\n :disabled=\"disabled\"\n class=\"absolute w-full h-4 outline-none slider slider-max px-0.5\"\n style=\"-webkit-appearance: none; appearance: none; pointer-events: none\"\n :class=\"{ 'disabled:opacity-50 disabled:cursor-not-allowed': disabled }\"\n :aria-label=\"`${name} maximum`\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue.max\"\n @input=\"handleMaxInput\"\n />\n\n <!-- Visual track highlight between handles -->\n <div\n class=\"absolute top-0.5 h-3 w-full pointer-events-none z-0 overflow-hidden\"\n style=\"background: transparent\"\n >\n <div\n class=\"absolute inset-0 bg-gray-300/60 dark:bg-gray-200/40\"\n :style=\"{\n left: trackLeft,\n right: trackRight\n }\"\n />\n </div>\n </div>\n </div>\n <div v-if=\"showFields\" class=\"flex justify-between gap-2 mt-0.5\">\n <input\n v-model=\"minValueString\"\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :disabled=\"disabled\"\n :aria-label=\"`${name}-min`\"\n placeholder=\"Min\"\n class=\"mt-0 w-16 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-1\"\n />\n\n <input\n v-model=\"maxValueString\"\n type=\"number\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :disabled=\"disabled\"\n :aria-label=\"`${name}-max`\"\n placeholder=\"Max\"\n class=\"mt-0 w-16 text-body-2xs text-foreground-2 bg-transparent border-0 focus:outline-none hover:ring-1 hover:ring-outline-2 focus:ring-1 focus:ring-outline-4 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:ring-0 rounded !p-1 text-right\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n min: number\n max: number\n step: number\n name: string\n disabled?: boolean\n showFields?: boolean\n style?: Record<string, string | number>\n}>()\n\nconst modelValue = defineModel<{ min: number; max: number }>({\n default: () => ({ min: 0, max: 100 })\n})\n\nconst clampValue = (value: number): number => {\n return Math.max(props.min, Math.min(props.max, value))\n}\n\n// String versions for FormTextInput compatibility\nconst minValueString = computed({\n get: () => modelValue.value.min.toString(),\n set: (value: string) => {\n const numValue = Number(value)\n if (!isNaN(numValue)) {\n const clampedValue = clampValue(numValue)\n const finalValue = Math.min(clampedValue, modelValue.value.max)\n modelValue.value = { ...modelValue.value, min: finalValue }\n }\n }\n})\n\nconst maxValueString = computed({\n get: () => modelValue.value.max.toString(),\n set: (value: string) => {\n const numValue = Number(value)\n if (!isNaN(numValue)) {\n const clampedValue = clampValue(numValue)\n const finalValue = Math.max(clampedValue, modelValue.value.min)\n modelValue.value = { ...modelValue.value, max: finalValue }\n }\n }\n})\n\nconst minPercentage = computed(() => {\n const basePercentage =\n ((modelValue.value.min - props.min) / (props.max - props.min)) * 100\n const thumbOffset = 0.5\n return Math.max(0, basePercentage - thumbOffset)\n})\n\nconst maxPercentage = computed(() => {\n const basePercentage =\n ((modelValue.value.max - props.min) / (props.max - props.min)) * 100\n const thumbOffset = 0.5\n return Math.min(100, basePercentage + thumbOffset)\n})\n\nconst trackLeft = computed(() => {\n const percentage = minPercentage.value\n if (percentage < 25) return `${percentage + 2.5}%`\n if (percentage > 75) return `${percentage - 2.5}%`\n return `${percentage}%`\n})\n\nconst trackRight = computed(() => {\n const percentage = 100 - maxPercentage.value\n if (percentage < 25) return `${percentage + 2.5}%`\n if (percentage > 75) return `${percentage - 2.5}%`\n return `${percentage}%`\n})\n\nconst handleMinInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = clampValue(Number(target.value))\n\n modelValue.value = {\n ...modelValue.value,\n min: Math.min(value, modelValue.value.max)\n }\n}\n\nconst handleMaxInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n const value = clampValue(Number(target.value))\n\n modelValue.value = {\n ...modelValue.value,\n max: Math.max(value, modelValue.value.min)\n }\n}\n</script>\n\n<style lang=\"postcss\" scoped>\ninput[type='number']::-webkit-outer-spin-button,\ninput[type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\ninput[type='number'] {\n -moz-appearance: textfield;\n appearance: textfield;\n}\n\n/* Show track for min slider */\n.slider-min::-webkit-slider-runnable-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n.slider-min::-moz-range-track {\n @apply h-4 rounded-full outline-outline-2 bg-highlight-1 px-0.5;\n box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.04);\n outline-width: 1px;\n outline-style: solid;\n}\n\n/* Hide track for max slider */\n.slider-max::-webkit-slider-runnable-track {\n background: transparent;\n border: none;\n outline: none;\n height: 16px;\n border-radius: 9999px;\n}\n\n.slider-max::-moz-range-track {\n background: transparent;\n border: none;\n outline: none;\n height: 16px;\n border-radius: 9999px;\n}\n\n/* Firefox specific track hiding */\n.slider::-moz-range-progress {\n background: transparent;\n}\n\n.slider::-webkit-slider-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n z-index: 20;\n position: relative;\n pointer-events: auto;\n}\n\n.slider::-moz-range-thumb {\n @apply appearance-none h-3 w-3 mt-0.5 rounded-full bg-foreground-on-primary cursor-pointer outline-outline-5;\n outline-width: 1px;\n outline-style: solid;\n z-index: 20;\n position: relative;\n pointer-events: auto;\n}\n\n/* Gradient styling for slider inputs when gradient custom properties are set */\n.slider-min::-webkit-slider-runnable-track {\n background: linear-gradient(\n to right,\n var(--gradient-from, var(--highlight-1)),\n var(--gradient-to, var(--highlight-1))\n ) !important;\n}\n\n.slider-min::-moz-range-track {\n background: linear-gradient(\n to right,\n var(--gradient-from, var(--highlight-1)),\n var(--gradient-to, var(--highlight-1))\n ) !important;\n}\n</style>\n"],"names":["freeGlobal","freeGlobal$1","freeSelf","root","root$1","Symbol","Symbol$2","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","value","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","arrayMap","array","iteratee","index","length","isArray","isArray$1","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","isObject","type","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","INFINITY","MAX_INTEGER","toFinite","sign","toInteger","remainder","identity","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","coreJsData$1","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getValue","object","key","getNative","apply","thisArg","args","noop","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","defineProperty$1","baseSetToString","baseSetToString$1","setToString","setToString$1","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","MAX_SAFE_INTEGER","reIsUint","isIndex","eq","nativeMax","overRest","start","transform","otherArgs","baseRest","isLength","isArrayLike","isPrototype","Ctor","proto","baseTimes","n","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","isArguments$1","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","isBuffer$1","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeUtil$1","nodeIsTypedArray","isTypedArray","isTypedArray$1","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","arg","nativeKeys","nativeKeys$1","baseKeys","keys","nativeCreate","nativeCreate$1","hashClear","hashDelete","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","Hash","entries","entry","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","Map$1","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","arrayPush","values","offset","spreadableSymbol","isFlattenable","baseFlatten","depth","isStrict","baseClamp","number","lower","upper","clamp","Set","Set$1","setCacheAdd","setCacheHas","SetCache","cacheHas","cache","setToArray","set","now","now$1","FUNC_ERROR_TEXT","nativeMin","debounce","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","isArrayLikeObject","arrayIncludesWith","comparator","LARGE_ARRAY_SIZE","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","difference","difference$1","isString","baseValues","props","collection","guard","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","castArrayLikeObject","intersection","mapped","intersection$1","isBoolean","isNumber","isUndefined","throttle","createSet","createSet$1","baseUniq","seenIndex","uniq","emit","__emit","__props","NuxtLink","resolveDynamicComponent","RouterLink","linkComponent","buttonType","isDisabled","finalLeftIcon","CommonLoadingIcon","bgAndBorderClasses","classParts","colorsBgBorder","sizeClasses","paddingClasses","hasIconLeft","hasIconRight","hideText","generalClasses","baseClasses","additionalClasses","buttonClasses","iconClasses","onClick","e","_createBlock","_resolveDynamicComponent","to","external","_normalizeStyle","color","text","_openBlock","_renderSlot","_ctx","iconRight","loading","FormButton","ToastNotificationType","ToastNotificationType2","dismiss","onCtaClick","_c","_b","_a","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","_Transition","notification","_hoisted_3","_hoisted_4","_unref","CircleCheck","CircleX","AlertCircle","Info","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","TextLink","X","_cache","KEYBOARD_CLICK_CHAR","keyboardClick","cb","badgeColorClasses","badgeDotIconColorClasses","badgeClasses","dotClasses","onIconClick","dot","iconLeft","$event","junkVariable","markClassesUsed","classes","TailwindBreakpoints","useStepsInternals","params","modelValue","steps","orientation","goVerticalBelow","nonInteractive","stepsPadding","finalOrientation","newVal","getStepDisplayValue","step","isCurrentStep","isFinishedStep","switchStep","newStep","stepObj","listClasses","paddingHorizontal","paddingVertical","linkClasses","toRefs","ariaLabel","_Fragment","i","CheckIcon","_toDisplayString","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","labelClasses","leftMargin","extraListClasses","_normalizeClass","basic","CheckCircleIcon","_sfc_render","isAnimating","ref","mousePosition","isClicked","animationDuration","isMouseVisible","dynamicSlots","delay","action","toggleSlotVisibility","slotToToggle","slot","handleAction","onMounted","onBeforeUnmount","ClickIcon","MouseIcon","_renderList","slotObject","isPlaying","play","__expose","title","vimeoId","muted","controls","darkPlaceholder","lightPlaceholder","placeholderAlt","IconPlay","computedClasses","disabled","generateRandomId","prefix","nanoid","checkboxValue","coreChecked","errorMessage","handleChange","coreValue","useField","descriptionText","descriptionId","descriptionClasses","implicitId","finalId","checkboxClasses","onChange","newModelValue","newCoreValue","shouldBeChecked","isCoreChecked","_mergeProps","$attrs","Minus","radioValue","selected","selectItem","isStacked","option","InformationCircleIcon","useTextInputCore","inputEl","veeErrorMessage","unref","coreInputClasses","coreClasses","hasError","internalHelpTipId","base","hideHelpTip","helpTip","hasHelpTip","customHelpTipClass","helpTipId","helpTipClasses","shouldShowClear","focus","clear","useDebouncedTextInput","debouncedBy","isBasicHtmlInput","submitOnEnter","disableDebouncedInput","onWrite","log","model","val","target","persistValue","debouncedValueUpdate","inputEventName","on","bind","watch","oldVal","inputElement","helpTipIdTop","helpTipIdLeft","computedWrapperClasses","labelPosition","name","showRequired","_withDirectives","textareaClasses","placeholder","$emit","XMarkIcon","slots","useSlots","inputStyle","leadingIconClasses","ifNotFullyTransparent","onRightIconClick","VALID_HTTP_URL","VALID_EMAIL","isEmail","isEmailOrEmpty","isOneOrMultipleEmails","isRequired","isSameAs","otherFieldName","otherFieldDisplayName","meta","isStringOfLength","minLength","isNullOrUndefined","stringContains","match","message","isUrl","isItemSelected","isMultiItemSelected","useWrappingContainerHiddenCount","skipCalculation","elementToWatchForChanges","itemContainer","trackResize","trackMutations","hiddenItemCount","recalculate","avatarElements","visibleCount","totalCount","firstElOffsetTop","avatarEl","offsetTop","useResizeObserver","useMutationObserver","useFormSelectChildInternals","dynamicVisibility","selectedValue","currentValue","isArrayValue","v","mounted","useMounted","showBar","ThrottleOrDebounce","ThrottleOrDebounce2","HorizontalDirection","HorizontalDirection2","useWindowResizeHandler","handler","isClient","throttleOrDebounce","finalHandler","useOnBeforeWindowUnload","useResponsiveHorizontalDirectionCalculation","el","defaultDirection","direction","stopUpdatesBelowWidth","element","recalculateDirection","rect","showOnLeftSide","showOnRightSide","useBodyMountedMenuPositioning","style","openToLeft","top","left","width","height","margin","finalWidth","finalLeft","finalTop","menuWidth","menuHeight","viewportWidth","viewportHeight","viewportWidthWithoutMargins","viewportHeightWithoutMargins","isObjectLikeType","error","isMounted","searchInput","menuEl","listboxButton","searchValue","currentItems","isAsyncLoading","forceUpdateKey","isOpen","listboxButtonBounding","useElementBounding","useIntersectionObserver","isIntersecting","menuStyle","isLeftLabelPosition","renderClearButton","buttonsWrapperClasses","commonButtonClasses","clearButtonClasses","hasValueSelected","hasSearch","isAsyncSearchMode","wrappedValue","finalValue","currentVal","itemKey","clearValue","finalItems","searchVal","listboxOptionsClasses","listboxOptionsStyle","simpleDisplayText","triggerSearch","debouncedSearch","listboxOptionClasses","newItems","Listbox","ListboxLabel","_createTextVNode","ListboxButton","_withCtx","open","ExclamationCircleIcon","ChevronUpIcon","ChevronDownIcon","_Teleport","ListboxOptions","MagnifyingGlassIcon","CommonLoadingBar","item","ListboxOption","active","_hoisted_14","_d","CommonBadge","sourceApp","hiddenSelectedItemCount","isMultiItemArrayValue","firstItem","searchFilterPredicate","search","FormSelectBase","SourceApps","SourceAppBadge","deselectItem","multiple","items","label","help","rules","by","labelId","buttonId","_withModifiers","toggleDropdown","isSelected","optionsContainer","scrollPosition","event","itemExists","nextTick","onClickOutside","FormCheckbox","_e","_f","enabled","_useModel","switchClasses","sliderClasses","HeadlessSwitch","id","copy","useClipboard","copied","handleCopy","selectAllText","textElement","selection","range","isMultiline","FormTextInput","ctaColor","isIconButton","ClipboardDocumentCheckIcon","ClipboardDocumentIcon","inputRefs","digits","internalError","onInput","onKeyDown","onPaste","pastedData","numbers","nextEmptyIndex","d","newValue","newDigits","digitCount","_","ModifierKeys","clientOs","getClientOperatingSystem","ModifierKeyTitles","OperatingSystem","getKeyboardShortcutTitle","isModifierKey","k","onKeyboardShortcut","modifiers","callback","useMagicKeys","keyCombination","modifier","whenever","useFormCheckboxModel","isChecked","isClosing","memoKey","scrolledFromTop","scrolledToBottom","slotContainer","onScroll","isForm","hasButtons","hasTitle","maxWidthWeight","widthClasses","isFullscreenDesktop","dialogPanelClasses","slotContainerClasses","onClose","onFullyClosed","onFormSubmit","scrollTop","offsetHeight","scrollHeight","oldValue","html","onUnmounted","TransitionRoot","Dialog","TransitionChild","fullscreen","DialogPanel","showBackButton","ChevronLeftIcon","hideCloser","closerClasses","buttons","button","content","contentHeight","isExpanded","backgroundClass","titleClasses","toggleExpansion","_toHandlers","$slots","editTitle","syncFromValue","buttonTextClasses","panelClasses","chevronClasses","toggle","onTitleInputBlur","HeadlessDisclosure","DisclosureButton","icon","DisclosurePanel","lazyLoad","GridListToggleValue","Bars3Icon","Squares2X2Icon","menuItems","menuButton","menuButtonWrapper","isOpenInternally","finalOpen","menuButtonBounding","menuItemsSize","useElementSize","calculatedDirection","menuDirection","menuItemsStyles","menuItemsClasses","buildButtonClassses","chooseItem","setOpen","processOpen","shouldBeOpen","useEventListener","HeadlessMenu","isMenuOpen","MenuButton","menuId","mountMenuOnBody","MenuItems","group","MenuItem","showTicks","IconCheck","vTippy","activeItem","buttonContainer","scrollContainer","showLeftArrow","showRightArrow","isInitialSetup","underlineLeft","underlineWidth","buttonClass","isActive","activeItemRef","parent","b","borderStyle","updateUnderline","setActiveItem","isActiveItem","checkArrowsVisibility","container","scrollWidth","clientWidth","scrollLeft","buffer","scrollRight","handleScroll","ensureActiveItemVisible","activeButton","stopResizeObserver","ArrowLongLeftIcon","_directive_tippy","ArrowLongRightIcon","tableClasses","sharedContainerClasses","resultContainerClasses","buttonCount","paddingRightStyle","padding","rowsWrapperClasses","getHeaderClasses","column","colIndex","c","getClasses","handleRowClick","headerRowClasses","columns","emptyMessage","wrapper","initializeLoader","int","InternalInfiniteLoading","$props","hideWhenComplete","retry","ExclamationTriangleIcon","allowRetry","secondarySlotPaddingClasses","defaultSlotPaddingClasses","buttonText","isCollapsed","collapsible","noHover","ArrowFilled","nested","iconClick","iconDisabled","alwaysShowIcon","Edit","ChevronRightIcon","Plus","iconText","hasChildren","toggleOpen","tooltipText","extraPadding","ArrowUpRightIcon","colorClasses","hasDescription","XCircleIcon","containerClasses","subcontainerClasses","handleActionClick","hideIcon","actions","withDismiss","writableAsyncComputed","get","initialState","readOptions","asyncRead","debugging","logSettings","getTrace","logger","finalGet","res","finalSet","readValue","computedAsync","getter","provides","getCurrentInstance","ctxKey","s","state","inject","isInputEvent","isInputFocused","useFocus","ctxManager","autocompleteItems","isAutocompleteLoading","isAutocompleteOpen","query","selectedItems","t","inputWrapperClasses","removeTag","idx","newSelected","onQueryEscape","onQueryBackspace","newTags","onQueryArrowUp","onQueryArrowDown","resolveAutocompleteItems","debouncedResolve","debouncedResolveAndMarkLoading","onQueryInput","forceCreateFromInput","newTag","tagExists","newIsOpen","oldIsOpen","Combobox","wrapperClasses","FormTagsContextManager","_withKeys","showOptional","ComboboxOptions","ComboboxOption","useAvatarSizeClasses","heightClasses","textClasses","initials","parts","firstLetter","secondLetter","borderClasses","bgClasses","hoverClasses","activeClasses","rounded","user","hideTooltip","UserCircleIcon","maxCountHiddenItemCount","visibleUsers","limit","maxAvatarsHiddenCount","totalHiddenCount","overlap","UserAvatar","hideTooltips","onHiddenCountClick","LazyUserAvatarEditor","defineAsyncComponent","editMode","modelAsUser","onSave","newUrl","defaultImg","lightStyle","BaseError","__publicField","LogicError","UninitializedResourceAccessError","ComposableInvokedOutOfScopeError","UnsupportedEnvironmentError","UniqueFileTypeSpecifier","validateFileType","file","allowedTypes","allowedUniqueTypes","allowedUniqueType","allowedExtensions","fileExt","resolveFileExtension","MissingFileExtensionError","allowedExtension","ForbiddenFileTypeError","fileName","fileNameParts","ext","isFileTypeSpecifier","prettyFileSize","sizeInBytes","removeTrailingZeroes","fileSize","kbSize","mbSize","gbSize","generateFileId","importantData","md5","buildFileTypeSpecifiers","accept","specifiers","usePrepareUploadableFiles","sizeLimit","countLimit","fileTypeSpecifiers","handleFiles","files","results","finalCountLimit","r","validationResult","FileTooLargeError","fileUploadZone","fileInput","buildUploadableFiles","handleIncomingFiles","fileItems","isOverDropZone","useDropZone","onInputChange","input","triggerPicker","keyboardClickableKeypressHandler","vKeyboardClickable","percentage","colorClass","showCloser","clampValue","handleInput","clampedValue","handleNumberInput","validateAndClamp","hideHeader","min","max","inputBelowSlider","minValueString","numValue","maxValueString","minPercentage","basePercentage","maxPercentage","trackLeft","trackRight","handleMinInput","handleMaxInput","showFields"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110]}