{"version":3,"file":"js/chunk-vendors-95328e84.f4380575.js","mappings":"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","sources":["webpack://facilities-information-tool-v4/../../../src/util/color/transformCIELAB.ts","webpack://facilities-information-tool-v4/../../../src/util/color/transformSRGB.ts","webpack://facilities-information-tool-v4/../../src/util/colorUtils.ts","webpack://facilities-information-tool-v4/../../src/util/console.ts","webpack://facilities-information-tool-v4/../../src/util/dom.ts","webpack://facilities-information-tool-v4/../../src/util/helpers.ts","webpack://facilities-information-tool-v4/../../src/util/mergeData.ts","webpack://facilities-information-tool-v4/../../src/util/mixins.ts"],"sourcesContent":["import { XYZ, LAB } from '../colorUtils'\n\nconst delta = 0.20689655172413793 // 6รท29\n\nconst cielabForwardTransform = (t: number): number => (\n t > delta ** 3\n ? Math.cbrt(t)\n : (t / (3 * delta ** 2)) + 4 / 29\n)\n\nconst cielabReverseTransform = (t: number): number => (\n t > delta\n ? t ** 3\n : (3 * delta ** 2) * (t - 4 / 29)\n)\n\nexport function fromXYZ (xyz: XYZ): LAB {\n const transform = cielabForwardTransform\n const transformedY = transform(xyz[1])\n\n return [\n 116 * transformedY - 16,\n 500 * (transform(xyz[0] / 0.95047) - transformedY),\n 200 * (transformedY - transform(xyz[2] / 1.08883)),\n ]\n}\n\nexport function toXYZ (lab: LAB): XYZ {\n const transform = cielabReverseTransform\n const Ln = (lab[0] + 16) / 116\n return [\n transform(Ln + lab[1] / 500) * 0.95047,\n transform(Ln),\n transform(Ln - lab[2] / 200) * 1.08883,\n ]\n}\n","import { ColorInt, XYZ } from '../colorUtils'\nimport { clamp } from '../../util/helpers'\n\n// For converting XYZ to sRGB\nconst srgbForwardMatrix = [\n [3.2406, -1.5372, -0.4986],\n [-0.9689, 1.8758, 0.0415],\n [0.0557, -0.2040, 1.0570],\n]\n\n// Forward gamma adjust\nconst srgbForwardTransform = (C: number): number => (\n C <= 0.0031308\n ? C * 12.92\n : 1.055 * C ** (1 / 2.4) - 0.055\n)\n\n// For converting sRGB to XYZ\nconst srgbReverseMatrix = [\n [0.4124, 0.3576, 0.1805],\n [0.2126, 0.7152, 0.0722],\n [0.0193, 0.1192, 0.9505],\n]\n\n// Reverse gamma adjust\nconst srgbReverseTransform = (C: number): number => (\n C <= 0.04045\n ? C / 12.92\n : ((C + 0.055) / 1.055) ** 2.4\n)\n\nexport function fromXYZ (xyz: XYZ): ColorInt {\n const rgb = Array(3)\n const transform = srgbForwardTransform\n const matrix = srgbForwardMatrix\n\n // Matrix transform, then gamma adjustment\n for (let i = 0; i < 3; ++i) {\n rgb[i] = Math.round(clamp(transform(\n matrix[i][0] * xyz[0] +\n matrix[i][1] * xyz[1] +\n matrix[i][2] * xyz[2]\n )) * 255)\n }\n\n // Rescale back to [0, 255]\n return (rgb[0] << 16) + (rgb[1] << 8) + (rgb[2] << 0)\n}\n\nexport function toXYZ (rgb: ColorInt): XYZ {\n const xyz: XYZ = [0, 0, 0]\n const transform = srgbReverseTransform\n const matrix = srgbReverseMatrix\n\n // Rescale from [0, 255] to [0, 1] then adjust sRGB gamma to linear RGB\n const r = transform((rgb >> 16 & 0xff) / 255)\n const g = transform((rgb >> 8 & 0xff) / 255)\n const b = transform((rgb >> 0 & 0xff) / 255)\n\n // Matrix color space transform\n for (let i = 0; i < 3; ++i) {\n xyz[i] = matrix[i][0] * r + matrix[i][1] * g + matrix[i][2] * b\n }\n\n return xyz\n}\n","// Utilities\nimport { consoleWarn } from './console'\nimport { chunk, padEnd } from './helpers'\nimport { toXYZ } from './color/transformSRGB'\n\n// Types\nimport { VuetifyThemeVariant } from 'types/services/theme'\n\nexport type ColorInt = number\nexport type XYZ = [number, number, number]\nexport type LAB = [number, number, number]\nexport type HSV = { h: number, s: number, v: number }\nexport type HSVA = HSV & { a: number }\nexport type RGB = { r: number, g: number, b: number }\nexport type RGBA = RGB & { a: number }\nexport type HSL = { h: number, s: number, l: number }\nexport type HSLA = HSL & { a: number }\nexport type Hex = string\nexport type Hexa = string\nexport type Color = string | number | {}\n\nexport function isCssColor (color?: string | false): boolean {\n return !!color && !!color.match(/^(#|var\\(--|(rgb|hsl)a?\\()/)\n}\n\nexport function colorToInt (color: Color): ColorInt {\n let rgb\n\n if (typeof color === 'number') {\n rgb = color\n } else if (typeof color === 'string') {\n let c = color[0] === '#' ? color.substring(1) : color\n if (c.length === 3) {\n c = c.split('').map(char => char + char).join('')\n }\n if (c.length !== 6) {\n consoleWarn(`'${color}' is not a valid rgb color`)\n }\n rgb = parseInt(c, 16)\n } else {\n throw new TypeError(`Colors can only be numbers or strings, recieved ${color == null ? color : color.constructor.name} instead`)\n }\n\n if (rgb < 0) {\n consoleWarn(`Colors cannot be negative: '${color}'`)\n rgb = 0\n } else if (rgb > 0xffffff || isNaN(rgb)) {\n consoleWarn(`'${color}' is not a valid rgb color`)\n rgb = 0xffffff\n }\n\n return rgb\n}\n\nexport function classToHex (\n color: string,\n colors: Record>,\n currentTheme: Partial,\n): string {\n const [colorName, colorModifier] = color\n .toString().trim().replace('-', '').split(' ', 2) as (string | undefined)[]\n\n let hexColor = ''\n if (colorName && colorName in colors) {\n if (colorModifier && colorModifier in colors[colorName]) {\n hexColor = colors[colorName][colorModifier]\n } else if ('base' in colors[colorName]) {\n hexColor = colors[colorName].base\n }\n } else if (colorName && colorName in currentTheme) {\n hexColor = currentTheme[colorName] as string\n }\n\n return hexColor\n}\n\nexport function intToHex (color: ColorInt): string {\n let hexColor: string = color.toString(16)\n\n if (hexColor.length < 6) hexColor = '0'.repeat(6 - hexColor.length) + hexColor\n\n return '#' + hexColor\n}\n\nexport function colorToHex (color: Color): string {\n return intToHex(colorToInt(color))\n}\n\n/**\n * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n *\n * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]\n */\nexport function HSVAtoRGBA (hsva: HSVA): RGBA {\n const { h, s, v, a } = hsva\n const f = (n: number) => {\n const k = (n + (h / 60)) % 6\n return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)\n }\n\n const rgb = [f(5), f(3), f(1)].map(v => Math.round(v * 255))\n\n return { r: rgb[0], g: rgb[1], b: rgb[2], a }\n}\n\n/**\n * Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n *\n * @param color RGBA color as an array [0-255, 0-255, 0-255, 0-1]\n */\nexport function RGBAtoHSVA (rgba: RGBA): HSVA {\n if (!rgba) return { h: 0, s: 1, v: 1, a: 1 }\n\n const r = rgba.r / 255\n const g = rgba.g / 255\n const b = rgba.b / 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n\n let h = 0\n\n if (max !== min) {\n if (max === r) {\n h = 60 * (0 + ((g - b) / (max - min)))\n } else if (max === g) {\n h = 60 * (2 + ((b - r) / (max - min)))\n } else if (max === b) {\n h = 60 * (4 + ((r - g) / (max - min)))\n }\n }\n\n if (h < 0) h = h + 360\n\n const s = max === 0 ? 0 : (max - min) / max\n const hsv = [h, s, max]\n\n return { h: hsv[0], s: hsv[1], v: hsv[2], a: rgba.a }\n}\n\nexport function HSVAtoHSLA (hsva: HSVA): HSLA {\n const { h, s, v, a } = hsva\n\n const l = v - (v * s / 2)\n\n const sprime = l === 1 || l === 0 ? 0 : (v - l) / Math.min(l, 1 - l)\n\n return { h, s: sprime, l, a }\n}\n\nexport function HSLAtoHSVA (hsl: HSLA): HSVA {\n const { h, s, l, a } = hsl\n\n const v = l + s * Math.min(l, 1 - l)\n\n const sprime = v === 0 ? 0 : 2 - (2 * l / v)\n\n return { h, s: sprime, v, a }\n}\n\nexport function RGBAtoCSS (rgba: RGBA): string {\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`\n}\n\nexport function RGBtoCSS (rgba: RGBA): string {\n return RGBAtoCSS({ ...rgba, a: 1 })\n}\n\nexport function RGBAtoHex (rgba: RGBA): Hex {\n const toHex = (v: number) => {\n const h = Math.round(v).toString(16)\n return ('00'.substr(0, 2 - h.length) + h).toUpperCase()\n }\n\n return `#${[\n toHex(rgba.r),\n toHex(rgba.g),\n toHex(rgba.b),\n toHex(Math.round(rgba.a * 255)),\n ].join('')}`\n}\n\nexport function HexToRGBA (hex: Hex): RGBA {\n const rgba = chunk(hex.slice(1), 2).map((c: string) => parseInt(c, 16))\n\n return {\n r: rgba[0],\n g: rgba[1],\n b: rgba[2],\n a: Math.round((rgba[3] / 255) * 100) / 100,\n }\n}\n\nexport function HexToHSVA (hex: Hex): HSVA {\n const rgb = HexToRGBA(hex)\n return RGBAtoHSVA(rgb)\n}\n\nexport function HSVAtoHex (hsva: HSVA): Hex {\n return RGBAtoHex(HSVAtoRGBA(hsva))\n}\n\nexport function parseHex (hex: string): Hex {\n if (hex.startsWith('#')) {\n hex = hex.slice(1)\n }\n\n hex = hex.replace(/([^0-9a-f])/gi, 'F')\n\n if (hex.length === 3 || hex.length === 4) {\n hex = hex.split('').map(x => x + x).join('')\n }\n\n if (hex.length === 6) {\n hex = padEnd(hex, 8, 'F')\n } else {\n hex = padEnd(padEnd(hex, 6), 8, 'F')\n }\n\n return `#${hex}`.toUpperCase().substr(0, 9)\n}\n\nexport function parseGradient (\n gradient: string,\n colors: Record>,\n currentTheme: Partial,\n) {\n return gradient.replace(/([a-z]+(\\s[a-z]+-[1-5])?)(?=$|,)/gi, x => {\n return classToHex(x, colors, currentTheme) || x\n }).replace(/(rgba\\()#[0-9a-f]+(?=,)/gi, x => {\n return 'rgba(' + Object.values(HexToRGBA(parseHex(x.replace(/rgba\\(/, '')))).slice(0, 3).join(',')\n })\n}\n\nexport function RGBtoInt (rgba: RGBA): ColorInt {\n return (rgba.r << 16) + (rgba.g << 8) + rgba.b\n}\n\n/**\n * Returns the contrast ratio (1-21) between two colors.\n *\n * @param c1 First color\n * @param c2 Second color\n */\nexport function contrastRatio (c1: RGBA, c2: RGBA): number {\n const [, y1] = toXYZ(RGBtoInt(c1))\n const [, y2] = toXYZ(RGBtoInt(c2))\n\n return (Math.max(y1, y2) + 0.05) / (Math.min(y1, y2) + 0.05)\n}\n","/* eslint-disable no-console */\nimport Vuetify from '../framework'\n\nfunction createMessage (message: string, vm?: any, parent?: any): string | void {\n if (Vuetify.config.silent) return\n\n if (parent) {\n vm = {\n _isVue: true,\n $parent: parent,\n $options: vm,\n }\n }\n\n if (vm) {\n // Only show each message once per instance\n vm.$_alreadyWarned = vm.$_alreadyWarned || []\n if (vm.$_alreadyWarned.includes(message)) return\n vm.$_alreadyWarned.push(message)\n }\n\n return `[Vuetify] ${message}` + (\n vm ? generateComponentTrace(vm) : ''\n )\n}\n\nexport function consoleInfo (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.info(newMessage)\n}\n\nexport function consoleWarn (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.warn(newMessage)\n}\n\nexport function consoleError (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.error(newMessage)\n}\n\nexport function deprecate (original: string, replacement: string, vm?: any, parent?: any) {\n consoleWarn(`[UPGRADE] '${original}' is deprecated, use '${replacement}' instead.`, vm, parent)\n}\nexport function breaking (original: string, replacement: string, vm?: any, parent?: any) {\n consoleError(`[BREAKING] '${original}' has been removed, use '${replacement}' instead. For more information, see the upgrade guide https://github.com/vuetifyjs/vuetify/releases/tag/v2.0.0#user-content-upgrade-guide`, vm, parent)\n}\nexport function removed (original: string, vm?: any, parent?: any) {\n consoleWarn(`[REMOVED] '${original}' has been removed. You can safely omit it.`, vm, parent)\n}\n\n/**\n * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = (str: string) => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nfunction formatComponentName (vm: any, includeFile?: boolean): string {\n if (vm.$root === vm) {\n return ''\n }\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {}\n let name = options.name || options._componentTag\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ``) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nfunction generateComponentTrace (vm: any): string {\n if (vm._isVue && vm.$parent) {\n const tree: any[] = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (tree.length > 0) {\n const last: any = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : ' '.repeat(5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n : formatComponentName(vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm)})`\n }\n}\n","/**\n * Returns:\n * - 'null' if the node is not attached to the DOM\n * - the root node (HTMLDocument | ShadowRoot) otherwise\n */\nexport function attachedRoot (node: Node): null | HTMLDocument | ShadowRoot {\n /* istanbul ignore next */\n if (typeof node.getRootNode !== 'function') {\n // Shadow DOM not supported (IE11), lets find the root of this node\n while (node.parentNode) node = node.parentNode\n\n // The root parent is the document if the node is attached to the DOM\n if (node !== document) return null\n\n return document\n }\n\n const root = node.getRootNode()\n\n // The composed root node is the document if the node is attached to the DOM\n if (root !== document && root.getRootNode({ composed: true }) !== document) return null\n\n return root as HTMLDocument | ShadowRoot\n}\n","import Vue from 'vue'\nimport { VNode, VNodeDirective } from 'vue/types'\nimport { VuetifyIcon } from 'vuetify/types/services/icons'\nimport { DataTableCompareFunction, SelectItemKey, ItemGroup } from 'vuetify/types'\n\nexport function createSimpleFunctional (\n c: string,\n el = 'div',\n name?: string\n) {\n return Vue.extend({\n name: name || c.replace(/__/g, '-'),\n\n functional: true,\n\n props: {\n tag: {\n type: String,\n default: el,\n },\n },\n\n render (h, { data, props, children }): VNode {\n data.staticClass = (`${c} ${data.staticClass || ''}`).trim()\n\n return h(props.tag, data, children)\n },\n })\n}\n\nexport type BindingConfig = Pick\nexport function directiveConfig (binding: BindingConfig, defaults = {}): VNodeDirective {\n return {\n ...defaults,\n ...binding.modifiers,\n value: binding.arg,\n ...(binding.value || {}),\n }\n}\n\nexport function addOnceEventListener (\n el: EventTarget,\n eventName: string,\n cb: (event: Event) => void,\n options: boolean | AddEventListenerOptions = false\n): void {\n const once = (event: Event) => {\n cb(event)\n el.removeEventListener(eventName, once, options)\n }\n\n el.addEventListener(eventName, once, options)\n}\n\nlet passiveSupported = false\ntry {\n if (typeof window !== 'undefined') {\n const testListenerOpts = Object.defineProperty({}, 'passive', {\n get: () => {\n passiveSupported = true\n },\n }) as EventListener & EventListenerOptions\n\n window.addEventListener('testListener', testListenerOpts, testListenerOpts)\n window.removeEventListener('testListener', testListenerOpts, testListenerOpts)\n }\n} catch (e) { console.warn(e) } /* eslint-disable-line no-console */\nexport { passiveSupported }\n\nexport function addPassiveEventListener (\n el: EventTarget,\n event: string,\n cb: (event: any) => void,\n options: {}\n): void {\n el.addEventListener(event, cb, passiveSupported ? options : false)\n}\n\nexport function getNestedValue (obj: any, path: (string | number)[], fallback?: any): any {\n const last = path.length - 1\n\n if (last < 0) return obj === undefined ? fallback : obj\n\n for (let i = 0; i < last; i++) {\n if (obj == null) {\n return fallback\n }\n obj = obj[path[i]]\n }\n\n if (obj == null) return fallback\n\n return obj[path[last]] === undefined ? fallback : obj[path[last]]\n}\n\nexport function deepEqual (a: any, b: any): boolean {\n if (a === b) return true\n\n if (\n a instanceof Date &&\n b instanceof Date &&\n a.getTime() !== b.getTime()\n ) {\n // If the values are Date, compare them as timestamps\n return false\n }\n\n if (a !== Object(a) || b !== Object(b)) {\n // If the values aren't objects, they were already checked for equality\n return false\n }\n\n const props = Object.keys(a)\n\n if (props.length !== Object.keys(b).length) {\n // Different number of props, don't bother to check\n return false\n }\n\n return props.every(p => deepEqual(a[p], b[p]))\n}\n\nexport function getObjectValueByPath (obj: any, path: string, fallback?: any): any {\n // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n if (obj == null || !path || typeof path !== 'string') return fallback\n if (obj[path] !== undefined) return obj[path]\n path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n path = path.replace(/^\\./, '') // strip a leading dot\n return getNestedValue(obj, path.split('.'), fallback)\n}\n\nexport function getPropertyFromItem (\n item: object,\n property: SelectItemKey,\n fallback?: any\n): any {\n if (property == null) return item === undefined ? fallback : item\n\n if (item !== Object(item)) return fallback === undefined ? item : fallback\n\n if (typeof property === 'string') return getObjectValueByPath(item, property, fallback)\n\n if (Array.isArray(property)) return getNestedValue(item, property, fallback)\n\n if (typeof property !== 'function') return fallback\n\n const value = property(item, fallback)\n\n return typeof value === 'undefined' ? fallback : value\n}\n\nexport function createRange (length: number): number[] {\n return Array.from({ length }, (v, k) => k)\n}\n\nexport function getZIndex (el?: Element | null): number {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\n\n if (!index) return getZIndex(el.parentNode as Element)\n return index\n}\n\nexport function filterObjectOnKeys (obj: T, keys: K[]): { [N in K]: T[N] } {\n const filtered = {} as { [N in K]: T[N] }\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (typeof obj[key] !== 'undefined') {\n filtered[key] = obj[key]\n }\n }\n\n return filtered\n}\n\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\n if (str == null || str === '') {\n return undefined\n } else if (isNaN(+str!)) {\n return String(str)\n } else {\n return `${Number(str)}${unit}`\n }\n}\n\nexport function kebabCase (str: string): string {\n return (str || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n}\n\nexport function isObject (obj: any): obj is object {\n return obj !== null && typeof obj === 'object'\n}\n\n// KeyboardEvent.keyCode aliases\nexport const keyCodes = Object.freeze({\n enter: 13,\n tab: 9,\n delete: 46,\n esc: 27,\n space: 32,\n up: 38,\n down: 40,\n left: 37,\n right: 39,\n end: 35,\n home: 36,\n del: 46,\n backspace: 8,\n insert: 45,\n pageup: 33,\n pagedown: 34,\n shift: 16,\n})\n\n/**\n * This remaps internal names like '$cancel' or '$vuetify.icons.cancel'\n * to the current name or component for that icon.\n */\nexport function remapInternalIcon (vm: Vue, iconName: string): VuetifyIcon {\n // Look for custom component in the configuration\n const component = vm.$vuetify.icons.component\n\n // Look for overrides\n if (iconName.startsWith('$')) {\n // Get the target icon name\n const iconPath = `$vuetify.icons.values.${iconName.split('$').pop()!.split('.').pop()}`\n\n // Now look up icon indirection name,\n // e.g. '$vuetify.icons.values.cancel'\n const override = getObjectValueByPath(vm, iconPath, iconName)\n\n if (typeof override === 'string') iconName = override\n else return override\n }\n\n if (component == null) {\n return iconName\n }\n\n return {\n component,\n props: {\n icon: iconName,\n },\n }\n}\n\nexport function keys (o: O) {\n return Object.keys(o) as (keyof O)[]\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nconst camelizeRE = /-(\\w)/g\nexport const camelize = (str: string): string => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')\n}\n\n/**\n * Returns the set difference of B and A, i.e. the set of elements in B but not in A\n */\nexport function arrayDiff (a: any[], b: any[]): any[] {\n const diff: any[] = []\n for (let i = 0; i < b.length; i++) {\n if (a.indexOf(b[i]) < 0) diff.push(b[i])\n }\n return diff\n}\n\n/**\n * Makes the first character of a string uppercase\n */\nexport function upperFirst (str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nexport function groupItems (\n items: T[],\n groupBy: string[],\n groupDesc: boolean[]\n): ItemGroup[] {\n const key = groupBy[0]\n const groups: ItemGroup[] = []\n let current\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const val = getObjectValueByPath(item, key, null)\n if (current !== val) {\n current = val\n groups.push({\n name: val ?? '',\n items: [],\n })\n }\n groups[groups.length - 1].items.push(item)\n }\n return groups\n}\n\nexport function wrapInArray (v: T | T[] | null | undefined): T[] { return v != null ? Array.isArray(v) ? v : [v] : [] }\n\nexport function sortItems (\n items: T[],\n sortBy: string[],\n sortDesc: boolean[],\n locale: string,\n customSorters?: Record>\n): T[] {\n if (sortBy === null || !sortBy.length) return items\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return items.sort((a, b) => {\n for (let i = 0; i < sortBy.length; i++) {\n const sortKey = sortBy[i]\n\n let sortA = getObjectValueByPath(a, sortKey)\n let sortB = getObjectValueByPath(b, sortKey)\n\n if (sortDesc[i]) {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters && customSorters[sortKey]) {\n const customResult = customSorters[sortKey](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Check if both cannot be evaluated\n if (sortA === null && sortB === null) {\n continue\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => (s || '').toString().toLocaleLowerCase())\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n\nexport function defaultFilter (value: any, search: string | null, item: any) {\n return value != null &&\n search != null &&\n typeof value !== 'boolean' &&\n value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1\n}\n\nexport function searchItems (items: T[], search: string): T[] {\n if (!search) return items\n search = search.toString().toLowerCase()\n if (search.trim() === '') return items\n\n return items.filter((item: any) => Object.keys(item).some(key => defaultFilter(getObjectValueByPath(item, key), search, item)))\n}\n\n/**\n * Returns:\n * - 'normal' for old style slots - `