{"version":3,"file":"arrayUtils.mjs","sources":["../../../src/utils/arrayUtils.ts"],"sourcesContent":["import { SortOrder } from '@grafana/schema';\n\n/** @internal */\nexport function moveItemImmutably<T>(arr: T[], from: number, to: number) {\n  const clone = [...arr];\n  Array.prototype.splice.call(clone, to, 0, Array.prototype.splice.call(clone, from, 1)[0]);\n  return clone;\n}\n\n/** @internal */\nexport function insertBeforeImmutably<T>(array: T[], item: T, index: number): T[] {\n  if (index < 0 || index > array.length) {\n    throw new Error('Index out of bounds');\n  }\n\n  const clone = [...array];\n  clone.splice(index, 0, item);\n\n  return clone;\n}\n\n/** @internal */\nexport function insertAfterImmutably<T>(array: T[], item: T, index: number): T[] {\n  if (index < 0 || index > array.length) {\n    throw new Error('Index out of bounds');\n  }\n\n  const clone = [...array];\n  clone.splice(index + 1, 0, item);\n\n  return clone;\n}\n\n/**\n * Given a sort order and a value, return a function that can be used to sort values\n * Null/undefined/empty string values are always sorted to the end regardless of the sort order provided\n */\nconst collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nconst numericCompare = (a: number, b: number) => a - b;\n\nexport function sortValues(sort: SortOrder.Ascending | SortOrder.Descending) {\n  return (a: unknown, b: unknown) => {\n    if (a === b) {\n      return 0;\n    }\n\n    if (b == null || (typeof b === 'string' && b.trim() === '')) {\n      return -1;\n    }\n    if (a == null || (typeof a === 'string' && a?.trim() === '')) {\n      return 1;\n    }\n\n    let compareFn: (a: any, b: any) => number = collator.compare;\n\n    if (typeof a === 'number' && typeof b === 'number') {\n      compareFn = numericCompare;\n    }\n\n    if (sort === SortOrder.Descending) {\n      return compareFn(b, a);\n    }\n\n    return compareFn(a, b);\n  };\n}\n"],"names":[],"mappings":";;;AAGO,SAAS,iBAAA,CAAqB,GAAA,EAAU,IAAA,EAAc,EAAA,EAAY;AACvE,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,GAAG,CAAA;AACrB,EAAA,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,KAAK,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AACxF,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,qBAAA,CAAyB,KAAA,EAAY,IAAA,EAAS,KAAA,EAAoB;AAChF,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ;AACrC,IAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,KAAK,CAAA;AACvB,EAAA,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA;AAE3B,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,oBAAA,CAAwB,KAAA,EAAY,IAAA,EAAS,KAAA,EAAoB;AAC/E,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ;AACrC,IAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,KAAK,CAAA;AACvB,EAAA,KAAA,CAAM,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA;AAE/B,EAAA,OAAO,KAAA;AACT;AAMA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAA,EAAW,EAAE,OAAA,EAAS,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,CAAA;AACpF,MAAM,cAAA,GAAiB,CAAC,CAAA,EAAW,CAAA,KAAc,CAAA,GAAI,CAAA;AAE9C,SAAS,WAAW,IAAA,EAAkD;AAC3E,EAAA,OAAO,CAAC,GAAY,CAAA,KAAe;AACjC,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAA,IAAK,QAAS,OAAO,CAAA,KAAM,YAAY,CAAA,CAAE,IAAA,OAAW,EAAA,EAAK;AAC3D,MAAA,OAAO,CAAA,CAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAK,IAAA,IAAS,OAAO,MAAM,QAAA,IAAA,CAAY,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,YAAW,EAAA,EAAK;AAC5D,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI,YAAwC,QAAA,CAAS,OAAA;AAErD,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,MAAA,SAAA,GAAY,cAAA;AAAA,IACd;AAEA,IAAA,IAAI,IAAA,KAAS,UAAU,UAAA,EAAY;AACjC,MAAA,OAAO,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,IACvB;AAEA,IAAA,OAAO,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,EACvB,CAAA;AACF;;;;"}