@harnessio/ui 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@harnessio/ui",
3
3
  "description": "Harness Canary UI component library",
4
- "version": "0.3.5",
4
+ "version": "0.4.0",
5
5
  "private": false,
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",
@@ -120,8 +120,8 @@
120
120
  "yaml": "^2.7.0",
121
121
  "zod": "^3.23.8",
122
122
  "@harnessio/core-design-system": "0.0.1",
123
- "@harnessio/yaml-editor": "0.25.0",
124
- "@harnessio/pipeline-graph": "1.9.6"
123
+ "@harnessio/pipeline-graph": "1.9.6",
124
+ "@harnessio/yaml-editor": "0.25.0"
125
125
  },
126
126
  "peerDependencies": {
127
127
  "react": "^17.0.2",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-D9zYGNBh.js","sources":["../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEqualWith.js","../src/hooks/use-common-filter.tsx","../src/hooks/use-deep-compare-effect.ts","../src/hooks/use-event-listener.tsx","../src/hooks/use-infinite-scroll.ts","../src/hooks/use-is-mounted.ts","../src/hooks/use-local-storage.ts","../src/hooks/use-memory-cleanup.ts","../src/hooks/use-column-filter.tsx","../src/hooks/use-tab-visible.tsx","../src/hooks/use-polling.tsx","../src/utils/color-utils.ts","../src/utils/monaco-theme-utils.ts","../src/hooks/use-monaco-theme.ts","../src/hooks/use-theme-css-loader.ts"],"sourcesContent":["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 baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\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 * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\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","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\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 Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\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 * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\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 * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\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 * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nexport default isEqualWith;\n","import { useCallback } from 'react'\n\nimport { useRouterContext } from '@/context'\nimport { isEmpty } from 'lodash-es'\n\nfunction useCommonFilter() {\n const { useSearchParams } = useRouterContext()\n const [searchParams, setSearchParams] = useSearchParams()\n\n const searchQuery = searchParams.get('query')\n\n const handleSearch = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchParams(params => {\n const latestSearchQuery = event?.target?.value\n if (!isEmpty(latestSearchQuery)) {\n params.set('query', latestSearchQuery)\n } else params.delete('query')\n\n return params\n })\n },\n [setSearchParams]\n )\n\n return {\n query: searchQuery || undefined,\n handleSearch\n }\n}\n\nexport { useCommonFilter }\n","/**\n * Based on https://github.com/contiamo/restful-react/blob/7aa3d75694f919d0317981a128b139abe163e08e/src/util/useDeepCompareEffect.ts\n */\n\nimport React, { useEffect, useMemo, useRef } from 'react'\n\nimport { isEqualWith } from 'lodash-es'\n\n/**\n * Custom version of isEqual to handle function comparison\n */\nfunction isEqual(a: unknown, b: unknown): boolean {\n return isEqualWith(a, b, (x: unknown, y: unknown): boolean | undefined => {\n // Deal with the function comparison case\n if (typeof x === 'function' && typeof y === 'function') {\n return x.toString() === y.toString()\n }\n\n // Fallback on the method\n return undefined\n })\n}\n\nfunction useDeepCompareMemoize(value: React.DependencyList): React.DependencyList | undefined {\n const ref = useRef<React.DependencyList>()\n\n if (!isEqual(value, ref.current)) {\n ref.current = value\n }\n\n return ref.current\n}\n\n/**\n * Accepts a function that contains imperative, possibly effectful code.\n *\n * This is the deepCompare version of the `React.useEffect` hooks (that is shallowed compare)\n *\n * @param effect Imperative function that can return a cleanup function\n * @param deps If present, effect will only activate if the values in the list change.\n *\n * @see https://gist.github.com/kentcdodds/fb8540a05c43faf636dd68647747b074#gistcomment-2830503\n */\nexport function useDeepCompareEffect(effect: React.EffectCallback, deps: React.DependencyList): void {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(effect, useDeepCompareMemoize(deps))\n}\n\n/**\n * Accepts a function that contains imperative, possibly effectful code.\n *\n * This is the deepCompare version of the `React.useMemo` hooks (that is shallowed compare)\n *\n * @param effect Imperative function that can return a useMemo value\n * @param deps If present, effect will only activate if the values in the list change.\n *\n * @see https://gist.github.com/kentcdodds/fb8540a05c43faf636dd68647747b074#gistcomment-2830503\n */\nexport function useDeepCompareMemo<T>(effect: () => T, deps: React.DependencyList): T {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(effect, useDeepCompareMemoize(deps))\n}\n","import { useEffect } from 'react'\n\nexport function useEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => unknown,\n element: HTMLElement = window as unknown as HTMLElement,\n options?: boolean | AddEventListenerOptions,\n parametersCheck = () => true\n) {\n useEffect(() => {\n if (parametersCheck() && element) {\n element.addEventListener(type, listener, options)\n return () => {\n element.removeEventListener(type, listener)\n }\n }\n }, [element, type, listener, options, parametersCheck])\n}\n\nexport function useCustomEventListener<T>(\n name: string,\n listener: (event: Omit<CustomEvent, 'detail'> & { detail: T }) => void,\n parametersCheck = () => true\n) {\n useEventListener(\n name as keyof HTMLElementEventMap,\n listener as (event: Event) => void,\n window as unknown as HTMLElement,\n false,\n parametersCheck\n )\n}\n\nexport function dispatchCustomEvent<T>(name: string, detail: T) {\n window.dispatchEvent(new CustomEvent(name, { detail }))\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nexport interface UseInfiniteScrollOptions {\n /** Callback when sentinel becomes visible */\n onLoadMore: () => void | Promise<void>\n /** Whether more items are available */\n hasMore: boolean\n /** Prevents duplicate calls while loading */\n isLoading?: boolean\n /** Enable/disable the hook */\n enabled?: boolean\n /** Root margin for early triggering (default: \"100px\") */\n rootMargin?: string\n /** Intersection threshold 0-1 (default: 0.1) */\n threshold?: number\n}\n\nexport interface UseInfiniteScrollReturn {\n /** Ref to attach to sentinel element at end of list */\n sentinelRef: React.RefObject<HTMLDivElement>\n}\n\n/**\n * Hook for infinite scroll functionality using IntersectionObserver.\n * Triggers a callback when the sentinel element becomes visible in the viewport.\n *\n * @param options - Configuration options for infinite scroll behavior\n * @returns Object containing the sentinel ref to attach to a trigger element\n *\n * @example\n * ```tsx\n * function MyList() {\n * const { data, fetchNextPage, hasNextPage, isFetching } = useInfiniteQuery(...)\n *\n * const { sentinelRef } = useInfiniteScroll({\n * onLoadMore: fetchNextPage,\n * hasMore: hasNextPage ?? false,\n * isLoading: isFetching,\n * rootMargin: '200px'\n * })\n *\n * return (\n * <ScrollArea>\n * {data.pages.flat().map(item => <ListItem key={item.id} {...item} />)}\n * <div ref={sentinelRef} />\n * </ScrollArea>\n * )\n * }\n * ```\n */\nexport function useInfiniteScroll({\n onLoadMore,\n hasMore,\n isLoading = false,\n enabled = true,\n rootMargin = '100px',\n threshold = 0.1\n}: UseInfiniteScrollOptions): UseInfiniteScrollReturn {\n const sentinelRef = useRef<HTMLDivElement>(null)\n const loadMoreRef = useRef(onLoadMore)\n\n // Keep callback ref updated to avoid stale closures\n useEffect(() => {\n loadMoreRef.current = onLoadMore\n }, [onLoadMore])\n\n const handleIntersection = useCallback(\n (entries: IntersectionObserverEntry[]) => {\n const [entry] = entries\n if (entry?.isIntersecting && hasMore && !isLoading) {\n loadMoreRef.current()\n }\n },\n [hasMore, isLoading]\n )\n\n useEffect(() => {\n const sentinel = sentinelRef.current\n\n if (!sentinel || !enabled || !hasMore) {\n return\n }\n\n const observer = new IntersectionObserver(handleIntersection, {\n rootMargin,\n threshold\n })\n\n observer.observe(sentinel)\n\n return () => {\n observer.disconnect()\n }\n }, [enabled, hasMore, handleIntersection, rootMargin, threshold])\n\n return { sentinelRef }\n}\n","import { useEffect, useRef } from 'react'\n\nexport const useIsMounted = () => {\n const isMounted = useRef(false)\n\n useEffect(() => {\n isMounted.current = true\n return () => {\n isMounted.current = false\n }\n }, [])\n\n return isMounted\n}\n","import { useState } from 'react'\n\nexport enum UserPreference {\n SPACE_ID = 'spaceId',\n SIDEBAR_WIDTH = 'sidebarWidth',\n CURRENT_USER = 'currentUser',\n DIFF_VIEW_STYLE = 'DIFF_VIEW_STYLE',\n PULL_REQUEST_CREATION_OPTION = 'PULL_REQUEST_CREATION_OPTION',\n PULL_REQUEST_ACTIVITY_FILTER = 'PULL_REQUEST_ACTIVITY_FILTER',\n PULL_REQUEST_ACTIVITY_ORDER = 'PULL_REQUEST_ACTIVITY_ORDER'\n}\n\nexport function useLocalStorage<T>(key: UserPreference | string, initialValue: T) {\n // Initialize state from localStorage or fallback to initialValue\n const [storedValue, setStoredValue] = useState<T>(() => {\n try {\n const item = localStorage.getItem(key)\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n console.error('Error reading from localStorage:', error)\n return initialValue\n }\n })\n\n // Update both state and localStorage\n const setValue = (value: T) => {\n try {\n setStoredValue(value)\n localStorage.setItem(key, JSON.stringify(value))\n } catch (error) {\n console.error('Error writing to localStorage:', error)\n }\n }\n\n return [storedValue, setValue] as const\n}\n","import { useEffect } from 'react'\n\n// Note: This is a Chrome-only API\ninterface MemoryInfo {\n usedJSHeapSize: number\n totalJSHeapSize: number\n jsHeapSizeLimit: number\n}\n\ninterface ExtendedPerformance extends Performance {\n memory?: MemoryInfo\n}\n\ndeclare global {\n interface Window {\n performance: ExtendedPerformance\n }\n}\n\nconst BYTES_TO_MB = 1024 * 1024\n\n/**\n * Checks if the browser supports performance.memory API\n */\nconst hasMemoryAPI = (): boolean => {\n try {\n return !!(window.performance && window.performance.memory)\n } catch {\n return false\n }\n}\n\n/**\n * Gets the current memory usage in MB if available\n */\nconst getMemoryUsage = (): number | null => {\n try {\n if (!hasMemoryAPI()) return null\n\n const memoryInfo = window.performance.memory\n if (!memoryInfo) return null\n\n return Math.round(memoryInfo.usedJSHeapSize / BYTES_TO_MB)\n } catch {\n return null\n }\n}\n\n/**\n * Hook to monitor memory usage and run cleanup when threshold is exceeded\n * Note: Memory monitoring only works in Chromium-based browsers\n * @param cleanupFn Function to run when memory threshold is exceeded\n * @param threshold Memory threshold in MB\n * @param interval Check interval in ms\n */\nexport const useMemoryCleanup = (cleanupFn: () => void, threshold = 1200, interval = 30000) => {\n useEffect(() => {\n if (!hasMemoryAPI()) {\n console.debug('Memory API not available - memory cleanup disabled')\n return\n }\n\n const checkMemory = () => {\n const usedMemory = getMemoryUsage()\n\n if (usedMemory !== null && usedMemory > threshold) {\n console.debug(`Memory usage (${usedMemory}MB) exceeded threshold (${threshold}MB). Running cleanup...`)\n cleanupFn()\n }\n }\n\n const intervalId = setInterval(checkMemory, interval)\n return () => clearInterval(intervalId)\n }, [cleanupFn, threshold, interval])\n}\n","import { useCallback, useEffect, useMemo } from 'react'\n\nimport { CheckboxOptions } from '@/components'\n\nimport { useLocalStorage } from './use-local-storage'\n\ninterface UseColumnFilterProps {\n /**\n * Unique key for localStorage persistence\n */\n storageKey: string\n /**\n * Available columns configuration\n */\n columns: CheckboxOptions[]\n /**\n * Default visible columns (used when no localStorage value exists)\n */\n defaultVisibleColumns?: string[]\n}\n\ninterface UseColumnFilterReturn {\n /**\n * Currently visible column identifiers\n */\n visibleColumns: string[]\n /**\n * Toggle visibility of a specific column\n */\n toggleColumn: (columnName: string, checked: boolean) => void\n /**\n * Reset to default visible columns\n */\n resetColumns: () => void\n}\n\n/**\n * Hook that manages column visibility state with localStorage persistence\n * and returns a pre-configured DataTableColumnFilterDropdown component.\n *\n * @example\n * ```tsx\n * const columns = [\n * { label: 'Name', value: 'name' },\n * { label: 'Email', value: 'email' },\n * { label: 'Status', value: 'status' }\n * ]\n *\n * const { visibleColumns, toggleColumn, resetColumns } = useColumnFilter({\n * storageKey: 'users-table-columns',\n * columns,\n * defaultVisibleColumns: ['name', 'email']\n * })\n *\n * return (\n * <div>\n * <DataTable.ColumnFilter\n * columns={columns}\n * visibleColumns={visibleColumns}\n * onCheckedChange={toggleColumn}\n * onReset={resetColumns}\n * />\n * <DataTable columns={columns} visibleColumns={visibleColumns} />\n * </div>\n * )\n * ```\n */\nexport function useColumnFilter({\n storageKey,\n columns,\n defaultVisibleColumns\n}: UseColumnFilterProps): UseColumnFilterReturn {\n // Initialize default visible columns (all columns if not specified)\n const defaultColumns = useMemo(\n () => defaultVisibleColumns ?? columns.map(col => col.value),\n [defaultVisibleColumns, columns]\n )\n\n // Persist visible columns in localStorage\n const [storedVisibleColumns, setVisibleColumns] = useLocalStorage<string[]>(storageKey, defaultColumns)\n\n // Filter out any columns that don't exist in the current columns array\n const validColumnValues = useMemo(() => new Set(columns.map(col => col.value)), [columns])\n const visibleColumns = useMemo(\n () => storedVisibleColumns.filter(col => validColumnValues.has(col)),\n [storedVisibleColumns, validColumnValues]\n )\n\n // Sync cleaned column list back to localStorage if it changed\n useEffect(() => {\n const hasChanged =\n visibleColumns.length !== storedVisibleColumns.length ||\n visibleColumns.some((col, idx) => col !== storedVisibleColumns[idx])\n if (hasChanged) {\n setVisibleColumns(visibleColumns)\n }\n }, [visibleColumns, storedVisibleColumns, setVisibleColumns])\n\n // Toggle column visibility\n const toggleColumn = useCallback(\n (columnName: string, checked: boolean) => {\n if (checked) {\n // Add column if not already present\n const newColumns = visibleColumns.includes(columnName) ? visibleColumns : [...visibleColumns, columnName]\n setVisibleColumns(newColumns)\n } else {\n // Remove column\n const newColumns = visibleColumns.filter(col => col !== columnName)\n setVisibleColumns(newColumns)\n }\n },\n [visibleColumns, setVisibleColumns]\n )\n\n // Reset to default columns\n const resetColumns = useCallback(() => {\n setVisibleColumns(defaultColumns)\n }, [setVisibleColumns, defaultColumns])\n\n return {\n visibleColumns,\n toggleColumn,\n resetColumns\n }\n}\n","import { useEffect, useState } from 'react'\n\nfunction getVisiblePropEvent(): { hidden?: string; visibilityChange?: string } {\n // Set the name of the hidden property and the change event for visibility\n let hidden: string | undefined = undefined\n let visibilityChange: string | undefined = undefined\n if (typeof document.hidden !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n hidden = 'hidden'\n visibilityChange = 'visibilitychange'\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } else if (typeof (document as any).msHidden !== 'undefined') {\n hidden = 'msHidden'\n visibilityChange = 'msvisibilitychange'\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } else if (typeof (document as any).webkitHidden !== 'undefined') {\n hidden = 'webkitHidden'\n visibilityChange = 'webkitvisibilitychange'\n }\n return { hidden, visibilityChange }\n}\n\n/**\n * Hook to detect if the current browser tab is visible or hidden.\n * Uses the Page Visibility API to track tab visibility changes.\n *\n * @returns boolean - true if tab is visible, false if hidden\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const isTabVisible = useTabVisible()\n *\n * useEffect(() => {\n * if (isTabVisible) {\n * // Resume operations when tab becomes visible\n * } else {\n * // Pause operations when tab is hidden\n * }\n * }, [isTabVisible])\n * }\n * ```\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API\n */\nexport function useTabVisible(): boolean {\n const [visible, setVisibility] = useState<boolean>(true)\n\n useEffect(() => {\n const { hidden, visibilityChange } = getVisiblePropEvent()\n\n function handleVisibilityChange(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (hidden && (document as any)[hidden]) {\n setVisibility(false)\n } else {\n setVisibility(true)\n }\n }\n\n if (\n typeof document.addEventListener === 'undefined' ||\n typeof hidden === 'undefined' ||\n typeof visibilityChange === 'undefined'\n ) {\n console.warn('The Page Visibility API is not supported')\n } else {\n // Handle page visibility change\n document.addEventListener(visibilityChange, handleVisibilityChange, false)\n return () => {\n document.removeEventListener(visibilityChange, handleVisibilityChange, false)\n }\n }\n }, [])\n\n return visible\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport { useTabVisible } from './use-tab-visible'\n\nconst DEFAULT_POLLING_INTERVAL_IN_MS = 30_000\nconst INACTIVE_TAB_POLLING_INTERVAL_IN_MS = 60_000\n\nexport interface UsePollingOptions {\n /**\n * Polling interval in milliseconds when tab is active\n * @default 30000 (30 seconds)\n */\n pollingInterval?: number\n /**\n * Start polling based on a condition\n * @example Poll only on first page\n * @default false\n */\n startPolling?: boolean\n /**\n * Polling interval in milliseconds when tab is inactive\n * @default 60000 (60 seconds)\n */\n inactiveTabPollingInterval?: number\n /**\n * Enable polling even on inactive tabs with inactiveTabPollingInterval\n * Use with caution - needs a stop condition from userland\n * @default false\n */\n pollOnInactiveTab?: boolean\n}\n\n/**\n * Hook for polling with smart tab visibility handling.\n * Automatically adjusts polling interval based on tab visibility and ensures\n * only one request is in flight at a time.\n *\n * @param callback - Promise-returning function to be called at each polling interval (e.g., refetch)\n * @param options - Polling configuration options\n * @returns boolean - true if currently polling, false otherwise\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { refetch } = useQuery(...)\n *\n * const isPolling = usePolling(refetch, {\n * startPolling: true,\n * pollingInterval: 10000, // 10 seconds\n * pollOnInactiveTab: false\n * })\n *\n * return <div>{isPolling ? 'Polling...' : 'Idle'}</div>\n * }\n * ```\n *\n * @remarks\n * - Remembers last call and re-polls only after it's resolved\n * - Automatically pauses polling when tab is inactive (unless pollOnInactiveTab is true)\n * - Uses longer interval for inactive tabs to reduce resource usage\n */\nexport function usePolling(\n callback: () => Promise<void> | undefined,\n {\n startPolling = false,\n pollingInterval = DEFAULT_POLLING_INTERVAL_IN_MS,\n inactiveTabPollingInterval = INACTIVE_TAB_POLLING_INTERVAL_IN_MS,\n pollOnInactiveTab = false\n }: UsePollingOptions\n): boolean {\n const savedCallback = useRef(callback)\n const [isPolling, setIsPolling] = useState(false)\n const tabVisible = useTabVisible()\n const interval = tabVisible ? pollingInterval : inactiveTabPollingInterval\n\n // Remember the latest callback if it changes.\n useLayoutEffect(() => {\n savedCallback.current = callback\n }, [callback])\n\n useEffect(() => {\n // Poll only if polling condition from component is met\n if (!startPolling) return\n // Poll only if tab is visible OR pollOnInactiveTab is true\n if (!tabVisible && !pollOnInactiveTab) return\n\n // Poll only when the current request is resolved\n if (!isPolling) {\n const timerId = setTimeout(async () => {\n setIsPolling(true)\n try {\n await savedCallback.current?.()\n } finally {\n setIsPolling(false)\n }\n }, interval)\n\n return () => clearTimeout(timerId)\n }\n }, [interval, isPolling, pollOnInactiveTab, startPolling, tabVisible])\n\n return isPolling\n}\n","export function lchToHex(lch: string): string | undefined {\n const match = lch.match(/lch\\(\\s*([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)\\s*\\)/i)\n if (!match) return undefined\n\n const L = parseFloat(match[1])\n const C = parseFloat(match[2])\n const Hdeg = parseFloat(match[3])\n\n // LCH → LAB\n const H = (Hdeg * Math.PI) / 180\n const a = Math.cos(H) * C\n const b = Math.sin(H) * C\n\n // LAB → XYZ (D65)\n let y = (L + 16) / 116\n let x = a / 500 + y\n let z = y - b / 200\n\n const labToXyz = (n: number) => (n ** 3 > 0.008856 ? n ** 3 : (n - 16 / 116) / 7.787)\n\n x = labToXyz(x) * 0.95047\n y = labToXyz(y) * 1.0\n z = labToXyz(z) * 1.08883\n\n // XYZ → linear RGB\n let r = 3.2406 * x - 1.5372 * y - 0.4986 * z\n let g = -0.9689 * x + 1.8758 * y + 0.0415 * z\n let bVal = 0.0557 * x - 0.204 * y + 1.057 * z\n\n // Gamma correction\n const gamma = (c: number) => (c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055)\n\n r = gamma(r)\n g = gamma(g)\n bVal = gamma(bVal)\n\n // Clamp + convert to hex\n const toHex = (c: number) =>\n Math.round(Math.min(1, Math.max(0, c)) * 255)\n .toString(16)\n .padStart(2, '0')\n\n return `#${toHex(r)}${toHex(g)}${toHex(bVal)}`\n}\n\nexport function rgbToHex(colorRgb: string): string | undefined {\n const match = colorRgb.match(/\\d+/g)\n if (!match || match.length < 3) return undefined\n\n const [r, g, b] = match.slice(0, 3).map(Number)\n\n return `#` + [r, g, b].map(x => x.toString(16).padStart(2, '0')).join('')\n}\n","import { editor } from 'monaco-editor'\n\nimport { ThemeDefinition } from '@harnessio/yaml-editor'\n\nimport { lchToHex, rgbToHex } from './color-utils'\n\n/** cache for monaco themes, we crate theme only once */\nconst monacoThemeCache: ThemeDefinition[] = []\n\n/**\n * IMPORTANT:\n * it is important to call function with current theme\n * as the variables names are same for all themes,\n * only the values are different depend on the theme\n */\nexport function getMonacoThemes(currentTheme: string) {\n const exist = monacoThemeCache.some(theme => {\n return theme.themeName === currentTheme\n })\n\n if (!exist) {\n const el = document.createElement('div')\n document.body.appendChild(el)\n const themeData = replaceVarsWithHex(themeWithVariables, el)\n document.body.removeChild(el)\n\n themeData.base = currentTheme.indexOf('light') > -1 ? 'vs' : 'vs-dark'\n\n monacoThemeCache.push({\n themeName: currentTheme,\n themeData\n })\n }\n\n return monacoThemeCache\n}\n\nfunction replaceVarsWithHex<T>(obj: T, el: HTMLElement): T {\n if (Array.isArray(obj)) {\n return obj.map(item => replaceVarsWithHex(item, el)) as unknown as T\n } else if (obj && typeof obj === 'object') {\n const result: Partial<T> = {}\n for (const key in obj) {\n result[key] = replaceVarsWithHex((obj as any)[key], el)\n }\n return result as T\n } else if (typeof obj === 'string' && obj.trim().startsWith('var(')) {\n return cssVarToHex(obj, el) as unknown as T\n } else {\n return obj\n }\n}\n\nfunction cssVarToHex(varName: string, el: HTMLElement) {\n el.style.color = `${varName}`\n const colorRgbOrLch = getComputedStyle(el).color\n\n const rgb = lchToHex(colorRgbOrLch)\n if (rgb) {\n return rgb\n }\n\n return rgbToHex(colorRgbOrLch)\n}\n\nexport const themeWithVariables = {\n base: 'vs' as editor.BuiltinTheme,\n inherit: false,\n rules: [\n { token: '', foreground: 'var(--cn-comp-monaco-foreground)', background: 'var(--cn-comp-monaco-background)' },\n\n { token: 'invalid', foreground: 'var(--cn-comp-monaco-invalid-text)' },\n { token: 'emphasis', fontStyle: 'italic' },\n { token: 'strong', fontStyle: 'bold' },\n\n { token: 'variable', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'variable.predefined', foreground: 'var(--cn-comp-monaco-constant)' },\n { token: 'constant', foreground: 'var(--cn-comp-monaco-constant)' },\n\n { token: 'comment', foreground: 'var(--cn-comp-monaco-comment)' },\n\n { token: 'number', foreground: 'var(--cn-comp-monaco-number)' },\n { token: 'number.hex', foreground: 'var(--cn-comp-monaco-number)' },\n\n { token: 'regexp', foreground: 'var(--cn-comp-monaco-constant)' },\n { token: 'annotation', foreground: 'var(--cn-comp-monaco-constant)' },\n { token: 'type', foreground: 'var(--cn-comp-monaco-tag)' },\n\n { token: 'delimiter', foreground: 'var(--cn-comp-monaco-delimiter)' },\n { token: 'delimiter.html', foreground: 'var(--cn-comp-monaco-delimiter)' },\n { token: 'delimiter.xml', foreground: 'var(--cn-comp-monaco-delimiter)' },\n\n { token: 'tag', foreground: 'var(--cn-comp-monaco-anchor)' },\n { token: 'tag.id.pug', foreground: 'var(--cn-comp-monaco-tag)' },\n { token: 'tag.class.pug', foreground: 'var(--cn-comp-monaco-tag)' },\n { token: 'meta.scss', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'metatag', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'metatag.content.html', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'metatag.html', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'metatag.xml', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'metatag.php', fontStyle: 'bold' },\n\n { token: 'key', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'string.key.json', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'string.value.json', foreground: 'var(--cn-comp-monaco-string)' },\n\n { token: 'attribute.name', foreground: 'var(--cn-comp-monaco-key)' },\n { token: 'attribute.value', foreground: 'var(--cn-comp-monaco-string)' },\n { token: 'attribute.value.number', foreground: 'var(--cn-comp-monaco-number)' },\n { token: 'attribute.value.unit', foreground: 'var(--cn-comp-monaco-number)' },\n { token: 'attribute.value.html', foreground: 'var(--cn-comp-monaco-string)' },\n { token: 'attribute.value.xml', foreground: 'var(--cn-comp-monaco-string)' },\n\n { token: 'string', foreground: 'var(--cn-comp-monaco-string)' },\n { token: 'string.html', foreground: 'var(--cn-comp-monaco-string)' },\n { token: 'string.sql', foreground: 'var(--cn-comp-monaco-string)' },\n { token: 'string.yaml', foreground: 'var(--cn-comp-monaco-string)' },\n\n { token: 'keyword', foreground: 'var(--cn-comp-monaco-boolean)' },\n { token: 'keyword.json', foreground: 'var(--cn-comp-monaco-boolean)' },\n { token: 'keyword.flow', foreground: 'var(--cn-comp-monaco-boolean)' },\n { token: 'keyword.flow.scss', foreground: 'var(--cn-comp-monaco-boolean)' },\n\n { token: 'operator.scss', foreground: 'var(--cn-comp-monaco-delimiter)' },\n { token: 'operator.sql', foreground: 'var(--cn-comp-monaco-delimiter)' },\n { token: 'operator.swift', foreground: 'var(--cn-comp-monaco-delimiter)' },\n { token: 'predefined.sql', foreground: 'var(--cn-comp-monaco-constant)' }\n ],\n\n colors: {\n 'editor.background': 'var(--cn-comp-monaco-background)',\n 'editor.foreground': 'var(--cn-comp-monaco-foreground)',\n 'editor.selectionBackground': 'var(--cn-comp-monaco-selection)',\n 'editor.lineHighlightBackground': 'var(--cn-comp-monaco-line-highlight)',\n 'editorCursor.foreground': 'var(--cn-comp-monaco-cursor)',\n 'editorWhitespace.foreground': 'var(--cn-comp-monaco-whitespace)',\n 'editorLineNumber.foreground': 'var(--cn-comp-monaco-line-number)',\n 'editorLineNumber.activeForeground': 'var(--cn-comp-monaco-foreground)',\n 'editorIndentGuide.background': 'var(--cn-comp-monaco-indent-guide)',\n 'editorIndentGuide.activeBackground': 'var(--cn-comp-monaco-indent-guide-active)',\n 'editorError.background': 'var(--cn-comp-monaco-invalid-bg)',\n 'editorError.foreground': 'var(--cn-comp-monaco-invalid-text)'\n }\n}\n","import { useEffect, useState } from 'react'\n\nimport { getMonacoThemes } from '@utils/monaco-theme-utils'\n\nimport { YamlEditorProps } from '@harnessio/yaml-editor'\n\ntype ThemeConfig = YamlEditorProps<unknown>['themeConfig']\n\nexport function useMonacoTheme(theme?: string, rootSelector = 'html'): ThemeConfig {\n const [themeConfig, setThemeConfig] = useState<ThemeConfig>(undefined)\n\n useEffect(() => {\n if (!theme) return\n\n let attempts = 0\n const maxAttempts = 5\n const intervalMs = 100\n let intervalId: number | undefined\n\n const tryApplyTheme = () => {\n attempts++\n\n const rootEl = document.querySelector(rootSelector)\n if (!rootEl) return false\n\n const htmlClass = rootEl.className\n const hasThemeClass = htmlClass.includes(theme)\n\n if (hasThemeClass) {\n setThemeConfig({\n defaultTheme: theme,\n themes: getMonacoThemes(theme)\n })\n\n if (intervalId) {\n clearInterval(intervalId)\n }\n\n return true\n }\n\n if (attempts >= maxAttempts) {\n if (intervalId) {\n clearInterval(intervalId)\n }\n }\n\n return false\n }\n\n // Execute immediately\n const appliedImmediately = tryApplyTheme()\n\n // Poll if not execute immediately\n if (!appliedImmediately) {\n intervalId = window.setInterval(tryApplyTheme, intervalMs)\n }\n\n return () => {\n if (intervalId) {\n clearInterval(intervalId)\n }\n }\n }, [rootSelector, theme])\n\n return themeConfig\n}\n","import { useCallback } from 'react'\n\nimport { getThemeCSSName, type FullTheme } from '@/context/theme/types'\n\nexport type ThemeManifest = Record<string, string>\n\nconst THEME_ATTR = 'data-theme-loader'\nconst THEME_ATTR_VALUE = 'cn-on-demand-theme'\nconst SELECTOR = `link[${THEME_ATTR}=\"${THEME_ATTR_VALUE}\"]`\n\nfunction removeAllThemeLinks(): void {\n document.querySelectorAll(SELECTOR).forEach(el => el.remove())\n}\n\nexport function useThemeCSSLoader(themesBasePath: string, manifest: ThemeManifest) {\n const loadTheme = useCallback(\n (theme: FullTheme): Promise<void> => {\n const cssName = getThemeCSSName(theme)\n const existingLinks = document.querySelectorAll(SELECTOR) as NodeListOf<HTMLLinkElement>\n\n /**\n * dark-std-std, light-std-std themes are already bundled, so no need to load them\n */\n if (!cssName) {\n removeAllThemeLinks()\n return Promise.resolve()\n }\n\n const filename = manifest[cssName]\n if (!filename) return Promise.resolve()\n\n const href = `${themesBasePath}/${filename}`\n\n if (Array.from(existingLinks).some(link => link.getAttribute('href') === href)) {\n return Promise.resolve()\n }\n\n return new Promise<void>(resolve => {\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n\n link.onload = () => {\n removeAllThemeLinks()\n link.setAttribute(THEME_ATTR, THEME_ATTR_VALUE)\n resolve()\n }\n\n link.onerror = () => {\n removeAllThemeLinks()\n link.setAttribute(THEME_ATTR, THEME_ATTR_VALUE)\n resolve()\n }\n\n document.head.appendChild(link)\n })\n },\n [themesBasePath, manifest]\n )\n\n return { loadTheme }\n}\n"],"names":["keys","object","isArrayLike","arrayLikeKeys","baseKeys","getAllKeys","baseGetAllKeys","getSymbols","HASH_UNDEFINED","setCacheAdd","value","setCacheHas","SetCache","values","index","length","MapCache","arraySome","array","predicate","cacheHas","cache","key","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","other","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","result","seen","arrValue","othValue","compared","othIndex","mapToArray","map","setToArray","set","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","Symbol","symbolValueOf","equalByTag","tag","Uint8Array","eq","convert","stacked","objectProto","hasOwnProperty","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","argsTag","arrayTag","objectTag","baseIsEqualDeep","objIsArr","isArray","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","isBuffer","Stack","isTypedArray","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","isObjectLike","isEqualWith","useCommonFilter","useSearchParams","useRouterContext","searchParams","setSearchParams","searchQuery","handleSearch","useCallback","event","params","latestSearchQuery","_a","isEmpty","isEqual","a","b","x","y","useDeepCompareMemoize","ref","useRef","useDeepCompareEffect","effect","deps","useEffect","useDeepCompareMemo","useMemo","useEventListener","type","listener","element","options","parametersCheck","useCustomEventListener","name","dispatchCustomEvent","detail","useInfiniteScroll","onLoadMore","hasMore","isLoading","enabled","rootMargin","threshold","sentinelRef","loadMoreRef","handleIntersection","entries","entry","sentinel","observer","useIsMounted","isMounted","UserPreference","useLocalStorage","initialValue","storedValue","setStoredValue","useState","item","error","BYTES_TO_MB","hasMemoryAPI","getMemoryUsage","memoryInfo","useMemoryCleanup","cleanupFn","interval","intervalId","usedMemory","useColumnFilter","storageKey","columns","defaultVisibleColumns","defaultColumns","col","storedVisibleColumns","setVisibleColumns","validColumnValues","visibleColumns","idx","toggleColumn","columnName","checked","newColumns","resetColumns","getVisiblePropEvent","hidden","visibilityChange","useTabVisible","visible","setVisibility","handleVisibilityChange","DEFAULT_POLLING_INTERVAL_IN_MS","INACTIVE_TAB_POLLING_INTERVAL_IN_MS","usePolling","callback","startPolling","pollingInterval","inactiveTabPollingInterval","pollOnInactiveTab","savedCallback","isPolling","setIsPolling","tabVisible","useLayoutEffect","timerId","lchToHex","lch","match","L","C","H","z","labToXyz","n","r","g","bVal","gamma","c","toHex","rgbToHex","colorRgb","monacoThemeCache","getMonacoThemes","currentTheme","theme","el","themeData","replaceVarsWithHex","themeWithVariables","obj","cssVarToHex","varName","colorRgbOrLch","rgb","useMonacoTheme","rootSelector","themeConfig","setThemeConfig","attempts","maxAttempts","intervalMs","tryApplyTheme","rootEl","THEME_ATTR","THEME_ATTR_VALUE","SELECTOR","removeAllThemeLinks","useThemeCSSLoader","themesBasePath","manifest","cssName","getThemeCSSName","existingLinks","filename","href","link","resolve"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}