{"version":3,"file":"7836.7e2f7180984229d69bc9.js","mappings":"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","sources":["webpack://grafana/./packages/grafana-data/src/datetime/common.ts","webpack://grafana/./packages/grafana-data/src/datetime/datemath.ts","webpack://grafana/./packages/grafana-data/src/datetime/formats.ts","webpack://grafana/./packages/grafana-data/src/datetime/formatter.ts","webpack://grafana/./packages/grafana-data/src/datetime/moment_wrapper.ts","webpack://grafana/./packages/grafana-data/src/datetime/parser.ts","webpack://grafana/./packages/grafana-data/src/datetime/rangeutil.ts","webpack://grafana/./packages/grafana-data/src/events/EventBus.ts","webpack://grafana/./packages/grafana-data/src/events/eventFactory.ts","webpack://grafana/./packages/grafana-data/src/events/types.ts","webpack://grafana/./packages/grafana-data/src/monaco/languageRegistry.ts","webpack://grafana/./packages/grafana-data/src/rbac/rbac.ts","webpack://grafana/./packages/grafana-data/src/text/sanitize.ts","webpack://grafana/./packages/grafana-data/src/text/string.ts","webpack://grafana/./packages/grafana-data/src/themes/colorManipulator.ts","webpack://grafana/./packages/grafana-data/src/themes/context.tsx","webpack://grafana/./packages/grafana-data/src/themes/breakpoints.ts","webpack://grafana/./packages/grafana-data/src/themes/palette.ts","webpack://grafana/./packages/grafana-data/src/themes/createColors.ts","webpack://grafana/./packages/grafana-data/src/themes/createComponents.ts","webpack://grafana/./packages/grafana-data/src/themes/createShadows.ts","webpack://grafana/./packages/grafana-data/src/themes/createShape.ts","webpack://grafana/./packages/grafana-data/src/themes/createSpacing.ts","webpack://grafana/./packages/grafana-data/src/themes/createTransitions.ts","webpack://grafana/./packages/grafana-data/src/themes/createTypography.ts","webpack://grafana/./packages/grafana-data/src/themes/createV1Theme.ts","webpack://grafana/./packages/grafana-data/src/themes/createVisualizationColors.ts","webpack://grafana/./packages/grafana-data/src/themes/zIndex.ts","webpack://grafana/./packages/grafana-data/src/themes/createTheme.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/aubergine.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/debug.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/desertbloom.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/gildedgrove.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/mars.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/matrix.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/sapphiredusk.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/synthwave.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/tron.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/victorian.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/zen.ts","webpack://grafana/./packages/grafana-data/src/themes/themeDefinitions/gloom.ts","webpack://grafana/./packages/grafana-data/src/themes/registry.ts","webpack://grafana/./packages/grafana-data/src/types/dataFrame.ts","webpack://grafana/./packages/grafana-data/src/types/fieldColor.ts","webpack://grafana/./packages/grafana-data/src/types/icon.ts","webpack://grafana/./packages/grafana-data/src/types/orgs.ts","webpack://grafana/./packages/grafana-data/src/types/plugin.ts","webpack://grafana/./packages/grafana-data/src/types/theme.ts","webpack://grafana/./packages/grafana-data/src/types/time.ts","webpack://grafana/./packages/grafana-data/src/utils/Registry.ts","webpack://grafana/./packages/grafana-data/src/utils/deprecationWarning.ts","webpack://grafana/./packages/grafana-data/src/utils/selectUtils.ts","webpack://grafana/./packages/grafana-data/src/valueFormats/symbolFormatters.ts","webpack://grafana/./packages/grafana-data/src/valueFormats/arithmeticFormatters.ts","webpack://grafana/./packages/grafana-data/src/valueFormats/dateTimeFormatters.ts","webpack://grafana/./packages/grafana-data/src/valueFormats/categories.ts","webpack://grafana/./packages/grafana-data/src/valueFormats/valueFormats.ts","webpack://grafana/./packages/grafana-e2e-selectors/src/resolver.ts","webpack://grafana/./packages/grafana-e2e-selectors/src/selectors/constants.ts","webpack://grafana/./packages/grafana-e2e-selectors/src/selectors/components.ts","webpack://grafana/./packages/grafana-e2e-selectors/src/selectors/pages.ts","webpack://grafana/./packages/grafana-e2e-selectors/src/selectors/index.ts","webpack://grafana/./packages/grafana-runtime/src/config.ts","webpack://grafana/./packages/grafana-runtime/src/services/appEvents.ts","webpack://grafana/./packages/grafana-runtime/src/services/backendSrv.ts","webpack://grafana/./packages/grafana-runtime/src/utils/licensing.ts","webpack://grafana/./packages/grafana-schema/src/common/common.gen.ts","webpack://grafana/./packages/grafana-ui/src/components/Button/Button.tsx","webpack://grafana/./packages/grafana-ui/src/components/ErrorBoundary/ErrorWithStack.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/commonStyles.ts","webpack://grafana/./packages/grafana-ui/src/components/Icon/Icon.tsx","webpack://grafana/./packages/grafana-ui/src/components/Icon/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/IconButton/IconButton.tsx","webpack://grafana/./packages/grafana-ui/src/components/Input/AutoSizeInputContext.ts","webpack://grafana/./packages/grafana-ui/src/components/Input/Input.tsx","webpack://grafana/./packages/grafana-ui/src/components/Layout/Box/Box.tsx","webpack://grafana/./packages/grafana-ui/src/components/Layout/Stack/Stack.tsx","webpack://grafana/./packages/grafana-ui/src/components/Layout/utils/responsiveness.tsx","webpack://grafana/./packages/grafana-ui/src/components/Layout/utils/styles.ts","webpack://grafana/./packages/grafana-ui/src/components/LoadingPlaceholder/LoadingPlaceholder.tsx","webpack://grafana/./packages/grafana-ui/src/components/Monaco/suggestions.ts","webpack://grafana/./packages/grafana-ui/src/components/Monaco/CodeEditor.tsx","webpack://grafana/./packages/grafana-ui/src/utils/useAsyncDependency.ts","webpack://grafana/./packages/grafana-ui/src/components/Monaco/ReactMonacoEditorLazy.tsx","webpack://grafana/./packages/grafana-ui/src/components/Monaco/types.ts","webpack://grafana/./packages/grafana-ui/src/components/Portal/Portal.tsx","webpack://grafana/./packages/grafana-ui/src/components/ScrollContainer/ScrollIndicators.tsx","webpack://grafana/./packages/grafana-ui/src/components/ScrollContainer/ScrollContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/MultiValue.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/CustomInput.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/DropdownIndicator.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/IndicatorsContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/InputControl.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/SelectOptionGroup.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/SelectOptionGroupHeader.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/ValueContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/SelectBase.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/Select.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/SelectContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/SelectMenu.tsx","webpack://grafana/./packages/grafana-ui/src/utils/useDelayedSwitch.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/SingleValue.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/getSelectStyles.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/resetSelectStyles.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/types.ts","webpack://grafana/./packages/grafana-ui/src/components/Spinner/Spinner.tsx","webpack://grafana/./packages/grafana-ui/src/components/Text/TruncatedText.tsx","webpack://grafana/./packages/grafana-ui/src/components/Text/Text.tsx","webpack://grafana/./packages/grafana-ui/src/components/Text/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Tooltip/Tooltip.tsx","webpack://grafana/./packages/grafana-ui/src/components/UsersIndicator/UserIcon.tsx","webpack://grafana/./packages/grafana-ui/src/components/transitions/FadeTransition.tsx","webpack://grafana/./packages/grafana-ui/src/components/transitions/SlideOutTransition.tsx","webpack://grafana/./packages/grafana-ui/src/themes/ThemeContext.tsx","webpack://grafana/./packages/grafana-ui/src/themes/mixins.ts","webpack://grafana/./packages/grafana-ui/src/themes/stylesFactory.ts","webpack://grafana/./packages/grafana-ui/src/types/icon.ts","webpack://grafana/./packages/grafana-ui/src/utils/i18n.tsx","webpack://grafana/./packages/grafana-ui/src/utils/keyframes.ts","webpack://grafana/./packages/grafana-ui/src/utils/tooltipUtils.ts","webpack://grafana/./public/app/core/app_events.ts","webpack://grafana/./public/app/core/config.ts","webpack://grafana/./public/app/core/monacoEnv.ts","webpack://grafana/./public/app/core/profiler.ts","webpack://grafana/./public/app/core/services/context_srv.ts","webpack://grafana/./public/app/core/time_series2.ts","webpack://grafana/./public/app/core/trustedTypePolicies.ts","webpack://grafana/./public/app/core/utils/ConfigProvider.tsx","webpack://grafana/./public/app/core/utils/CorsWorker.ts","webpack://grafana/./public/app/core/utils/auth.ts","webpack://grafana/./public/app/types/accessControl.ts","webpack://grafana/./public/app/types/acl.ts","webpack://grafana/./public/app/types/dashboard.ts","webpack://grafana/./public/app/types/events.ts","webpack://grafana/./public/app/types/explore.ts","webpack://grafana/./public/app/types/serviceaccount.ts","webpack://grafana/./public/app/types/appNotifications.ts","webpack://grafana/./public/app/types/store.ts","webpack://grafana/./public/lib/monaco-languages/kusto.ts","webpack://grafana/./public/lib/monaco-languages/index.ts"],"sourcesContent":["import { isEmpty } from 'lodash';\n\nimport { TimeZone, DefaultTimeZone } from '../types/time';\n\n/**\n * Used for helper functions handling time zones.\n *\n * @public\n */\nexport interface TimeZoneOptions {\n  /**\n   * Specify this if you want to override the timeZone used when parsing or formatting\n   * a date and time value. If no timeZone is set, the default timeZone for the current\n   * user is used.\n   */\n  timeZone?: TimeZone;\n}\n\n/**\n * The type describing date and time options. Used for all the helper functions\n * available to parse or format date and time values.\n *\n * @public\n */\nexport interface DateTimeOptions extends TimeZoneOptions {\n  /**\n   * Specify a {@link https://momentjs.com/docs/#/displaying/format | momentjs} format to\n   * use a custom formatting pattern or parsing pattern. If no format is set,\n   * then system configured default format is used.\n   */\n  format?: string;\n}\n\n/**\n * The type to describe the time zone resolver function that will be used to access\n * the default time zone of a user.\n *\n * @public\n */\nexport type TimeZoneResolver = () => TimeZone | undefined;\n\nlet defaultTimeZoneResolver: TimeZoneResolver = () => DefaultTimeZone;\n\n/**\n * Used by Grafana internals to set the {@link TimeZoneResolver} to access the current\n * user timeZone.\n *\n * @internal\n */\nexport const setTimeZoneResolver = (resolver: TimeZoneResolver) => {\n  defaultTimeZoneResolver = resolver ?? defaultTimeZoneResolver;\n};\n\n/**\n * Used to get the current selected time zone. If a valid time zone is passed in the\n * options it will be returned. If no valid time zone is passed either the time zone\n * configured for the user account will be returned or the default for Grafana.\n *\n * @public\n */\nexport const getTimeZone = <T extends TimeZoneOptions>(options?: T): TimeZone => {\n  if (options?.timeZone && !isEmpty(options.timeZone)) {\n    return options.timeZone;\n  }\n  return defaultTimeZoneResolver() ?? DefaultTimeZone;\n};\n","import { isDate } from 'lodash';\n\nimport { TimeZone } from '@grafana/schema';\n\nimport {\n  DateTime,\n  dateTime,\n  dateTimeAsMoment,\n  dateTimeForTimeZone,\n  DateTimeInput,\n  DurationUnit,\n  isDateTime,\n  ISO_8601,\n} from './moment_wrapper';\n\nconst units: string[] = ['y', 'M', 'w', 'd', 'h', 'm', 's', 'Q'] satisfies DurationUnit[];\n\nconst isDurationUnit = (value: string): value is DurationUnit => {\n  return units.includes(value);\n};\n\n/**\n * Determine if a string contains a relative date time.\n * @param text\n */\nexport function isMathString(text: string | DateTime | Date): boolean {\n  if (!text) {\n    return false;\n  }\n\n  if (typeof text === 'string' && (text.substring(0, 3) === 'now' || text.includes('||'))) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * @deprecated use toDateTime instead\n * Parses different types input to a moment instance. There is a specific formatting language that can be used\n * if text arg is string. See unit tests for examples.\n * @param text\n * @param roundUp See parseDateMath function.\n * @param timezone Only string 'utc' is acceptable here, for anything else, local timezone is used.\n */\nexport function parse(\n  text?: string | DateTime | Date | null,\n  roundUp?: boolean,\n  timezone?: TimeZone,\n  fiscalYearStartMonth?: number\n): DateTime | undefined {\n  if (!text) {\n    return undefined;\n  }\n  return toDateTime(text, { roundUp, timezone, fiscalYearStartMonth });\n}\n\nexport interface ConversionOptions {\n  /**\n   * Set the time to endOf time unit, otherwise to startOf time unit.\n   */\n  roundUp?: boolean;\n  /**\n   * Only string 'utc' is acceptable here, for anything else, local timezone is used.\n   */\n  timezone?: TimeZone;\n  /**\n   * Setting for which month is the first month of the fiscal year.\n   */\n  fiscalYearStartMonth?: number;\n  /**\n   * DateTimeInput to use as now. Useful when parsing multiple values and now needs to be the same. Without this, comparing results from subsequent parses is not guaranteed to be deterministic.\n   */\n  now?: DateTimeInput;\n}\n\n/**\n * @param dateTimeRep A DateTime object, a Date object or a string representation of a specific time.\n * @param options Options for converting to DateTime\n * @returns A DateTime object if possible, undefined if not.\n */\nexport function toDateTime(dateTimeRep: string | DateTime | Date, options: ConversionOptions): DateTime | undefined {\n  if (typeof dateTimeRep !== 'string') {\n    if (isDateTime(dateTimeRep)) {\n      return dateTimeRep;\n    }\n\n    if (isDate(dateTimeRep)) {\n      return dateTime(dateTimeRep);\n    }\n\n    // We got some non string which is not a moment nor Date. TS should be able to check for that but not always.\n    return undefined;\n  } else {\n    let time: DateTime;\n    let mathString = '';\n    let index = -1;\n    let parseString = '';\n\n    if (dateTimeRep.substring(0, 3) === 'now') {\n      time = dateTimeForTimeZone(options.timezone, options.now);\n      mathString = dateTimeRep.substring('now'.length);\n    } else {\n      index = dateTimeRep.indexOf('||');\n      if (index === -1) {\n        parseString = dateTimeRep;\n        mathString = ''; // nothing else\n      } else {\n        parseString = dateTimeRep.substring(0, index);\n        mathString = dateTimeRep.substring(index + 2);\n      }\n      // We're going to just require ISO8601 timestamps, k?\n      time = dateTime(parseString, ISO_8601);\n    }\n\n    if (!mathString.length) {\n      return time;\n    }\n\n    return parseDateMath(mathString, time, options.roundUp, options.fiscalYearStartMonth);\n  }\n}\n\n/**\n * Checks if text is a valid date which in this context means that it is either a Moment instance or it can be parsed\n * by parse function. See parse function to see what is considered acceptable.\n * @param text\n */\nexport function isValid(text: string | DateTime): boolean {\n  const date = parse(text);\n  if (!date) {\n    return false;\n  }\n\n  if (isDateTime(date)) {\n    return date.isValid();\n  }\n\n  return false;\n}\n\n/**\n * Parses math part of the time string and shifts supplied time according to that math. See unit tests for examples.\n * @param mathString\n * @param time\n * @param roundUp If true it will round the time to endOf time unit, otherwise to startOf time unit.\n */\nexport function parseDateMath(\n  mathString: string,\n  time: DateTime,\n  roundUp?: boolean,\n  fiscalYearStartMonth = 0\n): DateTime | undefined {\n  const strippedMathString = mathString.replace(/\\s/g, '');\n  const result = dateTime(time);\n  let i = 0;\n  const len = strippedMathString.length;\n\n  while (i < len) {\n    const c = strippedMathString.charAt(i++);\n    let type;\n    let num;\n    let unitString: string;\n    let isFiscal = false;\n\n    if (c === '/') {\n      type = 0;\n    } else if (c === '+') {\n      type = 1;\n    } else if (c === '-') {\n      type = 2;\n    } else {\n      return undefined;\n    }\n\n    if (isNaN(parseInt(strippedMathString.charAt(i), 10))) {\n      num = 1;\n    } else if (strippedMathString.length === 2) {\n      num = parseInt(strippedMathString.charAt(i), 10);\n    } else {\n      const numFrom = i;\n      while (!isNaN(parseInt(strippedMathString.charAt(i), 10))) {\n        i++;\n        if (i > 10) {\n          return undefined;\n        }\n      }\n      num = parseInt(strippedMathString.substring(numFrom, i), 10);\n    }\n\n    if (type === 0) {\n      // rounding is only allowed on whole, single, units (eg M or 1M, not 0.5M or 2M)\n      if (num !== 1) {\n        return undefined;\n      }\n    }\n\n    unitString = strippedMathString.charAt(i++);\n\n    if (unitString === 'f') {\n      unitString = strippedMathString.charAt(i++);\n      isFiscal = true;\n    }\n\n    const unit = unitString;\n\n    if (isDurationUnit(unit)) {\n      if (type === 0) {\n        if (isFiscal) {\n          roundToFiscal(fiscalYearStartMonth, result, unit, roundUp);\n        } else {\n          if (roundUp) {\n            result.endOf(unit);\n          } else {\n            result.startOf(unit);\n          }\n        }\n      } else if (type === 1) {\n        result.add(num, unit);\n      } else if (type === 2) {\n        result.subtract(num, unit);\n      }\n    } else {\n      return undefined;\n    }\n  }\n  return result;\n}\n\nexport function roundToFiscal(fyStartMonth: number, dateTime: DateTime, unit: string, roundUp: boolean | undefined) {\n  switch (unit) {\n    case 'y':\n      if (roundUp) {\n        roundToFiscal(fyStartMonth, dateTime, unit, false)?.add(11, 'M').endOf('M');\n      } else {\n        dateTime.subtract((dateTimeAsMoment(dateTime).month() - fyStartMonth + 12) % 12, 'M').startOf('M');\n      }\n      return dateTime;\n    case 'Q':\n      if (roundUp) {\n        roundToFiscal(fyStartMonth, dateTime, unit, false)?.add(2, 'M').endOf('M');\n      } else {\n        // why + 12? to ensure this number is always a positive offset from fyStartMonth\n        dateTime.subtract((dateTimeAsMoment(dateTime).month() - fyStartMonth + 12) % 3, 'M').startOf('M');\n      }\n      return dateTime;\n    default:\n      return undefined;\n  }\n}\n","export interface SystemDateFormatSettings {\n  fullDate: string;\n  interval: {\n    millisecond: string;\n    second: string;\n    minute: string;\n    hour: string;\n    day: string;\n    month: string;\n    year: string;\n  };\n  useBrowserLocale: boolean;\n}\n\nconst DEFAULT_SYSTEM_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';\nconst DEFAULT_SYSTEM_DATE_MS_FORMAT = 'YYYY-MM-DD HH:mm:ss.SSS';\n\nexport class SystemDateFormatsState {\n  fullDate = DEFAULT_SYSTEM_DATE_FORMAT;\n  fullDateMS = DEFAULT_SYSTEM_DATE_MS_FORMAT;\n  interval = {\n    millisecond: 'HH:mm:ss.SSS',\n    second: 'HH:mm:ss',\n    minute: 'HH:mm',\n    hour: 'MM/DD HH:mm',\n    day: 'MM/DD',\n    month: 'YYYY-MM',\n    year: 'YYYY',\n  };\n\n  update(settings: SystemDateFormatSettings) {\n    this.fullDate = settings.fullDate;\n    this.interval = settings.interval;\n\n    if (settings.useBrowserLocale) {\n      this.useBrowserLocale();\n    }\n  }\n\n  useBrowserLocale() {\n    this.fullDate = localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    });\n\n    // ES5 doesn't support `DateTimeFormatOptions.fractionalSecondDigits` so we have to use\n    // a hack with string replacement.\n    this.fullDateMS = this.fullDate.replace('ss', 'ss.SSS');\n\n    this.interval.millisecond = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false },\n      null,\n      this.interval.second\n    ).replace('ss', 'ss.SSS');\n    this.interval.second = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false },\n      null,\n      this.interval.second\n    );\n    this.interval.minute = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', hour12: false },\n      null,\n      this.interval.minute\n    );\n    this.interval.hour = localTimeFormat(\n      { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false },\n      null,\n      this.interval.hour\n    );\n    this.interval.day = localTimeFormat({ month: '2-digit', day: '2-digit', hour12: false }, null, this.interval.day);\n    this.interval.month = localTimeFormat(\n      { year: 'numeric', month: '2-digit', hour12: false },\n      null,\n      this.interval.month\n    );\n  }\n\n  getTimeFieldUnit(useMsResolution?: boolean) {\n    return `time:${useMsResolution ? this.fullDateMS : this.fullDate}`;\n  }\n}\n\n/**\n * localTimeFormat helps to generate date formats for momentjs based on browser's locale\n *\n * @param locale browser locale, or default\n * @param options DateTimeFormatOptions to format date\n * @param fallback default format if Intl API is not present\n */\nexport function localTimeFormat(\n  options: Intl.DateTimeFormatOptions,\n  locale?: string | string[] | null,\n  fallback?: string\n): string {\n  if (missingIntlDateTimeFormatSupport()) {\n    return fallback ?? DEFAULT_SYSTEM_DATE_FORMAT;\n  }\n\n  if (!locale && navigator) {\n    locale = [...navigator.languages];\n  }\n\n  // https://momentjs.com/docs/#/displaying/format/\n  const dateTimeFormat = new Intl.DateTimeFormat(locale || undefined, options);\n  const parts = dateTimeFormat.formatToParts(new Date());\n  const hour12 = dateTimeFormat.resolvedOptions().hour12;\n\n  const mapping: { [key: string]: string } = {\n    year: 'YYYY',\n    month: 'MM',\n    day: 'DD',\n    hour: hour12 ? 'hh' : 'HH',\n    minute: 'mm',\n    second: 'ss',\n    weekday: 'ddd',\n    era: 'N',\n    dayPeriod: 'A',\n    timeZoneName: 'Z',\n  };\n\n  return parts.map((part) => mapping[part.type] || part.value).join('');\n}\n\nexport const systemDateFormats = new SystemDateFormatsState();\n\nconst missingIntlDateTimeFormatSupport = (): boolean => {\n  return !('DateTimeFormat' in Intl) || !('formatToParts' in Intl.DateTimeFormat.prototype);\n};\n","/* eslint-disable id-blacklist, no-restricted-imports */\nimport moment, { Moment } from 'moment-timezone';\n\nimport { TimeZone } from '../types/time';\n\nimport { DateTimeOptions, getTimeZone } from './common';\nimport { systemDateFormats } from './formats';\nimport { DateTimeInput, toUtc, dateTimeAsMoment } from './moment_wrapper';\n\n/**\n * The type describing the options that can be passed to the {@link dateTimeFormat}\n * helper function to control how the date and time value passed to the function is\n * formatted.\n *\n * @public\n */\nexport interface DateTimeOptionsWithFormat extends DateTimeOptions {\n  /**\n   * Set this value to `true` if you want to include milliseconds when formatting date and time\n   */\n  defaultWithMS?: boolean;\n}\n\ntype DateTimeFormatter<T extends DateTimeOptions = DateTimeOptions> = (dateInUtc: DateTimeInput, options?: T) => string;\n\n/**\n * Helper function to format date and time according to the specified options. If no options\n * are supplied, then default values are used. For more details, see {@link DateTimeOptionsWithFormat}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormat: DateTimeFormatter<DateTimeOptionsWithFormat> = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format(getFormat(options));\n\n/**\n * Helper function to format date and time according to the standard ISO format e.g. 2013-02-04T22:44:30.652Z.\n * If no options are supplied, then default values are used. For more details, see {@link DateTimeOptionsWithFormat}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormatISO: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format();\n\n/**\n * Helper function to return elapsed time since passed date. The returned value will be formatted\n * in a human readable format e.g. 4 years ago. If no options are supplied, then default values are used.\n * For more details, see {@link DateTimeOptions}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormatTimeAgo: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).fromNow();\n\n/**\n * Helper function to format date and time according to the Grafana default formatting, but it\n * also appends the time zone abbreviation at the end e.g. 2020-05-20 13:37:00 CET. If no options\n * are supplied, then default values are used. For more details please see {@link DateTimeOptions}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormatWithAbbrevation: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format(`${systemDateFormats.fullDate} z`);\n\n/**\n * Helper function to return only the time zone abbreviation for a given date and time value. If no options\n * are supplied, then default values are used. For more details please see {@link DateTimeOptions}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const timeZoneAbbrevation: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format('z');\n\nconst getFormat = <T extends DateTimeOptionsWithFormat>(options?: T): string => {\n  if (options?.defaultWithMS) {\n    return options?.format ?? systemDateFormats.fullDateMS;\n  }\n  return options?.format ?? systemDateFormats.fullDate;\n};\n\nconst toTz = (dateInUtc: DateTimeInput, timeZone: TimeZone): Moment => {\n  const date = dateInUtc;\n  const zone = moment.tz.zone(timeZone);\n\n  if (zone && zone.name) {\n    return dateTimeAsMoment(toUtc(date)).tz(zone.name);\n  }\n\n  switch (timeZone) {\n    case 'utc':\n      return dateTimeAsMoment(toUtc(date));\n    default:\n      return dateTimeAsMoment(toUtc(date)).local();\n  }\n};\n","import moment, { Moment, MomentInput, DurationInputArg1, DurationInputArg2 } from 'moment';\n\nimport { TimeZone } from '../types/time';\n/* eslint-disable id-blacklist, no-restricted-imports */\nexport interface DateTimeBuiltinFormat {\n  __momentBuiltinFormatBrand: any;\n}\nexport const ISO_8601: DateTimeBuiltinFormat = moment.ISO_8601;\nexport type DateTimeInput = Date | string | number | Array<string | number> | DateTime | null; // | undefined;\nexport type FormatInput = string | DateTimeBuiltinFormat | undefined;\nexport type DurationInput = string | number | DateTimeDuration;\nexport type DurationUnit =\n  | 'year'\n  | 'years'\n  | 'y'\n  | 'month'\n  | 'months'\n  | 'M'\n  | 'week'\n  | 'weeks'\n  | 'isoWeek'\n  | 'w'\n  | 'day'\n  | 'days'\n  | 'd'\n  | 'hour'\n  | 'hours'\n  | 'h'\n  | 'minute'\n  | 'minutes'\n  | 'm'\n  | 'second'\n  | 'seconds'\n  | 's'\n  | 'millisecond'\n  | 'milliseconds'\n  | 'ms'\n  | 'quarter'\n  | 'quarters'\n  | 'Q';\n\nexport interface DateTimeLocale {\n  firstDayOfWeek: () => number;\n}\n\nexport interface DateTimeDuration {\n  asHours: () => number;\n  hours: () => number;\n  minutes: () => number;\n  seconds: () => number;\n  asSeconds: () => number;\n}\n\nexport interface DateTime extends Object {\n  add: (amount?: DateTimeInput, unit?: DurationUnit) => DateTime;\n  set: (unit: DurationUnit | 'date', amount: DateTimeInput) => void;\n  diff: (amount: DateTimeInput, unit?: DurationUnit, truncate?: boolean) => number;\n  endOf: (unitOfTime: DurationUnit) => DateTime;\n  format: (formatInput?: FormatInput) => string;\n  fromNow: (withoutSuffix?: boolean) => string;\n  from: (formaInput: DateTimeInput) => string;\n  isSame: (input?: DateTimeInput, granularity?: DurationUnit) => boolean;\n  isBefore: (input?: DateTimeInput) => boolean;\n  isValid: () => boolean;\n  local: () => DateTime;\n  locale: (locale: string) => DateTime;\n  startOf: (unitOfTime: DurationUnit) => DateTime;\n  subtract: (amount?: DateTimeInput, unit?: DurationUnit) => DateTime;\n  toDate: () => Date;\n  toISOString: (keepOffset?: boolean) => string;\n  isoWeekday: (day?: number | string) => number | string;\n  valueOf: () => number;\n  unix: () => number;\n  utc: () => DateTime;\n  utcOffset: () => number;\n  hour?: () => number;\n  minute?: () => number;\n}\n\nexport const setLocale = (language: string) => {\n  moment.locale(language);\n};\n\nexport const getLocale = () => {\n  return moment.locale();\n};\n\nexport const getLocaleData = (): DateTimeLocale => {\n  return moment.localeData();\n};\n\nexport const isDateTimeInput = (value: unknown): value is DateTimeInput => {\n  return (\n    value === null ||\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    value instanceof Date ||\n    (Array.isArray(value) && value.every((v) => typeof v === 'string' || typeof v === 'number')) ||\n    isDateTime(value)\n  );\n};\n\nexport const isDateTime = (value: unknown): value is DateTime => {\n  return moment.isMoment(value);\n};\n\nexport const toUtc = (input?: DateTimeInput, formatInput?: FormatInput): DateTime => {\n  return moment.utc(input as MomentInput, formatInput) as DateTime;\n};\n\nexport const toDuration = (input?: DurationInput, unit?: DurationUnit): DateTimeDuration => {\n  // moment built-in types are a bit flaky, for example `isoWeek` is not in the type definition but it's present in the js source.\n  return moment.duration(input as DurationInputArg1, unit as DurationInputArg2) as DateTimeDuration;\n};\n\nexport const dateTime = (input?: DateTimeInput, formatInput?: FormatInput): DateTime => {\n  return moment(input as MomentInput, formatInput) as DateTime;\n};\n\nexport const dateTimeAsMoment = (input?: DateTimeInput) => {\n  return dateTime(input) as Moment;\n};\n\nexport const dateTimeForTimeZone = (\n  timezone?: TimeZone,\n  input?: DateTimeInput,\n  formatInput?: FormatInput\n): DateTime => {\n  if (timezone && timezone !== 'browser') {\n    let result: moment.Moment;\n\n    if (typeof input === 'string' && formatInput) {\n      result = moment.tz(input, formatInput, timezone);\n    } else {\n      result = moment.tz(input, timezone);\n    }\n\n    if (isDateTime(result)) {\n      return result;\n    }\n  }\n\n  return dateTime(input, formatInput);\n};\n\nexport const getWeekdayIndex = (day: string) => {\n  return moment.weekdays().findIndex((wd) => wd.toLowerCase() === day.toLowerCase());\n};\n\nexport const getWeekdayIndexByEnglishName = (day: string) =>\n  ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'].findIndex(\n    (wd) => wd.toLowerCase() === day.toLowerCase()\n  );\n\nexport const setWeekStart = (weekStart?: string) => {\n  const suffix = '-weekStart';\n  const language = getLocale().replace(suffix, '');\n  const dow = weekStart ? getWeekdayIndexByEnglishName(weekStart) : -1;\n  if (dow !== -1) {\n    moment.updateLocale(language + suffix, {\n      parentLocale: language,\n      week: {\n        dow,\n      },\n    });\n  } else {\n    setLocale(language);\n  }\n};\n","/* eslint-disable id-blacklist, no-restricted-imports */\nimport { lowerCase } from 'lodash';\nimport moment from 'moment-timezone';\n\nimport { DateTimeOptions, getTimeZone } from './common';\nimport { parse, isValid } from './datemath';\nimport { systemDateFormats } from './formats';\nimport { DateTimeInput, DateTime, isDateTime, dateTime, toUtc, dateTimeForTimeZone } from './moment_wrapper';\n\n/**\n * The type that describes options that can be passed when parsing a date and time value.\n * @public\n */\nexport interface DateTimeOptionsWhenParsing extends DateTimeOptions {\n  /**\n   * If the input is a Grafana quick date, e.g. now-6h, then you can specify this to control\n   * whether the last part of the date and time value is included or excluded.\n   *\n   * Example: now-6h and the current time is 12:20:00 if roundUp is set to true\n   * the returned DateTime value will be 06:00:00.\n   */\n  roundUp?: boolean;\n  fiscalYearStartMonth?: number;\n}\n\ntype DateTimeParser<T extends DateTimeOptions = DateTimeOptions> = (value: DateTimeInput, options?: T) => DateTime;\n\n/**\n * Helper function to parse a number, text or Date to a DateTime value. If a timeZone is supplied the incoming value\n * is parsed with that timeZone as a base. The only exception to this is if the passed value is in a UTC-based\n * format. Then it will use UTC as the base. If no format is specified the current system format will be assumed.\n *\n * It can also parse the Grafana quick date and time format, e.g. now-6h will be parsed as Date.now() - 6 hours and\n * returned as a valid DateTime value.\n *\n * If no options are supplied, then default values are used. For more details please see {@link DateTimeOptions}.\n *\n * @param value - should be a parsable date and time value\n * @param options\n *\n * @public\n */\nexport const dateTimeParse: DateTimeParser<DateTimeOptionsWhenParsing> = (value, options?): DateTime => {\n  if (isDateTime(value)) {\n    return value;\n  }\n\n  if (typeof value === 'string') {\n    return parseString(value, options);\n  }\n\n  return parseOthers(value, options);\n};\n\nconst parseString = (value: string, options?: DateTimeOptionsWhenParsing): DateTime => {\n  const parsed = parse(value, options?.roundUp, options?.timeZone, options?.fiscalYearStartMonth);\n  if (value.indexOf('now') !== -1) {\n    if (!isValid(value)) {\n      return dateTime();\n    }\n\n    return parsed || dateTime();\n  }\n\n  const timeZone = getTimeZone(options);\n  const zone = moment.tz.zone(timeZone);\n  const format = options?.format ?? systemDateFormats.fullDate;\n\n  if (zone && zone.name) {\n    return dateTimeForTimeZone(zone.name, value, format);\n  }\n\n  if (format === systemDateFormats.fullDate) {\n    // We use parsed here to handle case when `use_browser_locale` is true\n    // We need to pass the parsed value to handle case when value is an ISO 8601 date string\n    return dateTime(parsed, format);\n  }\n\n  switch (lowerCase(timeZone)) {\n    case 'utc':\n      return toUtc(value, format);\n    default:\n      return dateTime(value, format);\n  }\n};\n\nconst parseOthers = (value: DateTimeInput, options?: DateTimeOptionsWhenParsing): DateTime => {\n  const date = value;\n  const timeZone = getTimeZone(options);\n  const zone = moment.tz.zone(timeZone);\n\n  if (zone && zone.name) {\n    return dateTimeForTimeZone(zone.name, date);\n  }\n\n  switch (lowerCase(timeZone)) {\n    case 'utc':\n      return toUtc(date);\n    default:\n      return dateTime(date);\n  }\n};\n","import { RawTimeRange, TimeRange, TimeZone, IntervalValues, RelativeTimeRange, TimeOption } from '../types/time';\n\nimport * as dateMath from './datemath';\nimport { timeZoneAbbrevation, dateTimeFormat, dateTimeFormatTimeAgo } from './formatter';\nimport { isDateTime, DateTime, dateTime } from './moment_wrapper';\nimport { dateTimeParse } from './parser';\n\nconst spans: { [key: string]: { display: string; section?: number } } = {\n  s: { display: 'second' },\n  m: { display: 'minute' },\n  h: { display: 'hour' },\n  d: { display: 'day' },\n  w: { display: 'week' },\n  M: { display: 'month' },\n  y: { display: 'year' },\n};\n\nconst BASE_RANGE_OPTIONS: TimeOption[] = [\n  { from: 'now/d', to: 'now/d', display: 'Today' },\n  { from: 'now/d', to: 'now', display: 'Today so far' },\n  { from: 'now/w', to: 'now/w', display: 'This week' },\n  { from: 'now/w', to: 'now', display: 'This week so far' },\n  { from: 'now/M', to: 'now/M', display: 'This month' },\n  { from: 'now/M', to: 'now', display: 'This month so far' },\n  { from: 'now/y', to: 'now/y', display: 'This year' },\n  { from: 'now/y', to: 'now', display: 'This year so far' },\n\n  { from: 'now-1d/d', to: 'now-1d/d', display: 'Yesterday' },\n  {\n    from: 'now-2d/d',\n    to: 'now-2d/d',\n    display: 'Day before yesterday',\n  },\n  {\n    from: 'now-7d/d',\n    to: 'now-7d/d',\n    display: 'This day last week',\n  },\n  { from: 'now-1w/w', to: 'now-1w/w', display: 'Previous week' },\n  { from: 'now-1M/M', to: 'now-1M/M', display: 'Previous month' },\n  { from: 'now-1Q/fQ', to: 'now-1Q/fQ', display: 'Previous fiscal quarter' },\n  { from: 'now-1y/y', to: 'now-1y/y', display: 'Previous year' },\n  { from: 'now-1y/fy', to: 'now-1y/fy', display: 'Previous fiscal year' },\n\n  { from: 'now-5m', to: 'now', display: 'Last 5 minutes' },\n  { from: 'now-15m', to: 'now', display: 'Last 15 minutes' },\n  { from: 'now-30m', to: 'now', display: 'Last 30 minutes' },\n  { from: 'now-1h', to: 'now', display: 'Last 1 hour' },\n  { from: 'now-3h', to: 'now', display: 'Last 3 hours' },\n  { from: 'now-6h', to: 'now', display: 'Last 6 hours' },\n  { from: 'now-12h', to: 'now', display: 'Last 12 hours' },\n  { from: 'now-24h', to: 'now', display: 'Last 24 hours' },\n  { from: 'now-2d', to: 'now', display: 'Last 2 days' },\n  { from: 'now-7d', to: 'now', display: 'Last 7 days' },\n  { from: 'now-30d', to: 'now', display: 'Last 30 days' },\n  { from: 'now-90d', to: 'now', display: 'Last 90 days' },\n  { from: 'now-6M', to: 'now', display: 'Last 6 months' },\n  { from: 'now-1y', to: 'now', display: 'Last 1 year' },\n  { from: 'now-2y', to: 'now', display: 'Last 2 years' },\n  { from: 'now-5y', to: 'now', display: 'Last 5 years' },\n  { from: 'now/fQ', to: 'now', display: 'This fiscal quarter so far' },\n  { from: 'now/fQ', to: 'now/fQ', display: 'This fiscal quarter' },\n  { from: 'now/fy', to: 'now', display: 'This fiscal year so far' },\n  { from: 'now/fy', to: 'now/fy', display: 'This fiscal year' },\n];\n\nconst HIDDEN_RANGE_OPTIONS: TimeOption[] = [\n  { from: 'now', to: 'now+1m', display: 'Next minute' },\n  { from: 'now', to: 'now+5m', display: 'Next 5 minutes' },\n  { from: 'now', to: 'now+15m', display: 'Next 15 minutes' },\n  { from: 'now', to: 'now+30m', display: 'Next 30 minutes' },\n  { from: 'now', to: 'now+1h', display: 'Next hour' },\n  { from: 'now', to: 'now+3h', display: 'Next 3 hours' },\n  { from: 'now', to: 'now+6h', display: 'Next 6 hours' },\n  { from: 'now', to: 'now+12h', display: 'Next 12 hours' },\n  { from: 'now', to: 'now+24h', display: 'Next 24 hours' },\n  { from: 'now', to: 'now+2d', display: 'Next 2 days' },\n  { from: 'now', to: 'now+7d', display: 'Next 7 days' },\n  { from: 'now', to: 'now+30d', display: 'Next 30 days' },\n  { from: 'now', to: 'now+90d', display: 'Next 90 days' },\n  { from: 'now', to: 'now+6M', display: 'Next 6 months' },\n  { from: 'now', to: 'now+1y', display: 'Next year' },\n  { from: 'now', to: 'now+2y', display: 'Next 2 years' },\n  { from: 'now', to: 'now+5y', display: 'Next 5 years' },\n];\n\nconst STANDARD_RANGE_OPTIONS = BASE_RANGE_OPTIONS.concat(HIDDEN_RANGE_OPTIONS);\n\nfunction findRangeInOptions(range: RawTimeRange, options: TimeOption[]) {\n  return options.find((option) => option.from === range.from && option.to === range.to);\n}\n\n// handles expressions like\n// 5m\n// 5m to now/d\n// now/d to now\n// now/d\n// if no to <expr> then to now is assumed\nexport function describeTextRange(expr: string): TimeOption {\n  const isLast = expr.indexOf('+') !== 0;\n  if (expr.indexOf('now') === -1) {\n    expr = (isLast ? 'now-' : 'now') + expr;\n  }\n\n  let opt = findRangeInOptions({ from: expr, to: 'now' }, STANDARD_RANGE_OPTIONS);\n  if (opt) {\n    return opt;\n  }\n\n  if (isLast) {\n    opt = { from: expr, to: 'now', display: '' };\n  } else {\n    opt = { from: 'now', to: expr, display: '' };\n  }\n\n  const parts = /^now([-+])(\\d+)(\\w)/.exec(expr);\n  if (parts) {\n    const unit = parts[3];\n    const amount = parseInt(parts[2], 10);\n    const span = spans[unit];\n    if (span) {\n      opt.display = isLast ? 'Last ' : 'Next ';\n      opt.display += amount + ' ' + span.display;\n      opt.section = span.section;\n      if (amount > 1) {\n        opt.display += 's';\n      }\n    }\n  } else {\n    opt.display = opt.from + ' to ' + opt.to;\n    opt.invalid = true;\n  }\n\n  return opt;\n}\n\n/**\n * Use this function to get a properly formatted string representation of a {@link @grafana/data:RawTimeRange | range}.\n *\n * @category TimeUtils\n * @param range - a time range (usually specified by the TimePicker)\n * @param timeZone - optional time zone.\n * @param quickRanges - optional dashboard's custom quick ranges to pick range names from.\n * @alpha\n */\nexport function describeTimeRange(range: RawTimeRange, timeZone?: TimeZone, quickRanges?: TimeOption[]): string {\n  const rangeOptions = quickRanges ? quickRanges.concat(STANDARD_RANGE_OPTIONS) : STANDARD_RANGE_OPTIONS;\n  const option = findRangeInOptions(range, rangeOptions);\n\n  if (option) {\n    return option.display;\n  }\n\n  const options = { timeZone };\n\n  if (isDateTime(range.from) && isDateTime(range.to)) {\n    return dateTimeFormat(range.from, options) + ' to ' + dateTimeFormat(range.to, options);\n  }\n\n  if (isDateTime(range.from)) {\n    const parsed = dateMath.parse(range.to, true, 'utc');\n    return parsed ? dateTimeFormat(range.from, options) + ' to ' + dateTimeFormatTimeAgo(parsed, options) : '';\n  }\n\n  if (isDateTime(range.to)) {\n    const parsed = dateMath.parse(range.from, false, 'utc');\n    return parsed ? dateTimeFormatTimeAgo(parsed, options) + ' to ' + dateTimeFormat(range.to, options) : '';\n  }\n\n  if (range.to.toString() === 'now') {\n    const res = describeTextRange(range.from);\n    return res.display;\n  }\n\n  return range.from.toString() + ' to ' + range.to.toString();\n}\n\nexport const isValidTimeSpan = (value: string) => {\n  if (value.indexOf('$') === 0 || value.indexOf('+$') === 0) {\n    return true;\n  }\n\n  const info = describeTextRange(value);\n  return info.invalid !== true;\n};\n\nexport const describeTimeRangeAbbreviation = (range: TimeRange, timeZone?: TimeZone) => {\n  if (isDateTime(range.from)) {\n    return timeZoneAbbrevation(range.from, { timeZone });\n  }\n  const parsed = dateMath.parse(range.from, true);\n  return parsed ? timeZoneAbbrevation(parsed, { timeZone }) : '';\n};\n\nexport const convertRawToRange = (\n  raw: RawTimeRange,\n  timeZone?: TimeZone,\n  fiscalYearStartMonth?: number,\n  format?: string\n): TimeRange => {\n  const from = dateTimeParse(raw.from, { roundUp: false, timeZone, fiscalYearStartMonth, format });\n  const to = dateTimeParse(raw.to, { roundUp: true, timeZone, fiscalYearStartMonth, format });\n\n  return {\n    from,\n    to,\n    raw: {\n      from: dateMath.isMathString(raw.from) ? raw.from : from,\n      to: dateMath.isMathString(raw.to) ? raw.to : to,\n    },\n  };\n};\n\nexport function isRelativeTime(v: DateTime | string) {\n  if (typeof v === 'string') {\n    return v.indexOf('now') >= 0;\n  }\n  return false;\n}\n\nexport function isFiscal(timeRange: TimeRange) {\n  if (typeof timeRange.raw.from === 'string' && timeRange.raw.from.indexOf('f') > 0) {\n    return true;\n  } else if (typeof timeRange.raw.to === 'string' && timeRange.raw.to.indexOf('f') > 0) {\n    return true;\n  }\n  return false;\n}\n\nexport function isRelativeTimeRange(raw: RawTimeRange): boolean {\n  return isRelativeTime(raw.from) || isRelativeTime(raw.to);\n}\n\nexport function secondsToHms(seconds: number): string {\n  const numYears = Math.floor(seconds / 31536000);\n  if (numYears) {\n    return numYears + 'y';\n  }\n  const numDays = Math.floor((seconds % 31536000) / 86400);\n  if (numDays) {\n    return numDays + 'd';\n  }\n  const numHours = Math.floor(((seconds % 31536000) % 86400) / 3600);\n  if (numHours) {\n    return numHours + 'h';\n  }\n  const numMinutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);\n  if (numMinutes) {\n    return numMinutes + 'm';\n  }\n  const numSeconds = Math.floor((((seconds % 31536000) % 86400) % 3600) % 60);\n  if (numSeconds) {\n    return numSeconds + 's';\n  }\n  const numMilliseconds = Math.floor(seconds * 1000.0);\n  if (numMilliseconds) {\n    return numMilliseconds + 'ms';\n  }\n\n  return 'less than a millisecond'; //'just now' //or other string you like;\n}\n\n// Format timeSpan (in sec) to string used in log's meta info\nexport function msRangeToTimeString(rangeMs: number): string {\n  const rangeSec = Number((rangeMs / 1000).toFixed());\n\n  const h = Math.floor(rangeSec / 60 / 60);\n  const m = Math.floor(rangeSec / 60) - h * 60;\n  const s = Number((rangeSec % 60).toFixed());\n  let formattedH = h ? h + 'h' : '';\n  let formattedM = m ? m + 'min' : '';\n  let formattedS = s ? s + 'sec' : '';\n\n  formattedH && formattedM ? (formattedH = formattedH + ' ') : (formattedH = formattedH);\n  (formattedM || formattedH) && formattedS ? (formattedM = formattedM + ' ') : (formattedM = formattedM);\n\n  return formattedH + formattedM + formattedS || 'less than 1sec';\n}\n\nexport function calculateInterval(range: TimeRange, resolution: number, lowLimitInterval?: string): IntervalValues {\n  let lowLimitMs = 1; // 1 millisecond default low limit\n  if (lowLimitInterval) {\n    lowLimitMs = intervalToMs(lowLimitInterval);\n  }\n\n  let intervalMs = roundInterval((range.to.valueOf() - range.from.valueOf()) / resolution);\n  if (lowLimitMs > intervalMs) {\n    intervalMs = lowLimitMs;\n  }\n  return {\n    intervalMs: intervalMs,\n    interval: secondsToHms(intervalMs / 1000),\n  };\n}\n\nconst interval_regex = /(-?\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])/;\n// histogram & trends\nconst intervals_in_seconds: Record<string, number> = {\n  y: 31536000,\n  M: 2592000,\n  w: 604800,\n  d: 86400,\n  h: 3600,\n  m: 60,\n  s: 1,\n  ms: 0.001,\n};\n\nexport function describeInterval(str: string) {\n  // Default to seconds if no unit is provided\n  if (Number(str)) {\n    return {\n      sec: intervals_in_seconds.s,\n      type: 's',\n      count: parseInt(str, 10),\n    };\n  }\n\n  const matches = str.match(interval_regex);\n  if (!matches) {\n    throw new Error(\n      `Invalid interval string, has to be either unit-less or end with one of the following units: \"${Object.keys(\n        intervals_in_seconds\n      ).join(', ')}\"`\n    );\n  }\n\n  const sec = intervals_in_seconds[matches[2]];\n  if (sec === undefined) {\n    // this can never happen, because above we\n    // already made sure the key is correct,\n    // but we handle it to be safe.\n    throw new Error('describeInterval failed: invalid interval string');\n  }\n\n  return {\n    sec,\n    type: matches[2],\n    count: parseInt(matches[1], 10),\n  };\n}\n\nexport function intervalToSeconds(str: string): number {\n  const info = describeInterval(str);\n  return info.sec * info.count;\n}\n\nexport function intervalToMs(str: string): number {\n  const info = describeInterval(str);\n  return info.sec * 1000 * info.count;\n}\n\nexport function roundInterval(interval: number) {\n  switch (true) {\n    // 0.01s\n    case interval < 10:\n      return 1; // 0.001s\n    // 0.015s\n    case interval < 15:\n      return 10; // 0.01s\n    // 0.035s\n    case interval < 35:\n      return 20; // 0.02s\n    // 0.075s\n    case interval < 75:\n      return 50; // 0.05s\n    // 0.15s\n    case interval < 150:\n      return 100; // 0.1s\n    // 0.35s\n    case interval < 350:\n      return 200; // 0.2s\n    // 0.75s\n    case interval < 750:\n      return 500; // 0.5s\n    // 1.5s\n    case interval < 1500:\n      return 1000; // 1s\n    // 3.5s\n    case interval < 3500:\n      return 2000; // 2s\n    // 7.5s\n    case interval < 7500:\n      return 5000; // 5s\n    // 12.5s\n    case interval < 12500:\n      return 10000; // 10s\n    // 17.5s\n    case interval < 17500:\n      return 15000; // 15s\n    // 25s\n    case interval < 25000:\n      return 20000; // 20s\n    // 45s\n    case interval < 45000:\n      return 30000; // 30s\n    // 1.5m\n    case interval < 90000:\n      return 60000; // 1m\n    // 3.5m\n    case interval < 210000:\n      return 120000; // 2m\n    // 7.5m\n    case interval < 450000:\n      return 300000; // 5m\n    // 12.5m\n    case interval < 750000:\n      return 600000; // 10m\n    // 17.5m\n    case interval < 1050000:\n      return 900000; // 15m\n    // 25m\n    case interval < 1500000:\n      return 1200000; // 20m\n    // 45m\n    case interval < 2700000:\n      return 1800000; // 30m\n    // 1.5h\n    case interval < 5400000:\n      return 3600000; // 1h\n    // 2.5h\n    case interval < 9000000:\n      return 7200000; // 2h\n    // 4.5h\n    case interval < 16200000:\n      return 10800000; // 3h\n    // 9h\n    case interval < 32400000:\n      return 21600000; // 6h\n    // 1d\n    case interval < 86400000:\n      return 43200000; // 12h\n    // 1w\n    case interval < 604800000:\n      return 86400000; // 1d\n    // 3w\n    case interval < 1814400000:\n      return 604800000; // 1w\n    // 6w\n    case interval < 3628800000:\n      return 2592000000; // 30d\n    default:\n      return 31536000000; // 1y\n  }\n}\n\n/**\n * Converts a TimeRange to a RelativeTimeRange that can be used in\n * e.g. alerting queries/rules.\n *\n * @internal\n */\nexport function timeRangeToRelative(timeRange: TimeRange, now: DateTime = dateTime()): RelativeTimeRange {\n  const from = now.unix() - timeRange.from.unix();\n  const to = now.unix() - timeRange.to.unix();\n\n  return {\n    from,\n    to,\n  };\n}\n\n/**\n * Converts a RelativeTimeRange to a TimeRange\n *\n * @internal\n */\nexport function relativeToTimeRange(relativeTimeRange: RelativeTimeRange, now: DateTime = dateTime()): TimeRange {\n  const from = dateTime(now).subtract(relativeTimeRange.from, 's');\n  const to = relativeTimeRange.to === 0 ? dateTime(now) : dateTime(now).subtract(relativeTimeRange.to, 's');\n\n  return {\n    from,\n    to,\n    raw: { from, to },\n  };\n}\n","import { IScope } from 'angular';\nimport EventEmitter from 'eventemitter3';\nimport { Unsubscribable, Observable, Subscriber } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport {\n  EventBus,\n  LegacyEmitter,\n  BusEventHandler,\n  BusEventType,\n  LegacyEventHandler,\n  BusEvent,\n  AppEvent,\n  EventFilterOptions,\n} from './types';\n\n/**\n * @alpha\n */\nexport class EventBusSrv implements EventBus, LegacyEmitter {\n  private emitter: EventEmitter;\n  private subscribers = new Map<Function, Subscriber<BusEvent>>();\n\n  constructor() {\n    this.emitter = new EventEmitter();\n  }\n\n  publish<T extends BusEvent>(event: T): void {\n    this.emitter.emit(event.type, event);\n  }\n\n  subscribe<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n    return this.getStream(typeFilter).subscribe({ next: handler });\n  }\n\n  getStream<T extends BusEvent = BusEvent>(eventType: BusEventType<T>): Observable<T> {\n    return new Observable<T>((observer) => {\n      const handler = (event: T) => {\n        observer.next(event);\n      };\n\n      this.emitter.on(eventType.type, handler);\n      this.subscribers.set(handler, observer);\n\n      return () => {\n        this.emitter.off(eventType.type, handler);\n        this.subscribers.delete(handler);\n      };\n    });\n  }\n\n  newScopedBus(key: string, filter?: EventFilterOptions): ScopedEventBus {\n    return new ScopedEventBus([key], this, filter);\n  }\n\n  /**\n   * Legacy functions\n   */\n  emit<T>(event: AppEvent<T> | string, payload?: T): void {\n    // console.log(`Deprecated emitter function used (emit), use $emit`);\n\n    if (typeof event === 'string') {\n      this.emitter.emit(event, { type: event, payload });\n    } else {\n      this.emitter.emit(event.name, { type: event.name, payload });\n    }\n  }\n\n  on<T>(event: AppEvent<T> | string, handler: LegacyEventHandler<T>, scope?: IScope) {\n    // console.log(`Deprecated emitter function used (on), use $on`);\n\n    // need this wrapper to make old events compatible with old handlers\n    handler.wrapper = (emittedEvent: BusEvent) => {\n      handler(emittedEvent.payload);\n    };\n\n    if (typeof event === 'string') {\n      this.emitter.on(event, handler.wrapper);\n    } else {\n      this.emitter.on(event.name, handler.wrapper);\n    }\n\n    if (scope) {\n      const unbind = scope.$on('$destroy', () => {\n        this.off(event, handler);\n        unbind();\n      });\n    }\n  }\n\n  off<T>(event: AppEvent<T> | string, handler: LegacyEventHandler<T>) {\n    if (typeof event === 'string') {\n      this.emitter.off(event, handler.wrapper);\n      return;\n    }\n\n    this.emitter.off(event.name, handler.wrapper);\n  }\n\n  removeAllListeners() {\n    this.emitter.removeAllListeners();\n    for (const [key, sub] of this.subscribers) {\n      sub.complete();\n      this.subscribers.delete(key);\n    }\n  }\n}\n\n/**\n * Wraps EventBus and adds a source to help with identifying if a subscriber should react to the event or not.\n */\nclass ScopedEventBus implements EventBus {\n  // will be mutated by panel runners\n  filterConfig: EventFilterOptions;\n\n  // The path is not yet exposed, but can be used to indicate nested groups and support faster filtering\n  constructor(\n    public path: string[],\n    private eventBus: EventBus,\n    filter?: EventFilterOptions\n  ) {\n    this.filterConfig = filter ?? { onlyLocal: false };\n  }\n\n  publish<T extends BusEvent>(event: T): void {\n    if (!event.origin) {\n      event.origin = this;\n    }\n    this.eventBus.publish(event);\n  }\n\n  filter<T extends BusEvent>(event: T) {\n    if (this.filterConfig.onlyLocal) {\n      return event.origin === this;\n    }\n    return true;\n  }\n\n  getStream<T extends BusEvent>(eventType: BusEventType<T>): Observable<T> {\n    return this.eventBus.getStream(eventType).pipe(filter(this.filter.bind(this)));\n  }\n\n  // syntax sugar\n  subscribe<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n    return this.getStream(typeFilter).subscribe({ next: handler });\n  }\n\n  removeAllListeners(): void {\n    this.eventBus.removeAllListeners();\n  }\n\n  /**\n   * Creates a nested event bus structure\n   */\n  newScopedBus(key: string, filter: EventFilterOptions): EventBus {\n    return new ScopedEventBus([...this.path, key], this, filter);\n  }\n}\n","import { AppEvent } from './types';\n\nconst typeList: Set<string> = new Set();\n\nexport function eventFactory<T = undefined>(name: string): AppEvent<T> {\n  if (typeList.has(name)) {\n    throw new Error(`There is already an event defined with type '${name}'`);\n  }\n\n  typeList.add(name);\n  return { name };\n}\n","import { IScope } from 'angular';\nimport { Unsubscribable, Observable } from 'rxjs';\n\n/**\n * @alpha\n * internal interface\n */\nexport interface BusEvent {\n  readonly type: string;\n  readonly payload?: any;\n  origin?: EventBus;\n}\n\n/**\n * @alpha\n * Base event type\n */\nexport abstract class BusEventBase implements BusEvent {\n  readonly type: string;\n  readonly payload?: any;\n  readonly origin?: EventBus;\n\n  /** @internal */\n  tags?: Set<string>;\n\n  constructor() {\n    //@ts-ignore\n    this.type = this.__proto__.constructor.type;\n  }\n\n  /**\n   * @internal\n   * Tag event for finer-grained filtering in subscribers\n   */\n  setTags(tags: string[]) {\n    this.tags = new Set(tags);\n    return this;\n  }\n}\n\n/**\n * @alpha\n * Base event type with payload\n */\nexport abstract class BusEventWithPayload<T> extends BusEventBase {\n  readonly payload: T;\n\n  constructor(payload: T) {\n    super();\n    this.payload = payload;\n  }\n}\n\n/*\n * Interface for an event type constructor\n */\nexport interface BusEventType<T extends BusEvent> {\n  type: string;\n  new (...args: any[]): T;\n}\n\n/**\n * @alpha\n * Event callback/handler type\n */\nexport interface BusEventHandler<T extends BusEvent> {\n  (event: T): void;\n}\n\n/**\n * @alpha\n * Main minimal interface\n */\nexport interface EventFilterOptions {\n  onlyLocal: boolean;\n}\n\n/**\n * @alpha\n * Main minimal interface\n */\nexport interface EventBus {\n  /**\n   * Publish single event\n   */\n  publish<T extends BusEvent>(event: T): void;\n\n  /**\n   * Get observable of events\n   */\n  getStream<T extends BusEvent>(eventType: BusEventType<T>): Observable<T>;\n\n  /**\n   * Subscribe to an event stream\n   *\n   * This function is a wrapper around the `getStream(...)` function\n   */\n  subscribe<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable;\n\n  /**\n   * Remove all event subscriptions\n   */\n  removeAllListeners(): void;\n\n  /**\n   * Returns a new bus scoped that knows where it exists in a heiarchy\n   *\n   * @internal -- This is included for internal use only should not be used directly\n   */\n  newScopedBus(key: string, filter: EventFilterOptions): EventBus;\n}\n\n/**\n * @public\n * @deprecated event type\n */\nexport interface AppEvent<T> {\n  readonly name: string;\n  payload?: T;\n}\n\n/** @public */\nexport interface LegacyEmitter {\n  /**\n   * @deprecated use $emit\n   */\n  emit<T>(event: AppEvent<T> | string, payload?: T): void;\n\n  /**\n   * @deprecated use $on\n   */\n  on<T>(event: AppEvent<T> | string, handler: LegacyEventHandler<T>, scope?: IScope): void;\n\n  /**\n   * @deprecated use $on\n   */\n  off<T>(event: AppEvent<T> | string, handler: (payload?: T) => void): void;\n}\n\n/** @public */\nexport interface LegacyEventHandler<T> {\n  (payload: T): void;\n  wrapper?: (event: BusEvent) => void;\n}\n\n/** @alpha */\nexport interface EventBusExtended extends EventBus, LegacyEmitter {}\n","import { Registry, RegistryItem } from '../utils/Registry';\n\n/**\n * @alpha\n */\nexport interface MonacoLanguageRegistryItem extends RegistryItem {\n  init: () => Worker;\n}\n\n/**\n * @alpha\n */\nexport const monacoLanguageRegistry = new Registry<MonacoLanguageRegistryItem>();\n","import { WithAccessControlMetadata } from '../types/accesscontrol';\nimport { CurrentUserDTO } from '../types/config';\n\nexport interface CurrentUser extends Omit<CurrentUserDTO, 'lightTheme'> {}\n\nexport function userHasPermission(action: string, user: CurrentUser): boolean {\n  return !!user.permissions?.[action];\n}\n\nexport function userHasPermissionInMetadata(action: string, object: WithAccessControlMetadata): boolean {\n  return !!object.accessControl?.[action];\n}\n\nexport function userHasAllPermissions(actions: string[], user: CurrentUser) {\n  return actions.every((action) => userHasPermission(action, user));\n}\n\nexport function userHasAnyPermission(actions: string[], user: CurrentUser) {\n  return actions.some((action) => userHasPermission(action, user));\n}\n","import { sanitizeUrl as braintreeSanitizeUrl } from '@braintree/sanitize-url';\nimport DOMPurify from 'dompurify';\nimport * as xss from 'xss';\n\nconst XSSWL = Object.keys(xss.whiteList).reduce<xss.IWhiteList>((acc, element) => {\n  acc[element] = xss.whiteList[element]?.concat(['class', 'style']);\n  return acc;\n}, {});\n\n// Add iframe tags to XSSWL.\n// We don't allow the sandbox attribute, since it can be overridden, instead we add it below.\nXSSWL.iframe = ['src', 'width', 'height'];\n\nconst sanitizeTextPanelWhitelist = new xss.FilterXSS({\n  // Add sandbox attribute to iframe tags if an attribute is allowed.\n  onTagAttr: function (tag, name, value, isWhiteAttr) {\n    if (tag === 'iframe') {\n      return isWhiteAttr\n        ? ` ${name}=\"${xss.escapeAttrValue(sanitizeUrl(value))}\" sandbox credentialless referrerpolicy=no-referrer`\n        : '';\n    }\n    return;\n  },\n  whiteList: XSSWL,\n  css: {\n    whiteList: {\n      ...xss.getDefaultCSSWhiteList(),\n      'flex-direction': true,\n      'flex-wrap': true,\n      'flex-basis': true,\n      'flex-grow': true,\n      'flex-shrink': true,\n      'flex-flow': true,\n      gap: true,\n      order: true,\n      'justify-content': true,\n      'justify-items': true,\n      'justify-self': true,\n      'align-items': true,\n      'align-content': true,\n      'align-self': true,\n    },\n  },\n});\n\n/**\n * Return a sanitized string that is going to be rendered in the browser to prevent XSS attacks.\n * Note that sanitized tags will be removed, such as \"<script>\".\n * We don't allow form or input elements.\n */\nexport function sanitize(unsanitizedString: string): string {\n  try {\n    return DOMPurify.sanitize(unsanitizedString, {\n      USE_PROFILES: { html: true },\n      FORBID_TAGS: ['form', 'input'],\n    });\n  } catch (error) {\n    console.error('String could not be sanitized', unsanitizedString);\n    return escapeHtml(unsanitizedString);\n  }\n}\n\nexport function sanitizeTrustedTypesRSS(unsanitizedString: string): TrustedHTML {\n  return DOMPurify.sanitize(unsanitizedString, {\n    RETURN_TRUSTED_TYPE: true,\n    ADD_ATTR: ['xmlns:atom', 'version', 'property', 'content'],\n    ADD_TAGS: ['rss', 'meta', 'channel', 'title', 'link', 'description', 'atom:link', 'item', 'pubDate', 'guid'],\n    PARSER_MEDIA_TYPE: 'application/xhtml+xml',\n  });\n}\n\nexport function sanitizeTrustedTypes(unsanitizedString: string): TrustedHTML {\n  return DOMPurify.sanitize(unsanitizedString, { RETURN_TRUSTED_TYPE: true });\n}\n\n/**\n * Returns string safe from XSS attacks to be used in the Text panel plugin.\n *\n * Even though we allow the style-attribute, there's still default filtering applied to it\n * Info: https://github.com/leizongmin/js-xss#customize-css-filter\n * Whitelist: https://github.com/leizongmin/js-css-filter/blob/master/lib/default.js\n */\nexport function sanitizeTextPanelContent(unsanitizedString: string): string {\n  try {\n    return sanitizeTextPanelWhitelist.process(unsanitizedString);\n  } catch (error) {\n    console.error('String could not be sanitized', unsanitizedString);\n    return 'Text string could not be sanitized';\n  }\n}\n\n// Returns sanitized SVG, free from XSS attacks to be used when rendering SVG content.\nexport function sanitizeSVGContent(unsanitizedString: string): string {\n  return DOMPurify.sanitize(unsanitizedString, { USE_PROFILES: { svg: true, svgFilters: true } });\n}\n\n// Return a sanitized URL, free from XSS attacks, such as javascript:alert(1)\nexport function sanitizeUrl(url: string): string {\n  return braintreeSanitizeUrl(url);\n}\n\n// Returns true if the string contains ANSI color codes.\nexport function hasAnsiCodes(input: string): boolean {\n  return /\\u001b\\[\\d{1,2}m/.test(input);\n}\n\n// Returns a string with HTML entities escaped.\nexport function escapeHtml(str: string): string {\n  return String(str)\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/'/g, '&#39;')\n    .replace(/\"/g, '&quot;');\n}\n\nexport const textUtil = {\n  escapeHtml,\n  hasAnsiCodes,\n  sanitize,\n  sanitizeTextPanelContent,\n  sanitizeUrl,\n  sanitizeSVGContent,\n  sanitizeTrustedTypes,\n  sanitizeTrustedTypesRSS,\n};\n","import { camelCase } from 'lodash';\n\nconst specialChars = ['(', '[', '{', '}', ']', ')', '\\\\', '|', '*', '+', '-', '.', '?', '<', '>', '#', '&', '^', '$'];\nconst specialMatcher = '([\\\\' + specialChars.join('\\\\') + '])';\nconst specialCharEscape = new RegExp(specialMatcher, 'g');\nconst specialCharUnescape = new RegExp('(\\\\\\\\)' + specialMatcher, 'g');\n\nexport function escapeStringForRegex(value: string) {\n  if (!value) {\n    return value;\n  }\n\n  return value.replace(specialCharEscape, '\\\\$1');\n}\n\nexport function unEscapeStringFromRegex(value: string) {\n  if (!value) {\n    return value;\n  }\n\n  return value.replace(specialCharUnescape, '$2');\n}\n\nexport function stringStartsAsRegEx(str: string): boolean {\n  if (!str) {\n    return false;\n  }\n\n  return str[0] === '/';\n}\n\nexport function stringToJsRegex(str: string): RegExp {\n  if (!stringStartsAsRegEx(str)) {\n    return new RegExp(`^${str}$`);\n  }\n\n  const match = str.match(new RegExp('^/(.*?)/(g?i?m?y?s?)$'));\n\n  if (!match) {\n    throw new Error(`'${str}' is not a valid regular expression.`);\n  }\n\n  return new RegExp(match[1], match[2]);\n}\n\nexport function stringToMs(str: string): number {\n  if (!str) {\n    return 0;\n  }\n\n  const nr = parseInt(str, 10);\n  const unit = str.slice(String(nr).length);\n  const s = 1000;\n  const m = s * 60;\n  const h = m * 60;\n  const d = h * 24;\n\n  switch (unit) {\n    case 's':\n      return nr * s;\n    case 'm':\n      return nr * m;\n    case 'h':\n      return nr * h;\n    case 'd':\n      return nr * d;\n    default:\n      if (!unit) {\n        return isNaN(nr) ? 0 : nr;\n      }\n      throw new Error('Not supported unit: ' + unit);\n  }\n}\n\nexport function toNumberString(value: number | undefined | null): string {\n  if (value !== null && value !== undefined && Number.isFinite(value)) {\n    return value.toString();\n  }\n  return '';\n}\n\nexport function toIntegerOrUndefined(value: string): number | undefined {\n  if (!value) {\n    return undefined;\n  }\n  const v = parseInt(value, 10);\n  return isNaN(v) ? undefined : v;\n}\n\nexport function toFloatOrUndefined(value: string): number | undefined {\n  if (!value) {\n    return undefined;\n  }\n  const v = parseFloat(value);\n  return isNaN(v) ? undefined : v;\n}\n\nexport function toPascalCase(string: string) {\n  const str = camelCase(string);\n  return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\nexport function escapeRegex(value: string): string {\n  return value.replace(/[\\\\^$*+?.()|[\\]{}\\/]/g, '\\\\$&');\n}\n","// Code based on Material-UI\n// https://github.com/mui-org/material-ui/blob/1b096070faf102281f8e3c4f9b2bf50acf91f412/packages/material-ui/src/styles/colorManipulator.js#L97\n// MIT License Copyright (c) 2014 Call-Em-All\n\nimport tinycolor from 'tinycolor2';\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param value The value to be clamped\n * @param min The lower boundary of the output range\n * @param max The upper boundary of the output range\n * @returns A number in the range [min, max]\n * @beta\n */\nfunction clamp(value: number, min = 0, max = 1) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(`The value provided ${value} is out of range [${min}, ${max}].`);\n    }\n  }\n\n  return Math.min(Math.max(min, value), max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param color - Hex color, i.e. #nnn or #nnnnnn\n * @returns A CSS rgb color string\n * @beta\n */\nexport function hexToRgb(color: string) {\n  color = color.slice(1);\n\n  const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n  let result = color.match(re);\n\n  if (!result) {\n    return '';\n  }\n\n  let colors = Array.from(result);\n\n  if (colors[0].length === 1) {\n    colors = colors.map((n) => n + n);\n  }\n\n  return colors\n    ? `rgb${colors.length === 4 ? 'a' : ''}(${colors\n        .map((n, index) => {\n          return index < 3 ? parseInt(n, 16) : Math.round((parseInt(n, 16) / 255) * 1000) / 1000;\n        })\n        .join(', ')})`\n    : '';\n}\n\nfunction intToHex(int: number) {\n  const hex = int.toString(16);\n  return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param color - RGB color, i.e. rgb(n, n, n)\n * @returns A CSS rgb color string, i.e. #nnnnnn\n * @beta\n */\nexport function rgbToHex(color: string) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n\n  const { values } = decomposeColor(color);\n  return `#${values.map((n: number) => intToHex(n)).join('')}`;\n}\n\n/**\n * Converts a color to hex6 format if there is no alpha, hex8 if there is.\n * @param color - Hex, RGB, HSL color\n * @returns A hex color string, i.e. #ff0000 or #ff0000ff\n */\nexport function asHexString(color: string): string {\n  if (color[0] === '#') {\n    return color;\n  }\n  const tColor = tinycolor(color);\n  return tColor.getAlpha() === 1 ? tColor.toHexString() : tColor.toHex8String();\n}\n\n/**\n * Converts a color to rgb string\n */\nexport function asRgbString(color: string) {\n  if (color.startsWith('rgb')) {\n    return color;\n  }\n\n  return tinycolor(color).toRgbString();\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param color - HSL color values\n * @returns rgb color values\n * @beta\n */\nexport function hslToRgb(color: string | DecomposeColor) {\n  const parts = decomposeColor(color);\n  const { values } = parts;\n  const h = values[0];\n  const s = values[1] / 100;\n  const l = values[2] / 100;\n  const a = s * Math.min(l, 1 - l);\n  const f = (n: number, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\n  let type = 'rgb';\n  const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n  if (parts.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n\n  return recomposeColor({ type, values: rgb });\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n * @beta\n */\nexport function decomposeColor(color: string | DecomposeColor): DecomposeColor {\n  // Idempotent\n  if (typeof color !== 'string') {\n    return color;\n  }\n\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n\n  if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n    throw new Error(\n      `Unsupported '${color}' color. The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()`\n    );\n  }\n\n  let values: any = color.substring(marker + 1, color.length - 1);\n  let colorSpace;\n\n  if (type === 'color') {\n    values = values.split(' ');\n    colorSpace = values.shift();\n    if (values.length === 4 && values[3].charAt(0) === '/') {\n      values[3] = values[3].slice(1);\n    }\n    if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n      throw new Error(\n        `Unsupported ${colorSpace} color space. The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.`\n      );\n    }\n  } else {\n    values = values.split(',');\n  }\n\n  values = values.map((value: string) => parseFloat(value));\n  return { type, values, colorSpace };\n}\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns A CSS color string\n * @beta\n */\nexport function recomposeColor(color: DecomposeColor) {\n  const { type, colorSpace } = color;\n  let values = color.values;\n\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map((n: string, i: number) => (i < 3 ? parseInt(n, 10) : n));\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = `${values[1]}%`;\n    values[2] = `${values[2]}%`;\n  }\n  if (type.indexOf('color') !== -1) {\n    values = `${colorSpace} ${values.join(' ')}`;\n  } else {\n    values = `${values.join(', ')}`;\n  }\n\n  return `${type}(${values})`;\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param canvas - A CSS color that alpha based backgrounds blends into\n * @returns A contrast ratio value in the range 0 - 21.\n * @beta\n */\nexport function getContrastRatio(foreground: string, background: string, canvas?: string) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background, canvas);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param background - CSS color that needs to be take in to account to calculate luminance for colors with opacity\n * @returns The relative brightness of the color in the range 0 - 1\n * @beta\n */\nexport function getLuminance(color: string, background?: string) {\n  const parts = decomposeColor(color);\n\n  let rgb = parts.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : parts.values;\n\n  if (background && parts.type === 'rgba') {\n    const backgroundParts = decomposeColor(background);\n    const alpha = rgb[3];\n    rgb[0] = rgb[0] * alpha + backgroundParts.values[0] * (1 - alpha);\n    rgb[1] = rgb[1] * alpha + backgroundParts.values[1] * (1 - alpha);\n    rgb[2] = rgb[2] * alpha + backgroundParts.values[2] * (1 - alpha);\n  }\n\n  const rgbNumbers = rgb.map((val: any) => {\n    if (parts.type !== 'color') {\n      val /= 255; // normalized\n    }\n    return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n  });\n\n  // Truncate at 3 digits\n  return Number((0.2126 * rgbNumbers[0] + 0.7152 * rgbNumbers[1] + 0.0722 * rgbNumbers[2]).toFixed(3));\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param coefficient=0.15 - multiplier in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function emphasize(color: string, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param value - value to set the alpha channel to in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function alpha(color: string, value: number) {\n  if (color === '') {\n    return '#000000';\n  }\n\n  value = clamp(value);\n\n  // hex 3, hex 4 (w/alpha), hex 6, hex 8 (w/alpha)\n  if (color[0] === '#') {\n    if (color.length === 9) {\n      color = color.substring(0, 7);\n    } else if (color.length <= 5) {\n      let c = '#';\n      for (let i = 1; i < 4; i++) {\n        c += color[i] + color[i];\n      }\n      color = c;\n    }\n\n    return (\n      color +\n      Math.round(value * 255)\n        .toString(16)\n        .padStart(2, '0')\n    );\n  }\n  // rgb(, hsl(\n  else if (color[3] === '(') {\n    // rgb() and hsl() do not require the \"a\" suffix to accept alpha values in modern browsers:\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb()#accepts_alpha_value\n    return color.replace(')', `, ${value})`);\n  }\n  // rgba(, hsla(\n  else if (color[4] === '(') {\n    return color.substring(0, color.lastIndexOf(',')) + `, ${value})`;\n  }\n\n  const parts = decomposeColor(color);\n\n  if (parts.type === 'color') {\n    parts.values[3] = `/${value}`;\n  } else {\n    parts.values[3] = value;\n  }\n\n  return recomposeColor(parts);\n}\n\n/**\n * Darkens a color.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param coefficient - multiplier in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function darken(color: string, coefficient: number) {\n  const parts = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (parts.type.indexOf('hsl') !== -1) {\n    parts.values[2] *= 1 - coefficient;\n  } else if (parts.type.indexOf('rgb') !== -1 || parts.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      parts.values[i] *= 1 - coefficient;\n    }\n  }\n  return recomposeColor(parts);\n}\n\n/**\n * Lightens a color.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param coefficient - multiplier in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function lighten(color: string, coefficient: number) {\n  const parts = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (parts.type.indexOf('hsl') !== -1) {\n    parts.values[2] += (100 - parts.values[2]) * coefficient;\n  } else if (parts.type.indexOf('rgb') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      parts.values[i] += (255 - parts.values[i]) * coefficient;\n    }\n  } else if (parts.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      parts.values[i] += (1 - parts.values[i]) * coefficient;\n    }\n  }\n\n  return recomposeColor(parts);\n}\n\ninterface DecomposeColor {\n  type: string;\n  values: any;\n  colorSpace?: string;\n}\n\nexport const colorManipulator = {\n  clamp,\n  hexToRgb,\n  rgbToHex,\n  asHexString,\n  asRgbString,\n  hslToRgb,\n  decomposeColor,\n  recomposeColor,\n  getContrastRatio,\n  getLuminance,\n  emphasize,\n  alpha,\n  darken,\n  lighten,\n};\n","import { createContext } from 'react';\n\nimport { createTheme } from './createTheme';\n\n/** @public */\nexport const ThemeContext = createContext(createTheme());\n\nThemeContext.displayName = 'ThemeContext';\n","/** @beta */\nexport interface ThemeBreakpointValues {\n  xs: number;\n  sm: number;\n  md: number;\n  lg: number;\n  xl: number;\n  xxl: number;\n}\n\n/** @beta */\nexport type ThemeBreakpointsKey = keyof ThemeBreakpointValues;\n\n/** @beta */\nexport interface ThemeBreakpoints {\n  values: ThemeBreakpointValues;\n  keys: string[];\n  unit: string;\n  up: (key: ThemeBreakpointsKey | number) => string;\n  down: (key: ThemeBreakpointsKey | number) => string;\n}\n\n/** @internal */\nexport function createBreakpoints(): ThemeBreakpoints {\n  const step = 5;\n  const keys = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\n  const unit = 'px';\n  const values: ThemeBreakpointValues = {\n    xs: 0,\n    sm: 544,\n    md: 769, // 1 more than regular ipad in portrait\n    lg: 992,\n    xl: 1200,\n    xxl: 1440,\n  };\n\n  function up(key: ThemeBreakpointsKey | number) {\n    const value = typeof key === 'number' ? key : values[key];\n    return `@media (min-width:${value}${unit})`;\n  }\n\n  function down(key: ThemeBreakpointsKey | number) {\n    const value = typeof key === 'number' ? key : values[key];\n    return `@media (max-width:${value - step / 100}${unit})`;\n  }\n\n  // TODO add functions for between and only\n\n  return {\n    values,\n    up,\n    down,\n    keys,\n    unit,\n  };\n}\n","export const palette = {\n  white: '#ffffff',\n  black: '#000000',\n\n  gray25: '#2c3235',\n  gray15: '#22252b', //'#202226',\n  gray10: '#181b1f', // old '#141619',\n  gray05: '#111217', // old '#0b0c0e',\n\n  // new from figma,\n  darkLayer0: '#18181a',\n  darkLayer1: '#212124',\n  darkLayer2: '#2a2a2f', // figma used #34343B but a bit too bright\n\n  darkBorder1: '#34343b',\n  darkBorder2: '#64646b',\n\n  // Dashboard bg / layer 0 (light theme)\n  gray90: '#f4f5f5',\n  // Card bg / layer 1\n  gray100: '#f4f5f5',\n  // divider line\n  gray80: '#d0d1d3',\n  // from figma\n  lightBorder1: '#e4e7e7',\n\n  blueDarkMain: '#3d71d9', // '#4165F5',\n  blueDarkText: '#6e9fff', // '#58a6ff', //'#33a2e5', // '#5790FF',\n  redDarkMain: '#d10e5c',\n  redDarkText: '#ff5286',\n  greenDarkMain: '#1a7f4b',\n  greenDarkText: '#6ccf8e',\n  orangeDarkMain: '#ff9900',\n  orangeDarkText: '#fbad37',\n\n  blueLightMain: '#3871dc',\n  blueLightText: '#1f62e0',\n  redLightMain: '#e0226e',\n  redLightText: '#cf0e5B',\n  greenLightMain: '#1b855e',\n  greenLightText: '#0a764e',\n  orangeLightMain: '#ff9900',\n  orangeLightText: '#b5510d',\n};\n","import { merge } from 'lodash';\n\nimport { alpha, darken, emphasize, getContrastRatio, lighten } from './colorManipulator';\nimport { palette } from './palette';\nimport { DeepPartial, ThemeRichColor } from './types';\n\n/** @internal */\nexport type ThemeColorsMode = 'light' | 'dark';\n\n/** @internal */\nexport interface ThemeColorsBase<TColor> {\n  mode: ThemeColorsMode;\n\n  primary: TColor;\n  secondary: TColor;\n  info: TColor;\n  error: TColor;\n  success: TColor;\n  warning: TColor;\n\n  text: {\n    primary: string;\n    secondary: string;\n    disabled: string;\n    link: string;\n    /** Used for auto white or dark text on colored backgrounds */\n    maxContrast: string;\n  };\n\n  background: {\n    /** Dashboard and body background */\n    canvas: string;\n    /** Primary content pane background (panels etc) */\n    primary: string;\n    /** Cards and elements that need to stand out on the primary background */\n    secondary: string;\n    /**\n     * For popovers and menu backgrounds. This is the same color as primary in most light themes but in dark\n     * themes it has a brighter shade to help give it contrast against the primary background.\n     **/\n    elevated: string;\n  };\n\n  border: {\n    weak: string;\n    medium: string;\n    strong: string;\n  };\n\n  gradients: {\n    brandVertical: string;\n    brandHorizontal: string;\n  };\n\n  action: {\n    /** Used for selected menu item / select option */\n    selected: string;\n    /**\n     * @alpha (Do not use from plugins)\n     * Used for selected items when background only change is not enough (Currently only used for FilterPill)\n     **/\n    selectedBorder: string;\n    /** Used for hovered menu item / select option */\n    hover: string;\n    /** Used for button/colored background hover opacity */\n    hoverOpacity: number;\n    /** Used focused menu item / select option */\n    focus: string;\n    /** Used for disabled buttons and inputs */\n    disabledBackground: string;\n    /** Disabled text */\n    disabledText: string;\n    /** Disablerd opacity */\n    disabledOpacity: number;\n  };\n\n  hoverFactor: number;\n  contrastThreshold: number;\n  tonalOffset: number;\n}\n\nexport interface ThemeHoverStrengh {}\n\n/** @beta */\nexport interface ThemeColors extends ThemeColorsBase<ThemeRichColor> {\n  /** Returns a text color for the background */\n  getContrastText(background: string, threshold?: number): string;\n  /* Brighten or darken a color by specified factor (0-1) */\n  emphasize(color: string, amount?: number): string;\n}\n\n/** @internal */\nexport type ThemeColorsInput = DeepPartial<ThemeColorsBase<ThemeRichColor>>;\n\nclass DarkColors implements ThemeColorsBase<Partial<ThemeRichColor>> {\n  mode: ThemeColorsMode = 'dark';\n\n  // Used to get more white opacity colors\n  whiteBase = '204, 204, 220';\n\n  border = {\n    weak: `rgba(${this.whiteBase}, 0.12)`,\n    medium: `rgba(${this.whiteBase}, 0.2)`,\n    strong: `rgba(${this.whiteBase}, 0.30)`,\n  };\n\n  text = {\n    primary: `rgb(${this.whiteBase})`,\n    secondary: `rgba(${this.whiteBase}, 0.65)`,\n    disabled: `rgba(${this.whiteBase}, 0.6)`,\n    link: palette.blueDarkText,\n    maxContrast: palette.white,\n  };\n\n  primary = {\n    main: palette.blueDarkMain,\n    text: palette.blueDarkText,\n    border: palette.blueDarkText,\n  };\n\n  secondary = {\n    main: `rgba(${this.whiteBase}, 0.10)`,\n    shade: `rgba(${this.whiteBase}, 0.14)`,\n    transparent: `rgba(${this.whiteBase}, 0.08)`,\n    text: this.text.primary,\n    contrastText: `rgb(${this.whiteBase})`,\n    border: `rgba(${this.whiteBase}, 0.08)`,\n  };\n\n  info = this.primary;\n\n  error = {\n    main: palette.redDarkMain,\n    text: palette.redDarkText,\n  };\n\n  success = {\n    main: palette.greenDarkMain,\n    text: palette.greenDarkText,\n  };\n\n  warning = {\n    main: palette.orangeDarkMain,\n    text: palette.orangeDarkText,\n  };\n\n  background = {\n    canvas: palette.gray05,\n    primary: palette.gray10,\n    secondary: palette.gray15,\n    elevated: palette.gray15,\n  };\n\n  action = {\n    hover: `rgba(${this.whiteBase}, 0.16)`,\n    selected: `rgba(${this.whiteBase}, 0.12)`,\n    selectedBorder: palette.orangeDarkMain,\n    focus: `rgba(${this.whiteBase}, 0.16)`,\n    hoverOpacity: 0.08,\n    disabledText: this.text.disabled,\n    disabledBackground: `rgba(${this.whiteBase}, 0.04)`,\n    disabledOpacity: 0.38,\n  };\n\n  gradients = {\n    brandHorizontal: 'linear-gradient(270deg, #F55F3E 0%, #FF8833 100%)',\n    brandVertical: 'linear-gradient(0.01deg, #F55F3E 0.01%, #FF8833 99.99%)',\n  };\n\n  contrastThreshold = 3;\n  hoverFactor = 0.03;\n  tonalOffset = 0.15;\n}\n\nclass LightColors implements ThemeColorsBase<Partial<ThemeRichColor>> {\n  mode: ThemeColorsMode = 'light';\n\n  blackBase = '36, 41, 46';\n\n  primary = {\n    main: palette.blueLightMain,\n    border: palette.blueLightText,\n    text: palette.blueLightText,\n  };\n\n  text = {\n    primary: `rgba(${this.blackBase}, 1)`,\n    secondary: `rgba(${this.blackBase}, 0.75)`,\n    disabled: `rgba(${this.blackBase}, 0.64)`,\n    link: this.primary.text,\n    maxContrast: palette.black,\n  };\n\n  border = {\n    weak: `rgba(${this.blackBase}, 0.12)`,\n    medium: `rgba(${this.blackBase}, 0.3)`,\n    strong: `rgba(${this.blackBase}, 0.4)`,\n  };\n\n  secondary = {\n    main: `rgba(${this.blackBase}, 0.08)`,\n    shade: `rgba(${this.blackBase}, 0.15)`,\n    transparent: `rgba(${this.blackBase}, 0.08)`,\n    contrastText: `rgba(${this.blackBase},  1)`,\n    text: this.text.primary,\n    border: this.border.weak,\n  };\n\n  info = {\n    main: palette.blueLightMain,\n    text: palette.blueLightText,\n  };\n\n  error = {\n    main: palette.redLightMain,\n    text: palette.redLightText,\n    border: palette.redLightText,\n  };\n\n  success = {\n    main: palette.greenLightMain,\n    text: palette.greenLightText,\n  };\n\n  warning = {\n    main: palette.orangeLightMain,\n    text: palette.orangeLightText,\n  };\n\n  background = {\n    canvas: palette.gray90,\n    primary: palette.white,\n    secondary: palette.gray100,\n    elevated: palette.white,\n  };\n\n  action = {\n    hover: `rgba(${this.blackBase}, 0.12)`,\n    selected: `rgba(${this.blackBase}, 0.08)`,\n    selectedBorder: palette.orangeLightMain,\n    hoverOpacity: 0.08,\n    focus: `rgba(${this.blackBase}, 0.12)`,\n    disabledBackground: `rgba(${this.blackBase}, 0.04)`,\n    disabledText: this.text.disabled,\n    disabledOpacity: 0.38,\n  };\n\n  gradients = {\n    brandHorizontal: 'linear-gradient(90deg, #FF8833 0%, #F53E4C 100%)',\n    brandVertical: 'linear-gradient(0.01deg, #F53E4C -31.2%, #FF8833 113.07%)',\n  };\n\n  contrastThreshold = 3;\n  hoverFactor = 0.03;\n  tonalOffset = 0.2;\n}\n\nexport function createColors(colors: ThemeColorsInput): ThemeColors {\n  const dark = new DarkColors();\n  const light = new LightColors();\n  const base = (colors.mode ?? 'dark') === 'dark' ? dark : light;\n  const {\n    primary = base.primary,\n    secondary = base.secondary,\n    info = base.info,\n    warning = base.warning,\n    success = base.success,\n    error = base.error,\n    tonalOffset = base.tonalOffset,\n    hoverFactor = base.hoverFactor,\n    contrastThreshold = base.contrastThreshold,\n    ...other\n  } = colors;\n\n  function getContrastText(background: string, threshold: number = contrastThreshold) {\n    const contrastText =\n      getContrastRatio(dark.text.maxContrast, background, base.background.primary) >= threshold\n        ? dark.text.maxContrast\n        : light.text.maxContrast;\n    // todo, need color framework\n    return contrastText;\n  }\n\n  const getRichColor = ({ color, name }: GetRichColorProps): ThemeRichColor => {\n    color = { ...color, name };\n    if (!color.main) {\n      color.main = base[name].main;\n    }\n    if (!color.text) {\n      color.text = color.main;\n    }\n    if (!color.border) {\n      color.border = color.text;\n    }\n    if (!color.shade) {\n      color.shade = base.mode === 'light' ? darken(color.main, tonalOffset) : lighten(color.main, tonalOffset);\n    }\n    if (!color.transparent) {\n      color.transparent = alpha(color.main, 0.15);\n    }\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n    if (!color.borderTransparent) {\n      color.borderTransparent = alpha(color.border, 0.25);\n    }\n    return color as ThemeRichColor;\n  };\n\n  return merge(\n    {\n      ...base,\n      primary: getRichColor({ color: primary, name: 'primary' }),\n      secondary: getRichColor({ color: secondary, name: 'secondary' }),\n      info: getRichColor({ color: info, name: 'info' }),\n      error: getRichColor({ color: error, name: 'error' }),\n      success: getRichColor({ color: success, name: 'success' }),\n      warning: getRichColor({ color: warning, name: 'warning' }),\n      getContrastText,\n      emphasize: (color: string, factor?: number) => {\n        return emphasize(color, factor ?? hoverFactor);\n      },\n    },\n    other\n  );\n}\n\ntype RichColorNames = 'primary' | 'secondary' | 'info' | 'error' | 'success' | 'warning';\n\ninterface GetRichColorProps {\n  color: Partial<ThemeRichColor>;\n  name: RichColorNames;\n}\n","import { ThemeColors } from './createColors';\nimport { ThemeShadows } from './createShadows';\n\n/** @beta */\nexport interface ThemeComponents {\n  /** Applies to normal buttons, inputs, radio buttons, etc */\n  height: {\n    sm: number;\n    md: number;\n    lg: number;\n  };\n  input: {\n    background: string;\n    borderColor: string;\n    borderHover: string;\n    text: string;\n  };\n  tooltip: {\n    text: string;\n    background: string;\n  };\n  panel: {\n    padding: number;\n    headerHeight: number;\n    borderColor: string;\n    boxShadow: string;\n    background: string;\n  };\n  dropdown: {\n    background: string;\n  };\n  overlay: {\n    background: string;\n  };\n  dashboard: {\n    background: string;\n    padding: number;\n  };\n  textHighlight: {\n    background: string;\n    text: string;\n  };\n  sidemenu: {\n    width: number;\n  };\n  menuTabs: {\n    height: number;\n  };\n  horizontalDrawer: {\n    defaultHeight: number;\n  };\n  table: {\n    rowHoverBackground: string;\n    rowSelected: string;\n  };\n}\n\nexport function createComponents(colors: ThemeColors, shadows: ThemeShadows): ThemeComponents {\n  const panel = {\n    padding: 1,\n    headerHeight: 4,\n    background: colors.background.primary,\n    borderColor: colors.border.weak,\n    boxShadow: 'none',\n  };\n\n  const input = {\n    borderColor: colors.border.medium,\n    borderHover: colors.border.strong,\n    text: colors.text.primary,\n    background: colors.mode === 'dark' ? colors.background.canvas : colors.background.primary,\n  };\n\n  return {\n    height: {\n      sm: 3,\n      md: 4,\n      lg: 6,\n    },\n    input,\n    panel,\n    dropdown: {\n      background: colors.background.elevated,\n    },\n    tooltip: {\n      background: colors.background.elevated,\n      text: colors.text.primary,\n    },\n    dashboard: {\n      background: colors.background.canvas,\n      padding: 1,\n    },\n    overlay: {\n      background: colors.mode === 'dark' ? 'rgba(63, 62, 62, 0.45)' : 'rgba(208, 209, 211, 0.24)',\n    },\n    sidemenu: {\n      width: 57,\n    },\n    menuTabs: {\n      height: 5,\n    },\n    textHighlight: {\n      text: colors.warning.contrastText,\n      background: colors.warning.main,\n    },\n    horizontalDrawer: {\n      defaultHeight: 400,\n    },\n    table: {\n      rowHoverBackground: colors.action.hover,\n      rowSelected: colors.action.selected,\n    },\n  };\n}\n","import { ThemeColors } from './createColors';\n\n/** @beta */\nexport interface ThemeShadows {\n  z1: string;\n  z2: string;\n  z3: string;\n}\n\n/** @alpha */\nexport function createShadows(colors: ThemeColors): ThemeShadows {\n  if (colors.mode === 'dark') {\n    return {\n      z1: '0px 1px 2px rgba(1, 4, 9, 0.75)',\n      z2: '0px 4px 8px rgba(1, 4, 9, 0.75)',\n      z3: '0px 8px 24px rgb(1, 4, 9)',\n    };\n  }\n\n  return {\n    z1: '0px 1px 2px rgba(24, 26, 27, 0.2)',\n    z2: '0px 4px 8px rgba(24, 26, 27, 0.2)',\n    z3: '0px 13px 20px 1px rgba(24, 26, 27, 0.18)',\n  };\n}\n","/** @beta */\nexport interface ThemeShape {\n  /**\n   * @deprecated Use `theme.shape.radius.default`, `theme.shape.radius.pill` or `theme.shape.radius.circle` instead\n   */\n  borderRadius: (amount?: number) => string;\n  radius: Radii;\n}\n\ninterface Radii {\n  default: string;\n  pill: string;\n  circle: string;\n}\n\n/** @internal */\nexport interface ThemeShapeInput {\n  borderRadius?: number;\n}\n\nexport function createShape(options: ThemeShapeInput): ThemeShape {\n  const baseBorderRadius = options.borderRadius ?? 2;\n\n  const radius = {\n    default: `${baseBorderRadius}px`,\n    pill: '9999px',\n    circle: '100%',\n  };\n\n  /**\n   * @deprecated Use `theme.shape.radius.default`, `theme.shape.radius.pill` or `theme.shape.radius.circle`instead\n   * @param amount\n   */\n  const borderRadius = (amount?: number) => {\n    const value = (amount ?? 1) * baseBorderRadius;\n    return `${value}px`;\n  };\n\n  return {\n    radius,\n    borderRadius,\n  };\n}\n","// Code based on Material UI\n// The MIT License (MIT)\n// Copyright (c) 2014 Call-Em-All\n\n/** @internal */\nexport type ThemeSpacingOptions = {\n  gridSize?: number;\n};\n\n/** @internal */\nexport type ThemeSpacingArgument = number | string;\n\n/**\n * @beta\n * The different signatures imply different meaning for their arguments that can't be expressed structurally.\n * We express the difference with variable names.\n * tslint:disable:unified-signatures */\nexport interface ThemeSpacing extends SpacingTokens {\n  (): string;\n  (value: ThemeSpacingArgument): string;\n  (topBottom: ThemeSpacingArgument, rightLeft: ThemeSpacingArgument): string;\n  (top: ThemeSpacingArgument, rightLeft: ThemeSpacingArgument, bottom: ThemeSpacingArgument): string;\n  (\n    top: ThemeSpacingArgument,\n    right: ThemeSpacingArgument,\n    bottom: ThemeSpacingArgument,\n    left: ThemeSpacingArgument\n  ): string;\n  gridSize: number;\n}\n\n// Possible spacing token options\nexport type ThemeSpacingTokens = 0 | 0.25 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 10;\n\n// Spacing tokens as represented in the theme\ntype SpacingTokens = {\n  [key in `x${Exclude<ThemeSpacingTokens, 0.25 | 0.5 | 1.5 | 2.5> | '0_25' | '0_5' | '1_5' | '2_5'}`]: string;\n};\n\n/** @internal */\nexport function createSpacing(options: ThemeSpacingOptions = {}): ThemeSpacing {\n  const { gridSize = 8 } = options;\n\n  const transform = (value: ThemeSpacingArgument) => {\n    if (typeof value === 'string') {\n      return value;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof value !== 'number') {\n        console.error(`Expected spacing argument to be a number or a string, got ${value}.`);\n      }\n    }\n    return value * gridSize;\n  };\n\n  const spacing = (...args: Array<number | string>): string => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(args.length <= 4)) {\n        console.error(`Too many arguments provided, expected between 0 and 4, got ${args.length}`);\n      }\n    }\n\n    if (args.length === 0) {\n      args[0] = 1;\n    }\n\n    return args\n      .map((argument) => {\n        const output = transform(argument);\n        return typeof output === 'number' ? `${output}px` : output;\n      })\n      .join(' ');\n  };\n\n  spacing.gridSize = gridSize;\n\n  // Design system spacing tokens\n  // Added in v10.2 of Grafana, if using spacing in a plugin that needs compatibility with older versions\n  // use the spacing function instead.\n  spacing.x0 = '0px';\n  spacing.x0_25 = '2px';\n  spacing.x0_5 = '4px';\n  spacing.x1 = '8px';\n  spacing.x1_5 = '12px';\n  spacing.x2 = '16px';\n  spacing.x2_5 = '20px';\n  spacing.x3 = '24px';\n  spacing.x4 = '32px';\n  spacing.x5 = '40px';\n  spacing.x6 = '48px';\n  spacing.x8 = '64px';\n  spacing.x10 = '80px';\n\n  return spacing;\n}\n","// Code based on Material UI\n// The MIT License (MIT)\n// Copyright (c) 2014 Call-Em-All\n\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nconst easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)',\n};\n\n// Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nconst duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195,\n};\n\n/** @alpha */\nexport interface CreateTransitionOptions {\n  duration?: number | string;\n  easing?: string;\n  delay?: number | string;\n}\n\n/** @alpha */\nexport function create(props: string | string[] = ['all'], options: CreateTransitionOptions = {}) {\n  const { duration: durationOption = duration.standard, easing: easingOption = easing.easeInOut, delay = 0 } = options;\n\n  return (Array.isArray(props) ? props : [props])\n    .map(\n      (animatedProp) =>\n        `${animatedProp} ${\n          typeof durationOption === 'string' ? durationOption : formatMs(durationOption)\n        } ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`\n    )\n    .join(',');\n}\n\ntype ReducedMotionProps = 'no-preference' | 'reduce';\n\nexport function handleMotion(...props: ReducedMotionProps[]) {\n  return `@media ${props.map((prop) => `(prefers-reduced-motion: ${prop})`).join(',')}`;\n}\n\nexport function getAutoHeightDuration(height: number) {\n  if (!height) {\n    return 0;\n  }\n\n  const constant = height / 36;\n\n  // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n  return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\n\nfunction formatMs(milliseconds: number) {\n  return `${Math.round(milliseconds)}ms`;\n}\n\n/** @alpha */\nexport interface ThemeTransitions {\n  create: typeof create;\n  duration: typeof duration;\n  easing: typeof easing;\n  getAutoHeightDuration: typeof getAutoHeightDuration;\n  handleMotion: typeof handleMotion;\n}\n\n/** @internal */\nexport function createTransitions(): ThemeTransitions {\n  return {\n    create,\n    duration,\n    easing,\n    getAutoHeightDuration,\n    handleMotion,\n  };\n}\n","// Code based on Material UI\n// The MIT License (MIT)\n// Copyright (c) 2014 Call-Em-All\n\nimport { ThemeColors } from './createColors';\n\n/** @beta */\nexport interface ThemeTypography extends ThemeTypographyVariantTypes {\n  fontFamily: string;\n  fontFamilyMonospace: string;\n  fontSize: number;\n  fontWeightLight: number;\n  fontWeightRegular: number;\n  fontWeightMedium: number;\n  fontWeightBold: number;\n\n  // The font-size on the html element.\n  htmlFontSize?: number;\n\n  /**\n   * @deprecated\n   * from legacy old theme\n   * */\n  size: {\n    base: string;\n    xs: string;\n    sm: string;\n    md: string;\n    lg: string;\n  };\n\n  pxToRem: (px: number) => string;\n}\n\nexport interface ThemeTypographyVariant {\n  fontSize: string;\n  fontWeight: number;\n  lineHeight: number;\n  fontFamily: string;\n  letterSpacing?: string;\n}\n\nexport interface ThemeTypographyInput {\n  fontFamily?: string;\n  fontFamilyMonospace?: string;\n  fontSize?: number;\n  fontWeightLight?: number;\n  fontWeightRegular?: number;\n  fontWeightMedium?: number;\n  fontWeightBold?: number;\n  // hat's the font-size on the html element.\n  // 16px is the default font-size used by browsers.\n  htmlFontSize?: number;\n}\n\nconst defaultFontFamily = \"'Inter', 'Helvetica', 'Arial', sans-serif\";\nconst defaultFontFamilyMonospace = \"'Roboto Mono', monospace\";\n\nexport function createTypography(colors: ThemeColors, typographyInput: ThemeTypographyInput = {}): ThemeTypography {\n  const {\n    fontFamily = defaultFontFamily,\n    fontFamilyMonospace = defaultFontFamilyMonospace,\n    // The default font size of the Material Specification.\n    fontSize = 14, // px\n    fontWeightLight = 300,\n    fontWeightRegular = 400,\n    fontWeightMedium = 500,\n    fontWeightBold = 500,\n    // Tell Grafana-UI what's the font-size on the html element.\n    // 16px is the default font-size used by browsers.\n    htmlFontSize = 14,\n  } = typographyInput;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('Grafana-UI: `fontSize` is required to be a number.');\n    }\n\n    if (typeof htmlFontSize !== 'number') {\n      console.error('Grafana-UI: `htmlFontSize` is required to be a number.');\n    }\n  }\n\n  const coef = fontSize / 14;\n  const pxToRem = (size: number) => `${(size / htmlFontSize) * coef}rem`;\n  const buildVariant = (\n    fontWeight: number,\n    size: number,\n    lineHeight: number,\n    letterSpacing: number,\n    casing?: object\n  ): ThemeTypographyVariant => {\n    if (lineHeight % 2 !== 0 || size % 2 !== 0) {\n      throw new Error('Font size and line height should be integer multiples of 2 to prevent issues with alignment');\n    }\n\n    return {\n      fontFamily,\n      fontWeight,\n      fontSize: pxToRem(size),\n      lineHeight: lineHeight / size,\n      ...(fontFamily === defaultFontFamily ? { letterSpacing: `${round(letterSpacing / size)}em` } : {}),\n      ...casing,\n    };\n  };\n\n  // All our fonts/line heights should be integer multiples of 2 to prevent issues with alignment\n  const variants = {\n    h1: buildVariant(fontWeightRegular, 28, 32, -0.25),\n    h2: buildVariant(fontWeightRegular, 24, 28, 0),\n    h3: buildVariant(fontWeightRegular, 22, 24, 0),\n    h4: buildVariant(fontWeightRegular, 18, 22, 0.25),\n    h5: buildVariant(fontWeightRegular, 16, 22, 0),\n    h6: buildVariant(fontWeightMedium, 14, 22, 0.15),\n    body: buildVariant(fontWeightRegular, fontSize, 22, 0.15),\n    bodySmall: buildVariant(fontWeightRegular, 12, 18, 0.15),\n    code: { ...buildVariant(fontWeightRegular, 14, 16, 0.15), fontFamily: fontFamilyMonospace },\n  };\n\n  const size = {\n    base: '14px',\n    xs: '10px',\n    sm: '12px',\n    md: '14px',\n    lg: '18px',\n  };\n\n  return {\n    htmlFontSize,\n    pxToRem,\n    fontFamily,\n    fontFamilyMonospace,\n    fontSize,\n    fontWeightLight,\n    fontWeightRegular,\n    fontWeightMedium,\n    fontWeightBold,\n    size,\n    ...variants,\n  };\n}\n\nfunction round(value: number) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nexport interface ThemeTypographyVariantTypes {\n  h1: ThemeTypographyVariant;\n  h2: ThemeTypographyVariant;\n  h3: ThemeTypographyVariant;\n  h4: ThemeTypographyVariant;\n  h5: ThemeTypographyVariant;\n  h6: ThemeTypographyVariant;\n  body: ThemeTypographyVariant;\n  bodySmall: ThemeTypographyVariant;\n  code: ThemeTypographyVariant;\n}\n","import { GrafanaTheme, GrafanaThemeCommons, GrafanaThemeType } from '../types/theme';\n\nimport { GrafanaTheme2 } from './types';\n\nexport function createV1Theme(theme: Omit<GrafanaTheme2, 'v1'>): GrafanaTheme {\n  const oldCommon: GrafanaThemeCommons = {\n    name: 'Grafana Default',\n    typography: {\n      fontFamily: {\n        sansSerif: theme.typography.fontFamily,\n        monospace: theme.typography.fontFamilyMonospace,\n      },\n      size: {\n        base: `${theme.typography.fontSize}px`,\n        xs: theme.typography.size.xs,\n        sm: theme.typography.size.sm,\n        md: theme.typography.size.md,\n        lg: theme.typography.size.lg,\n      },\n      heading: {\n        h1: theme.typography.h1.fontSize,\n        h2: theme.typography.h2.fontSize,\n        h3: theme.typography.h3.fontSize,\n        h4: theme.typography.h4.fontSize,\n        h5: theme.typography.h5.fontSize,\n        h6: theme.typography.h6.fontSize,\n      },\n      weight: {\n        light: theme.typography.fontWeightLight,\n        regular: theme.typography.fontWeightRegular,\n        semibold: theme.typography.fontWeightMedium,\n        bold: theme.typography.fontWeightBold,\n      },\n      lineHeight: {\n        xs: theme.typography.bodySmall.lineHeight,\n        sm: theme.typography.bodySmall.lineHeight,\n        md: theme.typography.body.lineHeight,\n        lg: theme.typography.h2.lineHeight,\n      },\n      link: {\n        decoration: 'none',\n        hoverDecoration: 'none',\n      },\n    },\n    breakpoints: {\n      xs: `${theme.breakpoints.values.xs}px`,\n      sm: `${theme.breakpoints.values.sm}px`,\n      md: `${theme.breakpoints.values.md}px`,\n      lg: `${theme.breakpoints.values.lg}px`,\n      xl: `${theme.breakpoints.values.xl}px`,\n      xxl: `${theme.breakpoints.values.xxl}px`,\n    },\n    spacing: {\n      base: theme.spacing.gridSize,\n      insetSquishMd: theme.spacing(0.5, 1),\n      d: theme.spacing(2),\n      xxs: theme.spacing(0.25),\n      xs: theme.spacing(0.5),\n      sm: theme.spacing(1),\n      md: theme.spacing(2),\n      lg: theme.spacing(3),\n      xl: theme.spacing(4),\n      gutter: theme.spacing(4),\n\n      // Next-gen forms spacing variables\n      // TODO: Move variables definition to respective components when implementing\n      formSpacingBase: theme.spacing.gridSize,\n      formMargin: `${theme.spacing.gridSize * 4}px`,\n      formFieldsetMargin: `${theme.spacing.gridSize * 2}px`,\n      formInputHeight: theme.spacing.gridSize * 4,\n      formButtonHeight: theme.spacing.gridSize * 4,\n      formInputPaddingHorizontal: `${theme.spacing.gridSize}px`,\n\n      // Used for icons do define spacing between icon and input field\n      // Applied on the right(prefix) or left(suffix)\n      formInputAffixPaddingHorizontal: `${theme.spacing.gridSize / 2}px`,\n\n      formInputMargin: `${theme.spacing.gridSize * 2}px`,\n      formLabelPadding: '0 0 0 2px',\n      formLabelMargin: `0 0 ${theme.spacing.gridSize / 2 + 'px'} 0`,\n      formValidationMessagePadding: '4px 8px',\n      formValidationMessageMargin: '4px 0 0 0',\n      inlineFormMargin: '4px',\n    },\n    border: {\n      radius: {\n        sm: theme.shape.borderRadius(1),\n        md: theme.shape.borderRadius(2),\n        lg: theme.shape.borderRadius(3),\n      },\n      width: {\n        sm: '1px',\n      },\n    },\n    height: {\n      sm: theme.spacing.gridSize * theme.components.height.sm,\n      md: theme.spacing.gridSize * theme.components.height.md,\n      lg: theme.spacing.gridSize * theme.components.height.lg,\n    },\n    panelPadding: theme.components.panel.padding * theme.spacing.gridSize,\n    panelHeaderHeight: theme.spacing.gridSize * theme.components.panel.headerHeight,\n    zIndex: theme.zIndex,\n  };\n\n  const basicColors = {\n    ...commonColorsPalette,\n    black: '#000000',\n    white: '#ffffff',\n    dark1: '#141414',\n    dark2: '#161719',\n    dark3: '#1f1f20',\n    dark4: '#212124',\n    dark5: '#222426',\n    dark6: '#262628',\n    dark7: '#292a2d',\n    dark8: '#2f2f32',\n    dark9: '#343436',\n    dark10: '#424345',\n    gray1: '#555555',\n    gray2: '#8e8e8e',\n    gray3: '#b3b3b3',\n    gray4: '#d8d9da',\n    gray5: '#ececec',\n    gray6: '#f4f5f8', // not used in dark theme\n    gray7: '#fbfbfb', // not used in dark theme\n    redBase: '#e02f44',\n    redShade: '#c4162a',\n    greenBase: '#299c46',\n    greenShade: '#23843b',\n    red: '#d44a3a',\n    yellow: '#ecbb13',\n    purple: '#9933cc',\n    variable: '#32d1df',\n    orange: '#eb7b18',\n    orangeDark: '#ff780a',\n  };\n\n  const backgrounds = {\n    bg1: theme.colors.background.primary,\n    bg2: theme.colors.background.secondary,\n    bg3: theme.colors.action.hover,\n    dashboardBg: theme.colors.background.canvas,\n    bgBlue1: theme.colors.primary.main,\n    bgBlue2: theme.colors.primary.shade,\n  };\n\n  const borders = {\n    border1: theme.colors.border.weak,\n    border2: theme.colors.border.medium,\n    border3: theme.colors.border.strong,\n  };\n\n  const textColors = {\n    textStrong: theme.colors.text.maxContrast,\n    textHeading: theme.colors.text.primary,\n    text: theme.colors.text.primary,\n    textSemiWeak: theme.colors.text.secondary,\n    textWeak: theme.colors.text.secondary,\n    textFaint: theme.colors.text.disabled,\n    textBlue: theme.colors.primary.text,\n  };\n\n  const form = {\n    // Next-gen forms functional colors\n    formLabel: theme.colors.text.primary,\n    formDescription: theme.colors.text.secondary,\n    formInputBg: theme.components.input.background,\n    formInputBgDisabled: theme.colors.action.disabledBackground,\n    formInputBorder: theme.components.input.borderColor,\n    formInputBorderHover: theme.components.input.borderHover,\n    formInputBorderActive: theme.colors.primary.border,\n    formInputBorderInvalid: theme.colors.error.border,\n    formInputPlaceholderText: theme.colors.text.disabled,\n    formInputText: theme.components.input.text,\n    formInputDisabledText: theme.colors.action.disabledText,\n    formFocusOutline: theme.colors.primary.main,\n    formValidationMessageText: theme.colors.error.contrastText,\n    formValidationMessageBg: theme.colors.error.main,\n  };\n\n  return {\n    ...oldCommon,\n    type: theme.colors.mode === 'dark' ? GrafanaThemeType.Dark : GrafanaThemeType.Light,\n    isDark: theme.isDark,\n    isLight: theme.isLight,\n    name: theme.name,\n    palette: {\n      ...basicColors,\n      brandPrimary: basicColors.orange,\n      brandSuccess: theme.colors.success.main,\n      brandWarning: theme.colors.warning.main,\n      brandDanger: theme.colors.error.main,\n      queryRed: theme.colors.error.text,\n      queryGreen: theme.colors.success.text,\n      queryPurple: '#fe85fc',\n      queryOrange: basicColors.orange,\n      online: theme.colors.success.main,\n      warn: theme.colors.success.main,\n      critical: theme.colors.success.main,\n    },\n    colors: {\n      ...backgrounds,\n      ...borders,\n      ...form,\n      ...textColors,\n\n      bodyBg: theme.colors.background.canvas,\n      panelBg: theme.components.panel.background,\n      panelBorder: theme.components.panel.borderColor,\n      pageHeaderBg: theme.colors.background.canvas,\n      pageHeaderBorder: theme.colors.background.canvas,\n\n      dropdownBg: form.formInputBg,\n      dropdownShadow: basicColors.black,\n      dropdownOptionHoverBg: backgrounds.bg2,\n\n      link: theme.colors.text.primary,\n      linkDisabled: theme.colors.text.disabled,\n      linkHover: theme.colors.text.maxContrast,\n      linkExternal: theme.colors.text.link,\n    },\n    shadows: {\n      listItem: 'none',\n    },\n    visualization: theme.visualization,\n  };\n}\n\nconst commonColorsPalette = {\n  // New greys palette used by next-gen form elements\n  gray98: '#f7f8fa',\n  gray97: '#f1f5f9',\n  gray95: '#e9edf2',\n  gray90: '#dce1e6',\n  gray85: '#c7d0d9',\n  gray70: '#9fa7b3',\n  gray60: '#7b8087',\n  gray33: '#464c54',\n  gray25: '#2c3235',\n  gray15: '#202226',\n  gray10: '#141619',\n  gray05: '#0b0c0e',\n\n  // New blues palette used by next-gen form elements\n  blue95: '#5794f2', // blue95\n  blue85: '#33a2e5', // blueText\n  blue80: '#3274d9', // blue80\n  blue77: '#1f60c4', // blue77\n\n  // New reds palette used by next-gen form elements\n  red88: '#e02f44',\n};\n","import { FALLBACK_COLOR } from '../types/fieldColor';\n\nimport { ThemeColors } from './createColors';\n\n/**\n * @alpha\n */\nexport interface ThemeVisualizationColors {\n  /** Only for internal use by color schemes */\n  palette: string[];\n  /** Lookup the real color given the name */\n  getColorByName: (color: string) => string;\n  /** Colors organized by hue */\n  hues: ThemeVizHue[];\n}\n\n/**\n * @alpha\n */\nexport interface ThemeVizColor {\n  color: string;\n  name: string;\n  aliases?: string[];\n  primary?: boolean;\n}\n\n/**\n * @alpha\n */\nexport interface ThemeVizHue {\n  name: string;\n  shades: ThemeVizColor[];\n}\n\n/**\n * @internal\n */\nexport function createVisualizationColors(colors: ThemeColors): ThemeVisualizationColors {\n  const hues = colors.mode === 'light' ? getLightHues() : getDarkHues();\n\n  const byNameIndex: Record<string, string> = {};\n\n  for (const hue of hues) {\n    for (const shade of hue.shades) {\n      byNameIndex[shade.name] = shade.color;\n      if (shade.aliases) {\n        for (const alias of shade.aliases) {\n          byNameIndex[alias] = shade.color;\n        }\n      }\n    }\n  }\n\n  // special colors\n  byNameIndex['transparent'] = colors.mode === 'light' ? 'rgba(255, 255, 255, 0)' : 'rgba(0,0,0,0)';\n  byNameIndex['panel-bg'] = colors.background.primary;\n  byNameIndex['text'] = colors.text.primary;\n\n  const getColorByName = (colorName: string) => {\n    if (!colorName) {\n      return FALLBACK_COLOR;\n    }\n\n    const realColor = byNameIndex[colorName];\n    if (realColor) {\n      return realColor;\n    }\n\n    if (colorName[0] === '#') {\n      return colorName;\n    }\n\n    if (colorName.indexOf('rgb') > -1) {\n      return colorName;\n    }\n\n    const nativeColor = nativeColorNames[colorName.toLowerCase()];\n    if (nativeColor) {\n      byNameIndex[colorName] = nativeColor;\n      return nativeColor;\n    }\n\n    return colorName;\n  };\n\n  const palette = getClassicPalette();\n\n  return {\n    hues,\n    palette,\n    getColorByName,\n  };\n}\n\nfunction getDarkHues(): ThemeVizHue[] {\n  return [\n    {\n      name: 'red',\n      shades: [\n        { color: '#FFA6B0', name: 'super-light-red' },\n        { color: '#FF7383', name: 'light-red' },\n        { color: '#F2495C', name: 'red', primary: true },\n        { color: '#E02F44', name: 'semi-dark-red' },\n        { color: '#C4162A', name: 'dark-red' },\n      ],\n    },\n    {\n      name: 'orange',\n      shades: [\n        { color: '#FFCB7D', name: 'super-light-orange', aliases: [] },\n        { color: '#FFB357', name: 'light-orange', aliases: [] },\n        { color: '#FF9830', name: 'orange', aliases: [], primary: true },\n        { color: '#FF780A', name: 'semi-dark-orange', aliases: [] },\n        { color: '#FA6400', name: 'dark-orange', aliases: [] },\n      ],\n    },\n    {\n      name: 'yellow',\n      shades: [\n        { color: '#FFF899', name: 'super-light-yellow', aliases: [] },\n        { color: '#FFEE52', name: 'light-yellow', aliases: [] },\n        { color: '#FADE2A', name: 'yellow', aliases: [], primary: true },\n        { color: '#F2CC0C', name: 'semi-dark-yellow', aliases: [] },\n        { color: '#E0B400', name: 'dark-yellow', aliases: [] },\n      ],\n    },\n    {\n      name: 'green',\n      shades: [\n        { color: '#C8F2C2', name: 'super-light-green', aliases: [] },\n        { color: '#96D98D', name: 'light-green', aliases: [] },\n        { color: '#73BF69', name: 'green', aliases: [], primary: true },\n        { color: '#56A64B', name: 'semi-dark-green', aliases: [] },\n        { color: '#37872D', name: 'dark-green', aliases: [] },\n      ],\n    },\n    {\n      name: 'blue',\n      shades: [\n        { color: '#C0D8FF', name: 'super-light-blue', aliases: [] },\n        { color: '#8AB8FF', name: 'light-blue', aliases: [] },\n        { color: '#5794F2', name: 'blue', aliases: [], primary: true },\n        { color: '#3274D9', name: 'semi-dark-blue', aliases: [] },\n        { color: '#1F60C4', name: 'dark-blue', aliases: [] },\n      ],\n    },\n    {\n      name: 'purple',\n      shades: [\n        { color: '#DEB6F2', name: 'super-light-purple', aliases: [] },\n        { color: '#CA95E5', name: 'light-purple', aliases: [] },\n        { color: '#B877D9', name: 'purple', aliases: [], primary: true },\n        { color: '#A352CC', name: 'semi-dark-purple', aliases: [] },\n        { color: '#8F3BB8', name: 'dark-purple', aliases: [] },\n      ],\n    },\n  ];\n}\n\nfunction getLightHues(): ThemeVizHue[] {\n  return [\n    {\n      name: 'red',\n      shades: [\n        { color: '#FF7383', name: 'super-light-red' },\n        { color: '#F2495C', name: 'light-red' },\n        { color: '#E02F44', name: 'red', primary: true },\n        { color: '#C4162A', name: 'semi-dark-red' },\n        { color: '#AD0317', name: 'dark-red' },\n      ],\n    },\n    {\n      name: 'orange',\n      shades: [\n        { color: '#FFB357', name: 'super-light-orange', aliases: [] },\n        { color: '#FF9830', name: 'light-orange', aliases: [] },\n        { color: '#FF780A', name: 'orange', aliases: [], primary: true },\n        { color: '#FA6400', name: 'semi-dark-orange', aliases: [] },\n        { color: '#E55400', name: 'dark-orange', aliases: [] },\n      ],\n    },\n    {\n      name: 'yellow',\n      shades: [\n        { color: '#FFEE52', name: 'super-light-yellow', aliases: [] },\n        { color: '#FADE2A', name: 'light-yellow', aliases: [] },\n        { color: '#F2CC0C', name: 'yellow', aliases: [], primary: true },\n        { color: '#E0B400', name: 'semi-dark-yellow', aliases: [] },\n        { color: '#CC9D00', name: 'dark-yellow', aliases: [] },\n      ],\n    },\n    {\n      name: 'green',\n      shades: [\n        { color: '#96D98D', name: 'super-light-green', aliases: [] },\n        { color: '#73BF69', name: 'light-green', aliases: [] },\n        { color: '#56A64B', name: 'green', aliases: [], primary: true },\n        { color: '#37872D', name: 'semi-dark-green', aliases: [] },\n        { color: '#19730E', name: 'dark-green', aliases: [] },\n      ],\n    },\n    {\n      name: 'blue',\n      shades: [\n        { color: '#8AB8FF', name: 'super-light-blue', aliases: [] },\n        { color: '#5794F2', name: 'light-blue', aliases: [] },\n        { color: '#3274D9', name: 'blue', aliases: [], primary: true },\n        { color: '#1F60C4', name: 'semi-dark-blue', aliases: [] },\n        { color: '#1250B0', name: 'dark-blue', aliases: [] },\n      ],\n    },\n    {\n      name: 'purple',\n      shades: [\n        { color: '#CA95E5', name: 'super-light-purple', aliases: [] },\n        { color: '#B877D9', name: 'light-purple', aliases: [] },\n        { color: '#A352CC', name: 'purple', aliases: [], primary: true },\n        { color: '#8F3BB8', name: 'semi-dark-purple', aliases: [] },\n        { color: '#7C2EA3', name: 'dark-purple', aliases: [] },\n      ],\n    },\n  ];\n}\n\nfunction getClassicPalette() {\n  // Todo replace these with named colors (as many as possible)\n\n  return [\n    'green', // '#7EB26D', // 0: pale green\n    'semi-dark-yellow', // '#EAB839', // 1: mustard\n    'light-blue', // #6ED0E0', // 2: light blue\n    'semi-dark-orange', // '#EF843C', // 3: orange\n    'red', // '#E24D42', // 4: red\n    'blue', // #1F78C1', // 5: ocean\n    'purple', // '#BA43A9', // 6: purple\n    '#705DA0', // 7: violet\n    'dark-green', // '#508642', // 8: dark green\n    'yellow', //'#CCA300', // 9: dark sand\n    '#447EBC',\n    '#C15C17',\n    '#890F02',\n    '#0A437C',\n    '#6D1F62',\n    '#584477',\n    '#B7DBAB',\n    '#F4D598',\n    '#70DBED',\n    '#F9BA8F',\n    '#F29191',\n    '#82B5D8',\n    '#E5A8E2',\n    '#AEA2E0',\n    '#629E51',\n    '#E5AC0E',\n    '#64B0C8',\n    '#E0752D',\n    '#BF1B00',\n    '#0A50A1',\n    '#962D82',\n    '#614D93',\n    '#9AC48A',\n    '#F2C96D',\n    '#65C5DB',\n    '#F9934E',\n    '#EA6460',\n    '#5195CE',\n    '#D683CE',\n    '#806EB7',\n    '#3F6833',\n    '#967302',\n    '#2F575E',\n    '#99440A',\n    '#58140C',\n    '#052B51',\n    '#511749',\n    '#3F2B5B',\n    '#E0F9D7',\n    '#FCEACA',\n    '#CFFAFF',\n    '#F9E2D2',\n    '#FCE2DE',\n    '#BADFF4',\n    '#F9D9F9',\n    '#DEDAF7',\n  ];\n}\n\n// Old hues\n// function getDarkHues(): ThemeVizHue[] {\n//     return [\n//       {\n//         name: 'red',\n//         shades: [\n//           { name: 'red1', color: '#FFC2D4', aliases: ['super-light-red'] },\n//           { name: 'red2', color: '#FFA8C2', aliases: ['light-red'] },\n//           { name: 'red3', color: '#FF85A9', aliases: ['red'], primary: true },\n//           { name: 'red4', color: '#FF5286', aliases: ['semi-dark-red'] },\n//           { name: 'red5', color: '#E0226E', aliases: ['dark-red'] },\n//         ],\n//       },\n//       {\n//         name: 'orange',\n//         shades: [\n//           { name: 'orange1', color: '#FFC0AD', aliases: ['super-light-orange'] },\n//           { name: 'orange2', color: '#FFA98F', aliases: ['light-orange'] },\n//           { name: 'orange3', color: '#FF825C', aliases: ['orange'], primary: true },\n//           { name: 'orange4', color: '#FF5F2E', aliases: ['semi-dark-orange'] },\n//           { name: 'orange5', color: '#E73903', aliases: ['dark-orange'] },\n//         ],\n//       },\n//       {\n//         name: 'yellow',\n//         shades: [\n//           { name: 'yellow1', color: '#FFE68F', aliases: ['super-light-yellow'] },\n//           { name: 'yellow2', color: '#FAD34A', aliases: ['light-yellow'] },\n//           { name: 'yellow3', color: '#ECBB09', aliases: ['yellow'], primary: true },\n//           { name: 'yellow4', color: '#CFA302', aliases: ['semi-dark-yellow'] },\n//           { name: 'yellow5', color: '#AD8800', aliases: ['dark-yellow'] },\n//         ],\n//       },\n//       {\n//         name: 'green',\n//         shades: [\n//           { name: 'green1', color: '#93ECCB', aliases: ['super-light-green'] },\n//           { name: 'green2', color: '#65DCB1', aliases: ['light-green'] },\n//           { name: 'green3', color: '#2DC88F', aliases: ['green'], primary: true },\n//           { name: 'green4', color: '#25A777', aliases: ['semi-dark-green'] },\n//           { name: 'green5', color: '#1B855E', aliases: ['dark-green'] },\n//         ],\n//       },\n//       {\n//         name: 'teal',\n//         shades: [\n//           { name: 'teal1', color: '#73E7F7' },\n//           { name: 'teal2', color: '#2BD6EE' },\n//           { name: 'teal3', color: '#11BDD4', primary: true },\n//           { name: 'teal4', color: '#0EA0B4' },\n//           { name: 'teal5', color: '#077D8D' },\n//         ],\n//       },\n//       {\n//         name: 'blue',\n//         shades: [\n//           { name: 'blue1', color: '#C2D7FF', aliases: ['super-light-blue'] },\n//           { name: 'blue2', color: '#A3C2FF', aliases: ['light-blue'] },\n//           { name: 'blue3', color: '#83ACFC', aliases: ['blue'], primary: true },\n//           { name: 'blue4', color: '#5D8FEF', aliases: ['semi-dark-blue'] },\n//           { name: 'blue5', color: '#3871DC', aliases: ['dark-blue'] },\n//         ],\n//       },\n//       {\n//         name: 'violet',\n//         shades: [\n//           { name: 'violet1', color: '#DACCFF' },\n//           { name: 'violet2', color: '#C7B2FF' },\n//           { name: 'violet3', color: '#B094FF', primary: true },\n//           { name: 'violet4', color: '#9271EF' },\n//           { name: 'violet5', color: '#7E63CA' },\n//         ],\n//       },\n//       {\n//         name: 'purple',\n//         shades: [\n//           { name: 'purple1', color: '#FFBDFF', aliases: ['super-light-purple'] },\n//           { name: 'purple2', color: '#F5A3F5', aliases: ['light-purple'] },\n//           { name: 'purple3', color: '#E48BE4', aliases: ['purple'], primary: true },\n//           { name: 'purple4', color: '#CA68CA', aliases: ['semi-dark-purple'] },\n//           { name: 'purple5', color: '#B545B5', aliases: ['dark-purple'] },\n//         ],\n//       },\n//     ];\n//   }\n\nconst nativeColorNames: Record<string, string> = {\n  aliceblue: '#f0f8ff',\n  antiquewhite: '#faebd7',\n  aqua: '#00ffff',\n  aquamarine: '#7fffd4',\n  azure: '#f0ffff',\n  beige: '#f5f5dc',\n  bisque: '#ffe4c4',\n  black: '#000000',\n  blanchedalmond: '#ffebcd',\n  blue: '#0000ff',\n  blueviolet: '#8a2be2',\n  brown: '#a52a2a',\n  burlywood: '#deb887',\n  cadetblue: '#5f9ea0',\n  chartreuse: '#7fff00',\n  chocolate: '#d2691e',\n  coral: '#ff7f50',\n  cornflowerblue: '#6495ed',\n  cornsilk: '#fff8dc',\n  crimson: '#dc143c',\n  cyan: '#00ffff',\n  darkblue: '#00008b',\n  darkcyan: '#008b8b',\n  darkgoldenrod: '#b8860b',\n  darkgray: '#a9a9a9',\n  darkgreen: '#006400',\n  darkkhaki: '#bdb76b',\n  darkmagenta: '#8b008b',\n  darkolivegreen: '#556b2f',\n  darkorange: '#ff8c00',\n  darkorchid: '#9932cc',\n  darkred: '#8b0000',\n  darksalmon: '#e9967a',\n  darkseagreen: '#8fbc8f',\n  darkslateblue: '#483d8b',\n  darkslategray: '#2f4f4f',\n  darkturquoise: '#00ced1',\n  darkviolet: '#9400d3',\n  deeppink: '#ff1493',\n  deepskyblue: '#00bfff',\n  dimgray: '#696969',\n  dodgerblue: '#1e90ff',\n  firebrick: '#b22222',\n  floralwhite: '#fffaf0',\n  forestgreen: '#228b22',\n  fuchsia: '#ff00ff',\n  gainsboro: '#dcdcdc',\n  ghostwhite: '#f8f8ff',\n  gold: '#ffd700',\n  goldenrod: '#daa520',\n  gray: '#808080',\n  green: '#008000',\n  greenyellow: '#adff2f',\n  honeydew: '#f0fff0',\n  hotpink: '#ff69b4',\n  'indianred ': '#cd5c5c',\n  indigo: '#4b0082',\n  ivory: '#fffff0',\n  khaki: '#f0e68c',\n  lavender: '#e6e6fa',\n  lavenderblush: '#fff0f5',\n  lawngreen: '#7cfc00',\n  lemonchiffon: '#fffacd',\n  lightblue: '#add8e6',\n  lightcoral: '#f08080',\n  lightcyan: '#e0ffff',\n  lightgoldenrodyellow: '#fafad2',\n  lightgrey: '#d3d3d3',\n  lightgreen: '#90ee90',\n  lightpink: '#ffb6c1',\n  lightsalmon: '#ffa07a',\n  lightseagreen: '#20b2aa',\n  lightskyblue: '#87cefa',\n  lightslategray: '#778899',\n  lightsteelblue: '#b0c4de',\n  lightyellow: '#ffffe0',\n  lime: '#00ff00',\n  limegreen: '#32cd32',\n  linen: '#faf0e6',\n  magenta: '#ff00ff',\n  maroon: '#800000',\n  mediumaquamarine: '#66cdaa',\n  mediumblue: '#0000cd',\n  mediumorchid: '#ba55d3',\n  mediumpurple: '#9370d8',\n  mediumseagreen: '#3cb371',\n  mediumslateblue: '#7b68ee',\n  mediumspringgreen: '#00fa9a',\n  mediumturquoise: '#48d1cc',\n  mediumvioletred: '#c71585',\n  midnightblue: '#191970',\n  mintcream: '#f5fffa',\n  mistyrose: '#ffe4e1',\n  moccasin: '#ffe4b5',\n  navajowhite: '#ffdead',\n  navy: '#000080',\n  oldlace: '#fdf5e6',\n  olive: '#808000',\n  olivedrab: '#6b8e23',\n  orange: '#ffa500',\n  orangered: '#ff4500',\n  orchid: '#da70d6',\n  palegoldenrod: '#eee8aa',\n  palegreen: '#98fb98',\n  paleturquoise: '#afeeee',\n  palevioletred: '#d87093',\n  papayawhip: '#ffefd5',\n  peachpuff: '#ffdab9',\n  peru: '#cd853f',\n  pink: '#ffc0cb',\n  plum: '#dda0dd',\n  powderblue: '#b0e0e6',\n  purple: '#800080',\n  rebeccapurple: '#663399',\n  red: '#ff0000',\n  rosybrown: '#bc8f8f',\n  royalblue: '#4169e1',\n  saddlebrown: '#8b4513',\n  salmon: '#fa8072',\n  sandybrown: '#f4a460',\n  seagreen: '#2e8b57',\n  seashell: '#fff5ee',\n  sienna: '#a0522d',\n  silver: '#c0c0c0',\n  skyblue: '#87ceeb',\n  slateblue: '#6a5acd',\n  slategray: '#708090',\n  snow: '#fffafa',\n  springgreen: '#00ff7f',\n  steelblue: '#4682b4',\n  tan: '#d2b48c',\n  teal: '#008080',\n  thistle: '#d8bfd8',\n  tomato: '#ff6347',\n  turquoise: '#40e0d0',\n  violet: '#ee82ee',\n  wheat: '#f5deb3',\n  white: '#ffffff',\n  whitesmoke: '#f5f5f5',\n  yellow: '#ffff00',\n  yellowgreen: '#9acd32',\n};\n","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nexport const zIndex = {\n  activePanel: 999,\n  navbarFixed: 1000,\n  sidemenu: 1020,\n  dropdown: 1030,\n  typeahead: 1030,\n  tooltip: 1040,\n  modalBackdrop: 1050,\n  modal: 1060,\n  portal: 1061,\n};\n\n/** @beta */\nexport type ThemeZIndices = typeof zIndex;\n","import { createBreakpoints } from './breakpoints';\nimport { createColors, ThemeColorsInput } from './createColors';\nimport { createComponents } from './createComponents';\nimport { createShadows } from './createShadows';\nimport { createShape, ThemeShapeInput } from './createShape';\nimport { createSpacing, ThemeSpacingOptions } from './createSpacing';\nimport { createTransitions } from './createTransitions';\nimport { createTypography, ThemeTypographyInput } from './createTypography';\nimport { createV1Theme } from './createV1Theme';\nimport { createVisualizationColors } from './createVisualizationColors';\nimport { GrafanaTheme2 } from './types';\nimport { zIndex } from './zIndex';\n\n/** @internal */\nexport interface NewThemeOptions {\n  name?: string;\n  colors?: ThemeColorsInput;\n  spacing?: ThemeSpacingOptions;\n  shape?: ThemeShapeInput;\n  typography?: ThemeTypographyInput;\n}\n\n/** @internal */\nexport function createTheme(options: NewThemeOptions = {}): GrafanaTheme2 {\n  const {\n    name,\n    colors: colorsInput = {},\n    spacing: spacingInput = {},\n    shape: shapeInput = {},\n    typography: typographyInput = {},\n  } = options;\n\n  const colors = createColors(colorsInput);\n  const breakpoints = createBreakpoints();\n  const spacing = createSpacing(spacingInput);\n  const shape = createShape(shapeInput);\n  const typography = createTypography(colors, typographyInput);\n  const shadows = createShadows(colors);\n  const transitions = createTransitions();\n  const components = createComponents(colors, shadows);\n  const visualization = createVisualizationColors(colors);\n\n  const theme = {\n    name: name ?? (colors.mode === 'dark' ? 'Dark' : 'Light'),\n    isDark: colors.mode === 'dark',\n    isLight: colors.mode === 'light',\n    colors,\n    breakpoints,\n    spacing,\n    shape,\n    components,\n    typography,\n    shadows,\n    transitions,\n    visualization,\n    zIndex: {\n      ...zIndex,\n    },\n    flags: {},\n  };\n\n  return {\n    ...theme,\n    v1: createV1Theme(theme),\n  };\n}\n","import { NewThemeOptions } from '../createTheme';\n\nconst aubergineTheme: NewThemeOptions = {\n  name: 'Aubergine',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: '#4F2A3D',\n      medium: '#6A3C4B',\n      strong: '#8C5A69',\n    },\n    text: {\n      primary: '#E5D0D6',\n      secondary: '#D1A8C4',\n      disabled: '#B7A0A6',\n      link: '#A56BB6',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#8C5A69',\n    },\n    secondary: {\n      main: '#6A3C4B',\n      text: '#D1A8C4',\n      border: '#8C5A69',\n    },\n    background: {\n      canvas: '#2E1F2D',\n      primary: '#3C2136',\n      secondary: '#4A2D47',\n      elevated: '#4A2D47',\n    },\n    action: {\n      hover: '#6A3C4B',\n      selected: '#8C5A69',\n      selectedBorder: '#FFB300',\n      focus: '#A56BB6',\n      hoverOpacity: 0.1,\n      disabledText: '#B7A0A6',\n      disabledBackground: '#4A2D47',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #6A3C4B 0%, #A56BB6 100%)',\n      brandVertical: 'linear-gradient(0deg, #6A3C4B 0%, #A56BB6 100%)',\n    },\n    contrastThreshold: 4,\n    hoverFactor: 0.07,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default aubergineTheme;\n","import { NewThemeOptions } from '../createTheme';\n\n/**\n * a very ugly theme that is useful for debugging and checking if the theme is applied correctly\n * borders are red,\n * backgrounds are blue,\n * text is yellow,\n * and grafana loves you <3\n * (also corners are rounded, action states (hover, focus, selected) are purple)\n */\nconst debugTheme: NewThemeOptions = {\n  name: 'Debug',\n  colors: {\n    mode: 'dark',\n    background: {\n      canvas: '#000033',\n      primary: '#000044',\n      secondary: '#000055',\n      elevated: '#000055',\n    },\n    text: {\n      primary: '#bbbb00',\n      secondary: '#888800',\n      disabled: '#444400',\n      link: '#dddd00',\n      maxContrast: '#ffff00',\n    },\n    border: {\n      weak: '#ff000044',\n      medium: '#ff000088',\n      strong: '#ff0000ff',\n    },\n    primary: {\n      border: '#ff000088',\n      text: '#cccc00',\n      contrastText: '#ffff00',\n      shade: '#9900dd',\n    },\n    secondary: {\n      border: '#ff000088',\n      text: '#cccc00',\n      contrastText: '#ffff00',\n      shade: '#9900dd',\n    },\n    info: {\n      shade: '#9900dd',\n    },\n    warning: {\n      shade: '#9900dd',\n    },\n    success: {\n      shade: '#9900dd',\n    },\n    error: {\n      shade: '#9900dd',\n    },\n    action: {\n      hover: '#9900dd',\n      focus: '#6600aa',\n      selected: '#440088',\n    },\n  },\n  shape: {\n    borderRadius: 8,\n  },\n  spacing: {\n    gridSize: 10,\n  },\n};\n\nexport default debugTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst desertBloomTheme: NewThemeOptions = {\n  name: 'Desert bloom',\n  colors: {\n    mode: 'light',\n    border: {\n      weak: 'rgba(0, 0, 0, 0.12)',\n      medium: 'rgba(0, 0, 0, 0.20)',\n      strong: 'rgba(0, 0, 0, 0.30)',\n    },\n    text: {\n      primary: '#333333',\n      secondary: '#555555',\n      disabled: 'rgba(0, 0, 0, 0.5)',\n      link: '#1A82E2',\n      maxContrast: '#000000',\n    },\n    primary: {\n      main: '#FF6F61',\n      text: '#FE6F61',\n      border: '#E55B4D',\n      name: 'primary',\n      shade: '#E55B4D',\n      transparent: '#FF6F6126',\n      contrastText: '#FFFFFF',\n      borderTransparent: '#FF6F6140',\n    },\n    secondary: {\n      main: '#FFFFFF',\n      text: '#695f53',\n      border: '#d9cec0',\n      name: 'secondary',\n      shade: '#d9cec0',\n      transparent: '#FFFFFF26',\n      contrastText: '#4c4339',\n      borderTransparent: '#FFFFFF40',\n    },\n    info: {\n      main: '#1A82E2',\n    },\n    success: {\n      main: '#4CAF50',\n    },\n    warning: {\n      main: '#FFC107',\n    },\n    background: {\n      canvas: '#FFF8F0',\n      primary: '#FFFFFF',\n      secondary: '#f9f3e8',\n      elevated: '#FFFFFF',\n    },\n    action: {\n      hover: 'rgba(168, 156, 134, 0.12)',\n      selected: 'rgba(168, 156, 134, 0.36)',\n      selectedBorder: '#FF6F61',\n      focus: 'rgba(168, 156, 134, 0.50)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(168, 156, 134, 0.5)',\n      disabledBackground: 'rgba(168, 156, 134, 0.06)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #FF6F61 0%, #ece0d1 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #FF6F61 0.01%, #ece0d1 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default desertBloomTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst gildedGroveTheme: NewThemeOptions = {\n  name: 'Gilded grove',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(200, 200, 180, 0.12)',\n      medium: 'rgba(200, 200, 180, 0.20)',\n      strong: 'rgba(200, 200, 180, 0.30)',\n    },\n    text: {\n      primary: 'rgb(250, 250, 239)',\n      secondary: 'rgba(200, 200, 180, 0.85)',\n      disabled: 'rgba(200, 200, 180, 0.6)',\n      link: '#FEAC34',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#FEAC34',\n      text: '#FFD783',\n      border: '#FFD783',\n      name: 'primary',\n      shade: 'rgb(255, 173, 80)',\n      transparent: '#FEAC3426',\n      contrastText: '#111614',\n      borderTransparent: '#FFD78340',\n    },\n    secondary: {\n      main: 'rgba(200, 200, 180, 0.10)',\n      shade: 'rgba(200, 200, 180, 0.14)',\n      transparent: 'rgba(200, 200, 180, 0.08)',\n      text: 'rgb(200, 200, 180)',\n      contrastText: 'rgb(200, 200, 180)',\n      border: 'rgba(200, 200, 180, 0.08)',\n      name: 'secondary',\n      borderTransparent: 'rgba(200, 200, 180, 0.25)',\n    },\n    background: {\n      canvas: '#111614',\n      primary: '#1d2220',\n      secondary: '#27312E',\n      elevated: '#27312E',\n    },\n    action: {\n      hover: 'rgba(200, 200, 180, 0.16)',\n      selected: 'rgba(200, 200, 180, 0.12)',\n      selectedBorder: '#FEAC34',\n      focus: 'rgba(200, 200, 180, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(200, 200, 180, 0.6)',\n      disabledBackground: 'rgba(200, 200, 180, 0.04)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #FEAC34 0%, #FFD783 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #FEAC34 0.01%, #FFD783 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 5,\n  },\n};\n\nexport default gildedGroveTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst marsTheme: NewThemeOptions = {\n  name: 'Mars',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(210, 90, 60, 0.2)',\n      medium: 'rgba(210, 90, 60, 0.35)',\n      strong: 'rgba(210, 90, 60, 0.5)',\n    },\n    text: {\n      primary: '#DDDDDD',\n      secondary: '#BBBBBB',\n      disabled: 'rgba(221, 221, 221, 0.5)',\n      link: '#FF6F61',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#FF6F61',\n    },\n    secondary: {\n      main: '#6a2f2f',\n      text: '#BBBBBB',\n      border: 'rgba(210, 90, 60, 0.2)',\n    },\n    background: {\n      canvas: '#3C1E1E',\n      primary: '#522626',\n      secondary: '#6A2F2F',\n      elevated: '#6A2F2F',\n    },\n    action: {\n      hover: 'rgba(210, 90, 60, 0.16)',\n      selected: 'rgba(210, 90, 60, 0.12)',\n      selectedBorder: '#FF6F61',\n      focus: 'rgba(210, 90, 60, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(221, 221, 221, 0.5)',\n      disabledBackground: 'rgba(210, 90, 60, 0.08)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #FF6F61 0%, #D25A3C 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #FF6F61 0.01%, #D25A3C 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.05,\n    tonalOffset: 0.2,\n  },\n  shape: {\n    borderRadius: 4,\n  },\n};\n\nexport default marsTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst matrixTheme: NewThemeOptions = {\n  name: 'Matrix',\n  colors: {\n    mode: 'dark',\n    background: {\n      canvas: '#000000',\n      primary: '#020202',\n      secondary: '#080808',\n      elevated: '#080808',\n    },\n    text: {\n      primary: '#00c017',\n      secondary: '#008910',\n      disabled: '#006a0c',\n      link: '#00ff41',\n      maxContrast: '#00ff41',\n    },\n    border: {\n      weak: '#008f1144',\n      medium: '#008f1188',\n      strong: '#008910',\n    },\n    primary: {\n      main: '#008910',\n    },\n    secondary: {\n      text: '#008910',\n    },\n    gradients: {\n      brandVertical: 'linear-gradient(0deg, #008910 0%, #00ff41 100%)',\n      brandHorizontal: 'linear-gradient(90deg, #008910 0%, #00ff41 100%)',\n    },\n  },\n  shape: {\n    borderRadius: 0,\n  },\n  typography: {\n    fontFamily: 'monospace',\n  },\n};\n\nexport default matrixTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst sapphireDuskTheme: NewThemeOptions = {\n  name: 'Sapphire dusk',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: '#232e47',\n      medium: '#2c3853',\n      strong: '#404d6b',\n    },\n    text: {\n      primary: '#FFFFFF',\n      secondary: '#bcccdd',\n      disabled: '#838da5',\n      link: '#93EBF0',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#93EBF0',\n      text: '#a8e9ed',\n      border: '#93ebf0',\n      name: 'primary',\n      shade: '#c0f5d9',\n      transparent: '#93EBF029',\n      contrastText: '#111614',\n      borderTransparent: '#93ebf040',\n    },\n    secondary: {\n      main: '#2c364f',\n      shade: '#36415e',\n      transparent: 'rgba(200, 200, 180, 0.08)',\n      text: '#d1dfff',\n      contrastText: '#acfeff',\n      border: 'rgba(200, 200, 180, 0.08)',\n      name: 'secondary',\n      borderTransparent: 'rgba(200, 200, 180, 0.25)',\n    },\n    info: {\n      main: '#4d4593',\n      text: '#a8e9ed',\n      border: '#5d54a7',\n    },\n    error: {\n      main: '#c63370',\n    },\n    success: {\n      main: '#1A7F4B',\n    },\n    warning: {\n      main: '#D448EA',\n    },\n    background: {\n      canvas: '#1e273d',\n      primary: '#12192e',\n      secondary: '#212c47',\n      elevated: '#212c47',\n    },\n    action: {\n      hover: '#364057',\n      selected: '#364260',\n      selectedBorder: '#D448EA',\n      focus: '#364057',\n      hoverOpacity: 0.08,\n      disabledText: '#838da5',\n      disabledBackground: 'rgba(54, 64, 87, 0.2)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #D346EF 0%, #2C83FE 100%)',\n      brandVertical: 'linear-gradient(0deg, #D346EF 0%, #2C83FE 100%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 5,\n  },\n};\n\nexport default sapphireDuskTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst synthwaveTheme: NewThemeOptions = {\n  name: 'Synthwave',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(255, 20, 147, 0.12)',\n      medium: 'rgba(255, 20, 147, 0.20)',\n      strong: 'rgba(255, 20, 147, 0.30)',\n    },\n    text: {\n      primary: '#E0E0E0',\n      secondary: 'rgba(224, 224, 224, 0.75)',\n      disabled: 'rgba(224, 224, 224, 0.5)',\n      link: '#FF69B4',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#FF1493',\n    },\n    secondary: {\n      main: '#37183a',\n      text: 'rgba(224, 224, 224, 0.75)',\n      border: 'rgba(255, 20, 147, 0.10)',\n    },\n    background: {\n      canvas: '#1A1A2E',\n      primary: '#16213E',\n      secondary: '#0F3460',\n      elevated: '#0F3460',\n    },\n    action: {\n      hover: 'rgba(255, 20, 147, 0.16)',\n      selected: 'rgba(255, 20, 147, 0.12)',\n      selectedBorder: '#FF1493',\n      focus: 'rgba(255, 20, 147, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(224, 224, 224, 0.5)',\n      disabledBackground: 'rgba(255, 20, 147, 0.08)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #FF1493 0%, #1E90FF 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #FF1493 0.01%, #1E90FF 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default synthwaveTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst tronTheme: NewThemeOptions = {\n  name: 'Tron',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(0, 255, 255, 0.12)',\n      medium: 'rgba(0, 255, 255, 0.20)',\n      strong: 'rgba(0, 255, 255, 0.30)',\n    },\n    text: {\n      primary: '#E0E0E0',\n      secondary: 'rgba(224, 224, 224, 0.75)',\n      disabled: 'rgba(224, 224, 224, 0.5)',\n      link: '#00FFFF',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#00FFFF',\n    },\n    secondary: {\n      main: '#0b2e36',\n      text: 'rgba(224, 224, 224, 0.75)',\n      border: 'rgba(0, 255, 255, 0.10)',\n    },\n    background: {\n      canvas: '#0A0F18',\n      primary: '#0F1B2A',\n      secondary: '#152234',\n      elevated: '#152234',\n    },\n    action: {\n      hover: 'rgba(0, 255, 255, 0.16)',\n      selected: 'rgba(0, 255, 255, 0.12)',\n      selectedBorder: '#00FFFF',\n      focus: 'rgba(0, 255, 255, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(224, 224, 224, 0.5)',\n      disabledBackground: 'rgba(0, 255, 255, 0.08)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #00FFFF 0%, #29ABE2 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #00FFFF 0.01%, #29ABE2 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.05,\n    tonalOffset: 0.2,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default tronTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst victorianTheme: NewThemeOptions = {\n  name: 'Victorian',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: '#3A2C22',\n      medium: '#3A2C22',\n      strong: '#4B3D32',\n    },\n    text: {\n      primary: '#D9D0A2',\n      secondary: '#C4B89B',\n      disabled: '#A89F91',\n      link: '#C28A4D',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#C28A4D',\n    },\n    secondary: {\n      main: '#3A2C22',\n      text: '#C4B89B',\n      border: '#4B3D32',\n    },\n    background: {\n      canvas: '#1F1510',\n      primary: '#2C1A13',\n      secondary: '#402A21',\n      elevated: '#402A21',\n    },\n    action: {\n      hover: '#3A2C22',\n      selected: '#4B3D32',\n      selectedBorder: '#C28A4D',\n      focus: '#C28A4D',\n      hoverOpacity: 0.1,\n      disabledText: '#A89F91',\n      disabledBackground: '#402A21',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #D9D0a1 0%, #C28A4D 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #D9D0a1 0.01%, #C28A4D 99.99%)',\n    },\n    contrastThreshold: 4,\n    hoverFactor: 0.07,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n  typography: {\n    fontFamily: '\"Georgia\", \"Times New Roman\", serif',\n    fontFamilyMonospace: \"'Courier New', monospace\",\n  },\n};\n\nexport default victorianTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst zenTheme: NewThemeOptions = {\n  name: 'Zen',\n  colors: {\n    mode: 'light',\n    text: {\n      primary: '#333333',\n      secondary: '#666666',\n      disabled: '#B8B8B8',\n      link: '#4F9F6E',\n      maxContrast: '#000000',\n    },\n    border: {\n      weak: '#B1B7B3',\n      medium: '#A2A8A2',\n      strong: '#7C7F7A',\n    },\n    primary: {\n      main: '#6D8E6D',\n    },\n    secondary: {\n      main: '#E0E0E0',\n      text: '#666666',\n      border: '#A2A8A2',\n    },\n    background: {\n      canvas: '#F4F4F4',\n      primary: '#E9E9E9',\n      secondary: '#D8D8D8',\n      elevated: '#E9E9E9',\n    },\n    action: {\n      hover: '#D1D1D1',\n      selected: '#B8B8B8',\n      selectedBorder: '#88B88B',\n      hoverOpacity: 0.1,\n      focus: '#D1D1D1',\n      disabledBackground: '#E0E0E0',\n      disabledText: '#B8B8B8',\n      disabledOpacity: 0.5,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #88B88B 0%, #6D8E6D 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #88B88B 0.01%, #6D8E6D 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.2,\n  },\n  shape: {\n    borderRadius: 8,\n  },\n};\n\nexport default zenTheme;\n","import { NewThemeOptions } from '../createTheme';\n\n/**\n * Torkel's GrafanaCon theme\n * very WIP state\n */\n\nconst whiteBase = `210, 210, 220`;\nconst secondaryBase = `210, 210, 220`;\n//const brandMain = '#3d71d9';\n//const brandText = '#6e9fff';\nconst brandMain = '#ff934d';\nconst brandText = '#f99a5c';\n\nconst disabledText = `rgba(${whiteBase}, 0.6)`;\n\nconst gloomTheme: NewThemeOptions = {\n  name: 'Gloom',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: `rgba(${whiteBase}, 0.08)`,\n      medium: `rgba(${whiteBase}, 0.15)`,\n      strong: `rgba(${whiteBase}, 0.30)`,\n    },\n\n    text: {\n      primary: `rgb(${whiteBase})`,\n      secondary: `rgba(${whiteBase}, 0.65)`,\n      disabled: disabledText,\n      link: brandText,\n      maxContrast: '#FFF',\n    },\n\n    primary: {\n      main: brandMain,\n      text: brandText,\n      border: brandMain,\n      name: 'primary',\n    },\n\n    secondary: {\n      main: `rgba(${secondaryBase}, 0.10)`,\n      shade: `rgba(${secondaryBase}, 0.14)`,\n      transparent: `rgba(${secondaryBase}, 0.08)`,\n      text: `rgba(${secondaryBase})`,\n      contrastText: `rgb(${secondaryBase})`,\n      border: `rgba(${secondaryBase}, 0.08)`,\n    },\n\n    background: {\n      canvas: '#000',\n      primary: '#0d0b14',\n      secondary: '#19171f',\n      elevated: '#19171f',\n    },\n\n    action: {\n      hover: `rgba(${secondaryBase}, 0.10)`,\n      selected: `rgba(${secondaryBase}, 0.12)`,\n      selectedBorder: brandMain,\n      focus: `rgba(${secondaryBase}, 0.10)`,\n      hoverOpacity: 0.05,\n      disabledText: disabledText,\n      disabledBackground: `rgba(${whiteBase}, 0.04)`,\n      disabledOpacity: 0.38,\n    },\n\n    // gradients: {\n    //   brandHorizontal: 'linear-gradient(270deg, #ff934d 0%, #FEAC34 100%)',\n    //   brandVertical: 'linear-gradient(0.01deg, #ff934d 0.01%, #FEAC34 99.99%)',\n    // },\n\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 5,\n  },\n};\n\nexport default gloomTheme;\n","import { Registry, RegistryItem } from '../utils/Registry';\n\nimport { createTheme } from './createTheme';\nimport * as extraThemes from './themeDefinitions';\nimport { GrafanaTheme2 } from './types';\n\nexport interface ThemeRegistryItem extends RegistryItem {\n  isExtra?: boolean;\n  build: () => GrafanaTheme2;\n}\n\n/**\n * @internal\n * Only for internal use, never use this from a plugin\n **/\nexport function getThemeById(id: string): GrafanaTheme2 {\n  const theme = themeRegistry.getIfExists(id) ?? themeRegistry.get('dark');\n  return theme.build();\n}\n\n/**\n * @internal\n * For internal use only\n */\nexport function getBuiltInThemes(allowedExtras: string[]) {\n  const themes = themeRegistry.list().filter((item) => {\n    if (item.isExtra) {\n      return allowedExtras.includes(item.id);\n    }\n    return true;\n  });\n  // sort themes alphabetically, but put built-in themes (default, dark, light, system) first\n  const sortedThemes = themes.sort((a, b) => {\n    if (a.isExtra && !b.isExtra) {\n      return 1;\n    } else if (!a.isExtra && b.isExtra) {\n      return -1;\n    } else {\n      return a.name.localeCompare(b.name);\n    }\n  });\n  return sortedThemes;\n}\n\n/**\n * There is also a backend list at pkg/services/preference/themes.go\n */\nconst themeRegistry = new Registry<ThemeRegistryItem>(() => {\n  return [\n    { id: 'system', name: 'System preference', build: getSystemPreferenceTheme },\n    { id: 'dark', name: 'Dark', build: () => createTheme({ colors: { mode: 'dark' } }) },\n    { id: 'light', name: 'Light', build: () => createTheme({ colors: { mode: 'light' } }) },\n  ];\n});\n\nfor (const [id, theme] of Object.entries(extraThemes)) {\n  themeRegistry.register({\n    id,\n    name: theme.name ?? '',\n    build: () => createTheme(theme),\n    isExtra: true,\n  });\n}\n\nfunction getSystemPreferenceTheme() {\n  const mediaResult = window.matchMedia('(prefers-color-scheme: dark)');\n  const id = mediaResult.matches ? 'dark' : 'light';\n  return getThemeById(id);\n}\n","import { HideSeriesConfig } from '@grafana/schema';\n\nimport { ScopedVars } from './ScopedVars';\nimport { Action } from './action';\nimport { QueryResultBase, Labels, NullValueMode } from './data';\nimport { DataLink, LinkModel } from './dataLink';\nimport { DecimalCount, DisplayProcessor, DisplayValue, DisplayValueAlignmentFactors } from './displayValue';\nimport { FieldColor } from './fieldColor';\nimport { ThresholdsConfig } from './thresholds';\nimport { ValueMapping } from './valueMapping';\n\n/** @public */\nexport enum FieldType {\n  time = 'time', // or date\n  number = 'number',\n  string = 'string',\n  boolean = 'boolean',\n\n  // Used to detect that the value is some kind of trace data to help with the visualisation and processing.\n  trace = 'trace',\n  geo = 'geo',\n  enum = 'enum',\n  other = 'other', // Object, Array, etc\n  frame = 'frame', // DataFrame\n\n  // @alpha Nested DataFrames. This is for example used with tables where expanding a row will show a nested table.\n  // The value should be DataFrame[] even if it is a single frame.\n  nestedFrames = 'nestedFrames',\n}\n\n/**\n * @public\n * Every property is optional\n *\n * Plugins may extend this with additional properties. Something like series overrides\n */\nexport interface FieldConfig<TOptions = any> {\n  /**\n   * The display value for this field.  This supports template variables blank is auto.\n   * If you are a datasource plugin, do not set this. Use `field.value` and if that\n   * is not enough, use `field.config.displayNameFromDS`.\n   */\n  displayName?: string;\n\n  /**\n   * This can be used by data sources that need to customize how values are named.\n   * When this property is configured, this value is used rather than the default naming strategy.\n   */\n  displayNameFromDS?: string;\n\n  /**\n   * Human readable field metadata\n   */\n  description?: string;\n\n  /**\n   * An explict path to the field in the datasource.  When the frame meta includes a path,\n   * This will default to `${frame.meta.path}/${field.name}\n   *\n   * When defined, this value can be used as an identifier within the datasource scope, and\n   * may be used to update the results\n   */\n  path?: string;\n\n  /**\n   * True if data source can write a value to the path.  Auth/authz are supported separately\n   */\n  writeable?: boolean;\n\n  /**\n   * True if data source field supports ad-hoc filters\n   */\n  filterable?: boolean;\n\n  // Numeric Options\n  unit?: string;\n  decimals?: DecimalCount; // Significant digits (for display)\n  min?: number | null;\n  max?: number | null;\n\n  // Interval indicates the expected regular step between values in the series.\n  // When an interval exists, consumers can identify \"missing\" values when the expected value is not present.\n  // The grafana timeseries visualization will render disconnected values when missing values are found it the time field.\n  // The interval uses the same units as the values.  For time.Time, this is defined in milliseconds.\n  interval?: number | null;\n\n  // Convert input values into a display string\n  mappings?: ValueMapping[];\n\n  // Map numeric values to states\n  thresholds?: ThresholdsConfig;\n\n  // Map values to a display color\n  color?: FieldColor;\n\n  // Used when reducing field values\n  nullValueMode?: NullValueMode;\n\n  // The behavior when clicking on a result\n  links?: DataLink[];\n\n  actions?: Action[];\n\n  // Alternative to empty string\n  noValue?: string;\n\n  // The field type may map to specific config\n  type?: FieldTypeConfig;\n\n  // Panel Specific Values\n  custom?: TOptions;\n\n  // Calculate min max per field\n  fieldMinMax?: boolean;\n}\n\nexport interface FieldTypeConfig {\n  enum?: EnumFieldConfig;\n}\n\nexport interface EnumFieldConfig {\n  text?: string[];\n  color?: string[];\n  icon?: string[];\n  description?: string[];\n}\n\n/** @public */\nexport interface ValueLinkConfig {\n  /**\n   * Result of field reduction\n   */\n  calculatedValue?: DisplayValue;\n  /**\n   * Index of the value row within Field. Should be provided only when value is not a result of a reduction\n   */\n  valueRowIndex?: number;\n}\n\nexport interface Field<T = any> {\n  /**\n   * Name of the field (column)\n   */\n  name: string;\n  /**\n   *  Field value type (string, number, etc)\n   */\n  type: FieldType;\n  /**\n   *  Meta info about how field and how to display it\n   */\n  config: FieldConfig;\n\n  /**\n   * The raw field values\n   */\n  values: T[];\n\n  /**\n   * When type === FieldType.Time, this can optionally store\n   * the nanosecond-precison fractions as integers between\n   * 0 and 999999.\n   */\n  nanos?: number[];\n\n  labels?: Labels;\n\n  /**\n   * Cached values with appropriate display and id values\n   */\n  state?: FieldState | null;\n\n  /**\n   * Convert a value for display\n   */\n  display?: DisplayProcessor;\n\n  /**\n   * Get value data links with variables interpolated\n   */\n  getLinks?: (config: ValueLinkConfig) => Array<LinkModel<Field>>;\n}\n\n/** @alpha */\nexport interface FieldState {\n  /**\n   * An appropriate name for the field (does not include frame info)\n   */\n  displayName?: string | null;\n\n  /**\n   * Cache of reduced values\n   */\n  calcs?: FieldCalcs;\n\n  /**\n   * The numeric range for values in this field.  This value will respect the min/max\n   * set in field config, or when set to `auto` this will have the min/max for all data\n   * in the response\n   */\n  range?: NumericRange;\n\n  /**\n   * Appropriate values for templating\n   */\n  scopedVars?: ScopedVars;\n\n  /**\n   * Series index is index for this field in a larger data set that can span multiple DataFrames\n   * Useful for assigning color to series by looking up a color in a palette using this index\n   */\n  seriesIndex?: number;\n\n  /**\n   * Location of this field within the context frames results\n   *\n   * @internal -- we will try to make this unnecessary\n   */\n  origin?: DataFrameFieldIndex;\n\n  /**\n   * Boolean value is true if field is in a larger data set with multiple frames.\n   * This is only related to the cached displayName property above.\n   */\n  multipleFrames?: boolean;\n\n  /**\n   * Boolean value is true if a null filling threshold has been applied\n   * against the frame of the field. This is used to avoid cases in which\n   * this would applied more than one time.\n   */\n  nullThresholdApplied?: boolean;\n\n  /**\n   * Can be used by visualizations to cache max display value lengths to aid alignment.\n   * It's up to each visualization to calculate and set this.\n   */\n  alignmentFactors?: DisplayValueAlignmentFactors;\n\n  /**\n   * This is the current ad-hoc state of whether this series is hidden in viz, tooltip, and legend.\n   *\n   * Currently this will match field.config.custom.hideFrom because fieldOverrides applies the special __system\n   * override to the actual config during toggle via legend. This should go away once we have a unified system\n   * for layering ad hoc field overrides and options but still being able to get the stateless fieldConfig and panel options\n   */\n  hideFrom?: HideSeriesConfig;\n}\n\n/** @public */\nexport interface NumericRange {\n  min?: number | null;\n  max?: number | null;\n  delta: number;\n}\n\nexport interface DataFrame extends QueryResultBase {\n  name?: string;\n  fields: Field[]; // All fields of equal length\n\n  // The number of rows\n  length: number;\n}\n\n// Data frame that include aggregate value, for use by timeSeriesTableTransformer / chart cell type\nexport interface DataFrameWithValue extends DataFrame {\n  value: number | null;\n}\n\n/**\n * @public\n * Like a field, but properties are optional and values may be a simple array\n */\nexport interface FieldDTO<T = any> {\n  name: string; // The column name\n  type?: FieldType;\n  config?: FieldConfig;\n  values?: T[];\n  labels?: Labels;\n}\n\n/**\n * @public\n * Like a DataFrame, but fields may be a FieldDTO\n */\nexport interface DataFrameDTO extends QueryResultBase {\n  name?: string;\n  fields: Array<FieldDTO | Field>;\n}\n\nexport interface FieldCalcs extends Record<string, any> {}\n\n/** @deprecated check data plane docs: https://grafana.com/developers/dataplane/heatmap **/\nexport const TIME_SERIES_VALUE_FIELD_NAME = 'Value';\nexport const TIME_SERIES_TIME_FIELD_NAME = 'Time';\nexport const TIME_SERIES_METRIC_FIELD_NAME = 'Metric';\n\n/**\n * Describes where a specific data frame field is located within a\n * dataset of type DataFrame[]\n *\n * @internal -- we will try to make this unnecessary\n */\nexport interface DataFrameFieldIndex {\n  frameIndex: number;\n  fieldIndex: number;\n}\n","/**\n * @public\n */\nexport enum FieldColorModeId {\n  Thresholds = 'thresholds',\n  PaletteClassic = 'palette-classic',\n  PaletteClassicByName = 'palette-classic-by-name',\n  PaletteSaturated = 'palette-saturated',\n  ContinuousGrYlRd = 'continuous-GrYlRd',\n  ContinuousRdYlGr = 'continuous-RdYlGr',\n  ContinuousBlYlRd = 'continuous-BlYlRd',\n  ContinuousYlRd = 'continuous-YlRd',\n  ContinuousBlPu = 'continuous-BlPu',\n  ContinuousYlBl = 'continuous-YlBl',\n  ContinuousBlues = 'continuous-blues',\n  ContinuousReds = 'continuous-reds',\n  ContinuousGreens = 'continuous-greens',\n  ContinuousPurples = 'continuous-purples',\n  Fixed = 'fixed',\n  Shades = 'shades',\n}\n\n/**\n * @public\n */\nexport interface FieldColor {\n  /** The main color scheme mode */\n  mode: FieldColorModeId | string;\n  /** Stores the fixed color value if mode is fixed */\n  fixedColor?: string;\n  /** Some visualizations need to know how to assign a series color from by value color schemes */\n  seriesBy?: FieldColorSeriesByMode;\n}\n\n/**\n * @beta\n */\nexport type FieldColorSeriesByMode = 'min' | 'max' | 'last';\n\nexport const FALLBACK_COLOR = '#808080';\n","export const availableIconsIndex = {\n  google: true,\n  microsoft: true,\n  github: true,\n  gitlab: true,\n  okta: true,\n  discord: true,\n  hipchat: true,\n  amazon: true,\n  'google-hangouts-alt': true,\n  pagerduty: true,\n  line: true,\n  anchor: true,\n  'adjust-circle': true,\n  'angle-double-down': true,\n  'angle-double-right': true,\n  'angle-double-left': true,\n  'angle-double-up': true,\n  'angle-down': true,\n  'angle-left': true,\n  'angle-right': true,\n  'angle-up': true,\n  'align-left': true,\n  'align-right': true,\n  'api-endpoint': true,\n  'application-observability': true,\n  apps: true,\n  'archive-alt': true,\n  arrow: true,\n  'arrow-down': true,\n  'arrow-from-right': true,\n  'arrow-left': true,\n  'arrow-random': true,\n  'arrow-right': true,\n  'arrow-to-right': true,\n  'arrow-up': true,\n  'arrows-h': true,\n  'arrows-v': true,\n  asserts: true,\n  'expand-arrows': true,\n  'expand-arrows-alt': true,\n  at: true,\n  ai: true,\n  backward: true,\n  bars: true,\n  bell: true,\n  'bell-slash': true,\n  bolt: true,\n  book: true,\n  bookmark: true,\n  'book-open': true,\n  'brackets-curly': true,\n  'browser-alt': true,\n  bug: true,\n  building: true,\n  'calculator-alt': true,\n  'calendar-alt': true,\n  'calendar-slash': true,\n  camera: true,\n  capture: true,\n  'channel-add': true,\n  'chart-line': true,\n  check: true,\n  'check-circle': true,\n  'check-square': true,\n  circle: true,\n  'circle-mono': true,\n  'clipboard-alt': true,\n  'clock-nine': true,\n  cloud: true,\n  'cloud-download': true,\n  'cloud-upload': true,\n  'code-branch': true,\n  cog: true,\n  columns: true,\n  'comment-alt': true,\n  'comment-alt-message': true,\n  'comment-alt-share': true,\n  'comments-alt': true,\n  compass: true,\n  'compress-arrows': true,\n  copy: true,\n  'corner-down-right-alt': true,\n  'create-dashboard': true,\n  'credit-card': true,\n  crosshair: true,\n  cube: true,\n  dashboard: true,\n  database: true,\n  'dice-three': true,\n  docker: true,\n  'document-info': true,\n  'document-layout-left': true,\n  'download-alt': true,\n  draggabledots: true,\n  drilldown: true,\n  edit: true,\n  'ellipsis-v': true,\n  enter: true,\n  envelope: true,\n  'exchange-alt': true,\n  'exclamation-triangle': true,\n  'exclamation-circle': true,\n  exclamation: true,\n  'external-link-alt': true,\n  eye: true,\n  'eye-slash': true,\n  'ellipsis-h': true,\n  /* @deprecated, use 'spinner' instead */\n  'fa fa-spinner': true,\n  favorite: true,\n  'file-alt': true,\n  'file-blank': true,\n  'file-copy-alt': true,\n  'file-download': true,\n  'file-edit-alt': true,\n  'file-landscape-alt': true,\n  filter: true,\n  flip: true,\n  folder: true,\n  font: true,\n  fire: true,\n  'folder-open': true,\n  'folder-plus': true,\n  'folder-upload': true,\n  forward: true,\n  'frontend-observability': true,\n  'gf-bar-alignment-after': true,\n  'gf-bar-alignment-before': true,\n  'gf-bar-alignment-center': true,\n  'gf-glue': true,\n  'gf-grid': true,\n  'gf-interpolation-linear': true,\n  'gf-interpolation-smooth': true,\n  'gf-interpolation-step-after': true,\n  'gf-interpolation-step-before': true,\n  'gf-landscape': true,\n  'gf-layout-simple': true,\n  'gf-logs': true,\n  'gf-ml': true,\n  'gf-movepane-left': true,\n  'gf-movepane-right': true,\n  'gf-portrait': true,\n  'gf-service-account': true,\n  'gf-show-context': true,\n  'gf-pin': true,\n  'gf-prometheus': true,\n  'gf-traces': true,\n  globe: true,\n  grafana: true,\n  'graph-bar': true,\n  heart: true,\n  'heart-rate': true,\n  'heart-break': true,\n  history: true,\n  'history-alt': true,\n  home: true,\n  'home-alt': true,\n  'horizontal-align-center': true,\n  'horizontal-align-left': true,\n  'horizontal-align-right': true,\n  hourglass: true,\n  import: true,\n  info: true,\n  'info-circle': true,\n  k6: true,\n  'k6-rounded': true,\n  'key-skeleton-alt': true,\n  keyboard: true,\n  kubernetes: true,\n  'layer-group': true,\n  'layers-alt': true,\n  'legend-hide': true,\n  'legend-show': true,\n  'library-panel': true,\n  'line-alt': true,\n  link: true,\n  'link-broken': true,\n  'list-ui-alt': true,\n  'list-ul': true,\n  'list-ol': true,\n  lock: true,\n  'map-marker': true,\n  'map-marker-plus': true,\n  'map-marker-minus': true,\n  message: true,\n  minus: true,\n  'minus-circle': true,\n  'mobile-android': true,\n  monitor: true,\n  'multi-step': true,\n  palette: true,\n  'panel-add': true,\n  paragraph: true,\n  'pathfinder-unite': true,\n  pause: true,\n  'pause-circle': true,\n  pen: true,\n  percentage: true,\n  play: true,\n  plug: true,\n  plus: true,\n  'plus-circle': true,\n  'plus-square': true,\n  power: true,\n  'presentation-play': true,\n  process: true,\n  'question-circle': true,\n  'record-audio': true,\n  repeat: true,\n  rocket: true,\n  'ruler-combined': true,\n  save: true,\n  search: true,\n  'search-minus': true,\n  'search-plus': true,\n  'share-alt': true,\n  shield: true,\n  'shield-exclamation': true,\n  signal: true,\n  signin: true,\n  signout: true,\n  sitemap: true,\n  slack: true,\n  'sliders-v-alt': true,\n  spinner: true,\n  'sort-amount-down': true,\n  'sort-amount-up': true,\n  'square-shape': true,\n  star: true,\n  'step-backward': true,\n  stopwatch: true,\n  'stopwatch-slash': true,\n  sync: true,\n  'sync-slash': true,\n  table: true,\n  'table-collapse-all': true,\n  'table-expand-all': true,\n  'tag-alt': true,\n  'telegram-alt': true,\n  'text-fields': true,\n  'thumbs-up': true,\n  times: true,\n  'times-circle': true,\n  'toggle-on': true,\n  'toggle-off': true,\n  'trash-alt': true,\n  unarchive: true,\n  unlock: true,\n  upload: true,\n  user: true,\n  'users-alt': true,\n  'user-arrows': true,\n  'vertical-align-bottom': true,\n  'vertical-align-center': true,\n  'vertical-align-top': true,\n  'web-section-alt': true,\n  'wrap-text': true,\n  wrench: true,\n  rss: true,\n  x: true,\n  'add-user': true,\n  attach: true,\n};\n\nexport type IconName = keyof typeof availableIconsIndex;\n\nexport function isIconName(iconName: unknown): iconName is IconName {\n  if (!iconName || typeof iconName !== 'string') {\n    return false;\n  }\n\n  return iconName in availableIconsIndex;\n}\n\nexport function toIconName(iconName: string): IconName | undefined {\n  if (isIconName(iconName)) {\n    return iconName;\n  }\n\n  return undefined;\n}\n","export interface UserOrgDTO {\n  orgId: number;\n  name: string;\n  role: OrgRole;\n}\n\nexport enum OrgRole {\n  None = 'None',\n  Viewer = 'Viewer',\n  Editor = 'Editor',\n  Admin = 'Admin',\n}\n","import { ComponentType } from 'react';\n\nimport { KeyValue } from './data';\nimport { IconName } from './icon';\n\n/** Describes plugins life cycle status */\nexport enum PluginState {\n  alpha = 'alpha', // Only included if `enable_alpha` config option is true\n  beta = 'beta', // Will show a warning banner\n  stable = 'stable', // Will not show anything\n  deprecated = 'deprecated', // Will continue to work -- but not show up in the options to add\n}\n\n/** Describes {@link https://grafana.com/docs/grafana/latest/plugins | type of plugin} */\nexport enum PluginType {\n  panel = 'panel',\n  datasource = 'datasource',\n  app = 'app',\n  renderer = 'renderer',\n  secretsmanager = 'secretsmanager',\n}\n\n/** Describes status of {@link https://grafana.com/docs/grafana/latest/plugins/plugin-signatures/ | plugin signature} */\nexport enum PluginSignatureStatus {\n  internal = 'internal', // core plugin, no signature\n  valid = 'valid', // signed and accurate MANIFEST\n  invalid = 'invalid', // invalid signature\n  modified = 'modified', // valid signature, but content mismatch\n  missing = 'missing', // missing signature file\n}\n\n/** Describes level of {@link https://grafana.com/docs/grafana/latest/plugins/plugin-signatures/#plugin-signature-levels/ | plugin signature level} */\nexport enum PluginSignatureType {\n  grafana = 'grafana',\n  commercial = 'commercial',\n  community = 'community',\n  private = 'private',\n  core = 'core',\n}\n\n/** Describes error code returned from Grafana plugins API call */\nexport enum PluginErrorCode {\n  missingSignature = 'signatureMissing',\n  invalidSignature = 'signatureInvalid',\n  modifiedSignature = 'signatureModified',\n  failedBackendStart = 'failedBackendStart',\n  angular = 'angular',\n}\n\n/** Describes error returned from Grafana plugins API call */\nexport interface PluginError {\n  errorCode: PluginErrorCode;\n  pluginId: string;\n  pluginType?: PluginType;\n}\n\nexport interface AngularMeta {\n  detected: boolean;\n  hideDeprecation: boolean;\n}\n\n// Signals to SystemJS how to load frontend js assets.\nexport enum PluginLoadingStrategy {\n  fetch = 'fetch',\n  script = 'script',\n}\n\nexport interface PluginMeta<T extends KeyValue = {}> {\n  id: string;\n  name: string;\n  type: PluginType;\n  info: PluginMetaInfo;\n  includes?: PluginInclude[];\n  state?: PluginState;\n  aliasIDs?: string[];\n\n  // System.load & relative URLS\n  module: string;\n  baseUrl: string;\n\n  // Define plugin requirements\n  dependencies?: PluginDependencies;\n\n  // Filled in by the backend\n  jsonData?: T;\n  secureJsonData?: KeyValue;\n  secureJsonFields?: KeyValue<boolean>;\n  enabled?: boolean;\n  autoEnabled?: boolean;\n  defaultNavUrl?: string;\n  hasUpdate?: boolean;\n  enterprise?: boolean;\n  latestVersion?: string;\n  pinned?: boolean;\n  signature?: PluginSignatureStatus;\n  signatureType?: PluginSignatureType;\n  signatureOrg?: string;\n  live?: boolean;\n  angular?: AngularMeta;\n  angularDetected?: boolean;\n  loadingStrategy?: PluginLoadingStrategy;\n  extensions?: PluginExtensions;\n  moduleHash?: string;\n}\n\ninterface PluginDependencyInfo {\n  id: string;\n  name: string;\n  version: string;\n  type: PluginType;\n}\n\nexport interface PluginDependencies {\n  grafanaDependency?: string;\n  grafanaVersion: string;\n  plugins: PluginDependencyInfo[];\n  extensions: {\n    // A list of exposed component IDs\n    exposedComponents: string[];\n  };\n}\n\nexport type ExtensionInfo = {\n  targets: string | string[];\n  title: string;\n  description?: string;\n};\n\nexport interface PluginExtensions {\n  // The component extensions that the plugin registers\n  addedComponents: ExtensionInfo[];\n\n  addedFunctions: ExtensionInfo[];\n\n  // The link extensions that the plugin registers\n  addedLinks: ExtensionInfo[];\n\n  // The React components that the plugin exposes\n  exposedComponents: Array<{\n    id: string;\n    title: string;\n    description?: string;\n  }>;\n\n  // The extension points that the plugin provides\n  extensionPoints: Array<{\n    id: string;\n    title: string;\n    description?: string;\n  }>;\n}\n\nexport enum PluginIncludeType {\n  dashboard = 'dashboard',\n  page = 'page',\n\n  // Only valid for apps\n  panel = 'panel',\n  datasource = 'datasource',\n}\n\nexport interface PluginInclude {\n  type: PluginIncludeType;\n  name: string;\n  path?: string;\n  icon?: string;\n\n  // \"Admin\", \"Editor\" or \"Viewer\". If set then the include will only show up in the navigation if the user has the required roles.\n  role?: string;\n\n  // if action is set then the include will only show up in the navigation if the user has the required permission.\n  // The action will take precedence over the role.\n  action?: string;\n\n  // Adds the \"page\" or \"dashboard\" type includes to the navigation if set to `true`.\n  addToNav?: boolean;\n\n  // Angular app pages\n  component?: string;\n}\n\ninterface PluginMetaInfoLink {\n  name: string;\n  url: string;\n  target?: '_blank' | '_self' | '_parent' | '_top';\n}\n\nexport interface PluginBuildInfo {\n  time?: number;\n  repo?: string;\n  branch?: string;\n  hash?: string;\n  number?: number;\n  pr?: number;\n}\n\nexport interface ScreenshotInfo {\n  name: string;\n  path: string;\n}\n\nexport interface PluginMetaInfo {\n  author: {\n    name: string;\n    url?: string;\n  };\n  description: string;\n  links: PluginMetaInfoLink[];\n  logos: {\n    large: string;\n    small: string;\n  };\n  build?: PluginBuildInfo;\n  screenshots: ScreenshotInfo[];\n  updated: string;\n  version: string;\n}\n\nexport interface PluginConfigPageProps<T extends PluginMeta> {\n  plugin: GrafanaPlugin<T>;\n  query: KeyValue; // The URL query parameters\n}\n\nexport interface PluginConfigPage<T extends PluginMeta> {\n  title: string; // Display\n  icon?: IconName;\n  id: string; // Unique, in URL\n\n  body: ComponentType<PluginConfigPageProps<T>>;\n}\n\nexport class GrafanaPlugin<T extends PluginMeta = PluginMeta> {\n  // Meta is filled in by the plugin loading system\n  meta: T;\n\n  // This is set if the plugin system had errors loading the plugin\n  loadError?: boolean;\n\n  // Config control (app/datasource)\n  angularConfigCtrl?: any;\n\n  // Show configuration tabs on the plugin page\n  configPages?: Array<PluginConfigPage<T>>;\n\n  // Tabs on the plugin page\n  addConfigPage(tab: PluginConfigPage<T>) {\n    if (!this.configPages) {\n      this.configPages = [];\n    }\n    this.configPages.push(tab);\n    return this;\n  }\n\n  /**\n   * @deprecated -- this is no longer necessary and will be removed\n   */\n  setChannelSupport() {\n    console.warn('[deprecation] plugin is using ignored option: setChannelSupport', this.meta);\n    return this;\n  }\n\n  constructor() {\n    this.meta = {} as T;\n  }\n}\n","import { ThemeVisualizationColors } from '../themes/createVisualizationColors';\n\nexport enum GrafanaThemeType {\n  Light = 'light',\n  Dark = 'dark',\n}\n\nexport interface GrafanaThemeCommons {\n  name: string;\n  // TODO: not sure if should be a part of theme\n  breakpoints: {\n    xs: string;\n    sm: string;\n    md: string;\n    lg: string;\n    xl: string;\n    xxl: string;\n  };\n  typography: {\n    fontFamily: {\n      sansSerif: string;\n      monospace: string;\n    };\n    size: {\n      base: string;\n      xs: string;\n      sm: string;\n      md: string;\n      lg: string;\n    };\n    weight: {\n      light: number;\n      regular: number;\n      semibold: number;\n      bold: number;\n    };\n    lineHeight: {\n      xs: number; //1\n      sm: number; //1.1\n      md: number; // 4/3\n      lg: number; // 1.5\n    };\n    // TODO: Refactor to use size instead of custom defs\n    heading: {\n      h1: string;\n      h2: string;\n      h3: string;\n      h4: string;\n      h5: string;\n      h6: string;\n    };\n    link: {\n      decoration: string;\n      hoverDecoration: string;\n    };\n  };\n  spacing: {\n    base: number;\n    insetSquishMd: string;\n    d: string;\n    xxs: string;\n    xs: string;\n    sm: string;\n    md: string;\n    lg: string;\n    xl: string;\n    gutter: string;\n\n    // Next-gen forms spacing variables\n    // TODO: Move variables definition to respective components when implementing\n    formSpacingBase: number;\n    formMargin: string;\n    formFieldsetMargin: string;\n    formInputHeight: number;\n    formButtonHeight: number;\n    formInputPaddingHorizontal: string;\n    // Used for icons do define spacing between icon and input field\n    // Applied on the right(prefix) or left(suffix)\n    formInputAffixPaddingHorizontal: string;\n    formInputMargin: string;\n    formLabelPadding: string;\n    formLabelMargin: string;\n    formValidationMessagePadding: string;\n    formValidationMessageMargin: string;\n    inlineFormMargin: string;\n  };\n  border: {\n    radius: {\n      sm: string;\n      md: string;\n      lg: string;\n    };\n    width: {\n      sm: string;\n    };\n  };\n  height: {\n    sm: number;\n    md: number;\n    lg: number;\n  };\n  panelPadding: number;\n  panelHeaderHeight: number;\n  zIndex: {\n    dropdown: number;\n    navbarFixed: number;\n    sidemenu: number;\n    tooltip: number;\n    modalBackdrop: number;\n    modal: number;\n    portal: number;\n    typeahead: number;\n  };\n}\n\nexport interface GrafanaTheme extends GrafanaThemeCommons {\n  type: GrafanaThemeType;\n  isDark: boolean;\n  isLight: boolean;\n  palette: {\n    black: string;\n    white: string;\n    dark1: string;\n    dark2: string;\n    dark3: string;\n    dark4: string;\n    dark5: string;\n    dark6: string;\n    dark7: string;\n    dark8: string;\n    dark9: string;\n    dark10: string;\n    gray1: string;\n    gray2: string;\n    gray3: string;\n    gray4: string;\n    gray5: string;\n    gray6: string;\n    gray7: string;\n\n    // New greys palette used by next-gen form elements\n    gray98: string;\n    gray97: string;\n    gray95: string;\n    gray90: string;\n    gray85: string;\n    gray70: string;\n    gray60: string;\n    gray33: string;\n    gray25: string;\n    gray15: string;\n    gray10: string;\n    gray05: string;\n\n    // New blues palette used by next-gen form elements\n    blue95: string;\n    blue85: string;\n    blue80: string;\n    blue77: string;\n\n    // New reds palette used by next-gen form elements\n    red88: string;\n\n    // Accent colors\n    redBase: string;\n    redShade: string;\n    greenBase: string;\n    greenShade: string;\n    red: string;\n    yellow: string;\n    purple: string;\n    orange: string;\n    orangeDark: string;\n    queryRed: string;\n    queryGreen: string;\n    queryPurple: string;\n    queryOrange: string;\n    brandPrimary: string;\n    brandSuccess: string;\n    brandWarning: string;\n    brandDanger: string;\n\n    // Status colors\n    online: string;\n    warn: string;\n    critical: string;\n  };\n  colors: {\n    bg1: string;\n    bg2: string;\n    bg3: string;\n    border1: string;\n    border2: string;\n    border3: string;\n\n    bgBlue1: string;\n    bgBlue2: string;\n\n    dashboardBg: string;\n    bodyBg: string;\n    panelBg: string;\n    panelBorder: string;\n    pageHeaderBg: string;\n    pageHeaderBorder: string;\n\n    dropdownBg: string;\n    dropdownShadow: string;\n    dropdownOptionHoverBg: string;\n\n    // Link colors\n    link: string;\n    linkDisabled: string;\n    linkHover: string;\n    linkExternal: string;\n\n    // Text colors\n    textStrong: string;\n    textHeading: string;\n    text: string;\n    textSemiWeak: string;\n    textWeak: string;\n    textFaint: string;\n    textBlue: string;\n\n    // Next-gen forms functional colors\n    formLabel: string;\n    formDescription: string;\n    formInputBg: string;\n    formInputBgDisabled: string;\n    formInputBorder: string;\n    formInputBorderHover: string;\n    formInputBorderActive: string;\n    formInputBorderInvalid: string;\n    formFocusOutline: string;\n    formInputText: string;\n    formInputDisabledText: string;\n    formInputPlaceholderText: string;\n    formValidationMessageText: string;\n    formValidationMessageBg: string;\n  };\n  shadows: {\n    listItem: string;\n  };\n  visualization: ThemeVisualizationColors;\n}\n","import {\n  TimeZone as SchemaTimeZone,\n  TimeZoneBrowser as SchemaTimeZoneBrowser,\n  TimeZoneUtc as SchemaTimeZoneUtc,\n  defaultTimeZone,\n} from '@grafana/schema';\n\nimport { dateTime, DateTime } from '../datetime/moment_wrapper';\n\nexport interface RawTimeRange {\n  from: DateTime | string;\n  to: DateTime | string;\n}\n\nexport interface TimeRange {\n  from: DateTime;\n  to: DateTime;\n  raw: RawTimeRange;\n}\n\n/**\n * Type to describe relative time to now in seconds.\n * @internal\n */\nexport interface RelativeTimeRange {\n  from: number;\n  to: number;\n}\n\nexport interface AbsoluteTimeRange {\n  from: number;\n  to: number;\n}\n\nexport interface IntervalValues {\n  interval: string; // 10s,5m\n  intervalMs: number;\n}\n\nexport interface TimeOption {\n  from: string;\n  to: string;\n  display: string;\n  invalid?: boolean;\n  section?: number;\n}\n\n/** @deprecated use TimeZone from schema  */\nexport type TimeZone = SchemaTimeZone;\n\n/** @deprecated use TimeZoneBrowser from schema  */\nexport type TimeZoneBrowser = SchemaTimeZoneBrowser;\n\n/** @deprecated use TimeZoneUtc from schema  */\nexport type TimeZoneUtc = SchemaTimeZoneUtc;\n\n/** @deprecated use defaultTimeZone from schema  */\nexport const DefaultTimeZone = defaultTimeZone;\n\nexport interface TimeOptions {\n  [key: string]: TimeOption[];\n}\n\nexport type TimeFragment = string | DateTime;\n\nexport const TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';\n\nexport function getDefaultTimeRange(): TimeRange {\n  const now = dateTime();\n\n  return {\n    from: dateTime(now).subtract(6, 'hour'),\n    to: now,\n    raw: { from: 'now-6h', to: 'now' },\n  };\n}\n\n/**\n * Returns the default relative time range.\n *\n * @public\n */\nexport function getDefaultRelativeTimeRange(): RelativeTimeRange {\n  return {\n    from: 600,\n    to: 0,\n  };\n}\n\n/**\n * Simple helper to quickly create a TimeRange object either from string representations of a dateTime or directly\n * DateTime objects.\n */\nexport function makeTimeRange(from: DateTime | string, to: DateTime | string): TimeRange {\n  const fromDateTime = typeof from === 'string' ? dateTime(from) : from;\n  const toDateTime = typeof to === 'string' ? dateTime(to) : to;\n  return {\n    from: fromDateTime,\n    to: toDateTime,\n    raw: {\n      from: fromDateTime,\n      to: toDateTime,\n    },\n  };\n}\n","import { PluginState } from '../types/plugin';\nimport { SelectableValue } from '../types/select';\n\nexport interface RegistryItem {\n  id: string; // Unique Key -- saved in configs\n  name: string; // Display Name, can change without breaking configs\n  description?: string;\n  aliasIds?: string[]; // when the ID changes, we may want backwards compatibility ('current' => 'last')\n\n  /**\n   * Some extensions should not be user selectable\n   *  like: 'all' and 'any' matchers;\n   */\n  excludeFromPicker?: boolean;\n\n  /**\n   * Optional feature state\n   */\n  state?: PluginState;\n}\n\nexport interface RegistryItemWithOptions<TOptions = any> extends RegistryItem {\n  /**\n   * Convert the options to a string\n   */\n  getOptionsDisplayText?: (options: TOptions) => string;\n\n  /**\n   * Default options used if nothing else is specified\n   */\n  defaultOptions?: TOptions;\n}\n\ninterface RegistrySelectInfo {\n  options: Array<SelectableValue<string>>;\n  current: Array<SelectableValue<string>>;\n}\n\nexport class Registry<T extends RegistryItem> {\n  private ordered: T[] = [];\n  private byId = new Map<string, T>();\n  private initialized = false;\n\n  constructor(private init?: () => T[]) {\n    this.init = init;\n  }\n\n  setInit = (init: () => T[]) => {\n    if (this.initialized) {\n      throw new Error('Registry already initialized');\n    }\n    this.init = init;\n  };\n\n  getIfExists(id: string | undefined): T | undefined {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    if (id) {\n      return this.byId.get(id);\n    }\n\n    return undefined;\n  }\n\n  private initialize() {\n    if (this.init) {\n      for (const ext of this.init()) {\n        this.register(ext);\n      }\n    }\n    this.sort();\n    this.initialized = true;\n  }\n\n  get(id: string): T {\n    const v = this.getIfExists(id);\n    if (!v) {\n      throw new Error(`\"${id}\" not found in: ${this.list().map((v) => v.id)}`);\n    }\n    return v;\n  }\n\n  selectOptions(current?: string[], filter?: (ext: T) => boolean): RegistrySelectInfo {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    const select: RegistrySelectInfo = {\n      options: [],\n      current: [],\n    };\n\n    const currentOptions: Record<string, SelectableValue<string>> = {};\n    if (current) {\n      for (const id of current) {\n        currentOptions[id] = {};\n      }\n    }\n\n    for (const ext of this.ordered) {\n      if (ext.excludeFromPicker) {\n        continue;\n      }\n      if (filter && !filter(ext)) {\n        continue;\n      }\n\n      const option = {\n        value: ext.id,\n        label: ext.name,\n        description: ext.description,\n      };\n\n      if (ext.state === PluginState.alpha) {\n        option.label += ' (alpha)';\n      }\n\n      select.options.push(option);\n      if (currentOptions[ext.id]) {\n        currentOptions[ext.id] = option;\n      }\n    }\n\n    if (current) {\n      // this makes sure we preserve the order of ids\n      select.current = Object.values(currentOptions);\n    }\n\n    return select;\n  }\n\n  /**\n   * Return a list of values by ID, or all values if not specified\n   */\n  list(ids?: string[]): T[] {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    if (ids) {\n      const found: T[] = [];\n      for (const id of ids) {\n        const v = this.getIfExists(id);\n        if (v) {\n          found.push(v);\n        }\n      }\n      return found;\n    }\n\n    return this.ordered;\n  }\n\n  isEmpty(): boolean {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    return this.ordered.length === 0;\n  }\n\n  register(ext: T) {\n    if (this.byId.has(ext.id)) {\n      throw new Error('Duplicate Key:' + ext.id);\n    }\n\n    this.byId.set(ext.id, ext);\n    this.ordered.push(ext);\n\n    if (ext.aliasIds) {\n      for (const alias of ext.aliasIds) {\n        if (!this.byId.has(alias)) {\n          this.byId.set(alias, ext);\n        }\n      }\n    }\n\n    if (this.initialized) {\n      this.sort();\n    }\n  }\n\n  private sort() {\n    // TODO sort the list\n  }\n}\n","import { KeyValue } from '../types/data';\n\n// Avoid writing the warning message more than once every 10s\nconst history: KeyValue<number> = {};\n\nexport const deprecationWarning = (file: string, oldName: string, newName?: string) => {\n  let message = `[Deprecation warning] ${file}: ${oldName} is deprecated`;\n  if (newName) {\n    message += `. Use ${newName} instead`;\n  }\n  const now = Date.now();\n  const last = history[message];\n  if (!last || now - last > 10000) {\n    console.warn(message);\n    history[message] = now;\n  }\n};\n","import { SelectableValue } from '../types/select';\n\nexport const toOption = (value: string): SelectableValue<string> => ({ label: value, value });\n","import { DecimalCount } from '../types/displayValue';\n\nimport { scaledUnits, ValueFormatter } from './valueFormats';\n\nexport function currency(symbol: string, asSuffix?: boolean): ValueFormatter {\n  const units = ['', 'K', 'M', 'B', 'T'];\n  const scaler = scaledUnits(1000, units);\n  return (value: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount) => {\n    if (value == null) {\n      return { text: '' };\n    }\n    const isNegative = value < 0;\n    if (isNegative) {\n      value = Math.abs(value);\n    }\n    const scaled = scaler(value, decimals, scaledDecimals);\n    if (asSuffix) {\n      scaled.suffix = scaled.suffix !== undefined ? `${scaled.suffix}${symbol}` : undefined;\n    } else {\n      scaled.prefix = symbol;\n    }\n    if (isNegative) {\n      scaled.prefix = `-${scaled.prefix?.length ? scaled.prefix : ''}`;\n    }\n    return scaled;\n  };\n}\n\nconst SI_PREFIXES = ['f', 'p', 'n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\nconst SI_BASE_INDEX = SI_PREFIXES.indexOf('');\n\nexport function getOffsetFromSIPrefix(c: string): number {\n  const charIndex = SI_PREFIXES.findIndex((prefix) => prefix.normalize('NFKD') === c.normalize('NFKD'));\n  return charIndex < 0 ? 0 : charIndex - SI_BASE_INDEX;\n}\n\nconst BIN_PREFIXES = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];\n\nexport function binaryPrefix(unit: string, offset = 0): ValueFormatter {\n  const units = BIN_PREFIXES.map((p) => ' ' + p + unit);\n  return scaledUnits(1024, units, offset);\n}\n\nexport function SIPrefix(unit: string, offset = 0): ValueFormatter {\n  const units = SI_PREFIXES.map((p) => ' ' + p + unit);\n  return scaledUnits(1000, units, SI_BASE_INDEX + offset);\n}\n","import { DecimalCount } from '../types/displayValue';\n\nimport { toFixed, FormattedValue } from './valueFormats';\n\nexport function toPercent(size: number | null, decimals: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n  return { text: toFixed(size, decimals), suffix: '%' };\n}\n\nexport function toPercentUnit(size: number | null, decimals: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n  return { text: toFixed(100 * size, decimals), suffix: '%' };\n}\n\nexport function toHex0x(value: number | null, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  const asHex = toHex(value, decimals);\n  if (asHex.text.substring(0, 1) === '-') {\n    asHex.text = '-0x' + asHex.text.substring(1);\n  } else {\n    asHex.text = '0x' + asHex.text;\n  }\n  return asHex;\n}\n\nexport function toHex(value: number | null, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  return {\n    text: parseFloat(toFixed(value, decimals)).toString(16).toUpperCase(),\n  };\n}\n\nexport function sci(value: number | null, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  return { text: value.toExponential(decimals ?? undefined) };\n}\n","import { localTimeFormat, systemDateFormats } from '../datetime/formats';\nimport { dateTimeFormat, dateTimeFormatTimeAgo } from '../datetime/formatter';\nimport { toDuration as duration, toUtc, dateTime } from '../datetime/moment_wrapper';\nimport { DecimalCount } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\n\nimport { toFixed, toFixedScaled, FormattedValue, ValueFormatter } from './valueFormats';\n\ninterface IntervalsInSeconds {\n  [interval: string]: number;\n}\n\nexport enum Interval {\n  Year = 'year',\n  Month = 'month',\n  Week = 'week',\n  Day = 'day',\n  Hour = 'hour',\n  Minute = 'minute',\n  Second = 'second',\n  Millisecond = 'millisecond',\n}\n\nconst UNITS = [\n  Interval.Year,\n  Interval.Month,\n  Interval.Week,\n  Interval.Day,\n  Interval.Hour,\n  Interval.Minute,\n  Interval.Second,\n  Interval.Millisecond,\n];\n\nconst INTERVALS_IN_SECONDS: IntervalsInSeconds = {\n  [Interval.Year]: 31536000,\n  [Interval.Month]: 2592000,\n  [Interval.Week]: 604800,\n  [Interval.Day]: 86400,\n  [Interval.Hour]: 3600,\n  [Interval.Minute]: 60,\n  [Interval.Second]: 1,\n  [Interval.Millisecond]: 0.001,\n};\n\nexport function toNanoSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' ns' };\n  } else if (Math.abs(size) < 1000000) {\n    return toFixedScaled(size / 1000, decimals, ' µs');\n  } else if (Math.abs(size) < 1000000000) {\n    return toFixedScaled(size / 1000000, decimals, ' ms');\n  } else if (Math.abs(size) < 60000000000) {\n    return toFixedScaled(size / 1000000000, decimals, ' s');\n  } else if (Math.abs(size) < 3600000000000) {\n    return toFixedScaled(size / 60000000000, decimals, ' min');\n  } else if (Math.abs(size) < 86400000000000) {\n    return toFixedScaled(size / 3600000000000, decimals, ' hour');\n  } else {\n    return toFixedScaled(size / 86400000000000, decimals, ' day');\n  }\n}\n\nexport function toMicroSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' µs' };\n  } else if (Math.abs(size) < 1000000) {\n    return toFixedScaled(size / 1000, decimals, ' ms');\n  } else {\n    return toFixedScaled(size / 1000000, decimals, ' s');\n  }\n}\n\nexport function toMilliSeconds(size: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' ms' };\n  } else if (Math.abs(size) < 60000) {\n    // Less than 1 min\n    return toFixedScaled(size / 1000, decimals, ' s');\n  } else if (Math.abs(size) < 3600000) {\n    // Less than 1 hour, divide in minutes\n    return toFixedScaled(size / 60000, decimals, ' min');\n  } else if (Math.abs(size) < 86400000) {\n    // Less than one day, divide in hours\n    return toFixedScaled(size / 3600000, decimals, ' hour');\n  } else if (Math.abs(size) < 31536000000) {\n    // Less than one year, divide in days\n    return toFixedScaled(size / 86400000, decimals, ' day');\n  }\n\n  return toFixedScaled(size / 31536000000, decimals, ' year');\n}\n\nexport function toSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  // If 0, use s unit instead of ns\n  if (size === 0) {\n    return { text: '0', suffix: ' s' };\n  }\n\n  // Less than 1 µs, divide in ns\n  if (Math.abs(size) < 0.000001) {\n    return toFixedScaled(size * 1e9, decimals, ' ns');\n  }\n  // Less than 1 ms, divide in µs\n  if (Math.abs(size) < 0.001) {\n    return toFixedScaled(size * 1e6, decimals, ' µs');\n  }\n  // Less than 1 second, divide in ms\n  if (Math.abs(size) < 1) {\n    return toFixedScaled(size * 1e3, decimals, ' ms');\n  }\n\n  if (Math.abs(size) < 60) {\n    return { text: toFixed(size, decimals), suffix: ' s' };\n  } else if (Math.abs(size) < 3600) {\n    // Less than 1 hour, divide in minutes\n    return toFixedScaled(size / 60, decimals, ' min');\n  } else if (Math.abs(size) < 86400) {\n    // Less than one day, divide in hours\n    return toFixedScaled(size / 3600, decimals, ' hour');\n  } else if (Math.abs(size) < 604800) {\n    // Less than one week, divide in days\n    return toFixedScaled(size / 86400, decimals, ' day');\n  } else if (Math.abs(size) < 31536000) {\n    // Less than one year, divide in week\n    return toFixedScaled(size / 604800, decimals, ' week');\n  }\n\n  return toFixedScaled(size / 3.15569e7, decimals, ' year');\n}\n\nexport function toMinutes(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 60) {\n    return { text: toFixed(size, decimals), suffix: ' min' };\n  } else if (Math.abs(size) < 1440) {\n    return toFixedScaled(size / 60, decimals, ' hour');\n  } else if (Math.abs(size) < 10080) {\n    return toFixedScaled(size / 1440, decimals, ' day');\n  } else if (Math.abs(size) < 604800) {\n    return toFixedScaled(size / 10080, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 5.25948e5, decimals, ' year');\n  }\n}\n\nexport function toHours(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 24) {\n    return { text: toFixed(size, decimals), suffix: ' hour' };\n  } else if (Math.abs(size) < 168) {\n    return toFixedScaled(size / 24, decimals, ' day');\n  } else if (Math.abs(size) < 8760) {\n    return toFixedScaled(size / 168, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 8760, decimals, ' year');\n  }\n}\n\nexport function toDays(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 7) {\n    return toFixedScaled(size, decimals, ' day');\n  } else if (Math.abs(size) < 365) {\n    return toFixedScaled(size / 7, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 365, decimals, ' year');\n  }\n}\n\nexport function toDuration(size: number, decimals: DecimalCount, timeScale: Interval): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (size === 0) {\n    return { text: '0', suffix: ' ' + timeScale + 's' };\n  }\n\n  if (size < 0) {\n    const v = toDuration(-size, decimals, timeScale);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n\n  // convert $size to milliseconds\n  // intervals_in_seconds uses seconds (duh), convert them to milliseconds here to minimize floating point errors\n  size *= INTERVALS_IN_SECONDS[timeScale] * 1000;\n\n  const strings = [];\n\n  // after first value >= 1 print only $decimals more\n  let decrementDecimals = false;\n  let decimalsCount = 0;\n\n  if (decimals !== null && decimals !== undefined) {\n    decimalsCount = decimals;\n  }\n\n  for (let i = 0; i < UNITS.length && decimalsCount >= 0; i++) {\n    const interval = INTERVALS_IN_SECONDS[UNITS[i]] * 1000;\n    const value = size / interval;\n    if (value >= 1 || decrementDecimals) {\n      decrementDecimals = true;\n      const floor = Math.floor(value);\n      const unit = UNITS[i] + (floor !== 1 ? 's' : '');\n      strings.push(floor + ' ' + unit);\n      size = size % interval;\n      decimalsCount--;\n    }\n  }\n\n  return { text: strings.join(', ') };\n}\n\nexport function toClock(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  // < 1 second\n  if (size < 1000) {\n    return {\n      text: toUtc(size).format('SSS\\\\m\\\\s'),\n    };\n  }\n\n  // < 1 minute\n  if (size < 60000) {\n    let format = 'ss\\\\s:SSS\\\\m\\\\s';\n    if (decimals === 0) {\n      format = 'ss\\\\s';\n    }\n    return { text: toUtc(size).format(format) };\n  }\n\n  // < 1 hour\n  if (size < 3600000) {\n    let format = 'mm\\\\m:ss\\\\s:SSS\\\\m\\\\s';\n    if (decimals === 0) {\n      format = 'mm\\\\m';\n    } else if (decimals === 1) {\n      format = 'mm\\\\m:ss\\\\s';\n    }\n    return { text: toUtc(size).format(format) };\n  }\n\n  let format = 'mm\\\\m:ss\\\\s:SSS\\\\m\\\\s';\n\n  const hours = `${Math.floor(duration(size, 'milliseconds').asHours())}h`;\n\n  if (decimals === 0) {\n    format = '';\n  } else if (decimals === 1) {\n    format = 'mm\\\\m';\n  } else if (decimals === 2) {\n    format = 'mm\\\\m:ss\\\\s';\n  }\n\n  const text = format ? `${hours}:${toUtc(size).format(format)}` : hours;\n  return { text };\n}\n\nexport function toDurationInMilliseconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toDuration(size, decimals, Interval.Millisecond);\n}\n\nexport function toDurationInSeconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toDuration(size, decimals, Interval.Second);\n}\n\nexport function toDurationInHoursMinutesSeconds(size: number): FormattedValue {\n  if (size < 0) {\n    const v = toDurationInHoursMinutesSeconds(-size);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n  const strings = [];\n  const numHours = Math.floor(size / 3600);\n  const numMinutes = Math.floor((size % 3600) / 60);\n  const numSeconds = Math.floor((size % 3600) % 60);\n  numHours > 9 ? strings.push('' + numHours) : strings.push('0' + numHours);\n  numMinutes > 9 ? strings.push('' + numMinutes) : strings.push('0' + numMinutes);\n  numSeconds > 9 ? strings.push('' + numSeconds) : strings.push('0' + numSeconds);\n  return { text: strings.join(':') };\n}\n\nexport function toDurationInDaysHoursMinutesSeconds(size: number): FormattedValue {\n  if (size < 0) {\n    const v = toDurationInDaysHoursMinutesSeconds(-size);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n  let dayString = '';\n  const numDays = Math.floor(size / (24 * 3600));\n  if (numDays > 0) {\n    dayString = numDays + ' d ';\n  }\n  const hmsString = toDurationInHoursMinutesSeconds(size - numDays * 24 * 3600);\n  return { text: dayString + hmsString.text };\n}\n\nexport function toTimeTicks(size: number, decimals: DecimalCount): FormattedValue {\n  return toSeconds(size / 100, decimals);\n}\n\nexport function toClockMilliseconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toClock(size, decimals);\n}\n\nexport function toClockSeconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toClock(size * 1000, decimals);\n}\n\nexport function toDateTimeValueFormatter(pattern: string, todayPattern?: string): ValueFormatter {\n  return (value: number, decimals: DecimalCount, scaledDecimals: DecimalCount, timeZone?: TimeZone): FormattedValue => {\n    if (todayPattern) {\n      if (dateTime().isSame(value, 'day')) {\n        return {\n          text: dateTimeFormat(value, { format: todayPattern, timeZone }),\n        };\n      }\n    }\n    return { text: dateTimeFormat(value, { format: pattern, timeZone }) };\n  };\n}\n\nexport const dateTimeAsIso = toDateTimeValueFormatter('YYYY-MM-DD HH:mm:ss');\nexport const dateTimeAsIsoNoDateIfToday = toDateTimeValueFormatter('YYYY-MM-DD HH:mm:ss', 'HH:mm:ss');\nexport const dateTimeAsUS = toDateTimeValueFormatter('MM/DD/YYYY h:mm:ss a');\nexport const dateTimeAsUSNoDateIfToday = toDateTimeValueFormatter('MM/DD/YYYY h:mm:ss a', 'h:mm:ss a');\n\nexport function getDateTimeAsLocalFormat() {\n  return toDateTimeValueFormatter(\n    localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    })\n  );\n}\n\nexport function getDateTimeAsLocalFormatNoDateIfToday() {\n  return toDateTimeValueFormatter(\n    localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    }),\n    localTimeFormat({\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    })\n  );\n}\n\nexport function dateTimeSystemFormatter(\n  value: number,\n  decimals: DecimalCount,\n  scaledDecimals: DecimalCount,\n  timeZone?: TimeZone,\n  showMs?: boolean\n): FormattedValue {\n  return {\n    text: dateTimeFormat(value, {\n      format: showMs ? systemDateFormats.fullDateMS : systemDateFormats.fullDate,\n      timeZone,\n    }),\n  };\n}\n\nexport function dateTimeFromNow(\n  value: number,\n  decimals: DecimalCount,\n  scaledDecimals: DecimalCount,\n  timeZone?: TimeZone\n): FormattedValue {\n  return { text: dateTimeFormatTimeAgo(value, { timeZone }) };\n}\n","import { toHex, sci, toHex0x, toPercent, toPercentUnit } from './arithmeticFormatters';\nimport {\n  dateTimeAsIso,\n  dateTimeAsIsoNoDateIfToday,\n  dateTimeAsUS,\n  dateTimeAsUSNoDateIfToday,\n  getDateTimeAsLocalFormat,\n  getDateTimeAsLocalFormatNoDateIfToday,\n  dateTimeFromNow,\n  toClockMilliseconds,\n  toClockSeconds,\n  toDays,\n  toDurationInDaysHoursMinutesSeconds,\n  toDurationInHoursMinutesSeconds,\n  toDurationInMilliseconds,\n  toDurationInSeconds,\n  toHours,\n  toMicroSeconds,\n  toMilliSeconds,\n  toMinutes,\n  toNanoSeconds,\n  toSeconds,\n  toTimeTicks,\n  dateTimeSystemFormatter,\n} from './dateTimeFormatters';\nimport { binaryPrefix, currency, SIPrefix } from './symbolFormatters';\nimport {\n  locale,\n  scaledUnits,\n  simpleCountUnit,\n  toFixedUnit,\n  ValueFormatCategory,\n  stringFormater,\n  booleanValueFormatter,\n} from './valueFormats';\n\nexport const getCategories = (): ValueFormatCategory[] => [\n  {\n    name: 'Misc',\n    formats: [\n      { name: 'Number', id: 'none', fn: toFixedUnit('') },\n      { name: 'String', id: 'string', fn: stringFormater },\n      {\n        name: 'short',\n        id: 'short',\n        fn: scaledUnits(1000, ['', ' K', ' Mil', ' Bil', ' Tri', ' Quadr', ' Quint', ' Sext', ' Sept']),\n      },\n      { name: 'SI short', id: 'sishort', fn: SIPrefix('') },\n      { name: 'Percent (0-100)', id: 'percent', fn: toPercent },\n      { name: 'Percent (0.0-1.0)', id: 'percentunit', fn: toPercentUnit },\n      { name: 'Humidity (%H)', id: 'humidity', fn: toFixedUnit('%H') },\n      { name: 'Decibel', id: 'dB', fn: toFixedUnit('dB') },\n      { name: 'Candela (cd)', id: 'candela', fn: SIPrefix('cd') },\n      { name: 'Hexadecimal (0x)', id: 'hex0x', fn: toHex0x },\n      { name: 'Hexadecimal', id: 'hex', fn: toHex },\n      { name: 'Scientific notation', id: 'sci', fn: sci },\n      { name: 'Locale format', id: 'locale', fn: locale },\n      { name: 'Pixels', id: 'pixel', fn: toFixedUnit('px') },\n    ],\n  },\n  {\n    name: 'Acceleration',\n    formats: [\n      { name: 'Meters/sec²', id: 'accMS2', fn: toFixedUnit('m/sec²') },\n      { name: 'Feet/sec²', id: 'accFS2', fn: toFixedUnit('f/sec²') },\n      { name: 'G unit', id: 'accG', fn: toFixedUnit('g') },\n    ],\n  },\n  {\n    name: 'Angle',\n    formats: [\n      { name: 'Degrees (°)', id: 'degree', fn: toFixedUnit('°') },\n      { name: 'Radians', id: 'radian', fn: toFixedUnit('rad') },\n      { name: 'Gradian', id: 'grad', fn: toFixedUnit('grad') },\n      { name: 'Arc Minutes', id: 'arcmin', fn: toFixedUnit('arcmin') },\n      { name: 'Arc Seconds', id: 'arcsec', fn: toFixedUnit('arcsec') },\n    ],\n  },\n  {\n    name: 'Area',\n    formats: [\n      { name: 'Square Meters (m²)', id: 'areaM2', fn: toFixedUnit('m²') },\n      { name: 'Square Feet (ft²)', id: 'areaF2', fn: toFixedUnit('ft²') },\n      { name: 'Square Miles (mi²)', id: 'areaMI2', fn: toFixedUnit('mi²') },\n      { name: 'Acres (ac)', id: 'acres', fn: toFixedUnit('ac') },\n      { name: 'Hectares (ha)', id: 'hectares', fn: toFixedUnit('ha') },\n    ],\n  },\n  {\n    name: 'Computation',\n    formats: [\n      { name: 'FLOP/s', id: 'flops', fn: SIPrefix('FLOPS') },\n      { name: 'MFLOP/s', id: 'mflops', fn: SIPrefix('FLOPS', 2) },\n      { name: 'GFLOP/s', id: 'gflops', fn: SIPrefix('FLOPS', 3) },\n      { name: 'TFLOP/s', id: 'tflops', fn: SIPrefix('FLOPS', 4) },\n      { name: 'PFLOP/s', id: 'pflops', fn: SIPrefix('FLOPS', 5) },\n      { name: 'EFLOP/s', id: 'eflops', fn: SIPrefix('FLOPS', 6) },\n      { name: 'ZFLOP/s', id: 'zflops', fn: SIPrefix('FLOPS', 7) },\n      { name: 'YFLOP/s', id: 'yflops', fn: SIPrefix('FLOPS', 8) },\n    ],\n  },\n  {\n    name: 'Concentration',\n    formats: [\n      { name: 'parts-per-million (ppm)', id: 'ppm', fn: toFixedUnit('ppm') },\n      { name: 'parts-per-billion (ppb)', id: 'conppb', fn: toFixedUnit('ppb') },\n      { name: 'nanogram per cubic meter (ng/m³)', id: 'conngm3', fn: toFixedUnit('ng/m³') },\n      { name: 'nanogram per normal cubic meter (ng/Nm³)', id: 'conngNm3', fn: toFixedUnit('ng/Nm³') },\n      { name: 'microgram per cubic meter (μg/m³)', id: 'conμgm3', fn: toFixedUnit('μg/m³') },\n      { name: 'microgram per normal cubic meter (μg/Nm³)', id: 'conμgNm3', fn: toFixedUnit('μg/Nm³') },\n      { name: 'milligram per cubic meter (mg/m³)', id: 'conmgm3', fn: toFixedUnit('mg/m³') },\n      { name: 'milligram per normal cubic meter (mg/Nm³)', id: 'conmgNm3', fn: toFixedUnit('mg/Nm³') },\n      { name: 'gram per cubic meter (g/m³)', id: 'congm3', fn: toFixedUnit('g/m³') },\n      { name: 'gram per normal cubic meter (g/Nm³)', id: 'congNm3', fn: toFixedUnit('g/Nm³') },\n      { name: 'milligrams per decilitre (mg/dL)', id: 'conmgdL', fn: toFixedUnit('mg/dL') },\n      { name: 'millimoles per litre (mmol/L)', id: 'conmmolL', fn: toFixedUnit('mmol/L') },\n    ],\n  },\n  {\n    name: 'Currency',\n    formats: [\n      { name: 'Dollars ($)', id: 'currencyUSD', fn: currency('$') },\n      { name: 'Pounds (£)', id: 'currencyGBP', fn: currency('£') },\n      { name: 'Euro (€)', id: 'currencyEUR', fn: currency('€') },\n      { name: 'Yen (¥)', id: 'currencyJPY', fn: currency('¥') },\n      { name: 'Rubles (₽)', id: 'currencyRUB', fn: currency('₽') },\n      { name: 'Hryvnias (₴)', id: 'currencyUAH', fn: currency('₴') },\n      { name: 'Real (R$)', id: 'currencyBRL', fn: currency('R$') },\n      { name: 'Danish Krone (kr)', id: 'currencyDKK', fn: currency('kr', true) },\n      { name: 'Icelandic Króna (kr)', id: 'currencyISK', fn: currency('kr', true) },\n      { name: 'Norwegian Krone (kr)', id: 'currencyNOK', fn: currency('kr', true) },\n      { name: 'Swedish Krona (kr)', id: 'currencySEK', fn: currency('kr', true) },\n      { name: 'Czech koruna (czk)', id: 'currencyCZK', fn: currency('czk') },\n      { name: 'Swiss franc (CHF)', id: 'currencyCHF', fn: currency('CHF') },\n      { name: 'Polish Złoty (PLN)', id: 'currencyPLN', fn: currency('PLN') },\n      { name: 'Bitcoin (฿)', id: 'currencyBTC', fn: currency('฿') },\n      { name: 'Milli Bitcoin (฿)', id: 'currencymBTC', fn: currency('mBTC') },\n      { name: 'Micro Bitcoin (฿)', id: 'currencyμBTC', fn: currency('μBTC') },\n      { name: 'South African Rand (R)', id: 'currencyZAR', fn: currency('R') },\n      { name: 'Indian Rupee (₹)', id: 'currencyINR', fn: currency('₹') },\n      { name: 'South Korean Won (₩)', id: 'currencyKRW', fn: currency('₩') },\n      { name: 'Indonesian Rupiah (Rp)', id: 'currencyIDR', fn: currency('Rp') },\n      { name: 'Philippine Peso (PHP)', id: 'currencyPHP', fn: currency('PHP') },\n      { name: 'Vietnamese Dong (VND)', id: 'currencyVND', fn: currency('đ', true) },\n      { name: 'Turkish Lira (₺)', id: 'currencyTRY', fn: currency('₺', true) },\n      { name: 'Malaysian Ringgit (RM)', id: 'currencyMYR', fn: currency('RM') },\n      { name: 'CFP franc (XPF)', id: 'currencyXPF', fn: currency('XPF') },\n      { name: 'Bulgarian Lev (BGN)', id: 'currencyBGN', fn: currency('BGN') },\n      { name: 'Guaraní (₲)', id: 'currencyPYG', fn: currency('₲') },\n      { name: 'Uruguay Peso (UYU)', id: 'currencyUYU', fn: currency('UYU') },\n      { name: 'Israeli New Shekels (₪)', id: 'currencyILS', fn: currency('₪') },\n    ],\n  },\n  {\n    name: 'Data',\n    formats: [\n      { name: 'bytes(IEC)', id: 'bytes', fn: binaryPrefix('B') },\n      { name: 'bytes(SI)', id: 'decbytes', fn: SIPrefix('B') },\n      { name: 'bits(IEC)', id: 'bits', fn: binaryPrefix('b') },\n      { name: 'bits(SI)', id: 'decbits', fn: SIPrefix('b') },\n      { name: 'kibibytes', id: 'kbytes', fn: binaryPrefix('B', 1) },\n      { name: 'kilobytes', id: 'deckbytes', fn: SIPrefix('B', 1) },\n      { name: 'mebibytes', id: 'mbytes', fn: binaryPrefix('B', 2) },\n      { name: 'megabytes', id: 'decmbytes', fn: SIPrefix('B', 2) },\n      { name: 'gibibytes', id: 'gbytes', fn: binaryPrefix('B', 3) },\n      { name: 'gigabytes', id: 'decgbytes', fn: SIPrefix('B', 3) },\n      { name: 'tebibytes', id: 'tbytes', fn: binaryPrefix('B', 4) },\n      { name: 'terabytes', id: 'dectbytes', fn: SIPrefix('B', 4) },\n      { name: 'pebibytes', id: 'pbytes', fn: binaryPrefix('B', 5) },\n      { name: 'petabytes', id: 'decpbytes', fn: SIPrefix('B', 5) },\n    ],\n  },\n  {\n    name: 'Data rate',\n    formats: [\n      { name: 'packets/sec', id: 'pps', fn: SIPrefix('p/s') },\n      { name: 'bytes/sec(IEC)', id: 'binBps', fn: binaryPrefix('B/s') },\n      { name: 'bytes/sec(SI)', id: 'Bps', fn: SIPrefix('B/s') },\n      { name: 'bits/sec(IEC)', id: 'binbps', fn: binaryPrefix('b/s') },\n      { name: 'bits/sec(SI)', id: 'bps', fn: SIPrefix('b/s') },\n      { name: 'kibibytes/sec', id: 'KiBs', fn: binaryPrefix('B/s', 1) },\n      { name: 'kibibits/sec', id: 'Kibits', fn: binaryPrefix('b/s', 1) },\n      { name: 'kilobytes/sec', id: 'KBs', fn: SIPrefix('B/s', 1) },\n      { name: 'kilobits/sec', id: 'Kbits', fn: SIPrefix('b/s', 1) },\n      { name: 'mebibytes/sec', id: 'MiBs', fn: binaryPrefix('B/s', 2) },\n      { name: 'mebibits/sec', id: 'Mibits', fn: binaryPrefix('b/s', 2) },\n      { name: 'megabytes/sec', id: 'MBs', fn: SIPrefix('B/s', 2) },\n      { name: 'megabits/sec', id: 'Mbits', fn: SIPrefix('b/s', 2) },\n      { name: 'gibibytes/sec', id: 'GiBs', fn: binaryPrefix('B/s', 3) },\n      { name: 'gibibits/sec', id: 'Gibits', fn: binaryPrefix('b/s', 3) },\n      { name: 'gigabytes/sec', id: 'GBs', fn: SIPrefix('B/s', 3) },\n      { name: 'gigabits/sec', id: 'Gbits', fn: SIPrefix('b/s', 3) },\n      { name: 'tebibytes/sec', id: 'TiBs', fn: binaryPrefix('B/s', 4) },\n      { name: 'tebibits/sec', id: 'Tibits', fn: binaryPrefix('b/s', 4) },\n      { name: 'terabytes/sec', id: 'TBs', fn: SIPrefix('B/s', 4) },\n      { name: 'terabits/sec', id: 'Tbits', fn: SIPrefix('b/s', 4) },\n      { name: 'pebibytes/sec', id: 'PiBs', fn: binaryPrefix('B/s', 5) },\n      { name: 'pebibits/sec', id: 'Pibits', fn: binaryPrefix('b/s', 5) },\n      { name: 'petabytes/sec', id: 'PBs', fn: SIPrefix('B/s', 5) },\n      { name: 'petabits/sec', id: 'Pbits', fn: SIPrefix('b/s', 5) },\n    ],\n  },\n  {\n    name: 'Date & time',\n    formats: [\n      { name: 'Datetime ISO', id: 'dateTimeAsIso', fn: dateTimeAsIso },\n      { name: 'Datetime ISO (No date if today)', id: 'dateTimeAsIsoNoDateIfToday', fn: dateTimeAsIsoNoDateIfToday },\n      { name: 'Datetime US', id: 'dateTimeAsUS', fn: dateTimeAsUS },\n      { name: 'Datetime US (No date if today)', id: 'dateTimeAsUSNoDateIfToday', fn: dateTimeAsUSNoDateIfToday },\n      { name: 'Datetime local', id: 'dateTimeAsLocal', fn: getDateTimeAsLocalFormat() },\n      {\n        name: 'Datetime local (No date if today)',\n        id: 'dateTimeAsLocalNoDateIfToday',\n        fn: getDateTimeAsLocalFormatNoDateIfToday(),\n      },\n      { name: 'Datetime default', id: 'dateTimeAsSystem', fn: dateTimeSystemFormatter },\n      { name: 'From Now', id: 'dateTimeFromNow', fn: dateTimeFromNow },\n    ],\n  },\n  {\n    name: 'Energy',\n    formats: [\n      { name: 'Watt (W)', id: 'watt', fn: SIPrefix('W') },\n      { name: 'Kilowatt (kW)', id: 'kwatt', fn: SIPrefix('W', 1) },\n      { name: 'Megawatt (MW)', id: 'megwatt', fn: SIPrefix('W', 2) },\n      { name: 'Gigawatt (GW)', id: 'gwatt', fn: SIPrefix('W', 3) },\n      { name: 'Milliwatt (mW)', id: 'mwatt', fn: SIPrefix('W', -1) },\n      { name: 'Watt per square meter (W/m²)', id: 'Wm2', fn: SIPrefix('W/m²') },\n      { name: 'Volt-Ampere (VA)', id: 'voltamp', fn: SIPrefix('VA') },\n      { name: 'Kilovolt-Ampere (kVA)', id: 'kvoltamp', fn: SIPrefix('VA', 1) },\n      { name: 'Volt-Ampere reactive (VAr)', id: 'voltampreact', fn: SIPrefix('VAr') },\n      { name: 'Kilovolt-Ampere reactive (kVAr)', id: 'kvoltampreact', fn: SIPrefix('VAr', 1) },\n      { name: 'Watt-hour (Wh)', id: 'watth', fn: SIPrefix('Wh') },\n      { name: 'Watt-hour per Kilogram (Wh/kg)', id: 'watthperkg', fn: SIPrefix('Wh/kg') },\n      { name: 'Kilowatt-hour (kWh)', id: 'kwatth', fn: SIPrefix('Wh', 1) },\n      { name: 'Kilowatt-min (kWm)', id: 'kwattm', fn: SIPrefix('W-Min', 1) },\n      { name: 'Megawatt-hour (MWh)', id: 'mwatth', fn: SIPrefix('Wh', 2) },\n      { name: 'Ampere-hour (Ah)', id: 'amph', fn: SIPrefix('Ah') },\n      { name: 'Kiloampere-hour (kAh)', id: 'kamph', fn: SIPrefix('Ah', 1) },\n      { name: 'Milliampere-hour (mAh)', id: 'mamph', fn: SIPrefix('Ah', -1) },\n      { name: 'Joule (J)', id: 'joule', fn: SIPrefix('J') },\n      { name: 'Electron volt (eV)', id: 'ev', fn: SIPrefix('eV') },\n      { name: 'Ampere (A)', id: 'amp', fn: SIPrefix('A') },\n      { name: 'Kiloampere (kA)', id: 'kamp', fn: SIPrefix('A', 1) },\n      { name: 'Milliampere (mA)', id: 'mamp', fn: SIPrefix('A', -1) },\n      { name: 'Volt (V)', id: 'volt', fn: SIPrefix('V') },\n      { name: 'Kilovolt (kV)', id: 'kvolt', fn: SIPrefix('V', 1) },\n      { name: 'Millivolt (mV)', id: 'mvolt', fn: SIPrefix('V', -1) },\n      { name: 'Decibel-milliwatt (dBm)', id: 'dBm', fn: SIPrefix('dBm') },\n      { name: 'Milliohm (mΩ)', id: 'mohm', fn: SIPrefix('Ω', -1) },\n      { name: 'Ohm (Ω)', id: 'ohm', fn: SIPrefix('Ω') },\n      { name: 'Kiloohm (kΩ)', id: 'kohm', fn: SIPrefix('Ω', 1) },\n      { name: 'Megaohm (MΩ)', id: 'Mohm', fn: SIPrefix('Ω', 2) },\n      { name: 'Farad (F)', id: 'farad', fn: SIPrefix('F') },\n      { name: 'Microfarad (µF)', id: 'µfarad', fn: SIPrefix('F', -2) },\n      { name: 'Nanofarad (nF)', id: 'nfarad', fn: SIPrefix('F', -3) },\n      { name: 'Picofarad (pF)', id: 'pfarad', fn: SIPrefix('F', -4) },\n      { name: 'Femtofarad (fF)', id: 'ffarad', fn: SIPrefix('F', -5) },\n      { name: 'Henry (H)', id: 'henry', fn: SIPrefix('H') },\n      { name: 'Millihenry (mH)', id: 'mhenry', fn: SIPrefix('H', -1) },\n      { name: 'Microhenry (µH)', id: 'µhenry', fn: SIPrefix('H', -2) },\n      { name: 'Lumens (Lm)', id: 'lumens', fn: SIPrefix('Lm') },\n    ],\n  },\n  {\n    name: 'Flow',\n    formats: [\n      { name: 'Gallons/min (gpm)', id: 'flowgpm', fn: toFixedUnit('gpm') },\n      { name: 'Cubic meters/sec (cms)', id: 'flowcms', fn: toFixedUnit('cms') },\n      { name: 'Cubic feet/sec (cfs)', id: 'flowcfs', fn: toFixedUnit('cfs') },\n      { name: 'Cubic feet/min (cfm)', id: 'flowcfm', fn: toFixedUnit('cfm') },\n      { name: 'Litre/hour', id: 'litreh', fn: toFixedUnit('L/h') },\n      { name: 'Litre/min (L/min)', id: 'flowlpm', fn: toFixedUnit('L/min') },\n      { name: 'milliLitre/min (mL/min)', id: 'flowmlpm', fn: toFixedUnit('mL/min') },\n      { name: 'Lux (lx)', id: 'lux', fn: toFixedUnit('lux') },\n    ],\n  },\n  {\n    name: 'Force',\n    formats: [\n      { name: 'Newton-meters (Nm)', id: 'forceNm', fn: SIPrefix('Nm') },\n      { name: 'Kilonewton-meters (kNm)', id: 'forcekNm', fn: SIPrefix('Nm', 1) },\n      { name: 'Newtons (N)', id: 'forceN', fn: SIPrefix('N') },\n      { name: 'Kilonewtons (kN)', id: 'forcekN', fn: SIPrefix('N', 1) },\n    ],\n  },\n  {\n    name: 'Hash rate',\n    formats: [\n      { name: 'hashes/sec', id: 'Hs', fn: SIPrefix('H/s') },\n      { name: 'kilohashes/sec', id: 'KHs', fn: SIPrefix('H/s', 1) },\n      { name: 'megahashes/sec', id: 'MHs', fn: SIPrefix('H/s', 2) },\n      { name: 'gigahashes/sec', id: 'GHs', fn: SIPrefix('H/s', 3) },\n      { name: 'terahashes/sec', id: 'THs', fn: SIPrefix('H/s', 4) },\n      { name: 'petahashes/sec', id: 'PHs', fn: SIPrefix('H/s', 5) },\n      { name: 'exahashes/sec', id: 'EHs', fn: SIPrefix('H/s', 6) },\n    ],\n  },\n  {\n    name: 'Mass',\n    formats: [\n      { name: 'milligram (mg)', id: 'massmg', fn: SIPrefix('g', -1) },\n      { name: 'gram (g)', id: 'massg', fn: SIPrefix('g') },\n      { name: 'pound (lb)', id: 'masslb', fn: toFixedUnit('lb') },\n      { name: 'kilogram (kg)', id: 'masskg', fn: SIPrefix('g', 1) },\n      { name: 'metric ton (t)', id: 'masst', fn: toFixedUnit('t') },\n    ],\n  },\n  {\n    name: 'Length',\n    formats: [\n      { name: 'millimeter (mm)', id: 'lengthmm', fn: SIPrefix('m', -1) },\n      { name: 'inch (in)', id: 'lengthin', fn: toFixedUnit('in') },\n      { name: 'feet (ft)', id: 'lengthft', fn: toFixedUnit('ft') },\n      { name: 'meter (m)', id: 'lengthm', fn: SIPrefix('m') },\n      { name: 'kilometer (km)', id: 'lengthkm', fn: SIPrefix('m', 1) },\n      { name: 'mile (mi)', id: 'lengthmi', fn: toFixedUnit('mi') },\n    ],\n  },\n  {\n    name: 'Pressure',\n    formats: [\n      { name: 'Millibars', id: 'pressurembar', fn: SIPrefix('bar', -1) },\n      { name: 'Bars', id: 'pressurebar', fn: SIPrefix('bar') },\n      { name: 'Kilobars', id: 'pressurekbar', fn: SIPrefix('bar', 1) },\n      { name: 'Pascals', id: 'pressurepa', fn: SIPrefix('Pa') },\n      { name: 'Hectopascals', id: 'pressurehpa', fn: toFixedUnit('hPa') },\n      { name: 'Kilopascals', id: 'pressurekpa', fn: toFixedUnit('kPa') },\n      { name: 'Inches of mercury', id: 'pressurehg', fn: toFixedUnit('\"Hg') },\n      { name: 'PSI', id: 'pressurepsi', fn: scaledUnits(1000, ['psi', 'ksi', 'Mpsi']) },\n    ],\n  },\n  {\n    name: 'Radiation',\n    formats: [\n      { name: 'Becquerel (Bq)', id: 'radbq', fn: SIPrefix('Bq') },\n      { name: 'curie (Ci)', id: 'radci', fn: SIPrefix('Ci') },\n      { name: 'Gray (Gy)', id: 'radgy', fn: SIPrefix('Gy') },\n      { name: 'rad', id: 'radrad', fn: SIPrefix('rad') },\n      { name: 'Sievert (Sv)', id: 'radsv', fn: SIPrefix('Sv') },\n      { name: 'milliSievert (mSv)', id: 'radmsv', fn: SIPrefix('Sv', -1) },\n      { name: 'microSievert (µSv)', id: 'radusv', fn: SIPrefix('Sv', -2) },\n      { name: 'rem', id: 'radrem', fn: SIPrefix('rem') },\n      { name: 'Exposure (C/kg)', id: 'radexpckg', fn: SIPrefix('C/kg') },\n      { name: 'roentgen (R)', id: 'radr', fn: SIPrefix('R') },\n      { name: 'Sievert/hour (Sv/h)', id: 'radsvh', fn: SIPrefix('Sv/h') },\n      { name: 'milliSievert/hour (mSv/h)', id: 'radmsvh', fn: SIPrefix('Sv/h', -1) },\n      { name: 'microSievert/hour (µSv/h)', id: 'radusvh', fn: SIPrefix('Sv/h', -2) },\n    ],\n  },\n  {\n    name: 'Rotational Speed',\n    formats: [\n      { name: 'Revolutions per minute (rpm)', id: 'rotrpm', fn: toFixedUnit('rpm') },\n      { name: 'Hertz (Hz)', id: 'rothz', fn: SIPrefix('Hz') },\n      { name: 'Kilohertz (kHz)', id: 'rotkhz', fn: SIPrefix('Hz', 1) },\n      { name: 'Megahertz (MHz)', id: 'rotmhz', fn: SIPrefix('Hz', 2) },\n      { name: 'Gigahertz (GHz)', id: 'rotghz', fn: SIPrefix('Hz', 3) },\n      { name: 'Radians per second (rad/s)', id: 'rotrads', fn: toFixedUnit('rad/s') },\n      { name: 'Degrees per second (°/s)', id: 'rotdegs', fn: toFixedUnit('°/s') },\n    ],\n  },\n  {\n    name: 'Temperature',\n    formats: [\n      { name: 'Celsius (°C)', id: 'celsius', fn: toFixedUnit('°C') },\n      { name: 'Fahrenheit (°F)', id: 'fahrenheit', fn: toFixedUnit('°F') },\n      { name: 'Kelvin (K)', id: 'kelvin', fn: toFixedUnit('K') },\n    ],\n  },\n  {\n    name: 'Time',\n    formats: [\n      { name: 'Hertz (1/s)', id: 'hertz', fn: SIPrefix('Hz') },\n      { name: 'nanoseconds (ns)', id: 'ns', fn: toNanoSeconds },\n      { name: 'microseconds (µs)', id: 'µs', fn: toMicroSeconds },\n      { name: 'milliseconds (ms)', id: 'ms', fn: toMilliSeconds },\n      { name: 'seconds (s)', id: 's', fn: toSeconds },\n      { name: 'minutes (m)', id: 'm', fn: toMinutes },\n      { name: 'hours (h)', id: 'h', fn: toHours },\n      { name: 'days (d)', id: 'd', fn: toDays },\n      { name: 'duration (ms)', id: 'dtdurationms', fn: toDurationInMilliseconds },\n      { name: 'duration (s)', id: 'dtdurations', fn: toDurationInSeconds },\n      { name: 'duration (hh:mm:ss)', id: 'dthms', fn: toDurationInHoursMinutesSeconds },\n      { name: 'duration (d hh:mm:ss)', id: 'dtdhms', fn: toDurationInDaysHoursMinutesSeconds },\n      { name: 'Timeticks (s/100)', id: 'timeticks', fn: toTimeTicks },\n      { name: 'clock (ms)', id: 'clockms', fn: toClockMilliseconds },\n      { name: 'clock (s)', id: 'clocks', fn: toClockSeconds },\n    ],\n  },\n  {\n    name: 'Throughput',\n    formats: [\n      { name: 'counts/sec (cps)', id: 'cps', fn: simpleCountUnit('c/s') },\n      { name: 'ops/sec (ops)', id: 'ops', fn: simpleCountUnit('ops/s') },\n      { name: 'requests/sec (rps)', id: 'reqps', fn: simpleCountUnit('req/s') },\n      { name: 'reads/sec (rps)', id: 'rps', fn: simpleCountUnit('rd/s') },\n      { name: 'writes/sec (wps)', id: 'wps', fn: simpleCountUnit('wr/s') },\n      { name: 'I/O ops/sec (iops)', id: 'iops', fn: simpleCountUnit('io/s') },\n      { name: 'events/sec (eps)', id: 'eps', fn: simpleCountUnit('evt/s') },\n      { name: 'messages/sec (mps)', id: 'mps', fn: simpleCountUnit('msg/s') },\n      { name: 'records/sec (rps)', id: 'recps', fn: simpleCountUnit('rec/s') },\n      { name: 'rows/sec (rps)', id: 'rowsps', fn: simpleCountUnit('rows/s') },\n      { name: 'counts/min (cpm)', id: 'cpm', fn: simpleCountUnit('c/m') },\n      { name: 'ops/min (opm)', id: 'opm', fn: simpleCountUnit('ops/m') },\n      { name: 'requests/min (rpm)', id: 'reqpm', fn: simpleCountUnit('req/m') },\n      { name: 'reads/min (rpm)', id: 'rpm', fn: simpleCountUnit('rd/m') },\n      { name: 'writes/min (wpm)', id: 'wpm', fn: simpleCountUnit('wr/m') },\n      { name: 'events/min (epm)', id: 'epm', fn: simpleCountUnit('evts/m') },\n      { name: 'messages/min (mpm)', id: 'mpm', fn: simpleCountUnit('msgs/m') },\n      { name: 'records/min (rpm)', id: 'recpm', fn: simpleCountUnit('rec/m') },\n      { name: 'rows/min (rpm)', id: 'rowspm', fn: simpleCountUnit('rows/m') },\n    ],\n  },\n  {\n    name: 'Velocity',\n    formats: [\n      { name: 'meters/second (m/s)', id: 'velocityms', fn: toFixedUnit('m/s') },\n      { name: 'kilometers/hour (km/h)', id: 'velocitykmh', fn: toFixedUnit('km/h') },\n      { name: 'miles/hour (mph)', id: 'velocitymph', fn: toFixedUnit('mph') },\n      { name: 'knot (kn)', id: 'velocityknot', fn: toFixedUnit('kn') },\n    ],\n  },\n  {\n    name: 'Volume',\n    formats: [\n      { name: 'millilitre (mL)', id: 'mlitre', fn: SIPrefix('L', -1) },\n      { name: 'litre (L)', id: 'litre', fn: SIPrefix('L') },\n      { name: 'cubic meter', id: 'm3', fn: toFixedUnit('m³') },\n      { name: 'Normal cubic meter', id: 'Nm3', fn: toFixedUnit('Nm³') },\n      { name: 'cubic decimeter', id: 'dm3', fn: toFixedUnit('dm³') },\n      { name: 'gallons', id: 'gallons', fn: toFixedUnit('gal') },\n    ],\n  },\n  {\n    name: 'Boolean',\n    formats: [\n      { name: 'True / False', id: 'bool', fn: booleanValueFormatter('True', 'False') },\n      { name: 'Yes / No', id: 'bool_yes_no', fn: booleanValueFormatter('Yes', 'No') },\n      { name: 'On / Off', id: 'bool_on_off', fn: booleanValueFormatter('On', 'Off') },\n    ],\n  },\n];\n","import { clamp } from 'lodash';\n\nimport { DecimalCount } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\n\nimport { getCategories } from './categories';\nimport { toDateTimeValueFormatter } from './dateTimeFormatters';\nimport { getOffsetFromSIPrefix, SIPrefix, currency } from './symbolFormatters';\n\nexport interface FormattedValue {\n  text: string;\n  prefix?: string;\n  suffix?: string;\n}\n\nexport function formattedValueToString(val: FormattedValue): string {\n  return `${val.prefix ?? ''}${val.text}${val.suffix ?? ''}`;\n}\n\nexport type ValueFormatter = (\n  value: number,\n  decimals?: DecimalCount,\n  scaledDecimals?: DecimalCount,\n  timeZone?: TimeZone,\n  showMs?: boolean\n) => FormattedValue;\n\nexport interface ValueFormat {\n  name: string;\n  id: string;\n  fn: ValueFormatter;\n}\n\nexport interface ValueFormatCategory {\n  name: string;\n  formats: ValueFormat[];\n}\n\nexport interface ValueFormatterIndex {\n  [id: string]: ValueFormatter;\n}\n\n// Globals & formats cache\nlet categories: ValueFormatCategory[] = [];\nconst index: ValueFormatterIndex = {};\nlet hasBuiltIndex = false;\n\nexport function toFixed(value: number, decimals?: DecimalCount): string {\n  if (value === null) {\n    return '';\n  }\n\n  if (value === Number.NEGATIVE_INFINITY || value === Number.POSITIVE_INFINITY) {\n    return value.toLocaleString();\n  }\n\n  if (decimals === null || decimals === undefined) {\n    decimals = getDecimalsForValue(value);\n  }\n\n  if (value === 0) {\n    return value.toFixed(decimals);\n  }\n\n  const factor = decimals ? Math.pow(10, Math.max(0, decimals)) : 1;\n  const formatted = String(Math.round(value * factor) / factor);\n\n  // if exponent return directly\n  if (formatted.indexOf('e') !== -1 || value === 0) {\n    return formatted;\n  }\n\n  const decimalPos = formatted.indexOf('.');\n  const precision = decimalPos === -1 ? 0 : formatted.length - decimalPos - 1;\n  if (precision < decimals) {\n    return (precision ? formatted : formatted + '.') + String(factor).slice(1, decimals - precision + 1);\n  }\n\n  return formatted;\n}\n\nfunction getDecimalsForValue(value: number): number {\n  const absValue = Math.abs(value);\n  const log10 = Math.floor(Math.log(absValue) / Math.LN10);\n  let dec = -log10 + 1;\n  const magn = Math.pow(10, -dec);\n  const norm = absValue / magn; // norm is between 1.0 and 10.0\n\n  // special case for 2.5, requires an extra decimal\n  if (norm > 2.25) {\n    ++dec;\n  }\n\n  if (value % 1 === 0) {\n    dec = 0;\n  }\n\n  const decimals = Math.max(0, dec);\n  return decimals;\n}\n\nexport function toFixedScaled(value: number, decimals: DecimalCount, ext?: string): FormattedValue {\n  return {\n    text: toFixed(value, decimals),\n    suffix: appendPluralIf(ext, Math.abs(value) > 1),\n  };\n}\n\nfunction appendPluralIf(ext: string | undefined, condition: boolean): string | undefined {\n  if (!condition) {\n    return ext;\n  }\n\n  switch (ext) {\n    case ' min':\n    case ' hour':\n    case ' day':\n    case ' week':\n    case ' year':\n      return `${ext}s`;\n    default:\n      return ext;\n  }\n}\n\nexport function toFixedUnit(unit: string, asPrefix?: boolean): ValueFormatter {\n  return (size: number, decimals?: DecimalCount) => {\n    if (size === null) {\n      return { text: '' };\n    }\n    const text = toFixed(size, decimals);\n    if (unit) {\n      if (asPrefix) {\n        return { text, prefix: unit };\n      }\n      return { text, suffix: ' ' + unit };\n    }\n    return { text };\n  };\n}\n\nexport function isBooleanUnit(unit?: string) {\n  return unit && unit.startsWith('bool');\n}\n\nexport function booleanValueFormatter(t: string, f: string): ValueFormatter {\n  return (value) => {\n    return { text: value ? t : f };\n  };\n}\n\nconst logb = (b: number, x: number) => Math.log10(x) / Math.log10(b);\n\nexport function scaledUnits(factor: number, extArray: string[], offset = 0): ValueFormatter {\n  return (size: number, decimals?: DecimalCount) => {\n    if (size === null || size === undefined) {\n      return { text: '' };\n    }\n\n    if (size === Number.NEGATIVE_INFINITY || size === Number.POSITIVE_INFINITY || isNaN(size)) {\n      return { text: size.toLocaleString() };\n    }\n\n    const siIndex = size === 0 ? 0 : Math.floor(logb(factor, Math.abs(size)));\n    const suffix = extArray[clamp(offset + siIndex, 0, extArray.length - 1)];\n\n    return {\n      text: toFixed(size / factor ** clamp(siIndex, -offset, extArray.length - offset - 1), decimals),\n      suffix,\n    };\n  };\n}\n\nexport function locale(value: number, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  return {\n    text: value.toLocaleString(undefined, { maximumFractionDigits: decimals ?? undefined }),\n  };\n}\n\nexport function simpleCountUnit(symbol: string): ValueFormatter {\n  const units = ['', 'K', 'M', 'B', 'T'];\n  const scaler = scaledUnits(1000, units);\n  return (size: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount) => {\n    if (size === null) {\n      return { text: '' };\n    }\n    const v = scaler(size, decimals, scaledDecimals);\n    v.suffix += ' ' + symbol;\n    return v;\n  };\n}\n\nexport function stringFormater(value: number): FormattedValue {\n  return { text: `${value}` };\n}\n\nfunction buildFormats() {\n  categories = getCategories();\n\n  for (const cat of categories) {\n    for (const format of cat.formats) {\n      index[format.id] = format.fn;\n    }\n  }\n\n  // Resolve units pointing to old IDs\n  [{ from: 'farenheit', to: 'fahrenheit' }].forEach((alias) => {\n    const f = index[alias.to];\n    if (f) {\n      index[alias.from] = f;\n    }\n  });\n\n  hasBuiltIndex = true;\n}\n\nexport function getValueFormat(id?: string | null): ValueFormatter {\n  if (!id) {\n    return toFixedUnit('');\n  }\n\n  if (!hasBuiltIndex) {\n    buildFormats();\n  }\n\n  const fmt = index[id];\n\n  if (!fmt && id) {\n    let idx = id.indexOf(':');\n\n    if (idx > 0) {\n      const key = id.substring(0, idx);\n      const sub = id.substring(idx + 1);\n\n      if (key === 'prefix') {\n        return toFixedUnit(sub, true);\n      }\n\n      if (key === 'suffix') {\n        return toFixedUnit(sub, false);\n      }\n\n      if (key === 'time') {\n        return toDateTimeValueFormatter(sub);\n      }\n\n      if (key === 'si') {\n        const offset = getOffsetFromSIPrefix(sub.charAt(0));\n        const unit = offset === 0 ? sub : sub.substring(1);\n        return SIPrefix(unit, offset);\n      }\n\n      if (key === 'count') {\n        return simpleCountUnit(sub);\n      }\n\n      if (key === 'currency') {\n        return currency(sub);\n      }\n\n      if (key === 'bool') {\n        idx = sub.indexOf('/');\n        if (idx >= 0) {\n          const t = sub.substring(0, idx);\n          const f = sub.substring(idx + 1);\n          return booleanValueFormatter(t, f);\n        }\n        return booleanValueFormatter(sub, '-');\n      }\n    }\n\n    return toFixedUnit(id);\n  }\n\n  return fmt;\n}\n\nexport function getValueFormatterIndex(): ValueFormatterIndex {\n  if (!hasBuiltIndex) {\n    buildFormats();\n  }\n\n  return index;\n}\n\nexport function getValueFormats() {\n  if (!hasBuiltIndex) {\n    buildFormats();\n  }\n\n  return categories.map((cat) => {\n    return {\n      text: cat.name,\n      submenu: cat.formats.map((format) => {\n        return {\n          text: format.name,\n          value: format.id,\n        };\n      }),\n    };\n  });\n}\n","import { gte, compare, valid } from 'semver';\n\nimport {\n  FunctionSelector,\n  Selectors,\n  SelectorsOf,\n  StringSelector,\n  VersionedSelectorGroup,\n  VersionedSelectors,\n  CssSelector,\n  UrlSelector,\n  FunctionSelectorTwoArgs,\n} from './types';\n\n/**\n * Resolves selectors based on the Grafana version\n */\nexport function resolveSelectors<T extends VersionedSelectorGroup>(\n  versionedSelectors: T,\n  grafanaVersion = 'latest'\n): SelectorsOf<T> {\n  const version = grafanaVersion.replace(/\\-.*/, '');\n\n  return resolveSelectorGroup(versionedSelectors, version);\n}\n\nfunction resolveSelectorGroup<T extends VersionedSelectorGroup>(group: T, grafanaVersion: string): SelectorsOf<T> {\n  const result: Selectors = {};\n\n  for (const [key, value] of Object.entries(group)) {\n    if (isVersionedSelectorGroup(value)) {\n      result[key] = resolveSelectorGroup(value, grafanaVersion);\n    } else {\n      assertIsSemverValid(value, key);\n      result[key] = resolveSelector(value, grafanaVersion);\n    }\n  }\n\n  return result as SelectorsOf<T>;\n}\n\nfunction isVersionedSelectorGroup(\n  target: VersionedSelectors | VersionedSelectorGroup\n): target is VersionedSelectorGroup {\n  if (typeof target === 'object') {\n    const [first] = Object.keys(target);\n    return !valid(first);\n  }\n\n  return false;\n}\n\nfunction resolveSelector(\n  versionedSelector: VersionedSelectors,\n  grafanaVersion: string\n): StringSelector | FunctionSelector | FunctionSelectorTwoArgs | CssSelector | UrlSelector {\n  let versionToUse;\n  let versions = Object.keys(versionedSelector).sort(compare);\n\n  if (grafanaVersion === 'latest') {\n    return versionedSelector[versions[versions.length - 1]];\n  }\n\n  for (const version of versions) {\n    if (gte(grafanaVersion, version)) {\n      versionToUse = version;\n    }\n  }\n\n  if (!versionToUse) {\n    versionToUse = versions[versions.length - 1];\n  }\n\n  return versionedSelector[versionToUse];\n}\n\nfunction assertIsSemverValid(versionedSelector: VersionedSelectors, selectorName: string) {\n  if (!Object.keys(versionedSelector).every((version) => valid(version))) {\n    throw new Error(`Invalid semver version: '${selectorName}'`);\n  }\n}\n","export const MIN_GRAFANA_VERSION = '8.5.0';\n","// NOTE: by default Component string selectors are set up to be aria-labels,\n// however there are many cases where your component may not need an aria-label\n// (a <button> with clear text, for example, does not need an aria-label as it's already labeled)\n// but you still might need to select it for testing,\n// in that case please add the attribute data-testid={selector} in the component and\n// prefix your selector string with 'data-testid' so that when create the selectors we know to search for it on the right attribute\n\nimport { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Components\n */\nexport const versionedComponents = {\n  RadioButton: {\n    container: {\n      '10.2.3': 'data-testid radio-button',\n    },\n  },\n  Breadcrumbs: {\n    breadcrumb: {\n      '9.4.0': (title: string) => `data-testid ${title} breadcrumb`,\n    },\n  },\n  TimePicker: {\n    openButton: {\n      [MIN_GRAFANA_VERSION]: 'data-testid TimePicker Open Button',\n    },\n    overlayContent: {\n      '10.2.3': 'data-testid TimePicker Overlay Content',\n    },\n    fromField: {\n      '10.2.3': 'data-testid Time Range from field',\n      [MIN_GRAFANA_VERSION]: 'Time Range from field',\n    },\n    toField: {\n      '10.2.3': 'data-testid Time Range to field',\n      [MIN_GRAFANA_VERSION]: 'Time Range to field',\n    },\n    applyTimeRange: {\n      [MIN_GRAFANA_VERSION]: 'data-testid TimePicker submit button',\n    },\n    copyTimeRange: {\n      '10.4.0': 'data-testid TimePicker copy button',\n    },\n    pasteTimeRange: {\n      '10.4.0': 'data-testid TimePicker paste button',\n    },\n    calendar: {\n      label: {\n        '10.2.3': 'data-testid Time Range calendar',\n        [MIN_GRAFANA_VERSION]: 'Time Range calendar',\n      },\n      openButton: {\n        '10.2.3': 'data-testid Open time range calendar',\n        [MIN_GRAFANA_VERSION]: 'Open time range calendar',\n      },\n      closeButton: {\n        '10.2.3': 'data-testid Close time range Calendar',\n        [MIN_GRAFANA_VERSION]: 'Close time range Calendar',\n      },\n    },\n    absoluteTimeRangeTitle: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-absolute-time-range-narrow',\n    },\n  },\n  DataSourcePermissions: {\n    form: { '9.5.0': () => 'form[name=\"addPermission\"]' },\n    roleType: {\n      '9.5.0': 'Role to add new permission to',\n    },\n    rolePicker: {\n      '9.5.0': 'Built-in role picker',\n    },\n    permissionLevel: {\n      '9.5.0': 'Permission Level',\n    },\n  },\n  DateTimePicker: {\n    input: {\n      '10.2.3': 'data-testid date-time-input',\n    },\n  },\n  DataSource: {\n    TestData: {\n      QueryTab: {\n        scenarioSelectContainer: {\n          [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select container',\n        },\n        scenarioSelect: {\n          [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select',\n        },\n        max: {\n          [MIN_GRAFANA_VERSION]: 'TestData max',\n        },\n        min: {\n          [MIN_GRAFANA_VERSION]: 'TestData min',\n        },\n        noise: {\n          [MIN_GRAFANA_VERSION]: 'TestData noise',\n        },\n        seriesCount: {\n          [MIN_GRAFANA_VERSION]: 'TestData series count',\n        },\n        spread: {\n          [MIN_GRAFANA_VERSION]: 'TestData spread',\n        },\n        startValue: {\n          [MIN_GRAFANA_VERSION]: 'TestData start value',\n        },\n        drop: {\n          [MIN_GRAFANA_VERSION]: 'TestData drop values',\n        },\n      },\n    },\n    DataSourceHttpSettings: {\n      urlInput: {\n        '10.4.0': 'data-testid Datasource HTTP settings url',\n        [MIN_GRAFANA_VERSION]: 'Datasource HTTP settings url',\n      },\n    },\n    Jaeger: {\n      traceIDInput: {\n        [MIN_GRAFANA_VERSION]: 'Trace ID',\n      },\n    },\n    Prometheus: {\n      configPage: {\n        connectionSettings: {\n          [MIN_GRAFANA_VERSION]: 'Data source connection URL', // aria-label in grafana experimental\n        },\n        manageAlerts: {\n          '10.4.0': 'prometheus-alerts-manager', // id for switch component\n        },\n        scrapeInterval: {\n          '10.4.0': 'data-testid scrape interval',\n        },\n        queryTimeout: {\n          '10.4.0': 'data-testid query timeout',\n        },\n        defaultEditor: {\n          '10.4.0': 'data-testid default editor',\n        },\n        disableMetricLookup: {\n          '10.4.0': 'disable-metric-lookup', // id for switch component\n        },\n        prometheusType: {\n          '10.4.0': 'data-testid prometheus type',\n        },\n        prometheusVersion: {\n          '10.4.0': 'data-testid prometheus version',\n        },\n        cacheLevel: {\n          '10.4.0': 'data-testid cache level',\n        },\n        incrementalQuerying: {\n          '10.4.0': 'prometheus-incremental-querying', // id for switch component\n        },\n        queryOverlapWindow: {\n          '10.4.0': 'data-testid query overlap window',\n        },\n        disableRecordingRules: {\n          '10.4.0': 'disable-recording-rules', // id for switch component\n        },\n        customQueryParameters: {\n          '10.4.0': 'data-testid custom query parameters',\n        },\n        httpMethod: {\n          '10.4.0': 'data-testid http method',\n        },\n        exemplarsAddButton: {\n          '10.3.0': 'data-testid Add exemplar config button',\n          [MIN_GRAFANA_VERSION]: 'Add exemplar config button',\n        },\n        internalLinkSwitch: {\n          '10.3.0': 'data-testid Internal link switch',\n          [MIN_GRAFANA_VERSION]: 'Internal link switch',\n        },\n        codeModeMetricNamesSuggestionLimit: {\n          '11.1.0': 'data-testid code mode metric names suggestion limit',\n        },\n      },\n      queryEditor: {\n        explain: {\n          '10.4.0': 'data-testid prometheus explain switch wrapper',\n        },\n        editorToggle: {\n          '10.4.0': 'data-testid QueryEditorModeToggle', // wrapper for toggle\n        },\n        options: {\n          '10.4.0': 'data-testid prometheus options', // wrapper for options group\n        },\n        legend: {\n          '10.4.0': 'data-testid prometheus legend wrapper', // wrapper for multiple compomnents\n        },\n        format: {\n          '10.4.0': 'data-testid prometheus format',\n        },\n        step: {\n          '10.4.0': 'prometheus-step', // id for autosize component\n        },\n        type: {\n          '10.4.0': 'data-testid prometheus type', //wrapper for radio button group\n        },\n        exemplars: {\n          '10.4.0': 'prometheus-exemplars', // id for editor switch component\n        },\n        builder: {\n          // see QueryBuilder below for commented selectors\n          metricSelect: {\n            '10.4.0': 'data-testid metric select',\n          },\n          hints: {\n            '10.4.0': 'data-testid prometheus hints', // wrapper for hints component\n          },\n          metricsExplorer: {\n            '10.4.0': 'data-testid metrics explorer',\n          },\n          queryAdvisor: {\n            '10.4.0': 'data-testid query advisor',\n          },\n        },\n        code: {\n          queryField: {\n            '10.4.0': 'data-testid prometheus query field',\n          },\n          metricsCountInfo: {\n            '11.1.0': 'data-testid metrics count disclaimer',\n          },\n          metricsBrowser: {\n            openButton: {\n              '10.4.0': 'data-testid open metrics browser',\n            },\n            selectMetric: {\n              '10.4.0': 'data-testid select a metric',\n            },\n            seriesLimit: {\n              '10.3.1': 'data-testid series limit',\n            },\n            metricList: {\n              '10.4.0': 'data-testid metric list',\n            },\n            labelNamesFilter: {\n              '10.4.0': 'data-testid label names filter',\n            },\n            labelValuesFilter: {\n              '10.4.0': 'data-testid label values filter',\n            },\n            useQuery: {\n              '10.4.0': 'data-testid use query',\n            },\n            useAsRateQuery: {\n              '10.4.0': 'data-testid use as rate query',\n            },\n            validateSelector: {\n              '10.4.0': 'data-testid validate selector',\n            },\n            clear: {\n              '10.4.0': 'data-testid clear',\n            },\n          },\n        },\n      },\n      exemplarMarker: {\n        '10.3.0': 'data-testid Exemplar marker',\n        [MIN_GRAFANA_VERSION]: 'Exemplar marker',\n      },\n      variableQueryEditor: {\n        queryType: {\n          '10.4.0': 'data-testid query type',\n        },\n        labelnames: {\n          metricRegex: {\n            '10.4.0': 'data-testid label names metric regex',\n          },\n        },\n        labelValues: {\n          labelSelect: {\n            '10.4.0': 'data-testid label values label select',\n          },\n        },\n        metricNames: {\n          metricRegex: {\n            '10.4.0': 'data-testid metric names metric regex',\n          },\n        },\n        varQueryResult: {\n          '10.4.0': 'data-testid variable query result',\n        },\n        seriesQuery: {\n          '10.4.0': 'data-testid prometheus series query',\n        },\n        classicQuery: {\n          '10.4.0': 'data-testid prometheus classic query',\n        },\n      },\n      annotations: {\n        minStep: {\n          '10.4.0': 'prometheus-annotation-min-step', // id for autosize input\n        },\n        title: {\n          '10.4.0': 'data-testid prometheus annotation title',\n        },\n        tags: {\n          '10.4.0': 'data-testid prometheus annotation tags',\n        },\n        text: {\n          '10.4.0': 'data-testid prometheus annotation text',\n        },\n        seriesValueAsTimestamp: {\n          '10.4.0': 'data-testid prometheus annotation series value as timestamp',\n        },\n      },\n    },\n  },\n  Menu: {\n    MenuComponent: {\n      [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu`,\n    },\n    MenuGroup: {\n      [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu group`,\n    },\n    MenuItem: {\n      [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu item`,\n    },\n    SubMenu: {\n      container: {\n        '10.3.0': 'data-testid SubMenu container',\n        [MIN_GRAFANA_VERSION]: 'SubMenu container',\n      },\n      icon: {\n        '10.3.0': 'data-testid SubMenu icon',\n        [MIN_GRAFANA_VERSION]: 'SubMenu icon',\n      },\n    },\n  },\n  Panels: {\n    Panel: {\n      title: {\n        [MIN_GRAFANA_VERSION]: (title: string) => `data-testid Panel header ${title}`,\n      },\n      content: {\n        '11.1.0': 'data-testid panel content',\n      },\n      headerItems: {\n        '10.2.0': (item: string) => `data-testid Panel header item ${item}`,\n      },\n      menuItems: {\n        '9.5.0': (item: string) => `data-testid Panel menu item ${item}`,\n      },\n      menu: {\n        '9.5.0': (title: string) => `data-testid Panel menu ${title}`,\n      },\n      containerByTitle: {\n        [MIN_GRAFANA_VERSION]: (title: string) => `${title} panel`,\n      },\n      headerCornerInfo: {\n        [MIN_GRAFANA_VERSION]: (mode: string) => `Panel header ${mode}`,\n      },\n      status: {\n        '10.2.0': (status: string) => `data-testid Panel status ${status}`,\n        [MIN_GRAFANA_VERSION]: (_: string) => 'Panel status',\n      },\n      loadingBar: {\n        '10.0.0': () => `Panel loading bar`,\n      },\n      HoverWidget: {\n        container: {\n          '10.1.0': 'data-testid hover-header-container',\n          [MIN_GRAFANA_VERSION]: 'hover-header-container',\n        },\n        dragIcon: {\n          '10.0.0': 'data-testid drag-icon',\n        },\n      },\n      PanelDataErrorMessage: {\n        '10.4.0': 'data-testid Panel data error message',\n      },\n    },\n    Visualization: {\n      Graph: {\n        container: {\n          '9.5.0': 'Graph container',\n        },\n        VisualizationTab: {\n          legendSection: {\n            [MIN_GRAFANA_VERSION]: 'Legend section',\n          },\n        },\n        Legend: {\n          legendItemAlias: {\n            [MIN_GRAFANA_VERSION]: (name: string) => `gpl alias ${name}`,\n          },\n          showLegendSwitch: {\n            [MIN_GRAFANA_VERSION]: 'gpl show legend',\n          },\n        },\n        xAxis: {\n          labels: {\n            [MIN_GRAFANA_VERSION]: () => 'div.flot-x-axis > div.flot-tick-label',\n          },\n        },\n      },\n      BarGauge: {\n        valueV2: {\n          [MIN_GRAFANA_VERSION]: 'data-testid Bar gauge value',\n        },\n      },\n      PieChart: {\n        svgSlice: {\n          '10.3.0': 'data testid Pie Chart Slice',\n        },\n      },\n      Text: {\n        container: { [MIN_GRAFANA_VERSION]: () => '.markdown-html' },\n      },\n      Table: {\n        header: {\n          [MIN_GRAFANA_VERSION]: 'table header',\n        },\n        footer: {\n          [MIN_GRAFANA_VERSION]: 'table-footer',\n        },\n        body: {\n          '10.2.0': 'data-testid table body',\n        },\n      },\n    },\n  },\n  VizLegend: {\n    seriesName: {\n      '10.3.0': (name: string) => `data-testid VizLegend series ${name}`,\n    },\n  },\n  Drawer: {\n    General: {\n      title: {\n        [MIN_GRAFANA_VERSION]: (title: string) => `Drawer title ${title}`,\n      },\n      expand: {\n        [MIN_GRAFANA_VERSION]: 'Drawer expand',\n      },\n      contract: {\n        [MIN_GRAFANA_VERSION]: 'Drawer contract',\n      },\n      close: {\n        '10.3.0': 'data-testid Drawer close',\n        [MIN_GRAFANA_VERSION]: 'Drawer close',\n      },\n      rcContentWrapper: { '9.4.0': () => '.rc-drawer-content-wrapper' },\n      subtitle: {\n        '10.4.0': 'data-testid drawer subtitle',\n      },\n    },\n    DashboardSaveDrawer: {\n      saveButton: {\n        '11.1.0': 'data-testid Save dashboard drawer button',\n      },\n      saveAsButton: {\n        '11.1.0': 'data-testid Save as dashboard drawer button',\n      },\n      saveAsTitleInput: {\n        '11.1.0': 'Save dashboard title field',\n      },\n    },\n  },\n  PanelEditor: {\n    General: {\n      content: {\n        '11.1.0': 'data-testid Panel editor content',\n        '8.0.0': 'Panel editor content',\n      },\n    },\n    OptionsPane: {\n      content: {\n        '11.1.0': 'data-testid Panel editor option pane content',\n        [MIN_GRAFANA_VERSION]: 'Panel editor option pane content',\n      },\n      select: {\n        [MIN_GRAFANA_VERSION]: 'Panel editor option pane select',\n      },\n      fieldLabel: {\n        [MIN_GRAFANA_VERSION]: (type: string) => `${type} field property editor`,\n      },\n      fieldInput: {\n        '11.0.0': (title: string) => `data-testid Panel editor option pane field input ${title}`,\n      },\n    },\n    DataPane: {\n      content: {\n        '11.1.0': 'data-testid Panel editor data pane content',\n        [MIN_GRAFANA_VERSION]: 'Panel editor data pane content',\n      },\n    },\n    applyButton: {\n      '9.2.0': 'data-testid Apply changes and go back to dashboard',\n      '9.1.0': 'Apply changes and go back to dashboard',\n      '8.0.0': 'panel editor apply',\n    },\n    toggleVizPicker: {\n      '10.0.0': 'data-testid toggle-viz-picker',\n      '8.0.0': 'toggle-viz-picker',\n    },\n    toggleVizOptions: {\n      '10.1.0': 'data-testid toggle-viz-options',\n      [MIN_GRAFANA_VERSION]: 'toggle-viz-options',\n    },\n    toggleTableView: {\n      '11.1.0': 'data-testid toggle-table-view',\n      [MIN_GRAFANA_VERSION]: 'toggle-table-view',\n    },\n\n    // [Geomap] Map controls\n    showZoomField: {\n      '10.2.0': 'Map controls Show zoom control field property editor',\n    },\n    showAttributionField: {\n      '10.2.0': 'Map controls Show attribution field property editor',\n    },\n    showScaleField: {\n      '10.2.0': 'Map controls Show scale field property editor',\n    },\n    showMeasureField: {\n      '10.2.0': 'Map controls Show measure tools field property editor',\n    },\n    showDebugField: {\n      '10.2.0': 'Map controls Show debug field property editor',\n    },\n\n    measureButton: {\n      '9.2.0': 'show measure tools',\n    },\n  },\n  PanelInspector: {\n    Data: {\n      content: {\n        [MIN_GRAFANA_VERSION]: 'Panel inspector Data content',\n      },\n    },\n    Stats: {\n      content: {\n        [MIN_GRAFANA_VERSION]: 'Panel inspector Stats content',\n      },\n    },\n    Json: {\n      content: {\n        '11.1.0': 'data-testid Panel inspector Json content',\n        [MIN_GRAFANA_VERSION]: 'Panel inspector Json content',\n      },\n    },\n    Query: {\n      content: {\n        [MIN_GRAFANA_VERSION]: 'Panel inspector Query content',\n      },\n      refreshButton: {\n        [MIN_GRAFANA_VERSION]: 'Panel inspector Query refresh button',\n      },\n      jsonObjectKeys: {\n        [MIN_GRAFANA_VERSION]: () => '.json-formatter-key',\n      },\n    },\n  },\n  Tab: {\n    title: {\n      '11.2.0': (title: string) => `data-testid Tab ${title}`,\n    },\n    active: { [MIN_GRAFANA_VERSION]: () => '[class*=\"-activeTabStyle\"]' },\n  },\n  RefreshPicker: {\n    runButtonV2: {\n      [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker run button',\n    },\n    intervalButtonV2: {\n      [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker interval button',\n    },\n  },\n  QueryTab: {\n    content: {\n      [MIN_GRAFANA_VERSION]: 'Query editor tab content',\n    },\n    queryInspectorButton: {\n      [MIN_GRAFANA_VERSION]: 'Query inspector button',\n    },\n    queryHistoryButton: {\n      '10.2.0': 'data-testid query-history-button',\n      [MIN_GRAFANA_VERSION]: 'query-history-button',\n    },\n    addQuery: {\n      '10.2.0': 'data-testid query-tab-add-query',\n      [MIN_GRAFANA_VERSION]: 'Query editor add query button',\n    },\n    queryGroupTopSection: {\n      '11.2.0': 'data-testid query group top section',\n    },\n    addExpression: {\n      '11.2.0': 'data-testid query-tab-add-expression',\n    },\n  },\n  QueryHistory: {\n    queryText: {\n      '9.0.0': 'Query text',\n    },\n  },\n  QueryEditorRows: {\n    rows: {\n      [MIN_GRAFANA_VERSION]: 'Query editor row',\n    },\n  },\n  QueryEditorRow: {\n    actionButton: {\n      '10.4.0': (title: string) => `data-testid ${title}`,\n    },\n    title: {\n      [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row title ${refId}`,\n    },\n    container: {\n      [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row ${refId}`,\n    },\n  },\n  AlertTab: {\n    content: {\n      '10.2.3': 'data-testid Alert editor tab content',\n      [MIN_GRAFANA_VERSION]: 'Alert editor tab content',\n    },\n  },\n  AlertRules: {\n    groupToggle: {\n      '11.0.0': 'data-testid group-collapse-toggle',\n    },\n    toggle: {\n      '11.0.0': 'data-testid collapse-toggle',\n    },\n    expandedContent: {\n      '11.0.0': 'data-testid expanded-content',\n    },\n    previewButton: {\n      '11.1.0': 'data-testid alert-rule preview-button',\n    },\n    ruleNameField: {\n      '11.1.0': 'data-testid alert-rule name-field',\n    },\n    newFolderButton: {\n      '11.1.0': 'data-testid alert-rule new-folder-button',\n    },\n    newFolderNameField: {\n      '11.1.0': 'data-testid alert-rule name-folder-name-field',\n    },\n    newFolderNameCreateButton: {\n      '11.1.0': 'data-testid alert-rule name-folder-name-create-button',\n    },\n    newEvaluationGroupButton: {\n      '11.1.0': 'data-testid alert-rule new-evaluation-group-button',\n    },\n    newEvaluationGroupName: {\n      '11.1.0': 'data-testid alert-rule new-evaluation-group-name',\n    },\n    newEvaluationGroupInterval: {\n      '11.1.0': 'data-testid alert-rule new-evaluation-group-interval',\n    },\n    newEvaluationGroupCreate: {\n      '11.1.0': 'data-testid alert-rule new-evaluation-group-create-button',\n    },\n    step: {\n      '11.5.0': (stepNo: string) => `data-testid alert-rule step-${stepNo}`,\n    },\n    stepAdvancedModeSwitch: {\n      '11.5.0': (stepNo: string) => `data-testid advanced-mode-switch step-${stepNo}`,\n    },\n  },\n  Alert: {\n    alertV2: {\n      [MIN_GRAFANA_VERSION]: (severity: string) => `data-testid Alert ${severity}`,\n    },\n  },\n  TransformTab: {\n    content: {\n      '10.1.0': 'data-testid Transform editor tab content',\n      [MIN_GRAFANA_VERSION]: 'Transform editor tab content',\n    },\n    newTransform: {\n      '10.1.0': (name: string) => `data-testid New transform ${name}`,\n    },\n    transformationEditor: {\n      '10.1.0': (name: string) => `data-testid Transformation editor ${name}`,\n    },\n    transformationEditorDebugger: {\n      '10.1.0': (name: string) => `data-testid Transformation editor debugger ${name}`,\n    },\n  },\n  Transforms: {\n    card: {\n      '10.1.0': (name: string) => `data-testid New transform ${name}`,\n    },\n    disableTransformationButton: {\n      '10.4.0': 'data-testid Disable transformation button',\n    },\n    Reduce: {\n      modeLabel: {\n        '10.2.3': 'data-testid Transform mode label',\n        [MIN_GRAFANA_VERSION]: 'Transform mode label',\n      },\n      calculationsLabel: {\n        '10.2.3': 'data-testid Transform calculations label',\n        [MIN_GRAFANA_VERSION]: 'Transform calculations label',\n      },\n    },\n    SpatialOperations: {\n      actionLabel: {\n        '9.1.2': 'root Action field property editor',\n      },\n      locationLabel: {\n        '10.2.0': 'root Location Mode field property editor',\n      },\n      location: {\n        autoOption: {\n          '9.1.2': 'Auto location option',\n        },\n        coords: {\n          option: {\n            '9.1.2': 'Coords location option',\n          },\n          latitudeFieldLabel: {\n            '9.1.2': 'root Latitude field field property editor',\n          },\n          longitudeFieldLabel: {\n            '9.1.2': 'root Longitude field field property editor',\n          },\n        },\n        geohash: {\n          option: {\n            '9.1.2': 'Geohash location option',\n          },\n          geohashFieldLabel: {\n            '9.1.2': 'root Geohash field field property editor',\n          },\n        },\n        lookup: {\n          option: {\n            '9.1.2': 'Lookup location option',\n          },\n          lookupFieldLabel: {\n            '9.1.2': 'root Lookup field field property editor',\n          },\n          gazetteerFieldLabel: {\n            '9.1.2': 'root Gazetteer field property editor',\n          },\n        },\n      },\n    },\n    searchInput: {\n      '10.2.3': 'data-testid search transformations',\n      [MIN_GRAFANA_VERSION]: 'search transformations',\n    },\n    noTransformationsMessage: {\n      '10.2.3': 'data-testid no transformations message',\n    },\n    addTransformationButton: {\n      '10.1.0': 'data-testid add transformation button',\n      [MIN_GRAFANA_VERSION]: 'add transformation button',\n    },\n    removeAllTransformationsButton: {\n      '10.4.0': 'data-testid remove all transformations button',\n    },\n  },\n  NavBar: {\n    Configuration: {\n      button: {\n        '9.5.0': 'Configuration',\n      },\n    },\n    Toggle: {\n      button: {\n        '10.2.3': 'data-testid Toggle menu',\n        [MIN_GRAFANA_VERSION]: 'Toggle menu',\n      },\n    },\n    Reporting: {\n      button: {\n        '9.5.0': 'Reporting',\n      },\n    },\n  },\n  NavMenu: {\n    Menu: {\n      '10.2.3': 'data-testid navigation mega-menu',\n    },\n    item: {\n      '9.5.0': 'data-testid Nav menu item',\n    },\n  },\n  NavToolbar: {\n    container: {\n      '9.4.0': 'data-testid Nav toolbar',\n    },\n    commandPaletteTrigger: {\n      '11.5.0': 'data-testid Command palette trigger',\n    },\n    shareDashboard: {\n      '11.1.0': 'data-testid Share dashboard',\n    },\n    markAsFavorite: {\n      '11.1.0': 'data-testid Mark as favorite',\n    },\n    editDashboard: {\n      editButton: {\n        '11.1.0': 'data-testid Edit dashboard button',\n      },\n      saveButton: {\n        '11.1.0': 'data-testid Save dashboard button',\n      },\n      exitButton: {\n        '11.1.0': 'data-testid Exit edit mode button',\n      },\n      settingsButton: {\n        '11.1.0': 'data-testid Dashboard settings',\n      },\n      addRowButton: {\n        '11.1.0': 'data-testid Add row button',\n      },\n      addLibraryPanelButton: {\n        '11.1.0': 'data-testid Add a panel from the panel library button',\n      },\n      addVisualizationButton: {\n        '11.1.0': 'data-testid Add new visualization menu item',\n      },\n      pastePanelButton: {\n        '11.1.0': 'data-testid Paste panel button',\n      },\n      discardChangesButton: {\n        '11.1.0': 'data-testid Discard changes button',\n      },\n      discardLibraryPanelButton: {\n        '11.1.0': 'data-testid Discard library panel button',\n      },\n      unlinkLibraryPanelButton: {\n        '11.1.0': 'data-testid Unlink library panel button',\n      },\n      saveLibraryPanelButton: {\n        '11.1.0': 'data-testid Save library panel button',\n      },\n      backToDashboardButton: {\n        '11.1.0': 'data-testid Back to dashboard button',\n      },\n    },\n  },\n\n  PageToolbar: {\n    container: { [MIN_GRAFANA_VERSION]: () => '.page-toolbar' },\n    item: {\n      [MIN_GRAFANA_VERSION]: (tooltip: string) => `${tooltip}`,\n    },\n    itemButton: {\n      '9.5.0': (title: string) => `data-testid ${title}`,\n    },\n  },\n  QueryEditorToolbarItem: {\n    button: {\n      [MIN_GRAFANA_VERSION]: (title: string) => `QueryEditor toolbar item button ${title}`,\n    },\n  },\n  BackButton: {\n    backArrow: {\n      '10.3.0': 'data-testid Go Back',\n      [MIN_GRAFANA_VERSION]: 'Go Back',\n    },\n  },\n  OptionsGroup: {\n    group: {\n      '11.1.0': (title?: string) => (title ? `data-testid Options group ${title}` : 'data-testid Options group'),\n      [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title}` : 'Options group'),\n    },\n    toggle: {\n      '11.1.0': (title?: string) =>\n        title ? `data-testid Options group ${title} toggle` : 'data-testid Options group toggle',\n      [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title} toggle` : 'Options group toggle'),\n    },\n  },\n  PluginVisualization: {\n    item: {\n      [MIN_GRAFANA_VERSION]: (title: string) => `Plugin visualization item ${title}`,\n    },\n    current: {\n      [MIN_GRAFANA_VERSION]: () => '[class*=\"-currentVisualizationItem\"]',\n    },\n  },\n  Select: {\n    menu: {\n      '11.5.0': 'data-testid Select menu',\n      [MIN_GRAFANA_VERSION]: 'Select options menu',\n    },\n    option: {\n      '11.1.0': 'data-testid Select option',\n      [MIN_GRAFANA_VERSION]: 'Select option',\n    },\n    toggleAllOptions: {\n      '11.3.0': 'data-testid toggle all options',\n    },\n    input: {\n      [MIN_GRAFANA_VERSION]: () => 'input[id*=\"time-options-input\"]',\n    },\n    singleValue: {\n      [MIN_GRAFANA_VERSION]: () => 'div[class*=\"-singleValue\"]',\n    },\n  },\n  FieldConfigEditor: {\n    content: {\n      [MIN_GRAFANA_VERSION]: 'Field config editor content',\n    },\n  },\n  OverridesConfigEditor: {\n    content: {\n      [MIN_GRAFANA_VERSION]: 'Field overrides editor content',\n    },\n  },\n  FolderPicker: {\n    containerV2: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Folder picker select container',\n    },\n    input: {\n      '10.4.0': 'data-testid folder-picker-input',\n    },\n  },\n  ReadonlyFolderPicker: {\n    container: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Readonly folder picker select container',\n    },\n  },\n  DataSourcePicker: {\n    container: {\n      '10.0.0': 'data-testid Data source picker select container',\n      '8.0.0': 'Data source picker select container',\n    },\n    inputV2: {\n      '10.1.0': 'data-testid Select a data source',\n      [MIN_GRAFANA_VERSION]: 'Select a data source',\n    },\n    dataSourceList: {\n      '10.4.0': 'data-testid Data source list dropdown',\n    },\n    advancedModal: {\n      dataSourceList: {\n        '10.4.0': 'data-testid Data source list',\n      },\n      builtInDataSourceList: {\n        '10.4.0': 'data-testid Built in data source list',\n      },\n    },\n  },\n  TimeZonePicker: {\n    containerV2: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Time zone picker select container',\n    },\n    changeTimeSettingsButton: {\n      '11.0.0': 'data-testid Time zone picker Change time settings button',\n    },\n  },\n  WeekStartPicker: {\n    containerV2: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Choose starting day of the week',\n    },\n    placeholder: {\n      [MIN_GRAFANA_VERSION]: 'Choose starting day of the week',\n    },\n  },\n  TraceViewer: {\n    spanBar: {\n      '9.0.0': 'data-testid SpanBar--wrapper',\n    },\n  },\n  QueryField: {\n    container: {\n      '10.3.0': 'data-testid Query field',\n      [MIN_GRAFANA_VERSION]: 'Query field',\n    },\n  },\n  QueryBuilder: {\n    queryPatterns: {\n      '10.3.0': 'data-testid Query patterns',\n      [MIN_GRAFANA_VERSION]: 'Query patterns',\n    },\n    labelSelect: {\n      '10.3.0': 'data-testid Select label',\n      [MIN_GRAFANA_VERSION]: 'Select label',\n    },\n    inputSelect: {\n      '11.1.0': 'data-testid Select label-input',\n    },\n    valueSelect: {\n      '10.3.0': 'data-testid Select value',\n      [MIN_GRAFANA_VERSION]: 'Select value',\n    },\n    matchOperatorSelect: {\n      '10.3.0': 'data-testid Select match operator',\n      [MIN_GRAFANA_VERSION]: 'Select match operator',\n    },\n  },\n  ValuePicker: {\n    button: {\n      '10.3.0': (name: string) => `data-testid Value picker button ${name}`,\n    },\n    select: {\n      '10.3.0': (name: string) => `data-testid Value picker select ${name}`,\n    },\n  },\n  Search: {\n    sectionV2: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Search section',\n    },\n    itemsV2: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Search items',\n    },\n    cards: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Search cards',\n    },\n    collapseFolder: {\n      [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Collapse folder ${sectionId}`,\n    },\n    expandFolder: {\n      [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Expand folder ${sectionId}`,\n    },\n    dashboardItem: {\n      [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard search item ${item}`,\n    },\n    dashboardCard: {\n      [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Search card ${item}`,\n    },\n    folderHeader: {\n      '9.3.0': (folderName: string) => `data-testid Folder header ${folderName}`,\n    },\n    folderContent: {\n      '9.3.0': (folderName: string) => `data-testid Folder content ${folderName}`,\n    },\n    dashboardItems: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Dashboard search item',\n    },\n  },\n  DashboardLinks: {\n    container: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link container',\n    },\n    dropDown: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link dropdown',\n    },\n    link: {\n      [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link',\n    },\n  },\n  LoadingIndicator: {\n    icon: {\n      '10.4.0': 'data-testid Loading indicator',\n      [MIN_GRAFANA_VERSION]: 'Loading indicator',\n    },\n  },\n  CallToActionCard: {\n    buttonV2: {\n      [MIN_GRAFANA_VERSION]: (name: string) => `data-testid Call to action button ${name}`,\n    },\n  },\n  DataLinksContextMenu: {\n    singleLink: {\n      '10.3.0': 'data-testid Data link',\n      [MIN_GRAFANA_VERSION]: 'Data link',\n    },\n  },\n  CodeEditor: {\n    container: {\n      '10.2.3': 'data-testid Code editor container',\n      [MIN_GRAFANA_VERSION]: 'Code editor container',\n    },\n  },\n  ReactMonacoEditor: {\n    editorLazy: {\n      '11.1.0': 'data-testid ReactMonacoEditor editorLazy',\n    },\n  },\n  DashboardImportPage: {\n    textarea: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-textarea',\n    },\n    submit: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-load-dashboard',\n    },\n  },\n  ImportDashboardForm: {\n    name: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-title',\n    },\n    submit: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-submit',\n    },\n  },\n  PanelAlertTabContent: {\n    content: {\n      '10.2.3': 'data-testid Unified alert editor tab content',\n      [MIN_GRAFANA_VERSION]: 'Unified alert editor tab content',\n    },\n  },\n  VisualizationPreview: {\n    card: {\n      [MIN_GRAFANA_VERSION]: (name: string) => `data-testid suggestion-${name}`,\n    },\n  },\n  ColorSwatch: {\n    name: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-colorswatch',\n    },\n  },\n  DashboardRow: {\n    title: {\n      [MIN_GRAFANA_VERSION]: (title: string) => `data-testid dashboard-row-title-${title}`,\n    },\n  },\n  UserProfile: {\n    profileSaveButton: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-user-profile-save',\n    },\n    preferencesSaveButton: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-shared-prefs-save',\n    },\n    orgsTable: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-user-orgs-table',\n    },\n    sessionsTable: {\n      [MIN_GRAFANA_VERSION]: 'data-testid-user-sessions-table',\n    },\n    extensionPointTabs: {\n      '10.2.3': 'data-testid-extension-point-tabs',\n    },\n    extensionPointTab: {\n      '10.2.3': (tabId: string) => `data-testid-extension-point-tab-${tabId}`,\n    },\n  },\n  FileUpload: {\n    inputField: {\n      '9.0.0': 'data-testid-file-upload-input-field',\n    },\n    fileNameSpan: {\n      '9.0.0': 'data-testid-file-upload-file-name',\n    },\n  },\n  DebugOverlay: {\n    wrapper: {\n      '9.2.0': 'debug-overlay',\n    },\n  },\n  OrgRolePicker: {\n    input: {\n      '9.5.0': 'Role',\n    },\n  },\n  AnalyticsToolbarButton: {\n    button: {\n      '9.5.0': 'Dashboard insights',\n    },\n  },\n  Variables: {\n    variableOption: {\n      '9.5.0': 'data-testid variable-option',\n    },\n    variableLinkWrapper: {\n      '11.1.1': 'data-testid variable-link-wrapper',\n    },\n  },\n  Annotations: {\n    annotationsTypeInput: {\n      '11.1.0': 'data-testid annotations-type-input',\n      [MIN_GRAFANA_VERSION]: 'annotations-type-input',\n    },\n    annotationsChoosePanelInput: {\n      '11.1.0': 'data-testid choose-panels-input',\n      [MIN_GRAFANA_VERSION]: 'choose-panels-input',\n    },\n    editor: {\n      testButton: {\n        '11.0.0': 'data-testid annotations-test-button',\n      },\n      resultContainer: {\n        '11.0.0': 'data-testid annotations-query-result-container',\n      },\n    },\n  },\n  Tooltip: {\n    container: {\n      '10.2.0': 'data-testid tooltip',\n    },\n  },\n  ReturnToPrevious: {\n    buttonGroup: {\n      '11.0.0': 'data-testid dismissable button group',\n    },\n    backButton: {\n      '11.0.0': 'data-testid back',\n    },\n    dismissButton: {\n      '11.0.0': 'data-testid dismiss',\n    },\n  },\n  SQLQueryEditor: {\n    selectColumn: {\n      '11.0.0': 'data-testid select-column',\n    },\n    selectColumnInput: { '11.0.0': 'data-testid select-column-input' },\n    selectFunctionParameter: { '11.0.0': (name: string) => `data-testid select-function-parameter-${name}` },\n    selectAggregation: {\n      '11.0.0': 'data-testid select-aggregation',\n    },\n    selectAggregationInput: { '11.0.0': 'data-testid select-aggregation-input' },\n    selectAlias: {\n      '11.0.0': 'data-testid select-alias',\n    },\n    selectAliasInput: { '11.0.0': 'data-testid select-alias-input' },\n    selectInputParameter: { '11.0.0': 'data-testid select-input-parameter' },\n    filterConjunction: {\n      '11.0.0': 'data-testid filter-conjunction',\n    },\n    filterField: {\n      '11.0.0': 'data-testid filter-field',\n    },\n    filterOperator: {\n      '11.0.0': 'data-testid filter-operator',\n    },\n    headerTableSelector: {\n      '11.0.0': 'data-testid header-table-selector',\n    },\n    headerFilterSwitch: {\n      '11.0.0': 'data-testid header-filter-switch',\n    },\n    headerGroupSwitch: {\n      '11.0.0': 'data-testid header-group-switch',\n    },\n    headerOrderSwitch: {\n      '11.0.0': 'data-testid header-order-switch',\n    },\n    headerPreviewSwitch: {\n      '11.0.0': 'data-testid header-preview-switch',\n    },\n  },\n  EntityNotFound: {\n    container: {\n      '11.2.0': 'data-testid entity-not-found',\n    },\n  },\n  Portal: {\n    container: {\n      '11.5.0': 'data-testid portal-container',\n    },\n  },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedComponents = typeof versionedComponents;\n","import { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Pages\n */\nexport const versionedPages = {\n  Alerting: {\n    AddAlertRule: {\n      url: {\n        '10.1.0': '/alerting/new/alerting',\n        [MIN_GRAFANA_VERSION]: '/alerting/new',\n      },\n    },\n    EditAlertRule: {\n      url: {\n        [MIN_GRAFANA_VERSION]: (alertRuleUid: string) => `alerting/${alertRuleUid}/edit`,\n      },\n    },\n  },\n  Login: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/login',\n    },\n    username: {\n      '10.2.3': 'data-testid Username input field',\n      [MIN_GRAFANA_VERSION]: 'Username input field',\n    },\n    password: {\n      '10.2.3': 'data-testid Password input field',\n      [MIN_GRAFANA_VERSION]: 'Password input field',\n    },\n    submit: {\n      '10.2.3': 'data-testid Login button',\n      [MIN_GRAFANA_VERSION]: 'Login button',\n    },\n    skip: {\n      '10.2.3': 'data-testid Skip change password button',\n    },\n  },\n  PasswordlessLogin: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/login/passwordless/authenticate',\n    },\n    email: {\n      '10.2.3': 'data-testid Email input field',\n      [MIN_GRAFANA_VERSION]: 'Email input field',\n    },\n    submit: {\n      '10.2.3': 'data-testid PasswordlessLogin button',\n      [MIN_GRAFANA_VERSION]: 'PasswordlessLogin button',\n    },\n  },\n  Home: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/',\n    },\n  },\n  DataSource: {\n    name: {\n      '10.3.0': 'data-testid Data source settings page name input field',\n      [MIN_GRAFANA_VERSION]: 'Data source settings page name input field',\n    },\n    delete: {\n      [MIN_GRAFANA_VERSION]: 'Data source settings page Delete button',\n    },\n    readOnly: {\n      '10.3.0': 'data-testid Data source settings page read only message',\n      [MIN_GRAFANA_VERSION]: 'Data source settings page read only message',\n    },\n    saveAndTest: {\n      '10.0.0': 'data-testid Data source settings page Save and Test button',\n      [MIN_GRAFANA_VERSION]: 'Data source settings page Save and Test button',\n    },\n    alert: {\n      '10.3.0': 'data-testid Data source settings page Alert',\n      [MIN_GRAFANA_VERSION]: 'Data source settings page Alert',\n    },\n  },\n  DataSources: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/datasources',\n    },\n    dataSources: {\n      [MIN_GRAFANA_VERSION]: (dataSourceName: string) => `Data source list item ${dataSourceName}`,\n    },\n  },\n  EditDataSource: {\n    url: {\n      '9.5.0': (dataSourceUid: string) => `/datasources/edit/${dataSourceUid}`,\n    },\n    settings: {\n      '9.5.0': 'Datasource settings page basic settings',\n    },\n  },\n  AddDataSource: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/datasources/new',\n    },\n    dataSourcePluginsV2: {\n      '9.3.1': (pluginName: string) => `Add new data source ${pluginName}`,\n      [MIN_GRAFANA_VERSION]: (pluginName: string) => `Data source plugin item ${pluginName}`,\n    },\n  },\n  ConfirmModal: {\n    delete: {\n      '10.0.0': 'data-testid Confirm Modal Danger Button',\n      [MIN_GRAFANA_VERSION]: 'Confirm Modal Danger Button',\n    },\n  },\n  AddDashboard: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/dashboard/new',\n    },\n    itemButton: {\n      '9.5.0': (title: string) => `data-testid ${title}`,\n    },\n    addNewPanel: {\n      '11.1.0': 'data-testid Add new panel',\n      '8.0.0': 'Add new panel',\n      [MIN_GRAFANA_VERSION]: 'Add new panel',\n    },\n    itemButtonAddViz: {\n      [MIN_GRAFANA_VERSION]: 'Add new visualization menu item',\n    },\n    addNewRow: {\n      '11.1.0': 'data-testid Add new row',\n      [MIN_GRAFANA_VERSION]: 'Add new row',\n    },\n    addNewPanelLibrary: {\n      '11.1.0': 'data-testid Add new panel from panel library',\n      [MIN_GRAFANA_VERSION]: 'Add new panel from panel library',\n    },\n    Settings: {\n      Annotations: {\n        List: {\n          url: {\n            [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=annotations',\n          },\n        },\n        Edit: {\n          url: {\n            [MIN_GRAFANA_VERSION]: (annotationIndex: string) =>\n              `/dashboard/new?editview=annotations&editIndex=${annotationIndex}`,\n          },\n        },\n      },\n      Variables: {\n        List: {\n          url: {\n            '11.3.0': '/dashboard/new?orgId=1&editview=variables',\n            [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=templating',\n          },\n        },\n        Edit: {\n          url: {\n            '11.3.0': (editIndex: string) => `/dashboard/new?orgId=1&editview=variables&editIndex=${editIndex}`,\n            [MIN_GRAFANA_VERSION]: (editIndex: string) =>\n              `/dashboard/new?orgId=1&editview=templating&editIndex=${editIndex}`,\n          },\n        },\n      },\n    },\n  },\n  Dashboard: {\n    url: {\n      [MIN_GRAFANA_VERSION]: (uid: string) => `/d/${uid}`,\n    },\n    DashNav: {\n      nav: {\n        [MIN_GRAFANA_VERSION]: 'Dashboard navigation',\n      },\n      navV2: {\n        [MIN_GRAFANA_VERSION]: 'data-testid Dashboard navigation',\n      },\n      publicDashboardTag: {\n        '9.1.0': 'data-testid public dashboard tag',\n      },\n      shareButton: {\n        '10.4.0': 'data-testid share-button',\n      },\n      scrollContainer: {\n        '11.1.0': 'data-testid Dashboard canvas scroll container',\n      },\n      newShareButton: {\n        container: {\n          '11.1.0': 'data-testid new share button',\n        },\n        shareLink: {\n          '11.1.0': 'data-testid new share link-button',\n        },\n        arrowMenu: {\n          '11.1.0': 'data-testid new share button arrow menu',\n        },\n        menu: {\n          container: {\n            '11.1.0': 'data-testid new share button menu',\n          },\n          shareInternally: {\n            '11.1.0': 'data-testid new share button share internally',\n          },\n          shareExternally: {\n            '11.1.1': 'data-testid new share button share externally',\n          },\n          shareSnapshot: {\n            '11.2.0': 'data-testid new share button share snapshot',\n          },\n        },\n      },\n      NewExportButton: {\n        container: {\n          '11.2.0': 'data-testid new export button',\n        },\n        arrowMenu: {\n          '11.2.0': 'data-testid new export button arrow menu',\n        },\n        Menu: {\n          container: {\n            '11.2.0': 'data-testid new export button menu',\n          },\n          exportAsJson: {\n            '11.2.0': 'data-testid new export button export as json',\n          },\n        },\n      },\n      playlistControls: {\n        prev: {\n          '11.0.0': 'data-testid playlist previous dashboard button',\n        },\n        stop: {\n          '11.0.0': 'data-testid playlist stop dashboard button',\n        },\n        next: {\n          '11.0.0': 'data-testid playlist next dashboard button',\n        },\n      },\n    },\n    Controls: {\n      '11.1.0': 'data-testid dashboard controls',\n    },\n    SubMenu: {\n      submenu: {\n        [MIN_GRAFANA_VERSION]: 'Dashboard submenu',\n      },\n      submenuItem: {\n        [MIN_GRAFANA_VERSION]: 'data-testid template variable',\n      },\n      submenuItemLabels: {\n        [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard template variables submenu Label ${item}`,\n      },\n      submenuItemValueDropDownValueLinkTexts: {\n        [MIN_GRAFANA_VERSION]: (item: string) =>\n          `data-testid Dashboard template variables Variable Value DropDown value link text ${item}`,\n      },\n      submenuItemValueDropDownDropDown: {\n        [MIN_GRAFANA_VERSION]: 'Variable options',\n      },\n      submenuItemValueDropDownOptionTexts: {\n        [MIN_GRAFANA_VERSION]: (item: string) =>\n          `data-testid Dashboard template variables Variable Value DropDown option text ${item}`,\n      },\n      Annotations: {\n        annotationsWrapper: {\n          '10.0.0': 'data-testid annotation-wrapper',\n        },\n        annotationLabel: {\n          '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Label ${label}`,\n        },\n        annotationToggle: {\n          '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Toggle ${label}`,\n        },\n      },\n    },\n    Settings: {\n      Actions: {\n        close: {\n          '9.5.0': 'data-testid dashboard-settings-close',\n        },\n      },\n      General: {\n        deleteDashBoard: {\n          '11.1.0': 'data-testid Dashboard settings page delete dashboard button',\n        },\n        sectionItems: {\n          [MIN_GRAFANA_VERSION]: (item: string) => `Dashboard settings section item ${item}`,\n        },\n        saveDashBoard: {\n          [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save button',\n        },\n        saveAsDashBoard: {\n          [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save As button',\n        },\n        title: {\n          '11.2.0': 'General',\n        },\n      },\n      Annotations: {\n        Edit: {\n          urlParams: {\n            [MIN_GRAFANA_VERSION]: (annotationIndex: string) => `editview=annotations&editIndex=${annotationIndex}`,\n          },\n        },\n        List: {\n          url: {\n            [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=annotations`,\n          },\n          addAnnotationCTAV2: {\n            [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add annotation query',\n          },\n          annotations: {\n            '10.4.0': 'data-testid list-annotations',\n          },\n        },\n        Settings: {\n          name: {\n            '11.1.0': 'data-testid Annotations settings name input',\n            [MIN_GRAFANA_VERSION]: 'Annotations settings name input',\n          },\n        },\n        NewAnnotation: {\n          panelFilterSelect: {\n            '10.0.0': 'data-testid annotations-panel-filter',\n          },\n          showInLabel: {\n            '11.1.0': 'data-testid show-in-label',\n          },\n          previewInDashboard: {\n            '10.0.0': 'data-testid annotations-preview',\n          },\n          delete: {\n            '10.4.0': 'data-testid annotations-delete',\n          },\n          apply: {\n            '10.4.0': 'data-testid annotations-apply',\n          },\n          enable: {\n            '10.4.0': 'data-testid annotation-enable',\n          },\n          hide: {\n            '10.4.0': 'data-testid annotation-hide',\n          },\n        },\n      },\n      Variables: {\n        List: {\n          url: {\n            '11.3.0': (dashboardUid: string) => `/d/${dashboardUid}?editview=variables`,\n            [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=templating`,\n          },\n          addVariableCTAV2: {\n            [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add variable',\n          },\n          newButton: {\n            [MIN_GRAFANA_VERSION]: 'Variable editor New variable button',\n          },\n          table: {\n            [MIN_GRAFANA_VERSION]: 'Variable editor Table',\n          },\n          tableRowNameFields: {\n            [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Name field ${variableName}`,\n          },\n          tableRowDefinitionFields: {\n            '10.1.0': (variableName: string) => `Variable editor Table Definition field ${variableName}`,\n          },\n          tableRowArrowUpButtons: {\n            [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowUp button ${variableName}`,\n          },\n          tableRowArrowDownButtons: {\n            [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowDown button ${variableName}`,\n          },\n          tableRowDuplicateButtons: {\n            [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Duplicate button ${variableName}`,\n          },\n          tableRowRemoveButtons: {\n            [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Remove button ${variableName}`,\n          },\n        },\n        Edit: {\n          urlParams: {\n            '11.3.0': (editIndex: string) => `editview=variables&editIndex=${editIndex}`,\n            [MIN_GRAFANA_VERSION]: (editIndex: string) => `editview=templating&editIndex=${editIndex}`,\n          },\n          General: {\n            headerLink: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Header link',\n            },\n            modeLabelNew: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Header mode New',\n            },\n            /**\n             * @deprecated\n             */\n            modeLabelEdit: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Header mode Edit',\n            },\n            generalNameInput: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Name field',\n            },\n            generalNameInputV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Name field',\n            },\n            generalTypeSelect: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Type select',\n            },\n            generalTypeSelectV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Type select',\n            },\n            generalLabelInput: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Label field',\n            },\n            generalLabelInputV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Label field',\n            },\n            generalHideSelect: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Hide select',\n            },\n            generalHideSelectV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Hide select',\n            },\n            selectionOptionsAllowCustomValueSwitch: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Allow Custom Value switch',\n            },\n            selectionOptionsMultiSwitch: {\n              '10.4.0': 'data-testid Variable editor Form Multi switch',\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Multi switch',\n            },\n            selectionOptionsIncludeAllSwitch: {\n              '10.4.0': 'data-testid Variable editor Form IncludeAll switch',\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll switch',\n            },\n            selectionOptionsCustomAllInput: {\n              '10.4.0': 'data-testid Variable editor Form IncludeAll field',\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll field',\n            },\n            previewOfValuesOption: {\n              '10.4.0': 'data-testid Variable editor Preview of Values option',\n              [MIN_GRAFANA_VERSION]: 'Variable editor Preview of Values option',\n            },\n            submitButton: {\n              '10.4.0': 'data-testid Variable editor Run Query button',\n              [MIN_GRAFANA_VERSION]: 'Variable editor Submit button',\n            },\n            applyButton: {\n              '9.3.0': 'data-testid Variable editor Apply button',\n            },\n          },\n          QueryVariable: {\n            queryOptionsDataSourceSelect: {\n              '10.4.0': 'data-testid Select a data source',\n              '10.0.0': 'data-testid Data source picker select container',\n              [MIN_GRAFANA_VERSION]: 'Data source picker select container',\n            },\n            queryOptionsRefreshSelect: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Refresh select',\n            },\n            queryOptionsRefreshSelectV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Refresh select',\n            },\n            queryOptionsRegExInput: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Query RegEx field',\n            },\n            queryOptionsRegExInputV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query RegEx field',\n            },\n            queryOptionsSortSelect: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Sort select',\n            },\n            queryOptionsSortSelectV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Sort select',\n            },\n            queryOptionsQueryInput: {\n              '10.4.0': 'data-testid Variable editor Form Default Variable Query Editor textarea',\n            },\n            valueGroupsTagsEnabledSwitch: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Query UseTags switch',\n            },\n            valueGroupsTagsTagsQueryInput: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsQuery field',\n            },\n            valueGroupsTagsTagsValuesQueryInput: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsValuesQuery field',\n            },\n          },\n          ConstantVariable: {\n            constantOptionsQueryInput: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form Constant Query field',\n            },\n            constantOptionsQueryInputV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Constant Query field',\n            },\n          },\n          DatasourceVariable: {\n            datasourceSelect: {\n              [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource type',\n            },\n          },\n          TextBoxVariable: {\n            textBoxOptionsQueryInput: {\n              [MIN_GRAFANA_VERSION]: 'Variable editor Form TextBox Query field',\n            },\n            textBoxOptionsQueryInputV2: {\n              [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form TextBox Query field',\n            },\n          },\n          CustomVariable: {\n            customValueInput: {\n              [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-input',\n            },\n          },\n          IntervalVariable: {\n            intervalsValueInput: {\n              [MIN_GRAFANA_VERSION]: 'data-testid interval variable intervals input',\n            },\n            autoEnabledCheckbox: {\n              '10.4.0': 'data-testid interval variable auto value checkbox',\n            },\n            stepCountIntervalSelect: {\n              '10.4.0': 'data-testid interval variable step count input',\n            },\n            minIntervalInput: {\n              '10.4.0': 'data-testid interval variable mininum interval input',\n            },\n          },\n          GroupByVariable: {\n            dataSourceSelect: {\n              '10.4.0': 'data-testid Select a data source',\n            },\n            infoText: {\n              '10.4.0': 'data-testid group by variable info text',\n            },\n            modeToggle: {\n              '10.4.0': 'data-testid group by variable mode toggle',\n            },\n          },\n          AdHocFiltersVariable: {\n            datasourceSelect: {\n              '10.4.0': 'data-testid Select a data source',\n            },\n            infoText: {\n              '10.4.0': 'data-testid ad-hoc filters variable info text',\n            },\n            modeToggle: {\n              '11.0.0': 'data-testid ad-hoc filters variable mode toggle',\n            },\n          },\n        },\n      },\n    },\n    Annotations: {\n      marker: {\n        '10.0.0': 'data-testid annotation-marker',\n      },\n    },\n    Rows: {\n      Repeated: {\n        ConfigSection: {\n          warningMessage: {\n            '10.2.0': 'data-testid Repeated rows warning message',\n          },\n        },\n      },\n    },\n  },\n  Dashboards: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/dashboards',\n    },\n    dashboards: {\n      '10.2.0': (title: string) => `Dashboard search item ${title}`,\n    },\n  },\n  SaveDashboardAsModal: {\n    newName: {\n      '10.2.0': 'Save dashboard title field',\n    },\n    save: {\n      '10.2.0': 'Save dashboard button',\n    },\n  },\n  SaveDashboardModal: {\n    save: {\n      '10.2.0': 'Dashboard settings Save Dashboard Modal Save button',\n    },\n    saveVariables: {\n      '10.2.0': 'Dashboard settings Save Dashboard Modal Save variables checkbox',\n    },\n    saveTimerange: {\n      '10.2.0': 'Dashboard settings Save Dashboard Modal Save timerange checkbox',\n    },\n    saveRefresh: {\n      '11.1.0': 'Dashboard settings Save Dashboard Modal Save refresh checkbox',\n    },\n  },\n  SharePanelModal: {\n    linkToRenderedImage: {\n      [MIN_GRAFANA_VERSION]: 'Link to rendered image',\n    },\n  },\n  ShareDashboardModal: {\n    PublicDashboard: {\n      WillBePublicCheckbox: {\n        '9.1.0': 'data-testid public dashboard will be public checkbox',\n      },\n      LimitedDSCheckbox: {\n        '9.1.0': 'data-testid public dashboard limited datasources checkbox',\n      },\n      CostIncreaseCheckbox: {\n        '9.1.0': 'data-testid public dashboard cost may increase checkbox',\n      },\n      PauseSwitch: {\n        '9.5.0': 'data-testid public dashboard pause switch',\n      },\n      EnableAnnotationsSwitch: {\n        '9.3.0': 'data-testid public dashboard on off switch for annotations',\n      },\n      CreateButton: {\n        '9.5.0': 'data-testid public dashboard create button',\n      },\n      DeleteButton: {\n        '9.3.0': 'data-testid public dashboard delete button',\n      },\n      CopyUrlInput: {\n        '9.1.0': 'data-testid public dashboard copy url input',\n      },\n      CopyUrlButton: {\n        '9.1.0': 'data-testid public dashboard copy url button',\n      },\n      SettingsDropdown: {\n        '10.1.0': 'data-testid public dashboard settings dropdown',\n      },\n      TemplateVariablesWarningAlert: {\n        '9.1.0': 'data-testid public dashboard disabled template variables alert',\n      },\n      UnsupportedDataSourcesWarningAlert: {\n        '9.5.0': 'data-testid public dashboard unsupported data sources alert',\n      },\n      NoUpsertPermissionsWarningAlert: {\n        '9.5.0': 'data-testid public dashboard no upsert permissions alert',\n      },\n      EnableTimeRangeSwitch: {\n        '9.4.0': 'data-testid public dashboard on off switch for time range',\n      },\n      EmailSharingConfiguration: {\n        Container: {\n          '9.5.0': 'data-testid email sharing config container',\n        },\n        ShareType: {\n          '9.5.0': 'data-testid public dashboard share type',\n        },\n        EmailSharingInput: {\n          '9.5.0': 'data-testid public dashboard email sharing input',\n        },\n        EmailSharingInviteButton: {\n          '9.5.0': 'data-testid public dashboard email sharing invite button',\n        },\n        EmailSharingList: {\n          '9.5.0': 'data-testid public dashboard email sharing list',\n        },\n        DeleteEmail: {\n          '9.5.0': 'data-testid public dashboard delete email button',\n        },\n        ReshareLink: {\n          '9.5.0': 'data-testid public dashboard reshare link button',\n        },\n      },\n    },\n    SnapshotScene: {\n      url: {\n        '11.1.0': (key: string) => `/dashboard/snapshot/${key}`,\n      },\n      PublishSnapshot: {\n        '11.1.0': 'data-testid publish snapshot button',\n      },\n      CopyUrlButton: {\n        '11.1.0': 'data-testid snapshot copy url button',\n      },\n      CopyUrlInput: {\n        '11.1.0': 'data-testid snapshot copy url input',\n      },\n    },\n  },\n  ShareDashboardDrawer: {\n    ShareInternally: {\n      container: {\n        '11.3.0': 'data-testid share internally drawer container',\n      },\n      lockTimeRangeSwitch: {\n        '11.3.0': 'data-testid share internally lock time range switch',\n      },\n      shortenUrlSwitch: {\n        '11.3.0': 'data-testid share internally shorten url switch',\n      },\n      copyUrlButton: {\n        '11.3.0': 'data-testid share internally copy url button',\n      },\n      SharePanel: {\n        preview: {\n          '11.5.0': 'data-testid share panel internally image generation preview',\n        },\n        widthInput: {\n          '11.5.0': 'data-testid share panel internally width input',\n        },\n        heightInput: {\n          '11.5.0': 'data-testid share panel internally height input',\n        },\n        scaleFactorInput: {\n          '11.5.0': 'data-testid share panel internally scale factor input',\n        },\n        generateImageButton: {\n          '11.5.0': 'data-testid share panel internally generate image button',\n        },\n        downloadImageButton: {\n          '11.5.0': 'data-testid share panel internally download image button',\n        },\n      },\n    },\n    ShareExternally: {\n      container: {\n        '11.3.0': 'data-testid share externally drawer container',\n      },\n      publicAlert: {\n        '11.3.0': 'data-testid public share alert',\n      },\n      emailSharingAlert: {\n        '11.3.0': 'data-testid email share alert',\n      },\n      shareTypeSelect: {\n        '11.3.0': 'data-testid share externally share type select',\n      },\n      Creation: {\n        PublicShare: {\n          createButton: {\n            '11.3.0': 'data-testid public share dashboard create button',\n          },\n          cancelButton: {\n            '11.3.0': 'data-testid public share dashboard cancel button',\n          },\n        },\n        EmailShare: {\n          createButton: {\n            '11.3.0': 'data-testid email share dashboard create button',\n          },\n          cancelButton: {\n            '11.3.0': 'data-testid email share dashboard cancel button',\n          },\n        },\n        willBePublicCheckbox: {\n          '11.3.0': 'data-testid share dashboard will be public checkbox',\n        },\n      },\n      Configuration: {\n        enableTimeRangeSwitch: {\n          '11.3.0': 'data-testid share externally enable time range switch',\n        },\n        enableAnnotationsSwitch: {\n          '11.3.0': 'data-testid share externally enable annotations switch',\n        },\n        copyUrlButton: {\n          '11.3.0': 'data-testid share externally copy url button',\n        },\n        revokeAccessButton: {\n          '11.3.0': 'data-testid share externally revoke access button',\n        },\n        toggleAccessButton: {\n          '11.3.0': 'data-testid share externally pause or resume access button',\n        },\n      },\n    },\n    ShareSnapshot: {\n      url: {\n        '11.3.0': (key: string) => `/dashboard/snapshot/${key}`,\n      },\n      container: {\n        '11.3.0': 'data-testid share snapshot drawer container',\n      },\n      publishSnapshot: {\n        '11.3.0': 'data-testid share snapshot publish button',\n      },\n      copyUrlButton: {\n        '11.3.0': 'data-testid share snapshot copy url button',\n      },\n    },\n  },\n  ExportDashboardDrawer: {\n    ExportAsJson: {\n      container: {\n        '11.3.0': 'data-testid export as json drawer container',\n      },\n      codeEditor: {\n        '11.3.0': 'data-testid export as json code editor',\n      },\n      exportExternallyToggle: {\n        '11.3.0': 'data-testid export as json externally switch',\n      },\n      saveToFileButton: {\n        '11.3.0': 'data-testid export as json save to file button',\n      },\n      copyToClipboardButton: {\n        '11.3.0': 'data-testid export as json copy to clipboard button',\n      },\n      cancelButton: {\n        '11.3.0': 'data-testid export as json cancel button',\n      },\n    },\n  },\n  PublicDashboard: {\n    page: {\n      '9.5.0': 'public-dashboard-page',\n    },\n    NotAvailable: {\n      container: {\n        '9.5.0': 'public-dashboard-not-available',\n      },\n      title: {\n        '9.5.0': 'public-dashboard-title',\n      },\n      pausedDescription: {\n        '9.5.0': 'public-dashboard-paused-description',\n      },\n    },\n    footer: {\n      '11.0.0': 'public-dashboard-footer',\n    },\n  },\n  PublicDashboardScene: {\n    loadingPage: {\n      '11.0.0': 'public-dashboard-scene-loading-page',\n    },\n    page: {\n      '11.0.0': 'public-dashboard-scene-page',\n    },\n    controls: {\n      '11.0.0': 'public-dashboard-controls',\n    },\n  },\n  RequestViewAccess: {\n    form: {\n      '9.5.0': 'request-view-access-form',\n    },\n    recipientInput: {\n      '9.5.0': 'request-view-access-recipient-input',\n    },\n    submitButton: {\n      '9.5.0': 'request-view-access-submit-button',\n    },\n  },\n  PublicDashboardConfirmAccess: {\n    submitButton: {\n      '10.2.0': 'data-testid confirm-access-submit-button',\n    },\n  },\n  Explore: {\n    url: {\n      [MIN_GRAFANA_VERSION]: '/explore',\n    },\n    General: {\n      container: {\n        [MIN_GRAFANA_VERSION]: 'data-testid Explore',\n      },\n      graph: {\n        [MIN_GRAFANA_VERSION]: 'Explore Graph',\n      },\n      table: {\n        [MIN_GRAFANA_VERSION]: 'Explore Table',\n      },\n      scrollView: {\n        '9.0.0': 'data-testid explorer scroll view',\n      },\n    },\n    QueryHistory: {\n      container: {\n        '11.1.0': 'data-testid QueryHistory',\n      },\n    },\n  },\n  SoloPanel: {\n    url: {\n      [MIN_GRAFANA_VERSION]: (page: string) => `/d-solo/${page}`,\n    },\n  },\n  PluginsList: {\n    page: {\n      [MIN_GRAFANA_VERSION]: 'Plugins list page',\n    },\n    list: {\n      [MIN_GRAFANA_VERSION]: 'Plugins list',\n    },\n    listItem: {\n      [MIN_GRAFANA_VERSION]: 'Plugins list item',\n    },\n    signatureErrorNotice: {\n      '10.3.0': 'data-testid Unsigned plugins notice',\n      [MIN_GRAFANA_VERSION]: 'Unsigned plugins notice',\n    },\n  },\n  PluginPage: {\n    page: {\n      [MIN_GRAFANA_VERSION]: 'Plugin page',\n    },\n    signatureInfo: {\n      '10.3.0': 'data-testid Plugin signature info',\n      [MIN_GRAFANA_VERSION]: 'Plugin signature info',\n    },\n    disabledInfo: {\n      '10.3.0': 'data-testid Plugin disabled info',\n      [MIN_GRAFANA_VERSION]: 'Plugin disabled info',\n    },\n  },\n  PlaylistForm: {\n    name: {\n      [MIN_GRAFANA_VERSION]: 'Playlist name',\n    },\n    interval: {\n      [MIN_GRAFANA_VERSION]: 'Playlist interval',\n    },\n    itemDelete: {\n      '10.2.0': 'data-testid playlist-form-delete-item',\n    },\n  },\n  BrowseDashboards: {\n    table: {\n      body: {\n        '10.2.0': 'data-testid browse-dashboards-table',\n      },\n      row: {\n        '10.2.0': (name: string) => `data-testid browse dashboards row ${name}`,\n      },\n      checkbox: {\n        '10.0.0': (uid: string) => `data-testid ${uid} checkbox`,\n      },\n    },\n    NewFolderForm: {\n      form: {\n        '10.2.0': 'data-testid new folder form',\n      },\n      nameInput: {\n        '10.2.0': 'data-testid new-folder-name-input',\n      },\n      createButton: {\n        '10.2.0': 'data-testid new-folder-create-button',\n      },\n    },\n  },\n  Search: {\n    url: {\n      '9.3.0': '/?search=openn',\n    },\n    FolderView: {\n      url: {\n        '9.3.0': '/?search=open&layout=folders',\n      },\n    },\n  },\n  PublicDashboards: {\n    ListItem: {\n      linkButton: {\n        '9.3.0': 'public-dashboard-link-button',\n      },\n      configButton: {\n        '9.3.0': 'public-dashboard-configuration-button',\n      },\n      trashcanButton: {\n        '9.3.0': 'public-dashboard-remove-button',\n      },\n      pauseSwitch: {\n        '10.1.0': 'data-testid public dashboard pause switch',\n      },\n    },\n  },\n  UserListPage: {\n    tabs: {\n      allUsers: {\n        '10.0.0': 'data-testid all-users-tab',\n      },\n      orgUsers: {\n        '10.0.0': 'data-testid org-users-tab',\n      },\n      anonUserDevices: {\n        '10.2.3': 'data-testid anon-user-devices-tab',\n      },\n      publicDashboardsUsers: {\n        '10.0.0': 'data-testid public-dashboards-users-tab',\n      },\n      users: {\n        '10.0.0': 'data-testid users-tab',\n      },\n    },\n    org: {\n      url: {\n        '10.2.0': '/admin/users',\n        '9.5.0': '/org/users',\n      },\n    },\n    admin: {\n      url: {\n        '9.5.0': '/admin/users',\n      },\n    },\n    publicDashboards: {\n      container: {\n        '11.1.0': 'data-testid public-dashboards-users-list',\n      },\n    },\n    UserListAdminPage: {\n      container: {\n        '10.0.0': 'data-testid user-list-admin-page',\n      },\n    },\n    UsersListPage: {\n      container: {\n        '10.0.0': 'data-testid users-list-page',\n      },\n    },\n    UserAnonListPage: {\n      container: {\n        '10.4.0': 'data-testid user-anon-list-page',\n      },\n    },\n    UsersListPublicDashboardsPage: {\n      container: {\n        '10.0.0': 'data-testid users-list-public-dashboards-page',\n      },\n      DashboardsListModal: {\n        listItem: {\n          '10.0.0': (uid: string) => `data-testid dashboards-list-item-${uid}`,\n        },\n      },\n    },\n  },\n  ProfilePage: {\n    url: {\n      '10.2.0': '/profile',\n    },\n  },\n  Plugin: {\n    url: {\n      [MIN_GRAFANA_VERSION]: (pluginId: string) => `/plugins/${pluginId}`,\n    },\n  },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedPages = typeof versionedPages;\n","import { resolveSelectors } from '../resolver';\nimport { E2ESelectors } from '../types';\n\nimport { versionedComponents, VersionedComponents } from './components';\nimport { versionedPages, VersionedPages } from './pages';\n\nconst Pages = resolveSelectors(versionedPages);\nconst Components = resolveSelectors(versionedComponents);\nconst selectors = { pages: Pages, components: Components };\n\n/**\n * Exposes Pages, Component selectors and E2ESelectors type in package for easy use in e2e tests and in production code\n */\nexport {\n  Pages,\n  Components,\n  selectors,\n  versionedComponents,\n  versionedPages,\n  resolveSelectors,\n  type VersionedPages,\n  type VersionedComponents,\n  type E2ESelectors,\n};\n","import { merge } from 'lodash';\n\nimport {\n  AuthSettings,\n  BootData,\n  BuildInfo,\n  DataSourceInstanceSettings,\n  FeatureToggles,\n  GrafanaConfig,\n  GrafanaTheme,\n  GrafanaTheme2,\n  LicenseInfo,\n  MapLayerOptions,\n  OAuthSettings,\n  PanelPluginMeta,\n  systemDateFormats,\n  SystemDateFormatSettings,\n  getThemeById,\n  AngularMeta,\n  PluginLoadingStrategy,\n  PluginDependencies,\n  PluginExtensions,\n} from '@grafana/data';\n\nexport interface AzureSettings {\n  cloud?: string;\n  clouds?: AzureCloudInfo[];\n  managedIdentityEnabled: boolean;\n  workloadIdentityEnabled: boolean;\n  userIdentityEnabled: boolean;\n  userIdentityFallbackCredentialsEnabled: boolean;\n  azureEntraPasswordCredentialsEnabled: boolean;\n}\n\nexport interface AzureCloudInfo {\n  name: string;\n  displayName: string;\n}\n\nexport type AppPluginConfig = {\n  id: string;\n  path: string;\n  version: string;\n  preload: boolean;\n  angular: AngularMeta;\n  loadingStrategy: PluginLoadingStrategy;\n  dependencies: PluginDependencies;\n  extensions: PluginExtensions;\n  moduleHash?: string;\n};\n\nexport type PreinstalledPlugin = {\n  id: string;\n  version: string;\n};\n\nexport class GrafanaBootConfig implements GrafanaConfig {\n  publicDashboardAccessToken?: string;\n  publicDashboardsEnabled = true;\n  snapshotEnabled = true;\n  datasources: { [str: string]: DataSourceInstanceSettings } = {};\n  panels: { [key: string]: PanelPluginMeta } = {};\n  apps: Record<string, AppPluginConfig> = {};\n  auth: AuthSettings = {};\n  minRefreshInterval = '';\n  appUrl = '';\n  appSubUrl = '';\n  namespace = 'default';\n  windowTitlePrefix = '';\n  buildInfo: BuildInfo;\n  newPanelTitle = '';\n  bootData: BootData;\n  externalUserMngLinkUrl = '';\n  externalUserMngLinkName = '';\n  externalUserMngInfo = '';\n  externalUserMngAnalytics = false;\n  externalUserMngAnalyticsParams = '';\n  allowOrgCreate = false;\n  feedbackLinksEnabled = true;\n  disableLoginForm = false;\n  defaultDatasource = ''; // UID\n  angularSupportEnabled = false;\n  authProxyEnabled = false;\n  exploreEnabled = false;\n  queryHistoryEnabled = false;\n  helpEnabled = false;\n  profileEnabled = false;\n  newsFeedEnabled = true;\n  ldapEnabled = false;\n  jwtHeaderName = '';\n  jwtUrlLogin = false;\n  sigV4AuthEnabled = false;\n  azureAuthEnabled = false;\n  secureSocksDSProxyEnabled = false;\n  samlEnabled = false;\n  samlName = '';\n  autoAssignOrg = true;\n  verifyEmailEnabled = false;\n  oauth: OAuthSettings = {};\n  rbacEnabled = true;\n  disableUserSignUp = false;\n  loginHint = '';\n  passwordHint = '';\n  loginError: string | undefined = undefined;\n  viewersCanEdit = false;\n  editorsCanAdmin = false;\n  disableSanitizeHtml = false;\n  trustedTypesDefaultPolicyEnabled = false;\n  cspReportOnlyEnabled = false;\n  liveEnabled = true;\n  /** @deprecated Use `theme2` instead. */\n  theme: GrafanaTheme;\n  theme2: GrafanaTheme2;\n  featureToggles: FeatureToggles = {};\n  anonymousEnabled = false;\n  anonymousDeviceLimit: number | undefined = undefined;\n  licenseInfo: LicenseInfo = {} as LicenseInfo;\n  rendererAvailable = false;\n  rendererVersion = '';\n  rendererDefaultImageWidth = 1000;\n  rendererDefaultImageHeight = 500;\n  rendererDefaultImageScale = 1;\n  secretsManagerPluginEnabled = false;\n  supportBundlesEnabled = false;\n  http2Enabled = false;\n  dateFormats?: SystemDateFormatSettings;\n  grafanaJavascriptAgent = {\n    enabled: false,\n    customEndpoint: '',\n    apiKey: '',\n    allInstrumentationsEnabled: false,\n    errorInstrumentalizationEnabled: true,\n    consoleInstrumentalizationEnabled: false,\n    webVitalsInstrumentalizationEnabled: false,\n    tracingInstrumentalizationEnabled: false,\n  };\n  pluginCatalogURL = 'https://grafana.com/grafana/plugins/';\n  pluginAdminEnabled = true;\n  pluginAdminExternalManageEnabled = false;\n  pluginCatalogHiddenPlugins: string[] = [];\n  pluginCatalogManagedPlugins: string[] = [];\n  pluginCatalogPreinstalledPlugins: PreinstalledPlugin[] = [];\n  pluginsCDNBaseURL = '';\n  expressionsEnabled = false;\n  awsAllowedAuthProviders: string[] = [];\n  awsAssumeRoleEnabled = false;\n  azure: AzureSettings = {\n    managedIdentityEnabled: false,\n    workloadIdentityEnabled: false,\n    userIdentityEnabled: false,\n    userIdentityFallbackCredentialsEnabled: false,\n    azureEntraPasswordCredentialsEnabled: false,\n  };\n  caching = {\n    enabled: false,\n  };\n  geomapDefaultBaseLayerConfig?: MapLayerOptions;\n  geomapDisableCustomBaseLayer?: boolean;\n  unifiedAlertingEnabled = false;\n  unifiedAlerting = {\n    minInterval: '',\n    alertStateHistoryBackend: undefined,\n    alertStateHistoryPrimary: undefined,\n  };\n  applicationInsightsConnectionString?: string;\n  applicationInsightsEndpointUrl?: string;\n  recordedQueries = {\n    enabled: true,\n  };\n  featureHighlights = {\n    enabled: false,\n  };\n  reporting = {\n    enabled: true,\n  };\n  analytics = {\n    enabled: true,\n  };\n  googleAnalyticsId: undefined;\n  googleAnalytics4Id: undefined;\n  googleAnalytics4SendManualPageViews = false;\n  rudderstackWriteKey: undefined;\n  rudderstackDataPlaneUrl: undefined;\n  rudderstackSdkUrl: undefined;\n  rudderstackConfigUrl: undefined;\n  rudderstackIntegrationsUrl: undefined;\n  analyticsConsoleReporting = false;\n  dashboardPerformanceMetrics: string[] = [];\n  sqlConnectionLimits = {\n    maxOpenConns: 100,\n    maxIdleConns: 100,\n    connMaxLifetime: 14400,\n  };\n  defaultDatasourceManageAlertsUiToggle = true;\n\n  tokenExpirationDayLimit: undefined;\n  enableFrontendSandboxForPlugins: string[] = [];\n  sharedWithMeFolderUID: string | undefined;\n  rootFolderUID: string | undefined;\n  localFileSystemAvailable: boolean | undefined;\n  cloudMigrationIsTarget: boolean | undefined;\n  cloudMigrationFeedbackURL = '';\n  cloudMigrationPollIntervalMs = 2000;\n  reportingStaticContext?: Record<string, string>;\n  exploreDefaultTimeOffset = '1h';\n  exploreHideLogsDownload: boolean | undefined;\n\n  /**\n   * Language used in Grafana's UI. This is after the user's preference (or deteceted locale) is resolved to one of\n   * Grafana's supported language.\n   */\n  language: string | undefined;\n\n  constructor(options: GrafanaBootConfig) {\n    this.bootData = options.bootData;\n\n    const defaults = {\n      datasources: {},\n      windowTitlePrefix: 'Grafana - ',\n      panels: {},\n      newPanelTitle: 'Panel Title',\n      playlist_timespan: '1m',\n      unsaved_changes_warning: true,\n      appUrl: '',\n      appSubUrl: '',\n      buildInfo: {\n        version: '1.0',\n        commit: '1',\n        env: 'production',\n      },\n      viewersCanEdit: false,\n      editorsCanAdmin: false,\n      disableSanitizeHtml: false,\n    };\n\n    merge(this, defaults, options);\n\n    this.buildInfo = options.buildInfo || defaults.buildInfo;\n\n    if (this.dateFormats) {\n      systemDateFormats.update(this.dateFormats);\n    }\n\n    overrideFeatureTogglesFromUrl(this);\n    overrideFeatureTogglesFromLocalStorage(this);\n\n    if (this.featureToggles.disableAngular) {\n      this.angularSupportEnabled = false;\n    }\n\n    // Creating theme after applying feature toggle overrides in case we need to toggle anything\n    this.theme2 = getThemeById(this.bootData.user.theme);\n    this.bootData.user.lightTheme = this.theme2.isLight;\n    this.theme = this.theme2.v1;\n  }\n}\n\n// localstorage key: grafana.featureToggles\n// example value: panelEditor=1,panelInspector=1\nfunction overrideFeatureTogglesFromLocalStorage(config: GrafanaBootConfig) {\n  const featureToggles = config.featureToggles;\n  const localStorageKey = 'grafana.featureToggles';\n  const localStorageValue = window.localStorage.getItem(localStorageKey);\n  if (localStorageValue) {\n    const features = localStorageValue.split(',');\n    for (const feature of features) {\n      const [featureName, featureValue] = feature.split('=');\n      const toggleState = featureValue === 'true' || featureValue === '1';\n      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      featureToggles[featureName as keyof FeatureToggles] = toggleState;\n      console.log(`Setting feature toggle ${featureName} = ${toggleState} via localstorage`);\n    }\n  }\n}\n\nfunction overrideFeatureTogglesFromUrl(config: GrafanaBootConfig) {\n  if (window.location.href.indexOf('__feature') === -1) {\n    return;\n  }\n\n  const isDevelopment = config.buildInfo.env === 'development';\n\n  // Although most flags can not be changed from the URL in production,\n  // some of them are safe (and useful!) to change dynamically from the browser URL\n  const safeRuntimeFeatureFlags = new Set(['queryServiceFromUI', 'dashboardSceneSolo']);\n\n  const params = new URLSearchParams(window.location.search);\n  params.forEach((value, key) => {\n    if (key.startsWith('__feature.')) {\n      const featureToggles = config.featureToggles as Record<string, boolean>;\n      const featureName = key.substring(10);\n\n      const toggleState = value === 'true' || value === ''; // browser rewrites true as ''\n      if (toggleState !== featureToggles[key]) {\n        if (isDevelopment || safeRuntimeFeatureFlags.has(featureName)) {\n          featureToggles[featureName] = toggleState;\n          console.log(`Setting feature toggle ${featureName} = ${toggleState} via url`);\n        } else {\n          console.log(`Unable to change feature toggle ${featureName} via url in production.`);\n        }\n      }\n    }\n  });\n}\n\nconst bootData = (window as any).grafanaBootData || {\n  settings: {},\n  user: {},\n  navTree: [],\n};\n\nconst options = bootData.settings;\noptions.bootData = bootData;\n\n/**\n * Use this to access the {@link GrafanaBootConfig} for the current running Grafana instance.\n *\n * @public\n */\nexport const config = new GrafanaBootConfig(options);\n","import { BusEventBase, BusEventWithPayload, EventBus, GrafanaTheme2, PanelModel, TimeRange } from '@grafana/data';\n\n/**\n * Called when a dashboard is refreshed\n *\n * @public\n */\nexport class RefreshEvent extends BusEventBase {\n  static type = 'refresh';\n}\n\n/**\n * Called when the theme settings change\n *\n * @public\n */\nexport class ThemeChangedEvent extends BusEventWithPayload<GrafanaTheme2> {\n  static type = 'theme-changed';\n}\n\n/**\n * Called when time range is updated\n *\n * @public\n */\nexport class TimeRangeUpdatedEvent extends BusEventWithPayload<TimeRange> {\n  static type = 'time-range-updated';\n}\n\n/**\n * Called to copy a panel JSON into local storage\n *\n * @public\n */\nexport class CopyPanelEvent extends BusEventWithPayload<PanelModel> {\n  static type = 'copy-panel';\n}\n\n// Internal singleton instance\nlet singletonInstance: EventBus;\n\n/**\n * Used during startup by Grafana to set the setAppEvents so it is available\n * via the {@link setAppEvents} to the rest of the application.\n *\n * @internal\n */\nexport function setAppEvents(instance: EventBus) {\n  singletonInstance = instance;\n}\n\n/**\n * Used to retrieve an event bus that manages application level events\n *\n * @public\n */\nexport function getAppEvents(): EventBus {\n  return singletonInstance;\n}\n","import { Observable } from 'rxjs';\n\n/**\n * Used to initiate a remote call via the {@link BackendSrv}\n *\n * @public\n */\nexport type BackendSrvRequest = {\n  /**\n   * Request URL\n   */\n  url: string;\n\n  /**\n   * Number of times to retry the remote call if it fails.\n   */\n  retry?: number;\n\n  /**\n   * HTTP headers that should be passed along with the remote call.\n   * Please have a look at {@link https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API | Fetch API}\n   * for supported headers.\n   */\n  headers?: Record<string, any>;\n\n  /**\n   * HTTP verb to perform in the remote call GET, POST, PUT etc.\n   */\n  method?: string;\n\n  /**\n   * Set to false an success application alert box will not be shown for successful PUT, DELETE, POST requests\n   */\n  showSuccessAlert?: boolean;\n\n  /**\n   * Set to false to not show an application alert box for request errors\n   */\n  showErrorAlert?: boolean;\n\n  /**\n   * Provided by the initiator to identify a particular remote call. An example\n   * of this is when a datasource plugin triggers a query. If the request id already\n   * exist the backendSrv will try to cancel and replace the previous call with the\n   * new one.\n   */\n  requestId?: string;\n\n  /**\n   * Set to to true to not include call in query inspector\n   */\n  hideFromInspector?: boolean;\n\n  /**\n   * The data to send\n   */\n  data?: any;\n\n  /**\n   * Query params\n   */\n  params?: Record<string, any>;\n\n  /**\n   * Define how the response object should be parsed.  See:\n   *\n   * https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data\n   *\n   * By default values are json parsed from text\n   */\n  responseType?: 'json' | 'text' | 'arraybuffer' | 'blob';\n\n  /**\n   * Used to cancel an open connection\n   * https://developer.mozilla.org/en-US/docs/Web/API/AbortController\n   */\n  abortSignal?: AbortSignal;\n\n  /**\n   * The credentials read-only property of the Request interface indicates whether the user agent should send cookies from the other domain in the case of cross-origin requests.\n   */\n  credentials?: RequestCredentials;\n\n  /**\n   * @deprecated withCredentials is deprecated in favor of credentials\n   */\n  withCredentials?: boolean;\n};\n\n/**\n * Response for fetch function in {@link BackendSrv}\n *\n * @public\n */\nexport interface FetchResponse<T = any> {\n  data: T;\n  readonly status: number;\n  readonly statusText: string;\n  readonly ok: boolean;\n  readonly headers: Headers;\n  readonly redirected: boolean;\n  readonly type: ResponseType;\n  readonly url: string;\n  readonly config: BackendSrvRequest;\n  readonly traceId?: string;\n}\n\n/**\n * Error type for fetch function in {@link BackendSrv}\n *\n * @public\n */\nexport interface FetchErrorDataProps {\n  message?: string;\n  status?: string;\n  error?: string | any;\n}\n\n/**\n * Error type for fetch function in {@link BackendSrv}\n *\n * @public\n */\nexport interface FetchError<T = any> {\n  status: number;\n  statusText?: string;\n  data: T;\n  message?: string;\n  cancelled?: boolean;\n  isHandled?: boolean;\n  config: BackendSrvRequest;\n  traceId?: string;\n}\n\nexport function isFetchError<T = any>(e: unknown): e is FetchError<T> {\n  return typeof e === 'object' && e !== null && 'status' in e && 'data' in e;\n}\n\n/**\n * Used to communicate via http(s) to a remote backend such as the Grafana backend,\n * a datasource etc. The BackendSrv is using the {@link https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API | Fetch API}\n * under the hood to handle all the communication.\n *\n * The request function can be used to perform a remote call by specifying a {@link BackendSrvRequest}.\n * To make the BackendSrv a bit easier to use we have added a couple of shorthand functions that will\n * use default values executing the request.\n *\n * @remarks\n * By default, Grafana displays an error message alert if the remote call fails. To prevent this from\n * happening `showErrorAlert = true` on the options object.\n *\n * @public\n */\nexport interface BackendSrv {\n  get<T = any>(url: string, params?: any, requestId?: string, options?: Partial<BackendSrvRequest>): Promise<T>;\n  delete<T = unknown>(url: string, data?: unknown, options?: Partial<BackendSrvRequest>): Promise<T>;\n  post<T = any>(url: string, data?: unknown, options?: Partial<BackendSrvRequest>): Promise<T>;\n  patch<T = any>(url: string, data?: unknown, options?: Partial<BackendSrvRequest>): Promise<T>;\n  put<T = any>(url: string, data?: unknown, options?: Partial<BackendSrvRequest>): Promise<T>;\n\n  /**\n   * @deprecated Use the `.fetch()` function instead. If you prefer to work with a promise\n   * wrap the Observable returned by fetch with the lastValueFrom function, or use the get|delete|post|patch|put methods.\n   * This method is going to be private from Grafana 10.\n   */\n  request<T = unknown>(options: BackendSrvRequest): Promise<T>;\n\n  /**\n   * Special function used to communicate with datasources that will emit core\n   * events that the Grafana QueryInspector and QueryEditor is listening for to be able\n   * to display datasource query information. Can be skipped by adding `option.silent`\n   * when initializing the request.\n   *\n   * @deprecated Use the fetch function instead\n   */\n  datasourceRequest<T = unknown>(options: BackendSrvRequest): Promise<FetchResponse<T>>;\n\n  /**\n   * Observable http request interface\n   */\n  fetch<T>(options: BackendSrvRequest): Observable<FetchResponse<T>>;\n\n  /**\n   * Observe each raw chunk in the response.  This is useful when reading values from\n   * a long living HTTP connection like the kubernetes WATCH command.\n   *\n   * Each chunk includes the full response headers and the `data` property is filled with the chunk.\n   */\n  chunked(options: BackendSrvRequest): Observable<FetchResponse<Uint8Array | undefined>>;\n}\n\nlet singletonInstance: BackendSrv;\n\n/**\n * Used during startup by Grafana to set the BackendSrv so it is available\n * via the {@link getBackendSrv} to the rest of the application.\n *\n * @internal\n */\nexport const setBackendSrv = (instance: BackendSrv) => {\n  singletonInstance = instance;\n};\n\n/**\n * Used to retrieve the {@link BackendSrv} that can be used to communicate\n * via http(s) to a remote backend such as the Grafana backend, a datasource etc.\n *\n * @public\n */\nexport const getBackendSrv = (): BackendSrv => singletonInstance;\n","import { config } from '../config';\n\nexport const featureEnabled = (feature: string): boolean => {\n  const { enabledFeatures } = config.licenseInfo;\n  return enabledFeatures && enabledFeatures[feature];\n};\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n//     kinds/gen.go\n// Using jennies:\n//     CommonSchemaJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\n\n/**\n * A topic is attached to DataFrame metadata in query results.\n * This specifies where the data should be used.\n */\nexport enum DataTopic {\n  AlertStates = 'alertStates',\n  Annotations = 'annotations',\n  Series = 'series',\n}\n\n/**\n * TODO docs\n */\nexport interface DataSourceJsonData {\n  alertmanagerUid?: string;\n  authType?: string;\n  defaultRegion?: string;\n  manageAlerts?: boolean;\n  profile?: string;\n}\n\n/**\n * These are the common properties available to all queries in all datasources.\n * Specific implementations will *extend* this interface, adding the required\n * properties for the given context.\n */\nexport interface DataQuery {\n  /**\n   * For mixed data sources the selected datasource is on the query level.\n   * For non mixed scenarios this is undefined.\n   * TODO find a better way to do this ^ that's friendly to schema\n   * TODO this shouldn't be unknown but DataSourceRef | null\n   */\n  datasource?: unknown;\n  /**\n   * If hide is set to true, Grafana will filter out the response(s) associated with this query before returning it to the panel.\n   */\n  hide?: boolean;\n  /**\n   * Specify the query flavor\n   * TODO make this required and give it a default\n   */\n  queryType?: string;\n  /**\n   * A unique identifier for the query within the list of targets.\n   * In server side expressions, the refId is used as a variable name to identify results.\n   * By default, the UI will assign A->Z; however setting meaningful names may be useful.\n   */\n  refId: string;\n}\n\nexport interface BaseDimensionConfig {\n  /**\n   * fixed: T -- will be added by each element\n   */\n  field?: string;\n}\n\nexport enum ScaleDimensionMode {\n  Linear = 'linear',\n  Quad = 'quad',\n}\n\nexport interface ScaleDimensionConfig extends BaseDimensionConfig {\n  fixed?: number;\n  max: number;\n  min: number;\n  mode?: ScaleDimensionMode; // | *\"linear\"\n}\n\nexport interface ColorDimensionConfig extends BaseDimensionConfig {\n  fixed?: string; // color value\n}\n\nexport enum ScalarDimensionMode {\n  Clamped = 'clamped',\n  Mod = 'mod',\n}\n\nexport interface ScalarDimensionConfig extends BaseDimensionConfig {\n  fixed?: number;\n  max: number;\n  min: number;\n  mode?: ScalarDimensionMode;\n}\n\nexport enum TextDimensionMode {\n  Field = 'field',\n  Fixed = 'fixed',\n  Template = 'template',\n}\n\nexport interface TextDimensionConfig extends BaseDimensionConfig {\n  fixed?: string;\n  mode: TextDimensionMode;\n}\n\nexport enum ResourceDimensionMode {\n  Field = 'field',\n  Fixed = 'fixed',\n  Mapping = 'mapping',\n}\n\nexport interface MapLayerOptions {\n  /**\n   * Custom options depending on the type\n   */\n  config?: unknown;\n  /**\n   * Defines a frame MatcherConfig that may filter data for the given layer\n   */\n  filterData?: unknown;\n  /**\n   * Common method to define geometry fields\n   */\n  location?: FrameGeometrySource;\n  /**\n   * configured unique display name\n   */\n  name: string;\n  /**\n   * Common properties:\n   * https://openlayers.org/en/latest/apidoc/module-ol_layer_Base-BaseLayer.html\n   * Layer opacity (0-1)\n   */\n  opacity?: number;\n  /**\n   * Check tooltip (defaults to true)\n   */\n  tooltip?: boolean;\n  type: string;\n}\n\nexport enum FrameGeometrySourceMode {\n  Auto = 'auto',\n  Coords = 'coords',\n  Geohash = 'geohash',\n  Lookup = 'lookup',\n}\n\nexport enum HeatmapCalculationMode {\n  Count = 'count',\n  Size = 'size',\n}\n\nexport enum HeatmapCellLayout {\n  auto = 'auto',\n  ge = 'ge',\n  le = 'le',\n  unknown = 'unknown',\n}\n\nexport interface HeatmapCalculationBucketConfig {\n  /**\n   * Sets the bucket calculation mode\n   */\n  mode?: HeatmapCalculationMode;\n  /**\n   * Controls the scale of the buckets\n   */\n  scale?: ScaleDistributionConfig;\n  /**\n   * The number of buckets to use for the axis in the heatmap\n   */\n  value?: string;\n}\n\nexport enum LogsSortOrder {\n  Ascending = 'Ascending',\n  Descending = 'Descending',\n}\n\n/**\n * TODO docs\n */\nexport enum AxisPlacement {\n  Auto = 'auto',\n  Bottom = 'bottom',\n  Hidden = 'hidden',\n  Left = 'left',\n  Right = 'right',\n  Top = 'top',\n}\n\n/**\n * TODO docs\n */\nexport enum AxisColorMode {\n  Series = 'series',\n  Text = 'text',\n}\n\n/**\n * TODO docs\n */\nexport enum VisibilityMode {\n  Always = 'always',\n  Auto = 'auto',\n  Never = 'never',\n}\n\n/**\n * TODO docs\n */\nexport enum GraphDrawStyle {\n  Bars = 'bars',\n  Line = 'line',\n  Points = 'points',\n}\n\n/**\n * TODO docs\n */\nexport enum GraphTransform {\n  Constant = 'constant',\n  NegativeY = 'negative-Y',\n}\n\n/**\n * TODO docs\n */\nexport enum LineInterpolation {\n  Linear = 'linear',\n  Smooth = 'smooth',\n  StepAfter = 'stepAfter',\n  StepBefore = 'stepBefore',\n}\n\n/**\n * TODO docs\n */\nexport enum ScaleDistribution {\n  Linear = 'linear',\n  Log = 'log',\n  Ordinal = 'ordinal',\n  Symlog = 'symlog',\n}\n\n/**\n * TODO docs\n */\nexport enum GraphGradientMode {\n  Hue = 'hue',\n  None = 'none',\n  Opacity = 'opacity',\n  Scheme = 'scheme',\n}\n\n/**\n * TODO docs\n */\nexport enum StackingMode {\n  None = 'none',\n  Normal = 'normal',\n  Percent = 'percent',\n}\n\n/**\n * TODO docs\n */\nexport enum BarAlignment {\n  After = 1,\n  Before = -1,\n  Center = 0,\n}\n\n/**\n * TODO docs\n */\nexport enum ScaleOrientation {\n  Horizontal = 0,\n  Vertical = 1,\n}\n\n/**\n * TODO docs\n */\nexport enum ScaleDirection {\n  Down = -1,\n  Left = -1,\n  Right = 1,\n  Up = 1,\n}\n\n/**\n * TODO docs\n */\nexport interface LineStyle {\n  dash?: Array<number>;\n  fill?: ('solid' | 'dash' | 'dot' | 'square');\n}\n\nexport const defaultLineStyle: Partial<LineStyle> = {\n  dash: [],\n};\n\n/**\n * TODO docs\n */\nexport interface LineConfig {\n  lineColor?: string;\n  lineInterpolation?: LineInterpolation;\n  lineStyle?: LineStyle;\n  lineWidth?: number;\n  /**\n   * Indicate if null values should be treated as gaps or connected.\n   * When the value is a number, it represents the maximum delta in the\n   * X axis that should be considered connected.  For timeseries, this is milliseconds\n   */\n  spanNulls?: (boolean | number);\n}\n\n/**\n * TODO docs\n */\nexport interface BarConfig {\n  barAlignment?: BarAlignment;\n  barMaxWidth?: number;\n  barWidthFactor?: number;\n}\n\n/**\n * TODO docs\n */\nexport interface FillConfig {\n  fillBelowTo?: string;\n  fillColor?: string;\n  fillOpacity?: number;\n}\n\n/**\n * TODO docs\n */\nexport interface PointsConfig {\n  pointColor?: string;\n  pointSize?: number;\n  pointSymbol?: string;\n  showPoints?: VisibilityMode;\n}\n\n/**\n * TODO docs\n */\nexport interface ScaleDistributionConfig {\n  linearThreshold?: number;\n  log?: number;\n  type: ScaleDistribution;\n}\n\n/**\n * TODO docs\n */\nexport interface AxisConfig {\n  axisBorderShow?: boolean;\n  axisCenteredZero?: boolean;\n  axisColorMode?: AxisColorMode;\n  axisGridShow?: boolean;\n  axisLabel?: string;\n  axisPlacement?: AxisPlacement;\n  axisSoftMax?: number;\n  axisSoftMin?: number;\n  axisWidth?: number;\n  scaleDistribution?: ScaleDistributionConfig;\n}\n\n/**\n * TODO docs\n */\nexport interface HideSeriesConfig {\n  legend: boolean;\n  tooltip: boolean;\n  viz: boolean;\n}\n\n/**\n * TODO docs\n */\nexport interface StackingConfig {\n  group?: string;\n  mode?: StackingMode;\n}\n\n/**\n * TODO docs\n */\nexport interface StackableFieldConfig {\n  stacking?: StackingConfig;\n}\n\n/**\n * TODO docs\n */\nexport interface HideableFieldConfig {\n  hideFrom?: HideSeriesConfig;\n}\n\n/**\n * TODO docs\n */\nexport enum GraphThresholdsStyleMode {\n  Area = 'area',\n  Dashed = 'dashed',\n  DashedAndArea = 'dashed+area',\n  Line = 'line',\n  LineAndArea = 'line+area',\n  Off = 'off',\n  Series = 'series',\n}\n\n/**\n * TODO docs\n */\nexport interface GraphThresholdsStyleConfig {\n  mode: GraphThresholdsStyleMode;\n}\n\n/**\n * TODO docs\n */\nexport type LegendPlacement = ('bottom' | 'right');\n\n/**\n * TODO docs\n * Note: \"hidden\" needs to remain as an option for plugins compatibility\n */\nexport enum LegendDisplayMode {\n  Hidden = 'hidden',\n  List = 'list',\n  Table = 'table',\n}\n\n/**\n * TODO docs\n */\nexport interface SingleStatBaseOptions extends OptionsWithTextFormatting {\n  orientation: VizOrientation;\n  reduceOptions: ReduceDataOptions;\n}\n\n/**\n * TODO docs\n */\nexport interface ReduceDataOptions {\n  /**\n   * When !values, pick one value for the whole field\n   */\n  calcs: Array<string>;\n  /**\n   * Which fields to show.  By default this is only numeric fields\n   */\n  fields?: string;\n  /**\n   * if showing all values limit\n   */\n  limit?: number;\n  /**\n   * If true show each row value\n   */\n  values?: boolean;\n}\n\nexport const defaultReduceDataOptions: Partial<ReduceDataOptions> = {\n  calcs: [],\n};\n\n/**\n * TODO docs\n */\nexport enum VizOrientation {\n  Auto = 'auto',\n  Horizontal = 'horizontal',\n  Vertical = 'vertical',\n}\n\n/**\n * TODO docs\n */\nexport interface OptionsWithTooltip {\n  tooltip: VizTooltipOptions;\n}\n\n/**\n * TODO docs\n */\nexport interface OptionsWithLegend {\n  legend: VizLegendOptions;\n}\n\n/**\n * TODO docs\n */\nexport interface OptionsWithTimezones {\n  timezone?: Array<TimeZone>;\n}\n\nexport const defaultOptionsWithTimezones: Partial<OptionsWithTimezones> = {\n  timezone: [],\n};\n\n/**\n * TODO docs\n */\nexport interface OptionsWithTextFormatting {\n  text?: VizTextDisplayOptions;\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueColorMode {\n  Background = 'background',\n  BackgroundSolid = 'background_solid',\n  None = 'none',\n  Value = 'value',\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueGraphMode {\n  Area = 'area',\n  Line = 'line',\n  None = 'none',\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueJustifyMode {\n  Auto = 'auto',\n  Center = 'center',\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueTextMode {\n  Auto = 'auto',\n  Name = 'name',\n  None = 'none',\n  Value = 'value',\n  ValueAndName = 'value_and_name',\n}\n\n/**\n * TODO docs\n */\nexport enum PercentChangeColorMode {\n  Inverted = 'inverted',\n  SameAsValue = 'same_as_value',\n  Standard = 'standard',\n}\n\n/**\n * TODO -- should not be table specific!\n * TODO docs\n */\nexport type FieldTextAlignment = ('auto' | 'left' | 'right' | 'center');\n\n/**\n * Controls the value alignment in the TimelineChart component\n */\nexport type TimelineValueAlignment = ('center' | 'left' | 'right');\n\n/**\n * TODO docs\n */\nexport interface VizTextDisplayOptions {\n  /**\n   * Explicit percent text size\n   */\n  percentSize?: number;\n  /**\n   * Explicit title text size\n   */\n  titleSize?: number;\n  /**\n   * Explicit value text size\n   */\n  valueSize?: number;\n}\n\n/**\n * TODO docs\n */\nexport enum TooltipDisplayMode {\n  Multi = 'multi',\n  None = 'none',\n  Single = 'single',\n}\n\n/**\n * TODO docs\n */\nexport enum SortOrder {\n  Ascending = 'asc',\n  Descending = 'desc',\n  None = 'none',\n}\n\n/**\n * TODO docs\n */\nexport interface GraphFieldConfig extends LineConfig, FillConfig, PointsConfig, AxisConfig, BarConfig, StackableFieldConfig, HideableFieldConfig {\n  drawStyle?: GraphDrawStyle;\n  gradientMode?: GraphGradientMode;\n  insertNulls?: (boolean | number);\n  thresholdsStyle?: GraphThresholdsStyleConfig;\n  transform?: GraphTransform;\n}\n\n/**\n * TODO docs\n */\nexport interface VizLegendOptions {\n  asTable?: boolean;\n  calcs: Array<string>;\n  displayMode: LegendDisplayMode;\n  isVisible?: boolean;\n  placement: LegendPlacement;\n  showLegend: boolean;\n  sortBy?: string;\n  sortDesc?: boolean;\n  width?: number;\n}\n\nexport const defaultVizLegendOptions: Partial<VizLegendOptions> = {\n  calcs: [],\n};\n\n/**\n * Enum expressing the possible display modes\n * for the bar gauge component of Grafana UI\n */\nexport enum BarGaugeDisplayMode {\n  Basic = 'basic',\n  Gradient = 'gradient',\n  Lcd = 'lcd',\n}\n\n/**\n * Allows for the table cell gauge display type to set the gauge mode.\n */\nexport enum BarGaugeValueMode {\n  Color = 'color',\n  Hidden = 'hidden',\n  Text = 'text',\n}\n\n/**\n * Allows for the bar gauge name to be placed explicitly\n */\nexport enum BarGaugeNamePlacement {\n  Auto = 'auto',\n  Hidden = 'hidden',\n  Left = 'left',\n  Top = 'top',\n}\n\n/**\n * Allows for the bar gauge size to be set explicitly\n */\nexport enum BarGaugeSizing {\n  Auto = 'auto',\n  Manual = 'manual',\n}\n\n/**\n * TODO docs\n */\nexport interface VizTooltipOptions {\n  hideZeros?: boolean;\n  maxHeight?: number;\n  maxWidth?: number;\n  mode: TooltipDisplayMode;\n  sort: SortOrder;\n}\n\nexport interface Labels {}\n\n/**\n * Internally, this is the \"type\" of cell that's being displayed\n * in the table such as colored text, JSON, gauge, etc.\n * The color-background-solid, gradient-gauge, and lcd-gauge\n * modes are deprecated in favor of new cell subOptions\n */\nexport enum TableCellDisplayMode {\n  Actions = 'actions',\n  Auto = 'auto',\n  BasicGauge = 'basic',\n  ColorBackground = 'color-background',\n  ColorBackgroundSolid = 'color-background-solid',\n  ColorText = 'color-text',\n  Custom = 'custom',\n  DataLinks = 'data-links',\n  Gauge = 'gauge',\n  GradientGauge = 'gradient-gauge',\n  Image = 'image',\n  JSONView = 'json-view',\n  LcdGauge = 'lcd-gauge',\n  Sparkline = 'sparkline',\n}\n\n/**\n * Display mode to the \"Colored Background\" display\n * mode for table cells. Either displays a solid color (basic mode)\n * or a gradient.\n */\nexport enum TableCellBackgroundDisplayMode {\n  Basic = 'basic',\n  Gradient = 'gradient',\n}\n\n/**\n * Sort by field state\n */\nexport interface TableSortByFieldState {\n  /**\n   * Flag used to indicate descending sort order\n   */\n  desc?: boolean;\n  /**\n   * Sets the display name of the field to sort by\n   */\n  displayName: string;\n}\n\n/**\n * Footer options\n */\nexport interface TableFooterOptions {\n  countRows?: boolean;\n  enablePagination?: boolean;\n  fields?: Array<string>;\n  reducer: Array<string>; // actually 1 value\n  show: boolean;\n}\n\nexport const defaultTableFooterOptions: Partial<TableFooterOptions> = {\n  fields: [],\n  reducer: [],\n};\n\n/**\n * Auto mode table cell options\n */\nexport interface TableAutoCellOptions {\n  type: TableCellDisplayMode.Auto;\n  wrapText?: boolean;\n}\n\n/**\n * Colored text cell options\n */\nexport interface TableColorTextCellOptions {\n  type: TableCellDisplayMode.ColorText;\n  wrapText?: boolean;\n}\n\n/**\n * Json view cell options\n */\nexport interface TableJsonViewCellOptions {\n  type: TableCellDisplayMode.JSONView;\n}\n\n/**\n * Json view cell options\n */\nexport interface TableImageCellOptions {\n  alt?: string;\n  title?: string;\n  type: TableCellDisplayMode.Image;\n}\n\n/**\n * Show data links in the cell\n */\nexport interface TableDataLinksCellOptions {\n  type: TableCellDisplayMode.DataLinks;\n}\n\n/**\n * Show actions in the cell\n */\nexport interface TableActionsCellOptions {\n  type: TableCellDisplayMode.Actions;\n}\n\n/**\n * Gauge cell options\n */\nexport interface TableBarGaugeCellOptions {\n  mode?: BarGaugeDisplayMode;\n  type: TableCellDisplayMode.Gauge;\n  valueDisplayMode?: BarGaugeValueMode;\n}\n\n/**\n * Sparkline cell options\n */\nexport interface TableSparklineCellOptions extends GraphFieldConfig {\n  hideValue?: boolean;\n  type: TableCellDisplayMode.Sparkline;\n}\n\n/**\n * Colored background cell options\n */\nexport interface TableColoredBackgroundCellOptions {\n  applyToRow?: boolean;\n  mode?: TableCellBackgroundDisplayMode;\n  type: TableCellDisplayMode.ColorBackground;\n  wrapText?: boolean;\n}\n\n/**\n * Height of a table cell\n */\nexport enum TableCellHeight {\n  Auto = 'auto',\n  Lg = 'lg',\n  Md = 'md',\n  Sm = 'sm',\n}\n\n/**\n * Table cell options. Each cell has a display mode\n * and other potential options for that display.\n */\nexport type TableCellOptions = (TableAutoCellOptions | TableSparklineCellOptions | TableBarGaugeCellOptions | TableColoredBackgroundCellOptions | TableColorTextCellOptions | TableImageCellOptions | TableDataLinksCellOptions | TableActionsCellOptions | TableJsonViewCellOptions);\n\n/**\n * Use UTC/GMT timezone\n */\nexport type TimeZoneUtc = 'utc';\n\n/**\n * Use the timezone defined by end user web browser\n */\nexport type TimeZoneBrowser = 'browser';\n\n/**\n * Optional formats for the template variable replace functions\n * See also https://grafana.com/docs/grafana/latest/dashboards/variables/variable-syntax/#advanced-variable-format-options\n */\nexport enum VariableFormatID {\n  CSV = 'csv',\n  Date = 'date',\n  Distributed = 'distributed',\n  DoubleQuote = 'doublequote',\n  Glob = 'glob',\n  HTML = 'html',\n  JSON = 'json',\n  Lucene = 'lucene',\n  PercentEncode = 'percentencode',\n  Pipe = 'pipe',\n  QueryParam = 'queryparam',\n  Raw = 'raw',\n  Regex = 'regex',\n  SQLString = 'sqlstring',\n  SingleQuote = 'singlequote',\n  Text = 'text',\n  UriEncode = 'uriencode',\n}\n\nexport interface DataSourceRef {\n  /**\n   *  Datasource API version\n   */\n  apiVersion?: string;\n  /**\n   * The plugin type-id\n   */\n  type?: string;\n  /**\n   * Specific datasource instance\n   */\n  uid?: string;\n}\n\n/**\n * Links to a resource (image/svg path)\n */\nexport interface ResourceDimensionConfig extends BaseDimensionConfig {\n  fixed?: string;\n  mode: ResourceDimensionMode;\n}\n\nexport interface FrameGeometrySource {\n  /**\n   * Path to Gazetteer\n   */\n  gazetteer?: string;\n  /**\n   * Field mappings\n   */\n  geohash?: string;\n  latitude?: string;\n  longitude?: string;\n  lookup?: string;\n  mode: FrameGeometrySourceMode;\n  wkt?: string;\n}\n\nexport interface HeatmapCalculationOptions {\n  /**\n   * The number of buckets to use for the xAxis in the heatmap\n   */\n  xBuckets?: HeatmapCalculationBucketConfig;\n  /**\n   * The number of buckets to use for the yAxis in the heatmap\n   */\n  yBuckets?: HeatmapCalculationBucketConfig;\n}\n\nexport enum LogsDedupStrategy {\n  exact = 'exact',\n  none = 'none',\n  numbers = 'numbers',\n  signature = 'signature',\n}\n\n/**\n * Compare two values\n */\nexport enum ComparisonOperation {\n  EQ = 'eq',\n  GT = 'gt',\n  GTE = 'gte',\n  LT = 'lt',\n  LTE = 'lte',\n  NEQ = 'neq',\n}\n\n/**\n * Field options for each field within a table (e.g 10, \"The String\", 64.20, etc.)\n * Generally defines alignment, filtering capabilties, display options, etc.\n */\nexport interface TableFieldOptions {\n  align: FieldTextAlignment;\n  cellOptions: TableCellOptions;\n  /**\n   * This field is deprecated in favor of using cellOptions\n   */\n  displayMode?: TableCellDisplayMode;\n  filterable?: boolean;\n  hidden?: boolean; // ?? default is missing or false ??\n  /**\n   * Hides any header for a column, useful for columns that show some static content or buttons.\n   */\n  hideHeader?: boolean;\n  inspect: boolean;\n  minWidth?: number;\n  width?: number;\n}\n\nexport const defaultTableFieldOptions: Partial<TableFieldOptions> = {\n  align: 'auto',\n  inspect: false,\n};\n\n/**\n * A specific timezone from https://en.wikipedia.org/wiki/Tz_database\n */\nexport type TimeZone = (TimeZoneUtc | TimeZoneBrowser | string);\n\nexport const defaultTimeZone: TimeZone = 'browser';\n","import { css, cx } from '@emotion/css';\nimport { AnchorHTMLAttributes, ButtonHTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeRichColor } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes';\nimport { getFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\nimport { ComponentSize, IconSize, IconType } from '../../types';\nimport { IconName } from '../../types/icon';\nimport { getPropertiesForButtonSize } from '../Forms/commonStyles';\nimport { Icon } from '../Icon/Icon';\nimport { PopoverContent, Tooltip, TooltipPlacement } from '../Tooltip';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'destructive' | 'success';\nexport const allButtonVariants: ButtonVariant[] = ['primary', 'secondary', 'destructive'];\nexport type ButtonFill = 'solid' | 'outline' | 'text';\nexport const allButtonFills: ButtonFill[] = ['solid', 'outline', 'text'];\n\ntype CommonProps = {\n  size?: ComponentSize;\n  variant?: ButtonVariant;\n  fill?: ButtonFill;\n  icon?: IconName | React.ReactElement;\n  className?: string;\n  children?: React.ReactNode;\n  fullWidth?: boolean;\n  type?: string;\n  /** Tooltip content to display on hover */\n  tooltip?: PopoverContent;\n  /** Position of the tooltip */\n  tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonProps = CommonProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      variant = 'primary',\n      size = 'md',\n      fill = 'solid',\n      icon,\n      fullWidth,\n      children,\n      className,\n      type = 'button',\n      tooltip,\n      disabled,\n      tooltipPlacement,\n      onClick,\n      ...otherProps\n    },\n    ref\n  ) => {\n    const theme = useTheme2();\n    const styles = getButtonStyles({\n      theme,\n      size,\n      variant,\n      fill,\n      fullWidth,\n      iconOnly: !children,\n    });\n\n    const buttonStyles = cx(\n      styles.button,\n      {\n        [styles.disabled]: disabled,\n      },\n      className\n    );\n\n    const hasTooltip = Boolean(tooltip);\n\n    // In order to standardise Button please always consider using IconButton when you need a button with an icon only\n    // When using tooltip, ref is forwarded to Tooltip component instead for https://github.com/grafana/grafana/issues/65632\n    const button = (\n      <button\n        className={buttonStyles}\n        type={type}\n        onClick={disabled ? undefined : onClick}\n        {...otherProps}\n        // In order for the tooltip to be accessible when disabled,\n        // we need to set aria-disabled instead of the native disabled attribute\n        aria-disabled={hasTooltip && disabled}\n        disabled={!hasTooltip && disabled}\n        ref={tooltip ? undefined : ref}\n      >\n        <IconRenderer icon={icon} size={size} className={styles.icon} />\n        {children && <span className={styles.content}>{children}</span>}\n      </button>\n    );\n\n    if (tooltip) {\n      return (\n        <Tooltip ref={ref} content={tooltip} placement={tooltipPlacement}>\n          {button}\n        </Tooltip>\n      );\n    }\n\n    return button;\n  }\n);\n\nButton.displayName = 'Button';\n\nexport type ButtonLinkProps = CommonProps &\n  ButtonHTMLAttributes<HTMLButtonElement> &\n  AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const LinkButton = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>(\n  (\n    {\n      variant = 'primary',\n      size = 'md',\n      fill = 'solid',\n      icon,\n      fullWidth,\n      children,\n      className,\n      onBlur,\n      onFocus,\n      disabled,\n      tooltip,\n      tooltipPlacement,\n      ...otherProps\n    },\n    ref\n  ) => {\n    const theme = useTheme2();\n    const styles = getButtonStyles({\n      theme,\n      fullWidth,\n      size,\n      variant,\n      fill,\n      iconOnly: !children,\n    });\n\n    const linkButtonStyles = cx(\n      styles.button,\n      {\n        [css(styles.disabled, {\n          pointerEvents: 'none',\n        })]: disabled,\n      },\n      className\n    );\n\n    // When using tooltip, ref is forwarded to Tooltip component instead for https://github.com/grafana/grafana/issues/65632\n    const button = (\n      <a\n        className={linkButtonStyles}\n        {...otherProps}\n        tabIndex={disabled ? -1 : 0}\n        aria-disabled={disabled}\n        ref={tooltip ? undefined : ref}\n      >\n        <IconRenderer icon={icon} size={size} className={styles.icon} />\n        {children && <span className={styles.content}>{children}</span>}\n      </a>\n    );\n\n    if (tooltip) {\n      return (\n        <Tooltip ref={ref} content={tooltip} placement={tooltipPlacement}>\n          {button}\n        </Tooltip>\n      );\n    }\n\n    return button;\n  }\n);\n\nLinkButton.displayName = 'LinkButton';\n\ninterface IconRendererProps {\n  icon?: IconName | React.ReactElement<{ className?: string; size?: IconSize }>;\n  size?: IconSize;\n  className?: string;\n  iconType?: IconType;\n}\nexport const IconRenderer = ({ icon, size, className, iconType }: IconRendererProps) => {\n  if (!icon) {\n    return null;\n  }\n  if (React.isValidElement(icon)) {\n    return React.cloneElement(icon, {\n      className,\n      size,\n    });\n  }\n  return <Icon name={icon} size={size} className={className} type={iconType} />;\n};\n\nexport interface StyleProps {\n  size: ComponentSize;\n  variant: ButtonVariant;\n  fill?: ButtonFill;\n  iconOnly?: boolean;\n  theme: GrafanaTheme2;\n  fullWidth?: boolean;\n  narrow?: boolean;\n}\n\nexport const getButtonStyles = (props: StyleProps) => {\n  const { theme, variant, fill = 'solid', size, iconOnly, fullWidth } = props;\n  const { height, padding, fontSize } = getPropertiesForButtonSize(size, theme);\n  const variantStyles = getPropertiesForVariant(theme, variant, fill);\n  const disabledStyles = getPropertiesForDisabled(theme, variant, fill);\n  const focusStyle = getFocusStyles(theme);\n  const paddingMinusBorder = theme.spacing.gridSize * padding - 1;\n\n  return {\n    button: css({\n      label: 'button',\n      display: 'inline-flex',\n      alignItems: 'center',\n      fontSize: fontSize,\n      fontWeight: theme.typography.fontWeightMedium,\n      fontFamily: theme.typography.fontFamily,\n      padding: `0 ${paddingMinusBorder}px`,\n      height: theme.spacing(height),\n      // Deduct border from line-height for perfect vertical centering on windows and linux\n      lineHeight: `${theme.spacing.gridSize * height - 2}px`,\n      verticalAlign: 'middle',\n      cursor: 'pointer',\n      borderRadius: theme.shape.radius.default,\n      '&:focus': focusStyle,\n      '&:focus-visible': focusStyle,\n      '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n      ...(fullWidth && {\n        flexGrow: 1,\n        justifyContent: 'center',\n      }),\n      ...variantStyles,\n      ':disabled': disabledStyles,\n      '&[disabled]': disabledStyles,\n    }),\n    disabled: css(disabledStyles, {\n      '&:hover': css(disabledStyles),\n    }),\n    img: css({\n      width: '16px',\n      height: '16px',\n      margin: theme.spacing(0, 1, 0, 0.5),\n    }),\n    icon: iconOnly\n      ? css({\n          // Important not to set margin bottom here as it would override internal icon bottom margin\n          marginRight: theme.spacing(-padding / 2),\n          marginLeft: theme.spacing(-padding / 2),\n        })\n      : css({\n          marginRight: theme.spacing(padding / 2),\n        }),\n    content: css({\n      display: 'flex',\n      flexDirection: 'row',\n      alignItems: 'center',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      height: '100%',\n    }),\n  };\n};\n\nfunction getButtonVariantStyles(theme: GrafanaTheme2, color: ThemeRichColor, fill: ButtonFill) {\n  let outlineBorderColor = color.border;\n  let borderColor = 'transparent';\n  let hoverBorderColor = 'transparent';\n\n  // Secondary button has some special rules as we lack theem color token to\n  // specify border color for normal button vs border color for outline button\n  if (color.name === 'secondary') {\n    borderColor = color.border;\n    hoverBorderColor = theme.colors.emphasize(color.border, 0.25);\n    outlineBorderColor = theme.colors.border.strong;\n  }\n\n  if (fill === 'outline') {\n    return {\n      background: 'transparent',\n      color: color.text,\n      border: `1px solid ${outlineBorderColor}`,\n      transition: theme.transitions.create(['background-color', 'border-color', 'color'], {\n        duration: theme.transitions.duration.short,\n      }),\n\n      '&:hover': {\n        background: color.transparent,\n        borderColor: theme.colors.emphasize(outlineBorderColor, 0.25),\n        color: color.text,\n      },\n    };\n  }\n\n  if (fill === 'text') {\n    return {\n      background: 'transparent',\n      color: color.text,\n      border: '1px solid transparent',\n      transition: theme.transitions.create(['background-color', 'color'], {\n        duration: theme.transitions.duration.short,\n      }),\n\n      '&:focus': {\n        outline: 'none',\n        textDecoration: 'none',\n      },\n\n      '&:hover': {\n        background: color.transparent,\n        textDecoration: 'none',\n      },\n    };\n  }\n\n  return {\n    background: color.main,\n    color: color.contrastText,\n    border: `1px solid ${borderColor}`,\n    transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {\n      duration: theme.transitions.duration.short,\n    }),\n\n    '&:hover': {\n      background: color.shade,\n      color: color.contrastText,\n      boxShadow: theme.shadows.z1,\n      borderColor: hoverBorderColor,\n    },\n  };\n}\n\nfunction getPropertiesForDisabled(theme: GrafanaTheme2, variant: ButtonVariant, fill: ButtonFill) {\n  const disabledStyles = {\n    cursor: 'not-allowed',\n    boxShadow: 'none',\n    color: theme.colors.text.disabled,\n    transition: 'none',\n  };\n\n  if (fill === 'text') {\n    return {\n      ...disabledStyles,\n      background: 'transparent',\n      border: `1px solid transparent`,\n    };\n  }\n\n  if (fill === 'outline') {\n    return {\n      ...disabledStyles,\n      background: 'transparent',\n      border: `1px solid ${theme.colors.border.weak}`,\n    };\n  }\n\n  return {\n    ...disabledStyles,\n    background: theme.colors.action.disabledBackground,\n    border: `1px solid transparent`,\n  };\n}\n\nexport function getPropertiesForVariant(theme: GrafanaTheme2, variant: ButtonVariant, fill: ButtonFill) {\n  switch (variant) {\n    case 'secondary':\n      // The seconday button has some special handling as it's outline border is it's default color border\n      return getButtonVariantStyles(theme, theme.colors.secondary, fill);\n\n    case 'destructive':\n      return getButtonVariantStyles(theme, theme.colors.error, fill);\n\n    case 'success':\n      return getButtonVariantStyles(theme, theme.colors.success, fill);\n\n    case 'primary':\n    default:\n      return getButtonVariantStyles(theme, theme.colors.primary, fill);\n  }\n}\n\nexport const clearButtonStyles = (theme: GrafanaTheme2) => {\n  return css({\n    background: 'transparent',\n    color: theme.colors.text.primary,\n    border: 'none',\n    padding: 0,\n  });\n};\n\nexport const clearLinkButtonStyles = (theme: GrafanaTheme2) => {\n  return css({\n    background: 'transparent',\n    border: 'none',\n    padding: 0,\n    fontFamily: 'inherit',\n    color: 'inherit',\n    height: '100%',\n    cursor: 'context-menu',\n    '&:hover': {\n      background: 'transparent',\n      color: 'inherit',\n    },\n  });\n};\n","import { css } from '@emotion/css';\n\nimport { useStyles2 } from '../../themes';\n\nimport { ErrorBoundaryApi } from './ErrorBoundary';\n\nexport interface Props extends ErrorBoundaryApi {\n  title: string;\n}\n\nexport const ErrorWithStack = ({ error, errorInfo, title }: Props) => {\n  const style = useStyles2(getStyles);\n\n  return (\n    <div className={style}>\n      <h2>{title}</h2>\n      <details style={{ whiteSpace: 'pre-wrap' }}>\n        {error && error.toString()}\n        <br />\n        {errorInfo && errorInfo.componentStack}\n      </details>\n    </div>\n  );\n};\n\nErrorWithStack.displayName = 'ErrorWithStack';\n\nconst getStyles = () => {\n  return css({\n    width: '500px',\n    margin: '64px auto',\n  });\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { getFocusStyles } from '../../themes/mixins';\nimport { ComponentSize } from '../../types/size';\n\nexport const getFocusStyle = (theme: GrafanaTheme2) =>\n  css({\n    '&:focus': getFocusStyles(theme),\n  });\n\nexport const sharedInputStyle = (theme: GrafanaTheme2, invalid = false) => {\n  const borderColor = invalid ? theme.colors.error.border : theme.components.input.borderColor;\n  const borderColorHover = invalid ? theme.colors.error.shade : theme.components.input.borderHover;\n  const background = theme.components.input.background;\n  const textColor = theme.components.input.text;\n\n  // Cannot use our normal borders for this color for some reason due the alpha values in them.\n  // Need to colors without alpha channel\n  const autoFillBorder = theme.isDark ? '#2e2f35' : '#bab4ca';\n\n  return cx(\n    inputPadding(theme),\n    css({\n      background,\n      lineHeight: theme.typography.body.lineHeight,\n      fontSize: theme.typography.size.md,\n      color: textColor,\n      border: `1px solid ${borderColor}`,\n\n      '&:-webkit-autofill, &:-webkit-autofill:hover': {\n        /* Welcome to 2005. This is a HACK to get rid od Chromes default autofill styling */\n        boxShadow: `inset 0 0 0 1px rgba(255, 255, 255, 0), inset 0 0 0 100px ${background}!important`,\n        WebkitTextFillColor: `${textColor} !important`,\n        borderColor: autoFillBorder,\n      },\n\n      '&:-webkit-autofill:focus': {\n        /* Welcome to 2005. This is a HACK to get rid od Chromes default autofill styling */\n        boxShadow: `0 0 0 2px ${theme.colors.background.primary}, 0 0 0px 4px ${theme.colors.primary.main}, inset 0 0 0 1px rgba(255, 255, 255, 0), inset 0 0 0 100px ${background}!important`,\n        WebkitTextFillColor: `${textColor} !important`,\n      },\n\n      '&:hover': {\n        borderColor: borderColorHover,\n      },\n\n      '&:focus': {\n        outline: 'none',\n      },\n\n      '&:disabled': {\n        backgroundColor: theme.colors.action.disabledBackground,\n        color: theme.colors.action.disabledText,\n        border: `1px solid ${theme.colors.action.disabledBackground}`,\n\n        '&:hover': {\n          borderColor,\n        },\n      },\n\n      '&::placeholder': {\n        color: theme.colors.text.disabled,\n        opacity: 1,\n      },\n    })\n  );\n};\n\nexport const inputPadding = (theme: GrafanaTheme2) => {\n  return css({\n    padding: theme.spacing(0, 1, 0, 1),\n  });\n};\n\nexport const inputSizes = () => {\n  return {\n    sm: css({\n      width: inputSizesPixels('sm'),\n    }),\n    md: css({\n      width: inputSizesPixels('md'),\n    }),\n    lg: css({\n      width: inputSizesPixels('lg'),\n    }),\n    auto: css({\n      width: inputSizesPixels('auto'),\n    }),\n  };\n};\n\nexport const inputSizesPixels = (size: string) => {\n  switch (size) {\n    case 'sm':\n      return '200px';\n    case 'md':\n      return '320px';\n    case 'lg':\n      return '580px';\n    case 'auto':\n    default:\n      return 'auto';\n  }\n};\n\nexport function getPropertiesForButtonSize(size: ComponentSize, theme: GrafanaTheme2) {\n  switch (size) {\n    case 'sm':\n      return {\n        padding: 1,\n        fontSize: theme.typography.size.sm,\n        height: theme.components.height.sm,\n      };\n\n    case 'lg':\n      return {\n        padding: 3,\n        fontSize: theme.typography.size.lg,\n        height: theme.components.height.lg,\n      };\n    case 'md':\n    default:\n      return {\n        padding: 2,\n        fontSize: theme.typography.size.md,\n        height: theme.components.height.md,\n      };\n  }\n}\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\nimport SVG from 'react-inlinesvg';\n\nimport { GrafanaTheme2, isIconName } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { IconName, IconType, IconSize } from '../../types/icon';\nimport { spin } from '../../utils/keyframes';\n\nimport { getIconRoot, getIconSubDir, getSvgSize } from './utils';\n\nexport interface IconProps extends Omit<React.SVGProps<SVGElement>, 'onLoad' | 'onError' | 'ref'> {\n  name: IconName;\n  size?: IconSize;\n  type?: IconType;\n  /**\n   * Give your icon a semantic meaning. The icon will be hidden from screen readers, unless this prop or an aria-label is provided.\n   */\n  title?: string;\n}\n\nconst getIconStyles = (theme: GrafanaTheme2) => {\n  return {\n    icon: css({\n      display: 'inline-block',\n      fill: 'currentColor',\n      flexShrink: 0,\n      label: 'Icon',\n      // line-height: 0; is needed for correct icon alignment in Safari\n      lineHeight: 0,\n      verticalAlign: 'middle',\n    }),\n    orange: css({\n      fill: theme.v1.palette.orange,\n    }),\n    spin: css({\n      [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n        animation: `${spin} 2s infinite linear`,\n      },\n    }),\n  };\n};\n\nexport const Icon = React.forwardRef<SVGElement, IconProps>(\n  ({ size = 'md', type = 'default', name, className, style, title = '', ...rest }, ref) => {\n    const styles = useStyles2(getIconStyles);\n\n    if (!isIconName(name)) {\n      console.warn('Icon component passed an invalid icon name', name);\n    }\n\n    // handle the deprecated 'fa fa-spinner'\n    const iconName: IconName = name === 'fa fa-spinner' ? 'spinner' : name;\n\n    const iconRoot = getIconRoot();\n    const svgSize = getSvgSize(size);\n    const svgHgt = svgSize;\n    const svgWid = name.startsWith('gf-bar-align') ? 16 : name.startsWith('gf-interp') ? 30 : svgSize;\n    const subDir = getIconSubDir(iconName, type);\n    const svgPath = `${iconRoot}${subDir}/${iconName}.svg`;\n\n    const composedClassName = cx(\n      styles.icon,\n      className,\n      type === 'mono' ? { [styles.orange]: name === 'favorite' } : '',\n      {\n        [styles.spin]: iconName === 'spinner',\n      }\n    );\n\n    return (\n      <SVG\n        aria-hidden={\n          rest.tabIndex === undefined &&\n          !title &&\n          !rest['aria-label'] &&\n          !rest['aria-labelledby'] &&\n          !rest['aria-describedby']\n        }\n        innerRef={ref}\n        src={svgPath}\n        width={svgWid}\n        height={svgHgt}\n        title={title}\n        className={composedClassName}\n        style={style}\n        // render an empty div with the correct dimensions while loading\n        // this prevents content layout shift whilst the icon asynchronously loads\n        // which happens even if the icon is in the cache(!)\n        loader={\n          <div\n            className={cx(\n              css({\n                width: svgWid,\n                height: svgHgt,\n              }),\n              composedClassName\n            )}\n          />\n        }\n        {...rest}\n      />\n    );\n  }\n);\n\nIcon.displayName = 'Icon';\n","import { IconName, IconSize, IconType } from '../../types/icon';\n\nconst alwaysMonoIcons: IconName[] = [\n  'grafana',\n  'favorite',\n  'heart-break',\n  'heart',\n  'panel-add',\n  'library-panel',\n  'circle-mono',\n];\n\nexport function getIconSubDir(name: IconName, type: IconType): string {\n  if (name?.startsWith('gf-')) {\n    return 'custom';\n  } else if (alwaysMonoIcons.includes(name)) {\n    return 'mono';\n  } else if (type === 'default') {\n    return 'unicons';\n  } else if (type === 'solid') {\n    return 'solid';\n  } else {\n    return 'mono';\n  }\n}\n\n/* Transform string with px to number and add 2 pxs as path in svg is 2px smaller */\nexport function getSvgSize(size: IconSize) {\n  switch (size) {\n    case 'xs':\n      return 12;\n    case 'sm':\n      return 14;\n    case 'md':\n      return 16;\n    case 'lg':\n      return 18;\n    case 'xl':\n      return 24;\n    case 'xxl':\n      return 36;\n    case 'xxxl':\n      return 48;\n  }\n}\n\nlet iconRoot: string | undefined;\n\nexport function getIconRoot(): string {\n  if (iconRoot) {\n    return iconRoot;\n  }\n\n  const grafanaPublicPath = typeof window !== 'undefined' && window.__grafana_public_path__;\n  if (grafanaPublicPath) {\n    iconRoot = grafanaPublicPath + 'img/icons/';\n  } else {\n    iconRoot = 'public/img/icons/';\n  }\n\n  return iconRoot;\n}\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, colorManipulator, deprecationWarning } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\nimport { getFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\nimport { ComponentSize } from '../../types';\nimport { IconName, IconSize, IconType } from '../../types/icon';\nimport { IconRenderer } from '../Button';\nimport { getSvgSize } from '../Icon/utils';\nimport { TooltipPlacement, PopoverContent, Tooltip } from '../Tooltip';\n\nexport type IconButtonVariant = 'primary' | 'secondary' | 'destructive';\n\ntype LimitedIconSize = ComponentSize | 'xl';\n\ninterface BaseProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'aria-label'> {\n  /** Name of the icon **/\n  name: IconName;\n  /** Icon size - sizes xxl and xxxl are deprecated and when used being decreased to xl*/\n  size?: IconSize;\n  /** Type of the icon - mono or default */\n  iconType?: IconType;\n  /** Variant to change the color of the Icon */\n  variant?: IconButtonVariant;\n}\n\nexport interface BasePropsWithTooltip extends BaseProps {\n  /** Tooltip content to display on hover and as the aria-label */\n  tooltip: PopoverContent;\n  /** Position of the tooltip */\n  tooltipPlacement?: TooltipPlacement;\n}\n\ninterface BasePropsWithAriaLabel extends BaseProps {\n  /** @deprecated use aria-label instead*/\n  ariaLabel?: string;\n  /** Text available only for screen readers. No tooltip will be set in this case. */\n  ['aria-label']: string;\n}\n\nexport type Props = BasePropsWithTooltip | BasePropsWithAriaLabel;\n\nexport const IconButton = React.forwardRef<HTMLButtonElement, Props>((props, ref) => {\n  const { size = 'md', variant = 'secondary' } = props;\n  let limitedIconSize: LimitedIconSize;\n\n  // very large icons (xl to xxxl) are unified to size xl\n  if (size === 'xxl' || size === 'xxxl') {\n    deprecationWarning('IconButton', 'size=\"xxl\" and size=\"xxxl\"', 'size=\"xl\"');\n    limitedIconSize = 'xl';\n  } else {\n    limitedIconSize = size;\n  }\n\n  const styles = useStyles2(getStyles, limitedIconSize, variant);\n\n  let ariaLabel: string | undefined;\n  let buttonRef: typeof ref | undefined;\n\n  if ('tooltip' in props) {\n    const { tooltip } = props;\n    ariaLabel = typeof tooltip === 'string' ? tooltip : undefined;\n  } else if ('ariaLabel' in props || 'aria-label' in props) {\n    const { ariaLabel: deprecatedAriaLabel, ['aria-label']: ariaLabelProp } = props;\n    ariaLabel = ariaLabelProp || deprecatedAriaLabel;\n    buttonRef = ref;\n  }\n\n  // When using tooltip, ref is forwarded to Tooltip component instead for https://github.com/grafana/grafana/issues/65632\n  if ('tooltip' in props) {\n    const { name, iconType, className, tooltip, tooltipPlacement, ...restProps } = props;\n    return (\n      <Tooltip ref={ref} content={tooltip} placement={tooltipPlacement}>\n        <button\n          {...restProps}\n          ref={buttonRef}\n          aria-label={ariaLabel}\n          className={cx(styles.button, className)}\n          type=\"button\"\n        >\n          <IconRenderer icon={name} size={limitedIconSize} className={styles.icon} iconType={iconType} />\n        </button>\n      </Tooltip>\n    );\n  } else {\n    const { name, iconType, className, ...restProps } = props;\n    return (\n      <button\n        {...restProps}\n        ref={buttonRef}\n        aria-label={ariaLabel}\n        className={cx(styles.button, className)}\n        type=\"button\"\n      >\n        <IconRenderer icon={name} size={limitedIconSize} className={styles.icon} iconType={iconType} />\n      </button>\n    );\n  }\n});\n\nIconButton.displayName = 'IconButton';\n\nconst getStyles = (theme: GrafanaTheme2, size: IconSize, variant: IconButtonVariant) => {\n  // overall size of the IconButton on hover\n  // theme.spacing.gridSize originates from 2*4px for padding and letting the IconSize generally decide on the hoverSize\n  const hoverSize = getSvgSize(size) + theme.spacing.gridSize;\n\n  let iconColor = theme.colors.text.primary;\n\n  if (variant === 'primary') {\n    iconColor = theme.colors.primary.text;\n  } else if (variant === 'destructive') {\n    iconColor = theme.colors.error.text;\n  }\n\n  return {\n    button: css({\n      zIndex: 0,\n      position: 'relative',\n      margin: `0 ${theme.spacing.x0_5} 0 0`,\n      boxShadow: 'none',\n      border: 'none',\n      display: 'inline-flex',\n      background: 'transparent',\n      justifyContent: 'center',\n      alignItems: 'center',\n      padding: 0,\n      color: iconColor,\n\n      '&[disabled], &:disabled': {\n        cursor: 'not-allowed',\n        color: theme.colors.action.disabledText,\n        opacity: 0.65,\n      },\n\n      '&:before': {\n        zIndex: -1,\n        position: 'absolute',\n        opacity: 0,\n        width: `${hoverSize}px`,\n        height: `${hoverSize}px`,\n        borderRadius: theme.shape.radius.default,\n        content: '\"\"',\n        [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n          transitionDuration: '0.2s',\n          transitionTimingFunction: 'cubic-bezier(0.4, 0, 0.2, 1)',\n          transitionProperty: 'opacity',\n        },\n      },\n\n      '&:focus, &:focus-visible': getFocusStyles(theme),\n\n      '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n\n      '&:hover': {\n        '&:before': {\n          backgroundColor:\n            variant === 'secondary' ? theme.colors.action.hover : colorManipulator.alpha(iconColor, 0.12),\n          opacity: 1,\n        },\n      },\n    }),\n    icon: css({\n      verticalAlign: 'baseline',\n    }),\n  };\n};\n","import React from 'react';\n\n// Used to tell Input to increase the width properly of the input to fit the text.\n// See comment in Input.tsx for more details\nexport const AutoSizeInputContext = React.createContext(false);\nAutoSizeInputContext.displayName = 'AutoSizeInputContext';\n","import { css, cx } from '@emotion/css';\nimport { forwardRef, HTMLProps, ReactNode, useContext } from 'react';\nimport useMeasure from 'react-use/lib/useMeasure';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { stylesFactory, useTheme2 } from '../../themes';\nimport { getFocusStyle, sharedInputStyle } from '../Forms/commonStyles';\nimport { Spinner } from '../Spinner/Spinner';\n\nimport { AutoSizeInputContext } from './AutoSizeInputContext';\n\nexport interface Props extends Omit<HTMLProps<HTMLInputElement>, 'prefix' | 'size'> {\n  /** Sets the width to a multiple of 8px. Should only be used with inline forms. Setting width of the container is preferred in other cases.*/\n  width?: number;\n  /** Show an invalid state around the input */\n  invalid?: boolean;\n  /** Show an icon as a prefix in the input */\n  prefix?: ReactNode;\n  /** Show an icon as a suffix in the input */\n  suffix?: ReactNode;\n  /** Show a loading indicator as a suffix in the input */\n  loading?: boolean;\n  /** Add a component as an addon before the input  */\n  addonBefore?: ReactNode;\n  /** Add a component as an addon after the input */\n  addonAfter?: ReactNode;\n}\n\ninterface StyleDeps {\n  theme: GrafanaTheme2;\n  invalid?: boolean;\n  width?: number;\n}\n\nexport const Input = forwardRef<HTMLInputElement, Props>((props, ref) => {\n  const {\n    className,\n    addonAfter,\n    addonBefore,\n    prefix,\n    suffix: suffixProp,\n    invalid,\n    loading,\n    width = 0,\n    ...restProps\n  } = props;\n  /**\n   * Prefix & suffix are positioned absolutely within inputWrapper. We use client rects below to apply correct padding to the input\n   * when prefix/suffix is larger than default (28px = 16px(icon) + 12px(left/right paddings)).\n   * Thanks to that prefix/suffix do not overflow the input element itself.\n   */\n  const [prefixRef, prefixRect] = useMeasure<HTMLDivElement>();\n  const [suffixRef, suffixRect] = useMeasure<HTMLDivElement>();\n\n  // Yes, this is gross - When Input is being wrapped by AutoSizeInput, add the suffix/prefix width to the overall width\n  // so the text content is not clipped. The intention is to make all the input's text appear without overflow/clipping,\n  // which isn't normally how width is used in this component.\n  // This behaviour is not controlled via a prop so we can limit API surface, and remove this as a 'breaking change' later\n  // if a better solution is found.\n  const isInAutoSizeInput = useContext(AutoSizeInputContext);\n  const accessoriesWidth = (prefixRect.width || 0) + (suffixRect.width || 0);\n  const autoSizeWidth = isInAutoSizeInput && width ? width + accessoriesWidth / 8 : undefined;\n\n  const theme = useTheme2();\n\n  // Don't pass the width prop, as this causes an unnecessary amount of Emotion calls when auto sizing\n  const styles = getInputStyles({ theme, invalid: !!invalid, width: autoSizeWidth ? undefined : width });\n\n  const suffix = suffixProp || (loading && <Spinner inline={true} />);\n\n  return (\n    <div\n      className={cx(styles.wrapper, className)}\n      // If the component is in an AutoSizeInput, set the width here to prevent emotion doing stuff\n      // on every keypress\n      style={autoSizeWidth ? { width: theme.spacing(autoSizeWidth) } : undefined}\n      data-testid=\"input-wrapper\"\n    >\n      {!!addonBefore && <div className={styles.addon}>{addonBefore}</div>}\n      <div className={styles.inputWrapper}>\n        {prefix && (\n          <div className={styles.prefix} ref={prefixRef}>\n            {prefix}\n          </div>\n        )}\n\n        <input\n          ref={ref}\n          className={styles.input}\n          {...restProps}\n          style={{\n            paddingLeft: prefix ? prefixRect.width + 12 : undefined,\n            paddingRight: suffix || loading ? suffixRect.width + 12 : undefined,\n          }}\n        />\n\n        {suffix && (\n          <div className={styles.suffix} ref={suffixRef}>\n            {suffix}\n          </div>\n        )}\n      </div>\n      {!!addonAfter && <div className={styles.addon}>{addonAfter}</div>}\n    </div>\n  );\n});\n\nInput.displayName = 'Input';\n\nexport const getInputStyles = stylesFactory(({ theme, invalid = false, width }: StyleDeps) => {\n  const prefixSuffixStaticWidth = '28px';\n  const prefixSuffix = css({\n    position: 'absolute',\n    top: 0,\n    zIndex: 1,\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    flexGrow: 0,\n    flexShrink: 0,\n    fontSize: theme.typography.size.md,\n    height: '100%',\n    /* Min width specified for prefix/suffix classes used outside React component*/\n    minWidth: prefixSuffixStaticWidth,\n    color: theme.colors.text.secondary,\n  });\n\n  return {\n    // Wraps inputWrapper and addons\n    wrapper: cx(\n      css({\n        label: 'input-wrapper',\n        display: 'flex',\n        width: width ? theme.spacing(width) : '100%',\n        height: theme.spacing(theme.components.height.md),\n        borderRadius: theme.shape.radius.default,\n        '&:hover': {\n          '> .prefix, .suffix, .input': {\n            borderColor: invalid ? theme.colors.error.border : theme.colors.primary.border,\n          },\n\n          // only show number buttons on hover\n          \"input[type='number']\": {\n            appearance: 'textfield',\n          },\n\n          \"input[type='number']::-webkit-inner-spin-button, input[type='number']::-webkit-outer-spin-button\": {\n            // Need type assertion here due to the use of !important\n            // see https://github.com/frenic/csstype/issues/114#issuecomment-697201978\n            // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n            WebkitAppearance: 'inner-spin-button !important' as 'inner-spin-button',\n            opacity: 1,\n          },\n        },\n      })\n    ),\n    // Wraps input and prefix/suffix\n    inputWrapper: css({\n      label: 'input-inputWrapper',\n      position: 'relative',\n      flexGrow: 1,\n      /* we want input to be above addons, especially for focused state */\n      zIndex: 1,\n\n      /* when input rendered with addon before only*/\n      '&:not(:first-child):last-child': {\n        '> input': {\n          borderLeft: 'none',\n          borderTopLeftRadius: 0,\n          borderBottomLeftRadius: 0,\n        },\n      },\n\n      /* when input rendered with addon after only*/\n      '&:first-child:not(:last-child)': {\n        '> input': {\n          borderRight: 'none',\n          borderTopRightRadius: 0,\n          borderBottomRightRadius: 0,\n        },\n      },\n\n      /* when rendered with addon before and after */\n      '&:not(:first-child):not(:last-child)': {\n        '> input': {\n          borderRight: 'none',\n          borderTopRightRadius: 0,\n          borderBottomRightRadius: 0,\n          borderTopLeftRadius: 0,\n          borderBottomLeftRadius: 0,\n        },\n      },\n\n      input: {\n        /* paddings specified for classes used outside React component */\n        '&:not(:first-child)': {\n          paddingLeft: prefixSuffixStaticWidth,\n        },\n        '&:not(:last-child)': {\n          paddingRight: prefixSuffixStaticWidth,\n        },\n        '&[readonly]': {\n          cursor: 'default',\n        },\n      },\n    }),\n\n    input: cx(\n      getFocusStyle(theme),\n      sharedInputStyle(theme, invalid),\n      css({\n        label: 'input-input',\n        position: 'relative',\n        zIndex: 0,\n        flexGrow: 1,\n        borderRadius: theme.shape.radius.default,\n        height: '100%',\n        width: '100%',\n      })\n    ),\n    inputDisabled: css({\n      backgroundColor: theme.colors.action.disabledBackground,\n      color: theme.colors.action.disabledText,\n      border: `1px solid ${theme.colors.action.disabledBackground}`,\n      '&:focus': {\n        boxShadow: 'none',\n      },\n    }),\n    addon: css({\n      label: 'input-addon',\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center',\n      flexGrow: 0,\n      flexShrink: 0,\n      position: 'relative',\n\n      '&:first-child': {\n        borderTopRightRadius: 0,\n        borderBottomRightRadius: 0,\n        '> :last-child': {\n          borderTopRightRadius: 0,\n          borderBottomRightRadius: 0,\n        },\n      },\n\n      '&:last-child': {\n        borderTopLeftRadius: 0,\n        borderBottomLeftRadius: 0,\n        '> :first-child': {\n          borderTopLeftRadius: 0,\n          borderBottomLeftRadius: 0,\n        },\n      },\n      '> *:focus': {\n        /* we want anything that has focus and is an addon to be above input */\n        zIndex: 2,\n      },\n    }),\n    prefix: cx(\n      prefixSuffix,\n      css({\n        label: 'input-prefix',\n        paddingLeft: theme.spacing(1),\n        paddingRight: theme.spacing(0.5),\n        borderRight: 'none',\n        borderTopRightRadius: 0,\n        borderBottomRightRadius: 0,\n      })\n    ),\n    suffix: cx(\n      prefixSuffix,\n      css({\n        label: 'input-suffix',\n        paddingLeft: theme.spacing(1),\n        paddingRight: theme.spacing(1),\n        marginBottom: '-2px',\n        borderLeft: 'none',\n        borderTopLeftRadius: 0,\n        borderBottomLeftRadius: 0,\n        right: 0,\n      })\n    ),\n    loadingIndicator: css({\n      '& + *': {\n        marginLeft: theme.spacing(0.5),\n      },\n    }),\n  };\n});\n","import { css, cx } from '@emotion/css';\nimport { Property } from 'csstype';\nimport { ElementType, forwardRef, PropsWithChildren } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeSpacingTokens, ThemeShape, ThemeShadows } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes';\nimport { AlignItems, Direction, FlexProps, JustifyContent } from '../types';\nimport { ResponsiveProp, getResponsiveStyle } from '../utils/responsiveness';\nimport { getSizeStyles, SizeProps } from '../utils/styles';\n\ntype Display = 'flex' | 'block' | 'inline' | 'inline-block' | 'none';\nexport type BackgroundColor = keyof GrafanaTheme2['colors']['background'] | 'error' | 'success' | 'warning' | 'info';\nexport type BorderStyle = 'solid' | 'dashed';\nexport type BorderColor = keyof GrafanaTheme2['colors']['border'] | 'error' | 'success' | 'warning' | 'info';\nexport type BorderRadius = keyof ThemeShape['radius'];\nexport type BoxShadow = keyof ThemeShadows;\n\nexport interface BoxProps extends FlexProps, SizeProps, Omit<React.HTMLAttributes<HTMLElement>, 'className' | 'style'> {\n  // Margin props\n  /** Sets the property `margin` */\n  margin?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the properties `margin-top` and `margin-bottom`. Higher priority than margin. */\n  marginX?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the properties `margin-left` and `margin-right`. Higher priority than margin. */\n  marginY?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `margin-top`. Higher priority than margin and marginY. */\n  marginTop?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `margin-bottom`. Higher priority than margin and marginXY */\n  marginBottom?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `margin-left`. Higher priority than margin and marginX. */\n  marginLeft?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `margin-right`. Higher priority than margin and marginX. */\n  marginRight?: ResponsiveProp<ThemeSpacingTokens>;\n\n  // Padding props\n  /** Sets the property `padding` */\n  padding?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the properties `padding-top` and `padding-bottom`. Higher priority than padding. */\n  paddingX?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the properties `padding-left` and `padding-right`. Higher priority than padding. */\n  paddingY?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `padding-top`. Higher priority than padding and paddingY. */\n  paddingTop?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `padding-bottom`. Higher priority than padding and paddingY. */\n  paddingBottom?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `padding-left`. Higher priority than padding and paddingX. */\n  paddingLeft?: ResponsiveProp<ThemeSpacingTokens>;\n  /** Sets the property `padding-right`. Higher priority than padding and paddingX. */\n  paddingRight?: ResponsiveProp<ThemeSpacingTokens>;\n\n  // Border Props\n  borderStyle?: ResponsiveProp<BorderStyle>;\n  borderColor?: ResponsiveProp<BorderColor>;\n  borderRadius?: ResponsiveProp<BorderRadius>;\n\n  // Flex Props\n  alignItems?: ResponsiveProp<AlignItems>;\n  direction?: ResponsiveProp<Direction>;\n  justifyContent?: ResponsiveProp<JustifyContent>;\n  gap?: ResponsiveProp<ThemeSpacingTokens>;\n\n  // Other props\n  backgroundColor?: ResponsiveProp<BackgroundColor>;\n  display?: ResponsiveProp<Display>;\n  boxShadow?: ResponsiveProp<BoxShadow>;\n  /** Sets the HTML element that will be rendered as a Box. Defaults to 'div' */\n  element?: ElementType;\n  position?: ResponsiveProp<Property.Position>;\n}\n\nexport const Box = forwardRef<HTMLElement, PropsWithChildren<BoxProps>>((props, ref) => {\n  const {\n    children,\n    margin,\n    marginX,\n    marginY,\n    marginTop,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    padding,\n    paddingX,\n    paddingY,\n    paddingTop,\n    paddingBottom,\n    paddingLeft,\n    paddingRight,\n    display,\n    backgroundColor,\n    grow,\n    shrink,\n    basis,\n    flex,\n    borderColor,\n    borderStyle,\n    borderRadius,\n    direction,\n    justifyContent,\n    alignItems,\n    boxShadow,\n    element,\n    gap,\n    width,\n    minWidth,\n    maxWidth,\n    height,\n    minHeight,\n    maxHeight,\n    position,\n    ...rest\n  } = props;\n  const styles = useStyles2(\n    getStyles,\n    margin,\n    marginX,\n    marginY,\n    marginTop,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    padding,\n    paddingX,\n    paddingY,\n    paddingTop,\n    paddingBottom,\n    paddingLeft,\n    paddingRight,\n    display,\n    backgroundColor,\n    grow,\n    shrink,\n    basis,\n    flex,\n    borderColor,\n    borderStyle,\n    borderRadius,\n    direction,\n    justifyContent,\n    alignItems,\n    boxShadow,\n    gap,\n    position\n  );\n  const sizeStyles = useStyles2(getSizeStyles, width, minWidth, maxWidth, height, minHeight, maxHeight);\n  const Element = element ?? 'div';\n\n  return (\n    <Element ref={ref} className={cx(styles.root, sizeStyles)} {...rest}>\n      {children}\n    </Element>\n  );\n});\n\nBox.displayName = 'Box';\n\nconst customBorderColor = (color: BorderColor, theme: GrafanaTheme2) => {\n  switch (color) {\n    case 'error':\n    case 'success':\n    case 'info':\n    case 'warning':\n      return theme.colors[color].borderTransparent;\n    default:\n      return color ? theme.colors.border[color] : undefined;\n  }\n};\n\nconst customBackgroundColor = (color: BackgroundColor, theme: GrafanaTheme2) => {\n  switch (color) {\n    case 'error':\n    case 'success':\n    case 'info':\n    case 'warning':\n      return theme.colors[color].transparent;\n    default:\n      return color ? theme.colors.background[color] : undefined;\n  }\n};\n\nconst getStyles = (\n  theme: GrafanaTheme2,\n  margin: BoxProps['margin'],\n  marginX: BoxProps['marginX'],\n  marginY: BoxProps['marginY'],\n  marginTop: BoxProps['marginTop'],\n  marginBottom: BoxProps['marginBottom'],\n  marginLeft: BoxProps['marginLeft'],\n  marginRight: BoxProps['marginRight'],\n  padding: BoxProps['padding'],\n  paddingX: BoxProps['paddingX'],\n  paddingY: BoxProps['paddingY'],\n  paddingTop: BoxProps['paddingTop'],\n  paddingBottom: BoxProps['paddingBottom'],\n  paddingLeft: BoxProps['paddingLeft'],\n  paddingRight: BoxProps['paddingRight'],\n  display: BoxProps['display'],\n  backgroundColor: BoxProps['backgroundColor'],\n  grow: BoxProps['grow'],\n  shrink: BoxProps['shrink'],\n  basis: BoxProps['basis'],\n  flex: BoxProps['flex'],\n  borderColor: BoxProps['borderColor'],\n  borderStyle: BoxProps['borderStyle'],\n  borderRadius: BoxProps['borderRadius'],\n  direction: BoxProps['direction'],\n  justifyContent: BoxProps['justifyContent'],\n  alignItems: BoxProps['alignItems'],\n  boxShadow: BoxProps['boxShadow'],\n  gap: BoxProps['gap'],\n  position: BoxProps['position']\n) => {\n  return {\n    root: css([\n      getResponsiveStyle(theme, margin, (val) => ({\n        margin: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, marginX, (val) => ({\n        marginLeft: theme.spacing(val),\n        marginRight: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, marginY, (val) => ({\n        marginTop: theme.spacing(val),\n        marginBottom: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, marginTop, (val) => ({\n        marginTop: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, marginBottom, (val) => ({\n        marginBottom: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, marginLeft, (val) => ({\n        marginLeft: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, marginRight, (val) => ({\n        marginRight: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, padding, (val) => ({\n        padding: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, paddingX, (val) => ({\n        paddingLeft: theme.spacing(val),\n        paddingRight: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, paddingY, (val) => ({\n        paddingTop: theme.spacing(val),\n        paddingBottom: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, paddingTop, (val) => ({\n        paddingTop: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, paddingBottom, (val) => ({\n        paddingBottom: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, paddingLeft, (val) => ({\n        paddingLeft: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, paddingRight, (val) => ({\n        paddingRight: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, display, (val) => ({\n        display: val,\n      })),\n      getResponsiveStyle(theme, backgroundColor, (val) => ({\n        backgroundColor: customBackgroundColor(val, theme),\n      })),\n      getResponsiveStyle(theme, direction, (val) => ({\n        flexDirection: val,\n      })),\n      getResponsiveStyle(theme, grow, (val) => ({\n        flexGrow: val,\n      })),\n      getResponsiveStyle(theme, shrink, (val) => ({\n        flexShrink: val,\n      })),\n      getResponsiveStyle(theme, basis, (val) => ({\n        flexBasis: val,\n      })),\n      getResponsiveStyle(theme, flex, (val) => ({\n        flex: val,\n      })),\n      getResponsiveStyle(theme, borderStyle, (val) => ({\n        borderStyle: val,\n      })),\n      getResponsiveStyle(theme, borderColor, (val) => ({\n        borderColor: customBorderColor(val, theme),\n      })),\n      (borderStyle || borderColor) && {\n        borderWidth: '1px',\n      },\n      getResponsiveStyle(theme, justifyContent, (val) => ({\n        justifyContent: val,\n      })),\n      getResponsiveStyle(theme, alignItems, (val) => ({\n        alignItems: val,\n      })),\n      getResponsiveStyle(theme, borderRadius, (val) => ({\n        borderRadius: theme.shape.radius[val],\n      })),\n      getResponsiveStyle(theme, boxShadow, (val) => ({\n        boxShadow: theme.shadows[val],\n      })),\n      getResponsiveStyle(theme, gap, (val) => ({\n        gap: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, position, (val) => ({\n        position: val,\n      })),\n    ]),\n  };\n};\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeSpacingTokens } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes';\nimport { AlignItems, Direction, FlexProps, JustifyContent, Wrap } from '../types';\nimport { ResponsiveProp, getResponsiveStyle } from '../utils/responsiveness';\nimport { getSizeStyles, SizeProps } from '../utils/styles';\n\ninterface StackProps extends FlexProps, SizeProps, Omit<React.HTMLAttributes<HTMLElement>, 'className' | 'style'> {\n  gap?: ResponsiveProp<ThemeSpacingTokens>;\n  alignItems?: ResponsiveProp<AlignItems>;\n  justifyContent?: ResponsiveProp<JustifyContent>;\n  direction?: ResponsiveProp<Direction>;\n  wrap?: ResponsiveProp<Wrap>;\n  children?: React.ReactNode;\n}\n\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>((props, ref) => {\n  const {\n    gap = 1,\n    alignItems,\n    justifyContent,\n    direction,\n    wrap,\n    children,\n    grow,\n    shrink,\n    basis,\n    flex,\n    width,\n    minWidth,\n    maxWidth,\n    height,\n    minHeight,\n    maxHeight,\n    ...rest\n  } = props;\n  const styles = useStyles2(getStyles, gap, alignItems, justifyContent, direction, wrap, grow, shrink, basis, flex);\n  const sizeStyles = useStyles2(getSizeStyles, width, minWidth, maxWidth, height, minHeight, maxHeight);\n  return (\n    <div ref={ref} className={cx(styles.flex, sizeStyles)} {...rest}>\n      {children}\n    </div>\n  );\n});\n\nStack.displayName = 'Stack';\n\nconst getStyles = (\n  theme: GrafanaTheme2,\n  gap: StackProps['gap'],\n  alignItems: StackProps['alignItems'],\n  justifyContent: StackProps['justifyContent'],\n  direction: StackProps['direction'],\n  wrap: StackProps['wrap'],\n  grow: StackProps['grow'],\n  shrink: StackProps['shrink'],\n  basis: StackProps['basis'],\n  flex: StackProps['flex']\n) => {\n  return {\n    flex: css([\n      {\n        display: 'flex',\n      },\n      getResponsiveStyle(theme, direction, (val) => ({\n        flexDirection: val,\n      })),\n      getResponsiveStyle(theme, wrap, (val) => ({\n        flexWrap: typeof val === 'boolean' ? (val ? 'wrap' : 'nowrap') : val,\n      })),\n      getResponsiveStyle(theme, alignItems, (val) => ({\n        alignItems: val,\n      })),\n      getResponsiveStyle(theme, justifyContent, (val) => ({\n        justifyContent: val,\n      })),\n      getResponsiveStyle(theme, gap, (val) => ({\n        gap: theme.spacing(val),\n      })),\n      getResponsiveStyle(theme, grow, (val) => ({\n        flexGrow: val,\n      })),\n      getResponsiveStyle(theme, shrink, (val) => ({\n        flexShrink: val,\n      })),\n      getResponsiveStyle(theme, basis, (val) => ({\n        flexBasis: val,\n      })),\n      getResponsiveStyle(theme, flex, (val) => ({\n        flex: val,\n      })),\n    ]),\n  };\n};\n","import { CSSInterpolation } from '@emotion/serialize';\n\nimport { GrafanaTheme2, ThemeBreakpointsKey } from '@grafana/data';\n\n/**\n * Type that represents a prop that can be responsive.\n *\n * @example To turn a prop like `margin: number` responsive, change it to `margin: ResponsiveProp<number>`.\n */\nexport type ResponsiveProp<T> = T | Responsive<T>;\n\ntype Responsive<T> = {\n  xs: T;\n  sm?: T;\n  md?: T;\n  lg?: T;\n  xl?: T;\n  xxl?: T;\n};\n\nfunction breakpointCSS<T>(\n  theme: GrafanaTheme2,\n  prop: Responsive<T>,\n  getCSS: (val: T) => CSSInterpolation,\n  key: ThemeBreakpointsKey\n) {\n  const value = prop[key];\n  if (value !== undefined && value !== null) {\n    return {\n      [theme.breakpoints.up(key)]: getCSS(value),\n    };\n  }\n  return;\n}\n/**\n * Function that converts a ResponsiveProp object into CSS\n *\n * @param theme Grafana theme object\n * @param prop Prop as it is passed to the component\n * @param getCSS Function that returns the css block for the prop\n * @returns The CSS block repeated for each breakpoint\n *\n * @example To get the responsive css equivalent of `margin && { margin }`, you can write `getResponsiveStyle(theme, margin, (val) => { margin: val })`\n */\nexport function getResponsiveStyle<T>(\n  theme: GrafanaTheme2,\n  prop: ResponsiveProp<T> | undefined,\n  getCSS: (val: T) => CSSInterpolation\n): CSSInterpolation {\n  if (prop === undefined || prop === null) {\n    return null;\n  }\n  if (typeof prop !== 'object' || !('xs' in prop)) {\n    return getCSS(prop);\n  }\n\n  return [\n    breakpointCSS(theme, prop, getCSS, 'xs'),\n    breakpointCSS(theme, prop, getCSS, 'sm'),\n    breakpointCSS(theme, prop, getCSS, 'md'),\n    breakpointCSS(theme, prop, getCSS, 'lg'),\n    breakpointCSS(theme, prop, getCSS, 'xl'),\n    breakpointCSS(theme, prop, getCSS, 'xxl'),\n  ];\n}\n","import { css } from '@emotion/css';\nimport { Property } from 'csstype';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { getResponsiveStyle, ResponsiveProp } from './responsiveness';\n\nexport interface SizeProps {\n  minWidth?: ResponsiveProp<Property.MinWidth<number>>;\n  maxWidth?: ResponsiveProp<Property.MaxWidth<number>>;\n  width?: ResponsiveProp<Property.Width<number>>;\n\n  minHeight?: ResponsiveProp<Property.MinHeight<number>>;\n  maxHeight?: ResponsiveProp<Property.MaxHeight<number>>;\n  height?: ResponsiveProp<Property.Height<number>>;\n}\nexport const getSizeStyles = (\n  theme: GrafanaTheme2,\n  width: SizeProps['width'],\n  minWidth: SizeProps['minWidth'],\n  maxWidth: SizeProps['maxWidth'],\n  height: SizeProps['height'],\n  minHeight: SizeProps['minHeight'],\n  maxHeight: SizeProps['maxHeight']\n) => {\n  return css([\n    getResponsiveStyle(theme, width, (val) => ({\n      width: theme.spacing(val),\n    })),\n    getResponsiveStyle(theme, minWidth, (val) => ({\n      minWidth: theme.spacing(val),\n    })),\n    getResponsiveStyle(theme, maxWidth, (val) => ({\n      maxWidth: theme.spacing(val),\n    })),\n    getResponsiveStyle(theme, height, (val) => ({\n      height: theme.spacing(val),\n    })),\n    getResponsiveStyle(theme, minHeight, (val) => ({\n      minHeight: theme.spacing(val),\n    })),\n    getResponsiveStyle(theme, maxHeight, (val) => ({\n      maxHeight: theme.spacing(val),\n    })),\n  ]);\n};\n","import { css, cx } from '@emotion/css';\nimport { HTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\nimport { Spinner } from '../Spinner/Spinner';\n\n/**\n * @public\n */\nexport interface LoadingPlaceholderProps extends HTMLAttributes<HTMLDivElement> {\n  text: React.ReactNode;\n}\n\n/**\n * @public\n */\nexport const LoadingPlaceholder = ({ text, className, ...rest }: LoadingPlaceholderProps) => {\n  const styles = useStyles2(getStyles);\n  return (\n    <div className={cx(styles.container, className)} {...rest}>\n      {text} <Spinner inline={true} />\n    </div>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    container: css({\n      marginBottom: theme.spacing(4),\n    }),\n  };\n};\n","import type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api';\n\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind, CodeEditorSuggestionProvider, Monaco } from './types';\n\n/**\n * @internal -- only exported for tests\n */\nexport function findInsertIndex(line: string): { index: number; prefix: string } {\n  for (let i = line.length - 1; i > 0; i--) {\n    const ch = line.charAt(i);\n    if (ch === '$') {\n      return {\n        index: i,\n        prefix: line.substring(i),\n      };\n    }\n\n    // Keep these seperators\n    if (ch === ' ' || ch === '\\t' || ch === '\"' || ch === \"'\") {\n      return {\n        index: i + 1,\n        prefix: line.substring(i + 1),\n      };\n    }\n  }\n  return {\n    index: 0,\n    prefix: line,\n  };\n}\n\nfunction getCompletionItems(\n  monaco: Monaco,\n  prefix: string,\n  suggestions: CodeEditorSuggestionItem[],\n  range: monacoType.IRange\n): monacoType.languages.CompletionItem[] {\n  const items: monacoType.languages.CompletionItem[] = [];\n  for (const suggestion of suggestions) {\n    if (prefix && !suggestion.label.startsWith(prefix)) {\n      continue; // skip non-matching suggestions\n    }\n\n    items.push({\n      ...suggestion,\n      kind: mapKinds(monaco, suggestion.kind),\n      range,\n      insertText: suggestion.insertText ?? suggestion.label,\n    });\n  }\n  return items;\n}\n\nfunction mapKinds(monaco: Monaco, sug?: CodeEditorSuggestionItemKind): monacoType.languages.CompletionItemKind {\n  switch (sug) {\n    case CodeEditorSuggestionItemKind.Method:\n      return monaco.languages.CompletionItemKind.Method;\n    case CodeEditorSuggestionItemKind.Field:\n      return monaco.languages.CompletionItemKind.Field;\n    case CodeEditorSuggestionItemKind.Property:\n      return monaco.languages.CompletionItemKind.Property;\n    case CodeEditorSuggestionItemKind.Constant:\n      return monaco.languages.CompletionItemKind.Constant;\n    case CodeEditorSuggestionItemKind.Text:\n      return monaco.languages.CompletionItemKind.Text;\n  }\n  return monaco.languages.CompletionItemKind.Text;\n}\n\n/**\n * @alpha\n */\nexport function registerSuggestions(\n  monaco: Monaco,\n  language: string,\n  getSuggestions: CodeEditorSuggestionProvider,\n  modelId: string\n): monacoType.IDisposable | undefined {\n  if (!language || !getSuggestions) {\n    return undefined;\n  }\n  return monaco.languages.registerCompletionItemProvider(language, {\n    triggerCharacters: ['$'],\n\n    provideCompletionItems: (model, position, context) => {\n      // only return these suggestions for the specified modelId\n      // prevents duplicate suggestions when multiple editors are open\n      if (model.id !== modelId) {\n        return undefined;\n      }\n      const range = {\n        startLineNumber: position.lineNumber,\n        endLineNumber: position.lineNumber,\n        startColumn: position.column,\n        endColumn: position.column,\n      };\n\n      // Simple check if this was triggered by pressing `$`\n      if (context.triggerCharacter === '$') {\n        range.startColumn = position.column - 1;\n        return {\n          suggestions: getCompletionItems(monaco, '$', getSuggestions(), range),\n        };\n      }\n\n      // Find the replacement region\n      const currentLine = model.getValueInRange({\n        startLineNumber: position.lineNumber,\n        startColumn: 1,\n        endLineNumber: position.lineNumber,\n        endColumn: position.column,\n      });\n\n      const { index, prefix } = findInsertIndex(currentLine);\n      range.startColumn = index + 1;\n\n      const suggestions = getCompletionItems(monaco, prefix, getSuggestions(), range);\n      if (suggestions.length) {\n        // NOTE, this will replace any language provided suggestions\n        return { suggestions };\n      }\n\n      // Default language suggestions\n      return undefined;\n    },\n  });\n}\n","import { css } from '@emotion/css';\nimport type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api';\nimport { PureComponent } from 'react';\n\nimport { GrafanaTheme2, monacoLanguageRegistry } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { withTheme2 } from '../../themes';\nimport { Themeable2 } from '../../types';\n\nimport { ReactMonacoEditorLazy } from './ReactMonacoEditorLazy';\nimport { registerSuggestions } from './suggestions';\nimport { CodeEditorProps, Monaco, MonacoEditor as MonacoEditorType, MonacoOptions } from './types';\n\ntype Props = CodeEditorProps & Themeable2;\n\nclass UnthemedCodeEditor extends PureComponent<Props> {\n  completionCancel?: monacoType.IDisposable;\n  monaco?: Monaco;\n  modelId?: string;\n\n  constructor(props: Props) {\n    super(props);\n  }\n\n  componentWillUnmount() {\n    if (this.completionCancel) {\n      this.completionCancel.dispose();\n    }\n\n    this.props.onEditorWillUnmount?.();\n  }\n\n  componentDidUpdate(oldProps: Props) {\n    const { getSuggestions, language } = this.props;\n\n    const newLanguage = oldProps.language !== language;\n    const newGetSuggestions = oldProps.getSuggestions !== getSuggestions;\n\n    if (newGetSuggestions || newLanguage) {\n      if (this.completionCancel) {\n        this.completionCancel.dispose();\n      }\n\n      if (!this.monaco) {\n        console.warn('Monaco instance not loaded yet');\n        return;\n      }\n\n      if (getSuggestions && this.modelId) {\n        this.completionCancel = registerSuggestions(this.monaco, language, getSuggestions, this.modelId);\n      }\n    }\n\n    if (newLanguage) {\n      this.loadCustomLanguage();\n    }\n  }\n\n  loadCustomLanguage = () => {\n    const { language } = this.props;\n\n    const customLanguage = monacoLanguageRegistry.getIfExists(language);\n\n    if (customLanguage) {\n      return customLanguage.init();\n    }\n\n    return Promise.resolve();\n  };\n\n  // This is replaced with a real function when the actual editor mounts\n  getEditorValue = () => '';\n\n  onBlur = () => {\n    const { onBlur } = this.props;\n    if (onBlur) {\n      onBlur(this.getEditorValue());\n    }\n  };\n\n  onFocus = () => {\n    const { onFocus } = this.props;\n    if (onFocus) {\n      onFocus(this.getEditorValue());\n    }\n  };\n\n  onSave = () => {\n    const { onSave } = this.props;\n    if (onSave) {\n      onSave(this.getEditorValue());\n    }\n  };\n\n  handleBeforeMount = (monaco: Monaco) => {\n    this.monaco = monaco;\n\n    const { onBeforeEditorMount } = this.props;\n\n    onBeforeEditorMount?.(monaco);\n  };\n\n  handleOnMount = (editor: MonacoEditorType, monaco: Monaco) => {\n    const { getSuggestions, language, onChange, onEditorDidMount } = this.props;\n\n    this.modelId = editor.getModel()?.id;\n    this.getEditorValue = () => editor.getValue();\n\n    if (getSuggestions && this.modelId) {\n      this.completionCancel = registerSuggestions(monaco, language, getSuggestions, this.modelId);\n    }\n\n    // Save when pressing Ctrl+S or Cmd+S\n    editor.onKeyDown((e: monacoType.IKeyboardEvent) => {\n      if (e.keyCode === monaco.KeyCode.KeyS && (e.ctrlKey || e.metaKey)) {\n        e.preventDefault();\n        this.onSave();\n      }\n    });\n\n    if (onChange) {\n      editor.getModel()?.onDidChangeContent(() => onChange(editor.getValue()));\n    }\n\n    if (onEditorDidMount) {\n      onEditorDidMount(editor, monaco);\n    }\n  };\n\n  render() {\n    const { theme, language, width, height, showMiniMap, showLineNumbers, readOnly, wordWrap, monacoOptions } =\n      this.props;\n    const { alwaysConsumeMouseWheel, ...restMonacoOptions } = monacoOptions ?? {};\n\n    const value = this.props.value ?? '';\n    const longText = value.length > 100;\n\n    const containerStyles = this.props.containerStyles ?? getStyles(theme).container;\n\n    const options: MonacoOptions = {\n      wordWrap: wordWrap ? 'on' : 'off',\n      tabSize: 2,\n      codeLens: false,\n      contextmenu: false,\n      minimap: {\n        enabled: longText && showMiniMap,\n        renderCharacters: false,\n      },\n\n      readOnly,\n      lineNumbersMinChars: 4,\n      lineDecorationsWidth: 1 * theme.spacing.gridSize,\n      overviewRulerBorder: false,\n      automaticLayout: true,\n      padding: {\n        top: 0.5 * theme.spacing.gridSize,\n        bottom: 0.5 * theme.spacing.gridSize,\n      },\n      fixedOverflowWidgets: true, // Ensures suggestions menu is drawn on top\n\n      scrollbar: {\n        alwaysConsumeMouseWheel: alwaysConsumeMouseWheel ?? false,\n      },\n    };\n\n    if (!showLineNumbers) {\n      options.glyphMargin = false;\n      options.folding = false;\n      options.lineNumbers = 'off';\n      options.lineNumbersMinChars = 0;\n    }\n\n    return (\n      <div\n        className={containerStyles}\n        onFocus={this.onFocus}\n        onBlur={this.onBlur}\n        data-testid={selectors.components.CodeEditor.container}\n      >\n        <ReactMonacoEditorLazy\n          width={width}\n          height={height}\n          language={language}\n          value={value}\n          options={{\n            ...options,\n            ...(restMonacoOptions ?? {}),\n          }}\n          beforeMount={this.handleBeforeMount}\n          onMount={this.handleOnMount}\n          keepCurrentModel={true}\n        />\n      </div>\n    );\n  }\n}\n\nexport const CodeEditor = withTheme2(UnthemedCodeEditor);\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    container: css({\n      borderRadius: theme.shape.radius.default,\n      border: `1px solid ${theme.components.input.borderColor}`,\n    }),\n  };\n};\n","import { useAsync } from 'react-use';\n\n// Allows simple dynamic imports in the components\nexport const useAsyncDependency = (importStatement: Promise<any>) => {\n  const state = useAsync(async () => {\n    return await importStatement;\n  });\n\n  return {\n    ...state,\n    dependency: state.value,\n  };\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes';\nimport { useAsyncDependency } from '../../utils/useAsyncDependency';\nimport { ErrorWithStack } from '../ErrorBoundary/ErrorWithStack';\nimport { LoadingPlaceholder } from '../LoadingPlaceholder/LoadingPlaceholder';\n\n// we only use import type so it will not be included in the bundle\nimport type { ReactMonacoEditorProps } from './types';\n\n/**\n * @internal\n * Experimental export\n **/\nexport const ReactMonacoEditorLazy = (props: ReactMonacoEditorProps) => {\n  const styles = useStyles2(getStyles);\n  const { loading, error, dependency } = useAsyncDependency(\n    import(/* webpackChunkName: \"react-monaco-editor\" */ './ReactMonacoEditor')\n  );\n\n  if (loading) {\n    return <LoadingPlaceholder text={'Loading editor'} className={styles.container} />;\n  }\n\n  if (error) {\n    return (\n      <ErrorWithStack\n        title=\"React Monaco Editor failed to load\"\n        error={error}\n        errorInfo={{ componentStack: error?.stack ?? '' }}\n      />\n    );\n  }\n\n  const ReactMonacoEditor = dependency.ReactMonacoEditor;\n  return (\n    <ReactMonacoEditor\n      {...props}\n      loading={props.loading ?? null}\n      wrapperProps={{\n        'data-testid': selectors.components.ReactMonacoEditor.editorLazy,\n      }}\n    />\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    container: css({\n      marginBottom: 'unset',\n      marginLeft: theme.spacing(1),\n    }),\n  };\n};\n","// We use `import type` to guarantee it'll be erased from the JS and it doesnt accidently bundle monaco\nimport type { EditorProps } from '@monaco-editor/react';\nimport type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api';\n\n// we do not allow customizing the theme.\n// (theme is complicated in Monaco, right now there is\n// a limitation where all monaco editors must have\n// the same theme, see\n// https://github.com/microsoft/monaco-editor/issues/338#issuecomment-274837186\n// )\nexport type ReactMonacoEditorProps = Omit<EditorProps, 'theme'>;\n\nexport type CodeEditorChangeHandler = (value: string) => void;\nexport type CodeEditorSuggestionProvider = () => CodeEditorSuggestionItem[];\n\nexport type { monacoType as monacoTypes };\nexport type Monaco = typeof monacoType;\nexport type MonacoEditor = monacoType.editor.IStandaloneCodeEditor;\nexport type MonacoOptions = MonacoOptionsWithGrafanaDefaults;\n\nexport interface CodeEditorProps {\n  value: string;\n  language: string;\n  width?: number | string;\n  height?: number | string;\n\n  readOnly?: boolean;\n  showMiniMap?: boolean;\n  showLineNumbers?: boolean;\n  wordWrap?: boolean;\n  monacoOptions?: MonacoOptions;\n\n  /**\n   * Callback before the editor has mounted that gives you raw access to monaco\n   */\n  onBeforeEditorMount?: (monaco: Monaco) => void;\n\n  /**\n   * Callback after the editor has mounted that gives you raw access to monaco\n   */\n  onEditorDidMount?: (editor: MonacoEditor, monaco: Monaco) => void;\n\n  /** Callback before the edior has unmounted */\n  onEditorWillUnmount?: () => void;\n\n  /** Handler to be performed when editor is blurred */\n  onBlur?: CodeEditorChangeHandler;\n\n  /** Handler to be performed when editor is focused */\n  onFocus?: CodeEditorChangeHandler;\n\n  /** Handler to be performed whenever the text inside the editor changes */\n  onChange?: CodeEditorChangeHandler;\n\n  /** Handler to be performed when Cmd/Ctrl+S is pressed */\n  onSave?: CodeEditorChangeHandler;\n\n  /**\n   * Language agnostic suggestion completions -- typically for template variables\n   */\n  getSuggestions?: CodeEditorSuggestionProvider;\n\n  containerStyles?: string;\n}\n\n/**\n * @alpha\n */\nexport enum CodeEditorSuggestionItemKind {\n  Method = 'method',\n  Field = 'field',\n  Property = 'property',\n  Constant = 'constant',\n  Text = 'text',\n}\n\n/**\n * @alpha\n */\nexport interface CodeEditorSuggestionItem {\n  /**\n   * The label of this completion item. By default\n   * this is also the text that is inserted when selecting\n   * this completion.\n   */\n  label: string;\n\n  /**\n   * The kind of this completion item. An icon is chosen\n   * by the editor based on the kind.\n   */\n  kind?: CodeEditorSuggestionItemKind;\n\n  /**\n   * A human-readable string with additional information\n   * about this item, like type or symbol information.\n   */\n  detail?: string;\n\n  /**\n   * A human-readable string that represents a doc-comment.\n   */\n  documentation?: string; // | IMarkdownString;\n\n  /**\n   * A string or snippet that should be inserted in a document when selecting\n   * this completion. When `falsy` the `label` is used.\n   */\n  insertText?: string;\n}\n\n/**\n * This interface will extend the original Monaco editor options interface\n * but changing the code comments to contain the proper default values to\n * prevent the consumer of the CodeEditor to get incorrect documentation in editor.\n */\nexport interface MonacoOptionsWithGrafanaDefaults extends monacoType.editor.IStandaloneEditorConstructionOptions {\n  /**\n   * Enable custom contextmenu.\n   * Defaults to false.\n   */\n  contextmenu?: boolean;\n  /**\n   * The number of spaces a tab is equal to.\n   * This setting is overridden based on the file contents when `detectIndentation` is on.\n   * Defaults to 4.\n   */\n  tabSize?: number;\n  /**\n   * Show code lens\n   * Defaults to false.\n   */\n  codeLens?: boolean;\n  /**\n   * Control the width of line numbers, by reserving horizontal space for rendering at least an amount of digits.\n   * Defaults to 4.\n   */\n  lineNumbersMinChars?: number;\n  /**\n   * The width reserved for line decorations (in px).\n   * Line decorations are placed between line numbers and the editor content.\n   * You can pass in a string in the format floating point followed by \"ch\". e.g. 1.3ch.\n   * Defaults to 1 * theme.spacing.gridSize.\n   */\n  lineDecorationsWidth?: number | string;\n  /**\n   * Controls if a border should be drawn around the overview ruler.\n   * Defaults to `false`.\n   */\n  overviewRulerBorder?: boolean;\n  /**\n   * Enable that the editor will install an interval to check if its container dom node size has changed.\n   * Enabling this might have a severe performance impact.\n   * Defaults to true.\n   */\n  automaticLayout?: boolean;\n\n  /**\n   * Always consume mouse wheel events (always call preventDefault() and stopPropagation() on the browser events).\n   * Always consuming mouse wheel events will prevent the page from scrolling if the cursor is over the editor.\n   * Defaults to `false`.\n   */\n  alwaysConsumeMouseWheel?: boolean;\n}\n","import { css } from '@emotion/css';\nimport { PropsWithChildren, useLayoutEffect, useRef } from 'react';\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2, useTheme2 } from '../../themes';\n\ninterface Props {\n  className?: string;\n  root?: HTMLElement;\n  forwardedRef?: React.ForwardedRef<HTMLDivElement>;\n}\n\nexport function Portal(props: PropsWithChildren<Props>) {\n  const { children, className, root, forwardedRef } = props;\n  const theme = useTheme2();\n  const node = useRef<HTMLDivElement | null>(null);\n  const portalRoot = root ?? getPortalContainer();\n\n  if (!node.current) {\n    node.current = document.createElement('div');\n    if (className) {\n      node.current.className = className;\n    }\n    node.current.style.position = 'relative';\n    node.current.style.zIndex = `${theme.zIndex.portal}`;\n  }\n\n  useLayoutEffect(() => {\n    if (node.current) {\n      portalRoot.appendChild(node.current);\n    }\n\n    return () => {\n      if (node.current) {\n        portalRoot.removeChild(node.current);\n      }\n    };\n  }, [portalRoot]);\n\n  return ReactDOM.createPortal(<div ref={forwardedRef}>{children}</div>, node.current);\n}\n\n/** @internal */\nexport function getPortalContainer() {\n  return window.document.getElementById('grafana-portal-container') ?? document.body;\n}\n\n/** @internal */\nexport function PortalContainer() {\n  const styles = useStyles2(getStyles);\n  return (\n    <div\n      id=\"grafana-portal-container\"\n      data-testid={selectors.components.Portal.container}\n      className={styles.grafanaPortalContainer}\n    />\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    grafanaPortalContainer: css({\n      position: 'fixed',\n      top: 0,\n      width: '100%',\n      zIndex: theme.zIndex.portal,\n    }),\n  };\n};\n\nexport const RefForwardingPortal = React.forwardRef<HTMLDivElement, Props>((props, ref) => {\n  return <Portal {...props} forwardedRef={ref} />;\n});\n\nRefForwardingPortal.displayName = 'RefForwardingPortal';\n","import { css, cx } from '@emotion/css';\nimport { useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\n\nexport const ScrollIndicators = ({ children }: React.PropsWithChildren<{}>) => {\n  const [showScrollTopIndicator, setShowTopScrollIndicator] = useState(false);\n  const [showScrollBottomIndicator, setShowBottomScrollIndicator] = useState(false);\n  const scrollTopMarker = useRef<HTMLDivElement>(null);\n  const scrollBottomMarker = useRef<HTMLDivElement>(null);\n  const styles = useStyles2(getStyles);\n\n  // Here we observe the top and bottom markers to determine if we should show the scroll indicators\n  useEffect(() => {\n    const intersectionObserver = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.target === scrollTopMarker.current) {\n          setShowTopScrollIndicator(!entry.isIntersecting);\n        } else if (entry.target === scrollBottomMarker.current) {\n          setShowBottomScrollIndicator(!entry.isIntersecting);\n        }\n      });\n    });\n    [scrollTopMarker, scrollBottomMarker].forEach((ref) => {\n      if (ref.current) {\n        intersectionObserver.observe(ref.current);\n      }\n    });\n    return () => intersectionObserver.disconnect();\n  }, []);\n\n  return (\n    <>\n      <div\n        className={cx(styles.scrollIndicator, styles.scrollTopIndicator, {\n          [styles.scrollIndicatorVisible]: showScrollTopIndicator,\n        })}\n      />\n      <div className={styles.scrollContent}>\n        <div ref={scrollTopMarker} className={cx(styles.scrollMarker, styles.scrollTopMarker)} />\n        {children}\n        <div ref={scrollBottomMarker} className={cx(styles.scrollMarker, styles.scrollBottomMarker)} />\n      </div>\n      <div\n        className={cx(styles.scrollIndicator, styles.scrollBottomIndicator, {\n          [styles.scrollIndicatorVisible]: showScrollBottomIndicator,\n        })}\n      />\n    </>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    scrollContent: css({\n      display: 'flex',\n      flexDirection: 'column',\n      flexGrow: 1,\n      position: 'relative',\n    }),\n    scrollIndicator: css({\n      height: theme.spacing(6),\n      left: 0,\n      opacity: 0,\n      pointerEvents: 'none',\n      position: 'absolute',\n      right: 0,\n      [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n        transition: theme.transitions.create('opacity'),\n      },\n      zIndex: 1,\n    }),\n    scrollTopIndicator: css({\n      background: `linear-gradient(0deg, transparent, ${theme.colors.background.canvas})`,\n      top: 0,\n    }),\n    scrollBottomIndicator: css({\n      background: `linear-gradient(180deg, transparent, ${theme.colors.background.canvas})`,\n      bottom: 0,\n    }),\n    scrollIndicatorVisible: css({\n      opacity: 1,\n    }),\n    scrollMarker: css({\n      height: '1px',\n      left: 0,\n      pointerEvents: 'none',\n      position: 'absolute',\n      right: 0,\n    }),\n    scrollTopMarker: css({\n      top: 0,\n    }),\n    scrollBottomMarker: css({\n      bottom: 0,\n    }),\n  };\n};\n","import { css } from '@emotion/css';\nimport { Property } from 'csstype';\nimport { forwardRef, PropsWithChildren, UIEventHandler } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\nimport { Box, BoxProps } from '../Layout/Box/Box';\n\nimport { ScrollIndicators } from './ScrollIndicators';\n\ninterface Props extends Omit<BoxProps, 'display' | 'direction' | 'element' | 'flex' | 'position'> {\n  showScrollIndicators?: boolean;\n  onScroll?: UIEventHandler<HTMLDivElement>;\n  overflowX?: Property.OverflowX;\n  overflowY?: Property.OverflowY;\n  scrollbarWidth?: Property.ScrollbarWidth;\n}\n\nexport const ScrollContainer = forwardRef<HTMLDivElement, PropsWithChildren<Props>>(\n  (\n    {\n      children,\n      showScrollIndicators = false,\n      onScroll,\n      overflowX = 'auto',\n      overflowY = 'auto',\n      scrollbarWidth = 'thin',\n      ...rest\n    },\n    ref\n  ) => {\n    const styles = useStyles2(getStyles, scrollbarWidth, overflowY, overflowX);\n    const defaults: Partial<BoxProps> = {\n      maxHeight: '100%',\n      minHeight: 0,\n      minWidth: 0,\n    };\n    const boxProps = { ...defaults, ...rest };\n\n    return (\n      <Box {...boxProps} display=\"flex\" direction=\"column\" flex={1} position=\"relative\">\n        <div onScroll={onScroll} className={styles.scroller} ref={ref}>\n          {showScrollIndicators ? <ScrollIndicators>{children}</ScrollIndicators> : children}\n        </div>\n      </Box>\n    );\n  }\n);\nScrollContainer.displayName = 'ScrollContainer';\n\nconst getStyles = (\n  theme: GrafanaTheme2,\n  scrollbarWidth: Props['scrollbarWidth'],\n  overflowY: Props['overflowY'],\n  overflowX: Props['overflowX']\n) => ({\n  scroller: css({\n    display: 'flex',\n    flex: 1,\n    flexDirection: 'column',\n    overflowX,\n    overflowY,\n    scrollbarWidth,\n  }),\n});\n","import * as React from 'react';\n\nimport { useTheme2 } from '../../themes';\nimport { IconButton, Props as IconButtonProps } from '../IconButton/IconButton';\n\nimport { getSelectStyles } from './getSelectStyles';\n\ninterface MultiValueContainerProps {\n  innerProps: JSX.IntrinsicElements['div'];\n}\n\nexport const MultiValueContainer = ({ innerProps, children }: React.PropsWithChildren<MultiValueContainerProps>) => {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n\n  return (\n    <div {...innerProps} className={styles.multiValueContainer}>\n      {children}\n    </div>\n  );\n};\n\nexport type MultiValueRemoveProps = {\n  innerProps: IconButtonProps;\n};\n\nexport const MultiValueRemove = ({ children, innerProps }: React.PropsWithChildren<MultiValueRemoveProps>) => {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n  return <IconButton {...innerProps} name=\"times\" size=\"sm\" className={styles.multiValueRemove} tooltip=\"Remove\" />;\n};\n","import { components, InputProps } from 'react-select';\n\n/**\n * Custom input component for react-select to add data-testid attribute\n */\nexport const CustomInput = (props: InputProps) => {\n  let testId;\n\n  if ('data-testid' in props.selectProps && props.selectProps['data-testid']) {\n    testId = props.selectProps['data-testid'] + '-input';\n  }\n\n  return <components.Input {...props} data-testid={testId} />;\n};\n","import { DropdownIndicatorProps } from 'react-select';\n\nimport { Icon } from '../Icon/Icon';\n\nexport function DropdownIndicator({ selectProps }: DropdownIndicatorProps) {\n  const isOpen = selectProps.menuIsOpen;\n  const icon = isOpen ? 'search' : 'angle-down';\n  const size = isOpen ? 'sm' : 'md';\n  return <Icon name={icon} size={size} />;\n}\n","import { cx, css } from '@emotion/css';\nimport { forwardRef } from 'react';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { getInputStyles } from '../Input/Input';\n\nexport const IndicatorsContainer = forwardRef<HTMLDivElement, React.PropsWithChildren>((props, ref) => {\n  const { children } = props;\n  const theme = useTheme2();\n  const styles = getInputStyles({ theme, invalid: false });\n\n  return (\n    <div\n      className={cx(\n        styles.suffix,\n        css({\n          position: 'relative',\n        })\n      )}\n      ref={ref}\n    >\n      {children}\n    </div>\n  );\n});\n\nIndicatorsContainer.displayName = 'IndicatorsContainer';\n","import { css, cx } from '@emotion/css';\nimport { forwardRef } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { inputPadding } from '../Forms/commonStyles';\nimport { getInputStyles } from '../Input/Input';\n\ninterface InputControlProps {\n  /** Show an icon as a prefix in the input */\n  prefix?: JSX.Element | string | null;\n  focused: boolean;\n  invalid: boolean;\n  disabled: boolean;\n  innerProps: JSX.IntrinsicElements['div'];\n}\n\nexport const InputControl = forwardRef<HTMLDivElement, React.PropsWithChildren<InputControlProps>>(\n  function InputControl({ focused, invalid, disabled, children, innerProps, prefix, ...otherProps }, ref) {\n    const styles = useStyles2(getInputControlStyles, invalid, !!prefix);\n\n    return (\n      <div className={styles.input} {...innerProps} ref={ref}>\n        {prefix && <div className={cx(styles.prefix)}>{prefix}</div>}\n        {children}\n      </div>\n    );\n  }\n);\n\nconst getInputControlStyles = (theme: GrafanaTheme2, invalid: boolean, withPrefix: boolean) => {\n  const styles = getInputStyles({ theme, invalid });\n\n  return {\n    input: cx(\n      inputPadding(theme),\n      css({\n        width: '100%',\n        maxWidth: '100%',\n        display: 'flex',\n        flexDirection: 'row',\n        alignItems: 'center',\n        flexWrap: 'wrap',\n        justifyContent: 'space-between',\n        paddingRight: 0,\n        position: 'relative',\n        boxSizing: 'border-box',\n      }),\n      withPrefix &&\n        css({\n          paddingLeft: 0,\n        })\n    ),\n    prefix: cx(\n      styles.prefix,\n      css({\n        position: 'relative',\n      })\n    ),\n  };\n};\n","import { GroupProps } from 'react-select';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { getSelectStyles } from './getSelectStyles';\n\nexport const SelectOptionGroup = ({\n  children,\n  cx,\n  getClassNames,\n  getStyles,\n  Heading,\n  headingProps,\n  label,\n  selectProps,\n  theme,\n}: GroupProps) => {\n  const styles = useStyles2(getSelectStyles);\n  return (\n    <div className={styles.group}>\n      <Heading\n        cx={cx}\n        getClassNames={getClassNames}\n        getStyles={getStyles}\n        selectProps={selectProps}\n        theme={theme}\n        {...headingProps}\n      >\n        {label}\n      </Heading>\n      {children}\n    </div>\n  );\n};\n","import { GroupHeadingProps } from 'react-select';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Text } from '../Text/Text';\n\nimport { getSelectStyles } from './getSelectStyles';\n\nexport const SelectOptionGroupHeader = (props: GroupHeadingProps) => {\n  const styles = useStyles2(getSelectStyles);\n\n  return (\n    <div className={styles.groupHeader}>\n      <Text weight=\"bold\" variant=\"bodySmall\" color=\"secondary\">\n        {props.children ?? ''}\n      </Text>\n    </div>\n  );\n};\n","import { cx } from '@emotion/css';\nimport { Component, ReactNode } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { withTheme2 } from '../../themes/ThemeContext';\n\nimport { getSelectStyles } from './getSelectStyles';\n\nclass UnthemedValueContainer extends Component<any & { theme: GrafanaTheme2 }> {\n  render() {\n    const { children } = this.props;\n    const { selectProps } = this.props;\n\n    if (\n      selectProps &&\n      Array.isArray(children) &&\n      Array.isArray(children[0]) &&\n      selectProps.maxVisibleValues !== undefined &&\n      !(selectProps.showAllSelectedWhenOpen && selectProps.menuIsOpen)\n    ) {\n      const [valueChildren, ...otherChildren] = children;\n      const truncatedValues = valueChildren.slice(0, selectProps.maxVisibleValues);\n\n      return this.renderContainer([truncatedValues, ...otherChildren]);\n    }\n\n    return this.renderContainer(children);\n  }\n\n  renderContainer(children?: ReactNode) {\n    const { isMulti, theme, selectProps } = this.props;\n    const noWrap = this.props.selectProps?.noMultiValueWrap && !this.props.selectProps?.menuIsOpen;\n    const styles = getSelectStyles(theme);\n    const dataTestid = selectProps['data-testid'];\n    const className = cx(styles.valueContainer, {\n      [styles.valueContainerMulti]: isMulti && !noWrap,\n      [styles.valueContainerMultiNoWrap]: isMulti && noWrap,\n    });\n\n    return (\n      <div data-testid={dataTestid} className={className}>\n        {children}\n      </div>\n    );\n  }\n}\n\nexport const ValueContainer = withTheme2(UnthemedValueContainer);\n","import { SelectableValue } from '@grafana/data';\n\nimport { SelectableOptGroup } from './types';\n\n/**\n * Normalize the value format to SelectableValue[] | []. Only used for single select\n */\nexport const cleanValue = (\n  value: unknown,\n  options: Array<SelectableValue | SelectableOptGroup | SelectableOptGroup[]>\n) => {\n  if (Array.isArray(value)) {\n    const filtered = value.filter(Boolean);\n    return filtered?.length ? filtered : undefined;\n  }\n  if (typeof value === 'object') {\n    // we want to allow null through into here, so the Select value can be unset\n    return [value];\n  }\n  if (typeof value === 'string' || typeof value === 'number') {\n    const selectedValue = findSelectedValue(value, options);\n    if (selectedValue) {\n      return [selectedValue];\n    }\n  }\n  return undefined;\n};\n\n/**\n * Find the label for a string|number value inside array of options or optgroups\n */\nexport const findSelectedValue = (\n  value: string | number,\n  options: Array<SelectableValue | SelectableOptGroup | SelectableOptGroup[]>\n): SelectableValue | null => {\n  for (const option of options) {\n    if ('options' in option) {\n      let found = findSelectedValue(value, option.options);\n      if (found) {\n        return found;\n      }\n    } else if ('value' in option && option.value === value) {\n      return option;\n    }\n  }\n\n  return null;\n};\n\n/**\n * Omit descriptions from an array of options\n */\nexport const omitDescriptions = (options: SelectableValue[]): SelectableValue[] => {\n  return options.map(({ description, ...rest }) => rest);\n};\n","import { t } from 'i18next';\nimport { isArray, negate } from 'lodash';\nimport { ComponentProps, useCallback, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport {\n  default as ReactSelect,\n  IndicatorsContainerProps,\n  Props as ReactSelectProps,\n  ClearIndicatorProps,\n} from 'react-select';\nimport { default as ReactAsyncSelect } from 'react-select/async';\nimport { default as AsyncCreatable } from 'react-select/async-creatable';\nimport Creatable from 'react-select/creatable';\n\nimport { SelectableValue, toOption } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes';\nimport { Trans } from '../../utils/i18n';\nimport { Icon } from '../Icon/Icon';\nimport { Spinner } from '../Spinner/Spinner';\n\nimport { CustomInput } from './CustomInput';\nimport { DropdownIndicator } from './DropdownIndicator';\nimport { IndicatorsContainer } from './IndicatorsContainer';\nimport { InputControl } from './InputControl';\nimport { MultiValueContainer, MultiValueRemove } from './MultiValue';\nimport { SelectContainer } from './SelectContainer';\nimport { SelectMenu, SelectMenuOptions, VirtualizedSelectMenu } from './SelectMenu';\nimport { SelectOptionGroup } from './SelectOptionGroup';\nimport { SelectOptionGroupHeader } from './SelectOptionGroupHeader';\nimport { Props, SingleValue } from './SingleValue';\nimport { ValueContainer } from './ValueContainer';\nimport { getSelectStyles } from './getSelectStyles';\nimport { useCustomSelectStyles } from './resetSelectStyles';\nimport { ActionMeta, InputActionMeta, SelectBaseProps, ToggleAllState } from './types';\nimport { cleanValue, findSelectedValue, omitDescriptions } from './utils';\n\nconst CustomControl = (props: any) => {\n  const {\n    children,\n    innerProps,\n    selectProps: { menuIsOpen, onMenuClose, onMenuOpen },\n    isFocused,\n    isMulti,\n    getValue,\n    innerRef,\n  } = props;\n  const selectProps = props.selectProps as SelectBaseProps<any>;\n\n  if (selectProps.renderControl) {\n    return React.createElement(selectProps.renderControl, {\n      isOpen: menuIsOpen,\n      value: isMulti ? getValue() : getValue()[0],\n      ref: innerRef,\n      onClick: menuIsOpen ? onMenuClose : onMenuOpen,\n      onBlur: onMenuClose,\n      disabled: !!selectProps.disabled,\n      invalid: !!selectProps.invalid,\n    });\n  }\n\n  return (\n    <InputControl\n      ref={innerRef}\n      innerProps={innerProps}\n      prefix={selectProps.prefix}\n      focused={isFocused}\n      invalid={!!selectProps.invalid}\n      disabled={!!selectProps.disabled}\n    >\n      {children}\n    </InputControl>\n  );\n};\n\ninterface SelectPropsWithExtras extends ReactSelectProps {\n  maxVisibleValues?: number | undefined;\n  showAllSelectedWhenOpen: boolean;\n  noMultiValueWrap?: boolean;\n}\n\nfunction determineToggleAllState(selectedValue: SelectableValue[], options: SelectableValue[]) {\n  if (options.length === selectedValue.length) {\n    return ToggleAllState.allSelected;\n  } else if (selectedValue.length === 0) {\n    return ToggleAllState.noneSelected;\n  } else {\n    return ToggleAllState.indeterminate;\n  }\n}\n\nexport function SelectBase<T, Rest = {}>({\n  allowCustomValue = false,\n  allowCreateWhileLoading = false,\n  'aria-label': ariaLabel,\n  'data-testid': dataTestid,\n  autoFocus = false,\n  backspaceRemovesValue = true,\n  blurInputOnSelect,\n  cacheOptions,\n  className,\n  closeMenuOnSelect = true,\n  components,\n  createOptionPosition = 'last',\n  defaultOptions,\n  defaultValue,\n  disabled = false,\n  filterOption,\n  formatCreateLabel,\n  getOptionLabel,\n  getOptionValue,\n  inputValue,\n  invalid,\n  isClearable = false,\n  id,\n  isLoading = false,\n  isMulti = false,\n  inputId,\n  isOpen,\n  isOptionDisabled,\n  isSearchable = true,\n  loadOptions,\n  loadingMessage = 'Loading options...',\n  maxMenuHeight = 300,\n  minMenuHeight,\n  maxVisibleValues,\n  menuPlacement = 'auto',\n  menuPosition,\n  menuShouldPortal = true,\n  noOptionsMessage = t('grafana-ui.select.no-options-label', 'No options found'),\n  onBlur,\n  onChange,\n  onCloseMenu,\n  onCreateOption,\n  onInputChange,\n  onKeyDown,\n  onMenuScrollToBottom,\n  onMenuScrollToTop,\n  onOpenMenu,\n  onFocus,\n  toggleAllOptions,\n  openMenuOnFocus = false,\n  options = [],\n  placeholder = t('grafana-ui.select.placeholder', 'Choose'),\n  prefix,\n  renderControl,\n  showAllSelectedWhenOpen = true,\n  tabSelectsValue = true,\n  value,\n  virtualized = false,\n  noMultiValueWrap,\n  width,\n  isValidNewOption,\n  formatOptionLabel,\n  hideSelectedOptions,\n  ...rest\n}: SelectBaseProps<T> & Rest) {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n\n  const reactSelectRef = useRef<{ controlRef: HTMLElement }>(null);\n  const [closeToBottom, setCloseToBottom] = useState<boolean>(false);\n  const selectStyles = useCustomSelectStyles(theme, width);\n  const [hasInputValue, setHasInputValue] = useState<boolean>(!!inputValue);\n\n  // Infer the menu position for asynchronously loaded options. menuPlacement=\"auto\" doesn't work when the menu is\n  // automatically opened when the component is created (it happens in SegmentSelect by setting menuIsOpen={true}).\n  // We can remove this workaround when the bug in react-select is fixed: https://github.com/JedWatson/react-select/issues/4936\n  // Note: we use useEffect instead of hooking into onMenuOpen due to another bug: https://github.com/JedWatson/react-select/issues/3375\n  useEffect(() => {\n    if (\n      loadOptions &&\n      isOpen &&\n      reactSelectRef.current &&\n      reactSelectRef.current.controlRef &&\n      menuPlacement === 'auto'\n    ) {\n      const distance = window.innerHeight - reactSelectRef.current.controlRef.getBoundingClientRect().bottom;\n      setCloseToBottom(distance < maxMenuHeight);\n    }\n  }, [maxMenuHeight, menuPlacement, loadOptions, isOpen]);\n\n  const onChangeWithEmpty = useCallback(\n    (value: SelectableValue<T>, action: ActionMeta) => {\n      if (isMulti && (value === undefined || value === null)) {\n        return onChange([], action);\n      }\n      onChange(value, action);\n    },\n    [isMulti, onChange]\n  );\n\n  let ReactSelectComponent = ReactSelect;\n\n  const creatableProps: ComponentProps<typeof Creatable<SelectableValue<T>>> = {};\n  let asyncSelectProps: any = {};\n  let selectedValue;\n  if (isMulti && loadOptions) {\n    selectedValue = value as any;\n  } else {\n    // If option is passed as a plain value (value property from SelectableValue property)\n    // we are selecting the corresponding value from the options\n    if (isMulti && value && Array.isArray(value) && !loadOptions) {\n      selectedValue = value.map((v) => {\n        // @ts-ignore\n        const selectableValue = findSelectedValue(v.value ?? v, options);\n        // If the select allows custom values there likely won't be a selectableValue in options\n        // so we must return a new selectableValue\n        if (selectableValue) {\n          return selectableValue;\n        }\n        return typeof v === 'string' ? toOption(v) : v;\n      });\n    } else if (loadOptions) {\n      const hasValue = defaultValue || value;\n      selectedValue = hasValue ? [hasValue] : [];\n    } else {\n      selectedValue = cleanValue(value, options);\n    }\n  }\n\n  const commonSelectProps = {\n    'aria-label': ariaLabel,\n    'data-testid': dataTestid,\n    autoFocus,\n    backspaceRemovesValue,\n    blurInputOnSelect,\n    captureMenuScroll: onMenuScrollToBottom || onMenuScrollToTop,\n    closeMenuOnSelect,\n    // We don't want to close if we're actually scrolling the menu\n    // So only close if none of the parents are the select menu itself\n    defaultValue,\n    // Also passing disabled, as this is the new Select API, and I want to use this prop instead of react-select's one\n    disabled,\n    // react-select always tries to filter the options even at first menu open, which is a problem for performance\n    // in large lists. So we set it to not try to filter the options if there is no input value.\n    filterOption: hasInputValue ? filterOption : null,\n    getOptionLabel,\n    getOptionValue,\n    hideSelectedOptions,\n    inputValue,\n    invalid,\n    isClearable,\n    id,\n    // Passing isDisabled as react-select accepts this prop\n    isDisabled: disabled,\n    isLoading,\n    isMulti,\n    inputId,\n    isOptionDisabled,\n    isSearchable,\n    maxMenuHeight,\n    minMenuHeight,\n    maxVisibleValues,\n    menuIsOpen: isOpen,\n    menuPlacement: menuPlacement === 'auto' && closeToBottom ? 'top' : menuPlacement,\n    menuPosition,\n    menuShouldBlockScroll: true,\n    menuPortalTarget: menuShouldPortal && typeof document !== 'undefined' ? document.body : undefined,\n    menuShouldScrollIntoView: false,\n    onBlur,\n    onChange: onChangeWithEmpty,\n    onInputChange: (val: string, actionMeta: InputActionMeta) => {\n      const newValue = onInputChange?.(val, actionMeta) ?? val;\n      const newHasValue = !!newValue;\n      if (newHasValue !== hasInputValue) {\n        setHasInputValue(newHasValue);\n      }\n\n      return newValue;\n    },\n    onKeyDown,\n    onMenuClose: onCloseMenu,\n    onMenuOpen: onOpenMenu,\n    onMenuScrollToBottom: onMenuScrollToBottom,\n    onMenuScrollToTop: onMenuScrollToTop,\n    onFocus,\n    formatOptionLabel,\n    openMenuOnFocus,\n    options: virtualized ? omitDescriptions(options) : options,\n    placeholder,\n    prefix,\n    renderControl,\n    showAllSelectedWhenOpen,\n    tabSelectsValue,\n    value: isMulti ? selectedValue : selectedValue?.[0],\n    noMultiValueWrap,\n  };\n\n  if (allowCustomValue) {\n    ReactSelectComponent = Creatable;\n    creatableProps.allowCreateWhileLoading = allowCreateWhileLoading;\n    creatableProps.formatCreateLabel = formatCreateLabel ?? defaultFormatCreateLabel;\n    creatableProps.onCreateOption = onCreateOption;\n    creatableProps.createOptionPosition = createOptionPosition;\n    creatableProps.isValidNewOption = isValidNewOption;\n  }\n\n  // Instead of having AsyncSelect, as a separate component we render ReactAsyncSelect\n  if (loadOptions) {\n    ReactSelectComponent = allowCustomValue ? AsyncCreatable : ReactAsyncSelect;\n    asyncSelectProps = {\n      loadOptions,\n      cacheOptions,\n      defaultOptions,\n    };\n  }\n\n  const SelectMenuComponent = virtualized ? VirtualizedSelectMenu : SelectMenu;\n\n  let toggleAllState = ToggleAllState.noneSelected;\n  if (toggleAllOptions?.enabled && isArray(selectedValue)) {\n    if (toggleAllOptions?.determineToggleAllState) {\n      toggleAllState = toggleAllOptions.determineToggleAllState(selectedValue, options);\n    } else {\n      toggleAllState = determineToggleAllState(selectedValue, options);\n    }\n  }\n\n  const toggleAll = useCallback(() => {\n    let toSelect = toggleAllState === ToggleAllState.noneSelected ? options : [];\n    if (toggleAllOptions?.optionsFilter) {\n      toSelect =\n        toggleAllState === ToggleAllState.noneSelected\n          ? options.filter(toggleAllOptions.optionsFilter)\n          : options.filter(negate(toggleAllOptions.optionsFilter));\n    }\n\n    onChange(toSelect, {\n      action: 'select-option',\n      option: {},\n    });\n  }, [options, toggleAllOptions, onChange, toggleAllState]);\n\n  return (\n    <>\n      <ReactSelectComponent\n        ref={reactSelectRef}\n        components={{\n          MenuList: SelectMenuComponent,\n          Group: SelectOptionGroup,\n          GroupHeading: SelectOptionGroupHeader,\n          ValueContainer,\n          IndicatorsContainer: CustomIndicatorsContainer,\n          IndicatorSeparator: IndicatorSeparator,\n          Control: CustomControl,\n          Option: SelectMenuOptions,\n          ClearIndicator(props: ClearIndicatorProps) {\n            const { clearValue } = props;\n            return (\n              <Icon\n                name=\"times\"\n                role=\"button\"\n                aria-label=\"select-clear-value\"\n                className={styles.singleValueRemove}\n                onMouseDown={(e) => {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  clearValue();\n                }}\n              />\n            );\n          },\n          LoadingIndicator() {\n            return <Spinner inline />;\n          },\n          LoadingMessage() {\n            return <div className={styles.loadingMessage}>{loadingMessage}</div>;\n          },\n          NoOptionsMessage() {\n            return (\n              <div className={styles.loadingMessage} aria-label=\"No options provided\">\n                {noOptionsMessage}\n              </div>\n            );\n          },\n          DropdownIndicator: DropdownIndicator,\n          SingleValue(props: Props<T>) {\n            return <SingleValue {...props} isDisabled={disabled} />;\n          },\n          SelectContainer,\n          MultiValueContainer: MultiValueContainer,\n          MultiValueRemove: !disabled ? MultiValueRemove : () => null,\n          Input: CustomInput,\n          ...components,\n        }}\n        toggleAllOptions={\n          toggleAllOptions?.enabled && {\n            state: toggleAllState,\n            selectAllClicked: toggleAll,\n            selectedCount: isArray(selectedValue) ? selectedValue.length : undefined,\n          }\n        }\n        styles={selectStyles}\n        className={className}\n        {...commonSelectProps}\n        {...creatableProps}\n        {...asyncSelectProps}\n        {...rest}\n      />\n    </>\n  );\n}\n\nfunction defaultFormatCreateLabel(input: string) {\n  return (\n    <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n      <div>{input}</div>\n      <div style={{ flexGrow: 1 }} />\n      <div className=\"muted small\" style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n        <Trans i18nKey=\"grafana-ui.select.default-create-label\">Hit enter to add</Trans>\n      </div>\n    </div>\n  );\n}\n\ntype CustomIndicatorsContainerProps = IndicatorsContainerProps & {\n  selectProps: SelectPropsWithExtras;\n  children: React.ReactNode;\n};\n\nfunction CustomIndicatorsContainer(props: CustomIndicatorsContainerProps) {\n  const { showAllSelectedWhenOpen, maxVisibleValues, menuIsOpen } = props.selectProps;\n\n  const value = props.getValue();\n\n  if (maxVisibleValues !== undefined && Array.isArray(props.children)) {\n    const selectedValuesCount = value.length;\n\n    if (selectedValuesCount > maxVisibleValues && !(showAllSelectedWhenOpen && menuIsOpen)) {\n      const indicatorChildren = [...props.children];\n      indicatorChildren.splice(\n        -1,\n        0,\n        <span key=\"excess-values\" id=\"excess-values\">\n          {`(+${selectedValuesCount - maxVisibleValues})`}\n        </span>\n      );\n\n      return <IndicatorsContainer {...props}>{indicatorChildren}</IndicatorsContainer>;\n    }\n  }\n\n  return <IndicatorsContainer {...props} />;\n}\n\nfunction IndicatorSeparator() {\n  return <></>;\n}\n","import { SelectableValue } from '@grafana/data';\n\nimport { SelectBase } from './SelectBase';\nimport { SelectContainer, SelectContainerProps } from './SelectContainer';\nimport {\n  SelectCommonProps,\n  MultiSelectCommonProps,\n  SelectAsyncProps,\n  VirtualizedSelectProps,\n  VirtualizedSelectAsyncProps,\n} from './types';\n\n/** @deprecated Use Combobox component instead */\nexport function Select<T, Rest = {}>(props: SelectCommonProps<T> & Rest) {\n  return <SelectBase {...props} />;\n}\n\nexport function MultiSelect<T, Rest = {}>(props: MultiSelectCommonProps<T> & Rest) {\n  // @ts-ignore\n  return <SelectBase {...props} isMulti />;\n}\n\nexport interface AsyncSelectProps<T> extends Omit<SelectCommonProps<T>, 'options'>, SelectAsyncProps<T> {\n  // AsyncSelect has options stored internally. We cannot enable plain values as we don't have access to the fetched options\n  value?: T | SelectableValue<T> | null;\n}\n\n/** @deprecated Use Combobox component instead */\nexport function AsyncSelect<T, Rest = {}>(props: AsyncSelectProps<T> & Rest) {\n  return <SelectBase {...props} />;\n}\n\n/** @deprecated Use Combobox component instead - it's virtualised by default! */\nexport function VirtualizedSelect<T, Rest = {}>(props: VirtualizedSelectProps<T> & Rest) {\n  return <SelectBase virtualized {...props} />;\n}\n\n/** @deprecated Use Combobox component instead - it's virtualised by default! */\nexport function AsyncVirtualizedSelect<T, Rest = {}>(props: VirtualizedSelectAsyncProps<T> & Rest) {\n  return <SelectBase virtualized {...props} />;\n}\n\ninterface AsyncMultiSelectProps<T> extends Omit<MultiSelectCommonProps<T>, 'options'>, SelectAsyncProps<T> {\n  // AsyncSelect has options stored internally. We cannot enable plain values as we don't have access to the fetched options\n  value?: Array<SelectableValue<T>>;\n}\n\nexport function AsyncMultiSelect<T, Rest = {}>(props: AsyncMultiSelectProps<T> & Rest) {\n  // @ts-ignore\n  return <SelectBase {...props} isMulti />;\n}\n\nexport { SelectContainer, type SelectContainerProps };\n","import { css, cx } from '@emotion/css';\nimport { components, ContainerProps as BaseContainerProps, GroupBase } from 'react-select';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { sharedInputStyle } from '../Forms/commonStyles';\nimport { getInputStyles } from '../Input/Input';\n\nimport { CustomComponentProps } from './types';\n\n// prettier-ignore\nexport type SelectContainerProps<Option, isMulti extends boolean, Group extends GroupBase<Option>> =\n  BaseContainerProps<Option, isMulti, Group> & CustomComponentProps<Option, isMulti, Group>;\n\nexport const SelectContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n  props: SelectContainerProps<Option, isMulti, Group>\n) => {\n  const {\n    isDisabled,\n    isFocused,\n    children,\n    selectProps: { invalid = false },\n  } = props;\n\n  const styles = useStyles2(getSelectContainerStyles, isFocused, isDisabled, invalid);\n\n  return (\n    <components.SelectContainer {...props} className={cx(styles.wrapper, props.className)}>\n      {children}\n    </components.SelectContainer>\n  );\n};\n\nconst getSelectContainerStyles = (theme: GrafanaTheme2, focused: boolean, disabled: boolean, invalid: boolean) => {\n  const styles = getInputStyles({ theme, invalid });\n\n  return {\n    wrapper: cx(\n      styles.wrapper,\n      sharedInputStyle(theme, invalid),\n      focused && css(getFocusStyles(theme)),\n      disabled && styles.inputDisabled,\n      css({\n        position: 'relative',\n        boxSizing: 'border-box',\n        /* The display property is set by the styles prop in SelectBase because it's dependant on the width prop  */\n        flexDirection: 'row',\n        flexWrap: 'wrap',\n        alignItems: 'stretch',\n        justifyContent: 'space-between',\n        minHeight: theme.spacing(theme.components.height.md),\n        height: 'auto',\n        maxWidth: '100%',\n\n        /* Input padding is applied to the InputControl so the menu is aligned correctly */\n        padding: 0,\n        cursor: disabled ? 'not-allowed' : 'pointer',\n      })\n    ),\n  };\n};\n","import { css, cx } from '@emotion/css';\nimport { max } from 'lodash';\nimport { RefCallback, useLayoutEffect, useMemo, useRef } from 'react';\nimport * as React from 'react';\nimport { FixedSizeList as List } from 'react-window';\n\nimport { SelectableValue, toIconName } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { Trans } from '../../utils/i18n';\nimport { clearButtonStyles } from '../Button';\nimport { Icon } from '../Icon/Icon';\nimport { ScrollContainer } from '../ScrollContainer/ScrollContainer';\n\nimport { getSelectStyles } from './getSelectStyles';\nimport { ToggleAllState } from './types';\n\nexport interface ToggleAllOptions {\n  state: ToggleAllState;\n  selectAllClicked: () => void;\n  selectedCount?: number;\n}\n\ninterface SelectMenuProps {\n  maxHeight: number;\n  innerRef: RefCallback<HTMLDivElement>;\n  innerProps: {};\n  selectProps: {\n    toggleAllOptions?: ToggleAllOptions;\n    components?: { Option?: (props: React.PropsWithChildren<SelectMenuOptionProps<unknown>>) => JSX.Element };\n  };\n}\n\nexport const SelectMenu = ({\n  children,\n  maxHeight,\n  innerRef,\n  innerProps,\n  selectProps,\n}: React.PropsWithChildren<SelectMenuProps>) => {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n\n  const { toggleAllOptions, components } = selectProps;\n\n  const optionsElement = components?.Option ?? SelectMenuOptions;\n\n  return (\n    <div\n      {...innerProps}\n      data-testid={selectors.components.Select.menu}\n      className={styles.menu}\n      style={{ maxHeight }}\n      aria-label=\"Select options menu\"\n    >\n      <ScrollContainer ref={innerRef} maxHeight=\"inherit\" overflowX=\"hidden\" showScrollIndicators padding={0.5}>\n        {toggleAllOptions && (\n          <ToggleAllOption\n            state={toggleAllOptions.state}\n            optionComponent={optionsElement}\n            selectedCount={toggleAllOptions.selectedCount}\n            onClick={toggleAllOptions.selectAllClicked}\n          ></ToggleAllOption>\n        )}\n        {children}\n      </ScrollContainer>\n    </div>\n  );\n};\n\nSelectMenu.displayName = 'SelectMenu';\n\nconst VIRTUAL_LIST_ITEM_HEIGHT = 37;\nconst VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER = 8;\nconst VIRTUAL_LIST_PADDING = 8;\n// Some list items have icons or checkboxes so we need some extra width\nconst VIRTUAL_LIST_WIDTH_EXTRA = 58;\n\n// A virtualized version of the SelectMenu, descriptions for SelectableValue options not supported since those are of a variable height.\n//\n// To support the virtualized list we have to \"guess\" the width of the menu container based on the longest available option.\n// the reason for this is because all of the options will be positioned absolute, this takes them out of the document and no space\n// is created for them, thus the container can't grow to accomodate.\n//\n// VIRTUAL_LIST_ITEM_HEIGHT and WIDTH_ESTIMATE_MULTIPLIER are both magic numbers.\n// Some characters (such as emojis and other unicode characters) may consist of multiple code points in which case the width would be inaccurate (but larger than needed).\ninterface VirtualSelectMenuProps<T> {\n  children: React.ReactNode;\n  innerRef: React.Ref<HTMLDivElement>;\n  focusedOption: T;\n  innerProps: JSX.IntrinsicElements['div'];\n  options: T[];\n  maxHeight: number;\n  selectProps: {\n    toggleAllOptions?: ToggleAllOptions;\n    components?: { Option?: (props: React.PropsWithChildren<SelectMenuOptionProps<unknown>>) => JSX.Element };\n  };\n}\n\nexport const VirtualizedSelectMenu = ({\n  children,\n  maxHeight,\n  innerRef: scrollRef,\n  options,\n  selectProps,\n  focusedOption,\n}: VirtualSelectMenuProps<SelectableValue>) => {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n  const listRef = useRef<List>(null);\n  const { toggleAllOptions, components } = selectProps;\n\n  const optionComponent = components?.Option ?? SelectMenuOptions;\n\n  // we need to check for option groups (categories)\n  // these are top level options with child options\n  // if they exist, flatten the list of options\n  const flattenedOptions = useMemo(\n    () => options.flatMap((option) => (option.options ? [option, ...option.options] : [option])),\n    [options]\n  );\n\n  // scroll the focused option into view when navigating with keyboard\n  const focusedIndex = flattenedOptions.findIndex(\n    (option: SelectableValue<unknown>) => option.value === focusedOption?.value\n  );\n  useLayoutEffect(() => {\n    listRef.current?.scrollToItem(focusedIndex);\n  }, [focusedIndex]);\n\n  if (!Array.isArray(children)) {\n    return null;\n  }\n\n  // flatten the children to account for any categories\n  // these will have array children that are the individual options\n  const flattenedChildren = children.flatMap((child, index) => {\n    if (hasArrayChildren(child)) {\n      // need to remove the children from the category else they end up in the DOM twice\n      const childWithoutChildren = React.cloneElement(child, {\n        children: null,\n      });\n      return [\n        childWithoutChildren,\n        ...child.props.children.slice(0, -1),\n        // add a bottom divider to the last item in the category\n        React.cloneElement(child.props.children.at(-1), {\n          innerProps: {\n            ...child.props.children.at(-1).props.innerProps,\n            style: {\n              borderBottom: `1px solid ${theme.colors.border.weak}`,\n              height: VIRTUAL_LIST_ITEM_HEIGHT,\n            },\n          },\n        }),\n      ];\n    }\n    return [child];\n  });\n\n  if (toggleAllOptions) {\n    flattenedChildren.unshift(\n      <ToggleAllOption\n        optionComponent={optionComponent}\n        state={toggleAllOptions.state}\n        selectedCount={toggleAllOptions.selectedCount}\n        onClick={toggleAllOptions.selectAllClicked}\n      ></ToggleAllOption>\n    );\n  }\n\n  let longestOption = max(flattenedOptions.map((option) => option.label?.length)) ?? 0;\n  if (toggleAllOptions && longestOption < 12) {\n    longestOption = 12;\n  }\n  const widthEstimate =\n    longestOption * VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER + VIRTUAL_LIST_PADDING * 2 + VIRTUAL_LIST_WIDTH_EXTRA;\n  const heightEstimate = Math.min(flattenedChildren.length * VIRTUAL_LIST_ITEM_HEIGHT, maxHeight);\n\n  return (\n    <List\n      outerRef={scrollRef}\n      ref={listRef}\n      className={styles.menu}\n      height={heightEstimate}\n      width={widthEstimate}\n      aria-label=\"Select options menu\"\n      itemCount={flattenedChildren.length}\n      itemSize={VIRTUAL_LIST_ITEM_HEIGHT}\n    >\n      {({ index, style }) => <div style={{ ...style, overflow: 'hidden' }}>{flattenedChildren[index]}</div>}\n    </List>\n  );\n};\n\n// check if a child has array children (and is therefore a react-select group)\n// we need to flatten these so the correct count and elements are passed to the virtualized list\nconst hasArrayChildren = (child: React.ReactNode) => {\n  return React.isValidElement(child) && Array.isArray(child.props.children);\n};\n\nVirtualizedSelectMenu.displayName = 'VirtualizedSelectMenu';\n\ninterface SelectMenuOptionProps<T> {\n  isDisabled: boolean;\n  isFocused: boolean;\n  isSelected: boolean;\n  indeterminate?: boolean;\n  innerProps: JSX.IntrinsicElements['div'];\n  innerRef: RefCallback<HTMLDivElement>;\n  renderOptionLabel?: (value: SelectableValue<T>) => JSX.Element;\n  data: SelectableValue<T>;\n}\n\nconst ToggleAllOption = ({\n  state,\n  onClick,\n  selectedCount,\n  optionComponent,\n}: {\n  state: ToggleAllState;\n  onClick: () => void;\n  selectedCount?: number;\n  optionComponent: (props: React.PropsWithChildren<SelectMenuOptionProps<unknown>>) => JSX.Element;\n}) => {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n\n  return (\n    <button\n      data-testid={selectors.components.Select.toggleAllOptions}\n      className={css(clearButtonStyles(theme), styles.toggleAllButton, {\n        height: VIRTUAL_LIST_ITEM_HEIGHT,\n      })}\n      onClick={onClick}\n    >\n      {optionComponent({\n        isDisabled: false,\n        isSelected: state === ToggleAllState.allSelected,\n        isFocused: false,\n        data: {},\n        indeterminate: state === ToggleAllState.indeterminate,\n        innerRef: () => {},\n        innerProps: {},\n        children: (\n          <>\n            <Trans i18nKey=\"select.select-menu.selected-count\">Selected </Trans>\n            {`(${selectedCount ?? 0})`}\n          </>\n        ),\n      })}\n    </button>\n  );\n};\n\nexport const SelectMenuOptions = ({\n  children,\n  data,\n  innerProps,\n  innerRef,\n  isFocused,\n  isSelected,\n  renderOptionLabel,\n}: React.PropsWithChildren<SelectMenuOptionProps<unknown>>) => {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n  const icon = data.icon ? toIconName(data.icon) : undefined;\n  // We are removing onMouseMove and onMouseOver from innerProps because they cause the whole\n  // list to re-render everytime the user hovers over an option. This is a performance issue.\n  // See https://github.com/JedWatson/react-select/issues/3128#issuecomment-451936743\n  const { onMouseMove, onMouseOver, ...rest } = innerProps;\n\n  return (\n    <div\n      ref={innerRef}\n      className={cx(\n        styles.option,\n        isFocused && styles.optionFocused,\n        isSelected && styles.optionSelected,\n        data.isDisabled && styles.optionDisabled\n      )}\n      {...rest}\n      data-testid={selectors.components.Select.option}\n      title={data.title}\n    >\n      {icon && <Icon name={icon} className={styles.optionIcon} />}\n      {data.imgUrl && <img className={styles.optionImage} src={data.imgUrl} alt={data.label || String(data.value)} />}\n      <div className={styles.optionBody}>\n        <span>{renderOptionLabel ? renderOptionLabel(data) : children}</span>\n        {data.description && <div className={styles.optionDescription}>{data.description}</div>}\n        {data.component && <data.component />}\n      </div>\n    </div>\n  );\n};\n\nSelectMenuOptions.displayName = 'SelectMenuOptions';\n","import { useEffect, useRef, useState } from 'react';\n\ntype DelayOptions = {\n  // Minimal amount of time the switch will be on.\n  duration?: number;\n  // Delay after which switch will turn on.\n  delay?: number;\n};\n\n/**\n * Hook that delays changing of boolean switch to prevent too much time spent in \"on\" state. It is kind of a throttle\n * but you can specify different time for on and off throttling so this only allows a boolean values and also prefers\n * to stay \"off\" so turning \"on\" is always delayed while turning \"off\" is throttled.\n *\n * This is useful for showing loading elements to prevent it flashing too much in case of quick loading time or\n * prevent it flash if loaded state comes right after switch to loading.\n */\nexport function useDelayedSwitch(value: boolean, options: DelayOptions = {}): boolean {\n  const { duration = 250, delay = 250 } = options;\n\n  const [delayedValue, setDelayedValue] = useState(value);\n  const onStartTime = useRef<Date | undefined>();\n\n  useEffect(() => {\n    let timeout: ReturnType<typeof setTimeout> | undefined;\n    if (value) {\n      // If toggling to \"on\" state we always setTimeout no matter how long we have been \"off\".\n      timeout = setTimeout(() => {\n        onStartTime.current = new Date();\n        setDelayedValue(value);\n      }, delay);\n    } else {\n      // If toggling to \"off\" state we check how much time we were already \"on\".\n      const timeSpent = onStartTime.current ? Date.now() - onStartTime.current.valueOf() : 0;\n      const turnOff = () => {\n        onStartTime.current = undefined;\n        setDelayedValue(value);\n      };\n      if (timeSpent >= duration) {\n        // We already spent enough time \"on\" so change right away.\n        turnOff();\n      } else {\n        timeout = setTimeout(turnOff, duration - timeSpent);\n      }\n    }\n    return () => {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = undefined;\n      }\n    };\n  }, [value, duration, delay]);\n\n  return delayedValue;\n}\n","import { css, cx } from '@emotion/css';\nimport { components, GroupBase, SingleValueProps } from 'react-select';\n\nimport { GrafanaTheme2, SelectableValue, toIconName } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\nimport { useDelayedSwitch } from '../../utils/useDelayedSwitch';\nimport { Icon } from '../Icon/Icon';\nimport { Spinner } from '../Spinner/Spinner';\nimport { FadeTransition } from '../transitions/FadeTransition';\nimport { SlideOutTransition } from '../transitions/SlideOutTransition';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    singleValue: css({\n      label: 'singleValue',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      boxSizing: 'border-box',\n      maxWidth: '100%',\n      gridArea: '1 / 1 / 2 / 3',\n    }),\n    spinnerWrapper: css({\n      width: '16px',\n      height: '16px',\n      display: 'inline-block',\n      marginRight: '10px',\n      position: 'relative',\n      verticalAlign: 'middle',\n      overflow: 'hidden',\n    }),\n    spinnerIcon: css({\n      width: '100%',\n      height: '100%',\n      position: 'absolute',\n    }),\n    optionIcon: css({\n      marginRight: theme.spacing(1),\n      color: theme.colors.text.secondary,\n    }),\n    disabled: css({\n      color: theme.colors.text.disabled,\n    }),\n    isOpen: css({\n      color: theme.colors.text.disabled,\n    }),\n  };\n};\n\ntype StylesType = ReturnType<typeof getStyles>;\n\nexport type Props<T> = SingleValueProps<SelectableValue<T>, boolean, GroupBase<SelectableValue<T>>>;\n\nexport const SingleValue = <T extends unknown>(props: Props<T>) => {\n  const { children, data, isDisabled } = props;\n  const styles = useStyles2(getStyles);\n  const loading = useDelayedSwitch(data.loading || false, { delay: 250, duration: 750 });\n  const icon = data.icon ? toIconName(data.icon) : undefined;\n\n  return (\n    <components.SingleValue\n      {...props}\n      className={cx(styles.singleValue, isDisabled && styles.disabled, props.selectProps.menuIsOpen && styles.isOpen)}\n    >\n      {data.imgUrl ? (\n        <FadeWithImage loading={loading} imgUrl={data.imgUrl} styles={styles} alt={String(data.label ?? data.value)} />\n      ) : (\n        <>\n          <SlideOutTransition horizontal size={16} visible={loading} duration={150}>\n            <div className={styles.spinnerWrapper}>\n              <Spinner className={styles.spinnerIcon} inline />\n            </div>\n          </SlideOutTransition>\n          {icon && <Icon name={icon} role=\"img\" className={styles.optionIcon} />}\n        </>\n      )}\n\n      {!data.hideText && children}\n    </components.SingleValue>\n  );\n};\n\nconst FadeWithImage = (props: { loading: boolean; imgUrl: string; styles: StylesType; alt?: string }) => {\n  return (\n    <div className={props.styles.spinnerWrapper}>\n      <FadeTransition duration={150} visible={props.loading}>\n        <Spinner className={props.styles.spinnerIcon} inline />\n      </FadeTransition>\n      <FadeTransition duration={150} visible={!props.loading}>\n        <img className={props.styles.spinnerIcon} src={props.imgUrl} alt={props.alt} />\n      </FadeTransition>\n    </div>\n  );\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { stylesFactory } from '../../themes/stylesFactory';\n\nexport const getSelectStyles = stylesFactory((theme: GrafanaTheme2) => {\n  return {\n    menu: css({\n      label: 'grafana-select-menu',\n      background: theme.components.dropdown.background,\n      borderRadius: theme.shape.radius.default,\n      boxShadow: theme.shadows.z3,\n      position: 'relative',\n      minWidth: '100%',\n      overflow: 'hidden',\n      zIndex: 1,\n    }),\n    option: css({\n      label: 'grafana-select-option',\n      padding: '8px',\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center',\n      flexDirection: 'row',\n      flexShrink: 0,\n      whiteSpace: 'nowrap',\n      cursor: 'pointer',\n      borderLeft: '2px solid transparent',\n      borderRadius: theme.shape.radius.default,\n\n      '&:hover': {\n        background: theme.colors.action.hover,\n        '@media (forced-colors: active), (prefers-contrast: more)': {\n          border: `1px solid ${theme.colors.primary.border}`,\n        },\n      },\n    }),\n    optionIcon: css({\n      marginRight: theme.spacing(1),\n    }),\n    optionImage: css({\n      label: 'grafana-select-option-image',\n      width: '16px',\n      marginRight: '10px',\n    }),\n    optionDescription: css({\n      label: 'grafana-select-option-description',\n      fontWeight: 'normal',\n      fontSize: theme.typography.size.sm,\n      color: theme.colors.text.secondary,\n      whiteSpace: 'normal',\n      lineHeight: theme.typography.body.lineHeight,\n    }),\n    optionBody: css({\n      label: 'grafana-select-option-body',\n      display: 'flex',\n      fontWeight: theme.typography.fontWeightMedium,\n      flexDirection: 'column',\n      flexGrow: 1,\n    }),\n    optionFocused: css({\n      label: 'grafana-select-option-focused',\n      background: theme.colors.action.focus,\n      '@media (forced-colors: active), (prefers-contrast: more)': {\n        border: `1px solid ${theme.colors.primary.border}`,\n      },\n    }),\n    optionSelected: css({\n      background: theme.colors.action.selected,\n      '&::before': {\n        backgroundImage: theme.colors.gradients.brandVertical,\n        borderRadius: theme.shape.radius.default,\n        content: '\" \"',\n        display: 'block',\n        height: '100%',\n        position: 'absolute',\n        transform: 'translateX(-50%)',\n        width: theme.spacing(0.5),\n        left: 0,\n      },\n    }),\n    optionDisabled: css({\n      label: 'grafana-select-option-disabled',\n      backgroundColor: theme.colors.action.disabledBackground,\n      color: theme.colors.action.disabledText,\n      cursor: 'not-allowed',\n    }),\n    singleValue: css({\n      label: 'grafana-select-single-value',\n      color: theme.components.input.text,\n      gridArea: '1 / 1 / 2 / 3',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      boxSizing: 'border-box',\n      maxWidth: '100%',\n    }),\n    valueContainer: css({\n      label: 'grafana-select-value-container',\n      alignItems: 'center',\n      display: 'grid',\n      position: 'relative',\n      boxSizing: 'border-box',\n      flex: '1 1 0%',\n      outline: 'none',\n      overflow: 'hidden',\n    }),\n    valueContainerMulti: css({\n      label: 'grafana-select-value-container-multi',\n      flexWrap: 'wrap',\n      display: 'flex',\n    }),\n    valueContainerMultiNoWrap: css({\n      display: 'grid',\n      gridAutoFlow: 'column',\n    }),\n    loadingMessage: css({\n      label: 'grafana-select-loading-message',\n      padding: theme.spacing(1),\n      textAlign: 'center',\n      width: '100%',\n    }),\n    multiValueContainer: css({\n      label: 'grafana-select-multi-value-container',\n      display: 'flex',\n      alignItems: 'center',\n      lineHeight: 1,\n      background: theme.colors.background.secondary,\n      borderRadius: theme.shape.radius.default,\n      margin: theme.spacing(0.25, 1, 0.25, 0),\n      padding: theme.spacing(0.25, 0, 0.25, 1),\n      color: theme.colors.text.primary,\n      fontSize: theme.typography.size.sm,\n      overflow: 'hidden',\n      whiteSpace: 'nowrap',\n\n      '&:hover': {\n        background: theme.colors.emphasize(theme.colors.background.secondary),\n      },\n    }),\n    multiValueRemove: css({\n      label: 'grafana-select-multi-value-remove',\n      margin: theme.spacing(0, 0.5),\n      cursor: 'pointer',\n      svg: {\n        marginBottom: 0,\n      },\n    }),\n    singleValueRemove: css({\n      cursor: 'pointer',\n      '&:hover': {\n        color: theme.colors.text.primary,\n      },\n    }),\n    groupHeader: css({\n      padding: theme.spacing(1, 1, 1, 0.75),\n      borderLeft: '2px solid transparent',\n    }),\n    group: css({\n      '&:not(:first-child)': {\n        borderTop: `1px solid ${theme.colors.border.weak}`,\n      },\n      // ensure there's a bottom border if there are options following the group\n      ':has(+ [role=\"option\"])': {\n        borderBottom: `1px solid ${theme.colors.border.weak}`,\n      },\n    }),\n    toggleAllButton: css({\n      width: '100%',\n      border: 0,\n      padding: 0,\n      textAlign: 'left',\n    }),\n  };\n});\n","import { useMemo } from 'react';\nimport { CSSObjectWithLabel } from 'react-select';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nexport default function resetSelectStyles(theme: GrafanaTheme2) {\n  return {\n    clearIndicator: () => ({}),\n    container: () => ({}),\n    control: () => ({}),\n    dropdownIndicator: () => ({}),\n    group: () => ({}),\n    groupHeading: () => ({}),\n    indicatorsContainer: () => ({}),\n    indicatorSeparator: () => ({}),\n    input: function (originalStyles: CSSObjectWithLabel) {\n      return {\n        ...originalStyles,\n        color: 'inherit',\n        margin: 0,\n        padding: 0,\n        // Set an explicit z-index here to ensure this element always overlays the singleValue\n        zIndex: 1,\n        overflow: 'hidden',\n      };\n    },\n    loadingIndicator: () => ({}),\n    loadingMessage: () => ({}),\n    menu: () => ({}),\n    menuList: ({ maxHeight }: { maxHeight: number }) => ({\n      maxHeight,\n    }),\n    multiValue: () => ({}),\n    multiValueLabel: () => ({\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n    }),\n    multiValueRemove: () => ({}),\n    noOptionsMessage: () => ({}),\n    option: () => ({}),\n    placeholder: (originalStyles: CSSObjectWithLabel) => ({\n      ...originalStyles,\n      color: theme.colors.text.secondary,\n    }),\n    singleValue: () => ({}),\n    valueContainer: () => ({}),\n  };\n}\n\nexport function useCustomSelectStyles(theme: GrafanaTheme2, width: number | string | undefined) {\n  return useMemo(() => {\n    return {\n      ...resetSelectStyles(theme),\n      menuPortal: (base: any) => {\n        // Would like to correct top position when menu is placed bottom, but have props are not sent to this style function.\n        // Only state is. https://github.com/JedWatson/react-select/blob/master/packages/react-select/src/components/Menu.tsx#L605\n        return {\n          ...base,\n          zIndex: theme.zIndex.portal,\n        };\n      },\n      //These are required for the menu positioning to function\n      menu: ({ top, bottom, position }: any) => {\n        return {\n          top,\n          bottom,\n          position,\n          minWidth: '100%',\n          zIndex: theme.zIndex.dropdown,\n        };\n      },\n      container: () => ({\n        width: width ? theme.spacing(width) : '100%',\n        display: width === 'auto' ? 'inline-flex' : 'flex',\n      }),\n      option: (provided: any, state: any) => ({\n        ...provided,\n        opacity: state.isDisabled ? 0.5 : 1,\n      }),\n    };\n  }, [theme, width]);\n}\n","import * as React from 'react';\nimport {\n  ActionMeta as SelectActionMeta,\n  CommonProps as ReactSelectCommonProps,\n  GroupBase,\n  OptionsOrGroups,\n} from 'react-select';\n\nimport { SelectableValue } from '@grafana/data';\n\nexport type SelectValue<T> = T | SelectableValue<T> | T[] | Array<SelectableValue<T>>;\nexport type ActionMeta = SelectActionMeta<{}>;\nexport type InputActionMeta = {\n  action: 'set-value' | 'input-change' | 'input-blur' | 'menu-close';\n};\nexport type LoadOptionsCallback<T> = (options: Array<SelectableValue<T>>) => void;\n\nexport enum ToggleAllState {\n  allSelected = 'allSelected',\n  indeterminate = 'indeterminate',\n  noneSelected = 'noneSelected',\n}\n\nexport interface SelectCommonProps<T> {\n  /** Aria label applied to the input field */\n  ['aria-label']?: string;\n  ['data-testid']?: string;\n  allowCreateWhileLoading?: boolean;\n  allowCustomValue?: boolean;\n  /** Focus is set to the Select when rendered*/\n  autoFocus?: boolean;\n  backspaceRemovesValue?: boolean;\n  blurInputOnSelect?: boolean;\n  captureMenuScroll?: boolean;\n  className?: string;\n  closeMenuOnSelect?: boolean;\n  /** Used for custom components. For more information, see `react-select` */\n  components?: any;\n  /** Sets the position of the createOption element in your options list. Defaults to 'last' */\n  createOptionPosition?: 'first' | 'last';\n  defaultValue?: any;\n  disabled?: boolean;\n  filterOption?: (option: SelectableValue<T>, searchQuery: string) => boolean;\n  formatOptionLabel?: (item: SelectableValue<T>, formatOptionMeta: FormatOptionLabelMeta<T>) => React.ReactNode;\n  /** Function for formatting the text that is displayed when creating a new value*/\n  formatCreateLabel?: (input: string) => React.ReactNode;\n  getOptionLabel?: (item: SelectableValue<T>) => React.ReactNode;\n  getOptionValue?: (item: SelectableValue<T>) => T | undefined;\n  hideSelectedOptions?: boolean;\n  inputValue?: string;\n  invalid?: boolean;\n  isClearable?: boolean;\n  /** The id to set on the SelectContainer component. To set the id for a label (with htmlFor), @see inputId instead */\n  id?: string;\n  isLoading?: boolean;\n  isMulti?: boolean;\n  /** The id of the search input. Use this to set a matching label with htmlFor */\n  inputId?: string;\n  isOpen?: boolean;\n  /** Disables the possibility to type into the input*/\n  isSearchable?: boolean;\n  showAllSelectedWhenOpen?: boolean;\n  maxMenuHeight?: number;\n  minMenuHeight?: number;\n  maxVisibleValues?: number;\n  menuPlacement?: 'auto' | 'bottom' | 'top';\n  menuPosition?: 'fixed' | 'absolute';\n  /**\n   * Setting to false will prevent the menu from portalling to the body.\n   */\n  menuShouldPortal?: boolean;\n  /** The message to display when no options could be found */\n  noOptionsMessage?: string;\n  onBlur?: () => void;\n  onChange: (value: SelectableValue<T>, actionMeta: ActionMeta) => {} | void;\n  onCloseMenu?: () => void;\n  /** allowCustomValue must be enabled. Function decides what to do with that custom value. */\n  onCreateOption?: (value: string) => void;\n  onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n  onKeyDown?: (event: React.KeyboardEvent) => void;\n  /** Callback which fires when the user scrolls to the bottom of the menu */\n  onMenuScrollToBottom?: (event: WheelEvent | TouchEvent) => void;\n  /** Callback which fires when the user scrolls to the top of the menu */\n  onMenuScrollToTop?: (event: WheelEvent | TouchEvent) => void;\n  onOpenMenu?: () => void;\n  onFocus?: () => void;\n  toggleAllOptions?: {\n    enabled: boolean;\n    optionsFilter?: (v: SelectableValue<T>) => boolean;\n    determineToggleAllState?: (\n      selectedValues: Array<SelectableValue<T>>,\n      options: Array<SelectableValue<T>>\n    ) => ToggleAllState;\n  };\n  openMenuOnFocus?: boolean;\n  options?: Array<SelectableValue<T>>;\n  placeholder?: string;\n  /** item to be rendered in front of the input */\n  prefix?: JSX.Element | string | null;\n  /** Use a custom element to control Select. A proper ref to the renderControl is needed if 'portal' isn't set to null*/\n  renderControl?: ControlComponent<T>;\n  tabSelectsValue?: boolean;\n  value?: T | SelectValue<T> | null;\n  /** Will wrap the MenuList in a react-window FixedSizeVirtualList for improved performance, does not support options with \"description\" properties */\n  virtualized?: boolean;\n  /** Sets the width to a multiple of 8px. Should only be used with inline forms. Setting width of the container is preferred in other cases.*/\n  width?: number | 'auto';\n  isOptionDisabled?: (option: SelectableValue<T>) => boolean;\n  /** allowCustomValue must be enabled. Determines whether the \"create new\" option should be displayed based on the current input value, select value and options array. */\n  isValidNewOption?: (\n    inputValue: string,\n    value: SelectableValue<T> | null,\n    options: OptionsOrGroups<SelectableValue<T>, GroupBase<SelectableValue<T>>>\n  ) => boolean;\n  /** Message to display isLoading=true*/\n  loadingMessage?: string;\n  /** Disables wrapping of multi value values when closed */\n  noMultiValueWrap?: boolean;\n}\n\nexport interface SelectAsyncProps<T> {\n  /** When specified as boolean the loadOptions will execute when component is mounted */\n  defaultOptions?: boolean | Array<SelectableValue<T>>;\n\n  /** Asynchronously load select options */\n  loadOptions?: (query: string, cb?: LoadOptionsCallback<T>) => Promise<Array<SelectableValue<T>>> | void;\n\n  /** If cacheOptions is true, then the loaded data will be cached. The cache will remain until cacheOptions changes value. */\n  cacheOptions?: boolean;\n  /** Message to display when options are loading */\n  loadingMessage?: string;\n}\n\n/** The VirtualizedSelect component uses a slightly different SelectableValue, description and other props are not supported */\nexport interface VirtualizedSelectProps<T> extends Omit<SelectCommonProps<T>, 'virtualized'> {\n  options?: Array<Pick<SelectableValue<T>, 'label' | 'value'>>;\n}\n\n/** The AsyncVirtualizedSelect component uses a slightly different SelectableValue, description and other props are not supported */\nexport interface VirtualizedSelectAsyncProps<T>\n  extends Omit<SelectCommonProps<T>, 'virtualized'>,\n    SelectAsyncProps<T> {}\n\nexport interface MultiSelectCommonProps<T> extends Omit<SelectCommonProps<T>, 'onChange' | 'isMulti' | 'value'> {\n  value?: Array<SelectableValue<T>> | T[];\n  onChange: (item: Array<SelectableValue<T>>, actionMeta: ActionMeta) => {} | void;\n}\n\n// This is the type of *our* SelectBase component, not ReactSelect's prop, although\n// they should be mostly compatible.\nexport interface SelectBaseProps<T> extends SelectCommonProps<T>, SelectAsyncProps<T> {\n  invalid?: boolean;\n}\n\n// This is used for the `renderControl` prop on *our* SelectBase component\nexport interface CustomControlProps<T> {\n  ref: React.Ref<any>;\n  isOpen: boolean;\n  /** Currently selected value */\n  value?: SelectableValue<T>;\n  /** onClick will be automatically passed to custom control allowing menu toggle */\n  onClick: () => void;\n  /** onBlur will be automatically passed to custom control closing the menu on element blur */\n  onBlur: () => void;\n  disabled: boolean;\n  invalid: boolean;\n}\n\nexport type ControlComponent<T> = React.ComponentType<CustomControlProps<T>>;\n\nexport interface SelectableOptGroup<T = any> {\n  label: string;\n  options: Array<SelectableValue<T>>;\n\n  [key: string]: any;\n}\n\nexport type SelectOptions<T = any> =\n  | SelectableValue<T>\n  | Array<SelectableValue<T> | SelectableOptGroup<T> | Array<SelectableOptGroup<T>>>;\n\nexport type FormatOptionLabelMeta<T> = { context: string; inputValue: string; selectValue: Array<SelectableValue<T>> };\n\n// This is the type of `selectProps` our custom components (like SelectContainer, etc) recieve\n// It's slightly different to the base react select props because we pass in additional props directly to\n// react select\nexport type ReactSelectProps<Option, IsMulti extends boolean, Group extends GroupBase<Option>> = ReactSelectCommonProps<\n  Option,\n  IsMulti,\n  Group\n>['selectProps'] & {\n  invalid: boolean;\n};\n\n// Use this type when implementing custom components for react select.\n// See SelectContainerProps in SelectContainer.tsx\nexport interface CustomComponentProps<Option, isMulti extends boolean, Group extends GroupBase<Option>> {\n  selectProps: ReactSelectProps<Option, isMulti, Group>;\n}\n","import { cx, css } from '@emotion/css';\nimport * as React from 'react';\nimport SVG from 'react-inlinesvg';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\nimport { IconSize, isIconSize } from '../../types';\nimport { t } from '../../utils/i18n';\nimport { spin } from '../../utils/keyframes';\nimport { Icon } from '../Icon/Icon';\nimport { getIconRoot, getIconSubDir } from '../Icon/utils';\n\nexport interface Props {\n  className?: string;\n  style?: React.CSSProperties;\n  iconClassName?: string;\n  inline?: boolean;\n  size?: IconSize;\n}\n\n/**\n * @deprecated\n * use a predefined size, e.g. 'md' or 'lg' instead\n */\ninterface PropsWithDeprecatedSize extends Omit<Props, 'size'> {\n  size?: number | string;\n}\n\n/**\n * @public\n */\nexport const Spinner = ({\n  className,\n  inline = false,\n  iconClassName,\n  style,\n  size = 'md',\n}: Props | PropsWithDeprecatedSize) => {\n  const styles = useStyles2(getStyles);\n\n  const deprecatedStyles = useStyles2(getDeprecatedStyles, size);\n  const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const iconName = prefersReducedMotion ? 'hourglass' : 'spinner';\n\n  // this entire if statement is handling the deprecated size prop\n  // TODO remove once we fully remove the deprecated type\n  if (typeof size !== 'string' || !isIconSize(size)) {\n    const iconRoot = getIconRoot();\n    const subDir = getIconSubDir(iconName, 'default');\n    const svgPath = `${iconRoot}${subDir}/${iconName}.svg`;\n    return (\n      <div\n        data-testid=\"Spinner\"\n        style={style}\n        className={cx(\n          {\n            [styles.inline]: inline,\n          },\n          deprecatedStyles.wrapper,\n          className\n        )}\n      >\n        <SVG\n          src={svgPath}\n          width={size}\n          height={size}\n          className={cx(styles.spin, deprecatedStyles.icon, className)}\n          style={style}\n        />\n      </div>\n    );\n  }\n\n  return (\n    <div\n      data-testid=\"Spinner\"\n      style={style}\n      className={cx(\n        {\n          [styles.inline]: inline,\n        },\n        className\n      )}\n    >\n      <Icon\n        className={cx(styles.spin, iconClassName)}\n        name={iconName}\n        size={size}\n        aria-label={t('grafana-ui.spinner.aria-label', 'Loading')}\n      />\n    </div>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  inline: css({\n    display: 'inline-block',\n  }),\n  spin: css({\n    [theme.transitions.handleMotion('no-preference')]: {\n      animation: `${spin} 2s infinite linear`,\n    },\n  }),\n});\n\n// TODO remove once we fully remove the deprecated type\nconst getDeprecatedStyles = (theme: GrafanaTheme2, size: number | string) => ({\n  wrapper: css({\n    fontSize: typeof size === 'string' ? size : `${size}px`,\n  }),\n  icon: css({\n    display: 'inline-block',\n    fill: 'currentColor',\n    flexShrink: 0,\n    label: 'Icon',\n    // line-height: 0; is needed for correct icon alignment in Safari\n    lineHeight: 0,\n    verticalAlign: 'middle',\n  }),\n});\n","import { useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport * as React from 'react';\nimport ReactDOMServer from 'react-dom/server';\n\nimport { Tooltip } from '../Tooltip/Tooltip';\n\ninterface TruncatedTextProps {\n  childElement: (ref: React.ForwardedRef<HTMLElement> | undefined) => React.ReactElement;\n  children: NonNullable<React.ReactNode>;\n}\n\nexport const TruncatedText = React.forwardRef<HTMLElement, TruncatedTextProps>(({ childElement, children }, ref) => {\n  const [isOverflowing, setIsOverflowing] = useState(false);\n  const internalRef = useRef<HTMLElement>(null);\n\n  // Wire up the forwarded ref to the internal ref\n  useImperativeHandle<HTMLElement | null, HTMLElement | null>(ref, () => internalRef.current);\n\n  const resizeObserver = useMemo(\n    () =>\n      new ResizeObserver((entries) => {\n        for (const entry of entries) {\n          if (entry.target.clientWidth && entry.target.scrollWidth) {\n            if (entry.target.scrollWidth > entry.target.clientWidth) {\n              setIsOverflowing(true);\n            }\n            if (entry.target.scrollWidth <= entry.target.clientWidth) {\n              setIsOverflowing(false);\n            }\n          }\n        }\n      }),\n    []\n  );\n\n  useEffect(() => {\n    const { current } = internalRef;\n    if (current) {\n      resizeObserver.observe(current);\n    }\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [setIsOverflowing, resizeObserver]);\n\n  const getTooltipText = (children: NonNullable<React.ReactNode>) => {\n    if (typeof children === 'string') {\n      return children;\n    }\n    const html = ReactDOMServer.renderToStaticMarkup(<>{children}</>);\n    return html.replace(/(<([^>]+)>)/gi, '');\n  };\n\n  if (isOverflowing) {\n    return (\n      <Tooltip ref={internalRef} content={getTooltipText(children)}>\n        {childElement(undefined)}\n      </Tooltip>\n    );\n  } else {\n    return childElement(internalRef);\n  }\n});\n\nTruncatedText.displayName = 'TruncatedText';\n","import { css } from '@emotion/css';\nimport { createElement, CSSProperties } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeTypographyVariantTypes } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\n\nimport { TruncatedText } from './TruncatedText';\nimport { customWeight, customColor, customVariant } from './utils';\n\nexport interface TextProps extends Omit<React.HTMLAttributes<HTMLElement>, 'className' | 'style'> {\n  /** Defines what HTML element is defined underneath. \"span\" by default */\n  element?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span' | 'p';\n  /** What typograpy variant should be used for the component. Only use if default variant for the defined element is not what is needed */\n  variant?: keyof ThemeTypographyVariantTypes;\n  /** Override the default weight for the used variant */\n  weight?: 'light' | 'regular' | 'medium' | 'bold';\n  /** Color to use for text */\n  color?: keyof GrafanaTheme2['colors']['text'] | 'error' | 'success' | 'warning' | 'info';\n  /** Use to cut the text off with ellipsis if there isn't space to show all of it. On hover shows the rest of the text */\n  truncate?: boolean;\n  /** If true, show the text as italic. False by default */\n  italic?: boolean;\n  /** If true, numbers will have fixed width, useful for displaying tabular data. False by default */\n  tabular?: boolean;\n  /** Whether to align the text to left, center or right */\n  textAlignment?: CSSProperties['textAlign'];\n  children: NonNullable<React.ReactNode>;\n}\n\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\n  (\n    { element = 'span', variant, weight, color, truncate, italic, textAlignment, children, tabular, ...restProps },\n    ref\n  ) => {\n    const styles = useStyles2(getTextStyles, element, variant, color, weight, truncate, italic, textAlignment, tabular);\n\n    const childElement = (ref: React.ForwardedRef<HTMLElement> | undefined) => {\n      return createElement(\n        element,\n        {\n          ...restProps,\n          style: undefined, // Remove the style prop to avoid overriding the styles\n          className: styles,\n          // When overflowing, the internalRef is passed to the tooltip, which forwards it to the child element\n          ref,\n        },\n        children\n      );\n    };\n\n    // A 'span' is an inline element, so it can't be truncated\n    // and it should be wrapped in a parent element that will show the tooltip\n    if (!truncate || element === 'span') {\n      return childElement(undefined);\n    }\n\n    return (\n      <TruncatedText\n        childElement={childElement}\n        // eslint-disable-next-line react/no-children-prop\n        children={children}\n        ref={ref}\n      />\n    );\n  }\n);\n\nText.displayName = 'Text';\n\nconst getTextStyles = (\n  theme: GrafanaTheme2,\n  element?: TextProps['element'],\n  variant?: keyof ThemeTypographyVariantTypes,\n  color?: TextProps['color'],\n  weight?: TextProps['weight'],\n  truncate?: TextProps['truncate'],\n  italic?: TextProps['italic'],\n  textAlignment?: TextProps['textAlignment'],\n  tabular?: TextProps['tabular']\n) => {\n  return css([\n    {\n      margin: 0,\n      padding: 0,\n      ...customVariant(theme, element, variant),\n    },\n    variant && {\n      ...theme.typography[variant],\n    },\n    color && {\n      color: customColor(color, theme),\n    },\n    weight && {\n      fontWeight: customWeight(weight, theme),\n    },\n    truncate && {\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap',\n    },\n    italic && {\n      fontStyle: 'italic',\n    },\n    textAlignment && {\n      textAlign: textAlignment,\n    },\n    tabular && {\n      fontFeatureSettings: '\"tnum\"',\n    },\n  ]);\n};\n","import { GrafanaTheme2, ThemeTypographyVariantTypes } from '@grafana/data';\n\nimport { TextProps } from './Text';\n\nexport const customWeight = (weight: TextProps['weight'], theme: GrafanaTheme2): number => {\n  switch (weight) {\n    case 'bold':\n      return theme.typography.fontWeightBold;\n    case 'medium':\n      return theme.typography.fontWeightMedium;\n    case 'light':\n      return theme.typography.fontWeightLight;\n    case 'regular':\n    case undefined:\n      return theme.typography.fontWeightRegular;\n  }\n};\n\nexport const customColor = (color: TextProps['color'], theme: GrafanaTheme2): string | undefined => {\n  switch (color) {\n    case 'error':\n      return theme.colors.error.text;\n    case 'success':\n      return theme.colors.success.text;\n    case 'info':\n      return theme.colors.info.text;\n    case 'warning':\n      return theme.colors.warning.text;\n    default:\n      return color ? theme.colors.text[color] : undefined;\n  }\n};\n\nexport const customVariant = (\n  theme: GrafanaTheme2,\n  element: TextProps['element'],\n  variant?: keyof ThemeTypographyVariantTypes\n) => {\n  if (variant) {\n    return theme.typography[variant];\n  }\n  switch (element) {\n    //Span elements does not have a default variant to be able to take the parents style\n    case 'span':\n      return;\n    case 'h1':\n      return theme.typography.h1;\n    case 'h2':\n      return theme.typography.h2;\n    case 'h3':\n      return theme.typography.h3;\n    case 'h4':\n      return theme.typography.h4;\n    case 'h5':\n      return theme.typography.h5;\n    case 'h6':\n      return theme.typography.h6;\n    default:\n      return theme.typography.body;\n  }\n};\n","import {\n  arrow,\n  autoUpdate,\n  flip,\n  FloatingArrow,\n  offset,\n  shift,\n  useDismiss,\n  useFloating,\n  useFocus,\n  useHover,\n  useInteractions,\n} from '@floating-ui/react';\nimport { forwardRef, cloneElement, isValidElement, useCallback, useId, useRef, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { buildTooltipTheme, getPlacement } from '../../utils/tooltipUtils';\nimport { Portal } from '../Portal/Portal';\n\nimport { PopoverContent, TooltipPlacement } from './types';\n\nexport interface TooltipProps {\n  theme?: 'info' | 'error' | 'info-alt';\n  show?: boolean;\n  placement?: TooltipPlacement;\n  content: PopoverContent;\n  children: JSX.Element;\n  /**\n   * Set to true if you want the tooltip to stay long enough so the user can move mouse over content to select text or click a link\n   */\n  interactive?: boolean;\n}\n\nexport const Tooltip = forwardRef<HTMLElement, TooltipProps>(\n  ({ children, theme, interactive, show, placement, content }, forwardedRef) => {\n    const arrowRef = useRef(null);\n    const [controlledVisible, setControlledVisible] = useState(show);\n    const isOpen = show ?? controlledVisible;\n\n    // the order of middleware is important!\n    // `arrow` should almost always be at the end\n    // see https://floating-ui.com/docs/arrow#order\n    const middleware = [\n      offset(8),\n      flip({\n        fallbackAxisSideDirection: 'end',\n        // see https://floating-ui.com/docs/flip#combining-with-shift\n        crossAxis: false,\n        boundary: document.body,\n      }),\n      shift(),\n      arrow({\n        element: arrowRef,\n      }),\n    ];\n\n    const { context, refs, floatingStyles } = useFloating({\n      open: isOpen,\n      placement: getPlacement(placement),\n      onOpenChange: setControlledVisible,\n      middleware,\n      whileElementsMounted: autoUpdate,\n    });\n    const tooltipId = useId();\n\n    const hover = useHover(context, {\n      delay: {\n        close: interactive ? 100 : 0,\n      },\n      move: false,\n    });\n    const focus = useFocus(context);\n    const dismiss = useDismiss(context);\n\n    const { getReferenceProps, getFloatingProps } = useInteractions([dismiss, hover, focus]);\n\n    const contentIsFunction = typeof content === 'function';\n\n    const styles = useStyles2(getStyles);\n    const style = styles[theme ?? 'info'];\n\n    const handleRef = useCallback(\n      (ref: HTMLElement | null) => {\n        refs.setReference(ref);\n\n        if (typeof forwardedRef === 'function') {\n          forwardedRef(ref);\n        } else if (forwardedRef) {\n          forwardedRef.current = ref;\n        }\n      },\n      [forwardedRef, refs]\n    );\n\n    // if the child has a matching aria-label, this should take precedence over the tooltip content\n    // otherwise we end up double announcing things in e.g. IconButton\n    const childHasMatchingAriaLabel = 'aria-label' in children.props && children.props['aria-label'] === content;\n\n    return (\n      <>\n        {cloneElement(children, {\n          ref: handleRef,\n          tabIndex: 0, // tooltip trigger should be keyboard focusable\n          'aria-describedby': !childHasMatchingAriaLabel && isOpen ? tooltipId : undefined,\n          ...getReferenceProps(),\n        })}\n        {isOpen && (\n          <Portal>\n            <div ref={refs.setFloating} style={floatingStyles} {...getFloatingProps()}>\n              <FloatingArrow className={style.arrow} ref={arrowRef} context={context} />\n              <div\n                data-testid={selectors.components.Tooltip.container}\n                id={tooltipId}\n                role=\"tooltip\"\n                className={style.container}\n              >\n                {typeof content === 'string' && content}\n                {isValidElement(content) && cloneElement(content)}\n                {contentIsFunction && content({})}\n              </div>\n            </div>\n          </Portal>\n        )}\n      </>\n    );\n  }\n);\n\nTooltip.displayName = 'Tooltip';\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n  const info = buildTooltipTheme(\n    theme,\n    theme.components.tooltip.background,\n    theme.components.tooltip.background,\n    theme.components.tooltip.text,\n    { topBottom: 0.5, rightLeft: 1 }\n  );\n  const error = buildTooltipTheme(\n    theme,\n    theme.colors.error.main,\n    theme.colors.error.main,\n    theme.colors.error.contrastText,\n    { topBottom: 0.5, rightLeft: 1 }\n  );\n\n  return {\n    info,\n    ['info-alt']: info,\n    error,\n  };\n};\n","import { css, cx } from '@emotion/css';\nimport { useMemo, PropsWithChildren } from 'react';\n\nimport { dateTime, DateTimeInput, GrafanaTheme2 } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes';\nimport { Trans } from '../../utils/i18n';\nimport { Tooltip } from '../Tooltip';\n\nimport { UserView } from './types';\n\nexport interface UserIconProps {\n  /** An object that contains the user's details and 'lastActiveAt' status */\n  userView: UserView;\n  /** A boolean value that determines whether the tooltip should be shown or not */\n  showTooltip?: boolean;\n  /** An optional class name to be added to the icon element */\n  className?: string;\n  /** onClick handler to be called when the icon is clicked */\n  onClick?: () => void;\n}\n\n/**\n * A helper function that takes in a dateString parameter\n * and returns the user's last viewed date in a specific format.\n */\nconst formatViewed = (dateString: DateTimeInput): string => {\n  const date = dateTime(dateString);\n  const diffHours = date.diff(dateTime(), 'hours', false);\n  return `Active last ${(Math.floor(-diffHours / 24) + 1) * 24}h`;\n};\n\n/**\n * Output the initials of the first and last name (if given), capitalized and concatenated together.\n * If name is not provided, an empty string is returned.\n * @param {string} [name] The name to extract initials from.\n * @returns {string} The uppercase initials of the first and last name.\n * @example\n * // Returns 'JD'\n * getUserInitials('John Doe');\n * // Returns 'A'\n * getUserInitials('Alice');\n * // Returns ''\n * getUserInitials();\n */\nconst getUserInitials = (name?: string) => {\n  if (!name) {\n    return '';\n  }\n  const [first, last] = name.split(' ');\n  return `${first?.[0] ?? ''}${last?.[0] ?? ''}`.toUpperCase();\n};\n\nexport const UserIcon = ({\n  userView,\n  className,\n  children,\n  onClick,\n  showTooltip = true,\n}: PropsWithChildren<UserIconProps>) => {\n  const { user, lastActiveAt } = userView;\n  const isActive = dateTime(lastActiveAt).diff(dateTime(), 'minutes', true) >= -15;\n  const theme = useTheme2();\n  const styles = useMemo(() => getStyles(theme, isActive), [theme, isActive]);\n  const content = (\n    <button\n      type={'button'}\n      onClick={onClick}\n      className={cx(styles.container, onClick && styles.pointer, className)}\n      aria-label={`${user.name} icon`}\n    >\n      {children ? (\n        <div className={cx(styles.content, styles.textContent)}>{children}</div>\n      ) : user.avatarUrl ? (\n        <img className={styles.content} src={user.avatarUrl} alt={`${user.name} avatar`} />\n      ) : (\n        <div className={cx(styles.content, styles.textContent)}>{getUserInitials(user.name)}</div>\n      )}\n    </button>\n  );\n\n  if (showTooltip) {\n    const tooltip = (\n      <div className={styles.tooltipContainer}>\n        <div className={styles.tooltipName}>{user.name}</div>\n        <div className={styles.tooltipDate}>\n          {isActive ? (\n            <div className={styles.dotContainer}>\n              <span>\n                <Trans i18nKey=\"grafana-ui.user-icon.active-text\">Active last 15m</Trans>\n              </span>\n              <span className={styles.dot}></span>\n            </div>\n          ) : (\n            formatViewed(lastActiveAt)\n          )}\n        </div>\n      </div>\n    );\n\n    return <Tooltip content={tooltip}>{content}</Tooltip>;\n  } else {\n    return content;\n  }\n};\n\nconst getIconBorder = (color: string): string => {\n  return `0 0 0 1px ${color}`;\n};\n\nexport const getStyles = (theme: GrafanaTheme2, isActive: boolean) => {\n  const shadowColor = isActive ? theme.colors.primary.main : theme.colors.border.medium;\n  const shadowHoverColor = isActive ? theme.colors.primary.text : theme.colors.border.strong;\n\n  return {\n    container: css({\n      padding: 0,\n      width: '30px',\n      height: '30px',\n      background: 'none',\n      border: 'none',\n      borderRadius: theme.shape.radius.circle,\n      '& > *': {\n        borderRadius: theme.shape.radius.circle,\n      },\n    }),\n    content: css({\n      lineHeight: '24px',\n      maxWidth: '100%',\n      border: `3px ${theme.colors.background.primary} solid`,\n      boxShadow: getIconBorder(shadowColor),\n      backgroundClip: 'padding-box',\n      '&:hover': {\n        boxShadow: getIconBorder(shadowHoverColor),\n      },\n    }),\n    textContent: css({\n      background: theme.colors.background.primary,\n      padding: 0,\n      color: theme.colors.text.secondary,\n      textAlign: 'center',\n      fontSize: theme.typography.size.sm,\n      '&:focus': {\n        boxShadow: getIconBorder(shadowColor),\n      },\n    }),\n    tooltipContainer: css({\n      textAlign: 'center',\n      padding: theme.spacing(0, 1),\n    }),\n    tooltipName: css({\n      fontWeight: theme.typography.fontWeightBold,\n    }),\n    tooltipDate: css({\n      fontWeight: theme.typography.fontWeightRegular,\n    }),\n    dotContainer: css({\n      display: 'flex',\n      alignItems: 'center',\n    }),\n    dot: css({\n      height: '6px',\n      width: '6px',\n      backgroundColor: theme.colors.primary.main,\n      borderRadius: theme.shape.radius.circle,\n      display: 'inline-block',\n      marginLeft: theme.spacing(1),\n    }),\n    pointer: css({\n      cursor: 'pointer',\n    }),\n  };\n};\n","import { css } from '@emotion/css';\nimport { useRef } from 'react';\nimport * as React from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\n\ntype Props = {\n  children: React.ReactElement;\n  visible: boolean;\n  duration?: number;\n};\n\nexport function FadeTransition(props: Props) {\n  const { visible, children, duration = 250 } = props;\n  const styles = useStyles2(getStyles, duration);\n  const transitionRef = useRef(null);\n\n  return (\n    <CSSTransition\n      in={visible}\n      mountOnEnter={true}\n      unmountOnExit={true}\n      timeout={duration}\n      classNames={styles}\n      nodeRef={transitionRef}\n    >\n      {React.cloneElement(children, { ref: transitionRef })}\n    </CSSTransition>\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2, duration: number) => ({\n  enter: css({\n    label: 'enter',\n    opacity: 0,\n  }),\n  enterActive: css({\n    label: 'enterActive',\n    opacity: 1,\n    [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n      transition: `opacity ${duration}ms ease-out`,\n    },\n  }),\n  exit: css({\n    label: 'exit',\n    opacity: 1,\n  }),\n  exitActive: css({\n    label: 'exitActive',\n    opacity: 0,\n    [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n      transition: `opacity ${duration}ms ease-out`,\n    },\n  }),\n});\n","import { css } from '@emotion/css';\nimport { useRef } from 'react';\nimport * as React from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\n\ntype Props = {\n  children: React.ReactElement;\n  visible: boolean;\n  size: number;\n\n  duration?: number;\n  horizontal?: boolean;\n};\n\nexport function SlideOutTransition(props: Props) {\n  const { visible, children, duration = 250, horizontal, size } = props;\n  const styles = useStyles2(getStyles, duration, horizontal ? 'width' : 'height', size);\n  const transitionRef = useRef(null);\n\n  return (\n    <CSSTransition\n      in={visible}\n      mountOnEnter={true}\n      unmountOnExit={true}\n      timeout={duration}\n      classNames={styles}\n      nodeRef={transitionRef}\n    >\n      {React.cloneElement(children, { ref: transitionRef })}\n    </CSSTransition>\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2, duration: number, measurement: 'width' | 'height', size: number) => ({\n  enter: css({\n    label: 'enter',\n    [`${measurement}`]: 0,\n    opacity: 0,\n  }),\n  enterActive: css({\n    label: 'enterActive',\n    [`${measurement}`]: `${size}px`,\n    opacity: 1,\n    [theme.transitions.handleMotion('no-preference')]: {\n      transition: `opacity ${duration}ms ease-out, ${measurement} ${duration}ms ease-out`,\n    },\n    [theme.transitions.handleMotion('reduce')]: {\n      transition: `opacity ${duration}ms ease-out`,\n    },\n  }),\n  exit: css({\n    label: 'exit',\n    [`${measurement}`]: `${size}px`,\n    opacity: 1,\n  }),\n  exitActive: css({\n    label: 'exitActive',\n    opacity: 0,\n    [`${measurement}`]: 0,\n    [theme.transitions.handleMotion('no-preference')]: {\n      transition: `opacity ${duration}ms ease-out, ${measurement} ${duration}ms ease-out`,\n    },\n    [theme.transitions.handleMotion('reduce')]: {\n      transition: `opacity ${duration}ms ease-out`,\n    },\n  }),\n});\n","import hoistNonReactStatics from 'hoist-non-react-statics';\nimport memoize from 'micro-memoize';\nimport { useContext } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme, GrafanaTheme2, ThemeContext } from '@grafana/data';\n\nimport { Themeable, Themeable2 } from '../types/theme';\n\nimport { stylesFactory } from './stylesFactory';\n\ntype Omit<T, K> = Pick<T, Exclude<keyof T, K>>;\ntype Subtract<T, K> = Omit<T, keyof K>;\n\n/**\n * Mock used in tests\n */\nlet ThemeContextMock: React.Context<GrafanaTheme2> | null = null;\n\n// Used by useStyles()\nexport const memoizedStyleCreators = new WeakMap();\n\n/** @deprecated use withTheme2 */\n/** @public */\nexport const withTheme = <P extends Themeable, S extends {} = {}>(Component: React.ComponentType<P>) => {\n  const WithTheme: React.FunctionComponent<Subtract<P, Themeable>> = (props) => {\n    /**\n     * If theme context is mocked, let's use it instead of the original context\n     * This is used in tests when mocking theme using mockThemeContext function defined below\n     */\n    const ContextComponent = ThemeContextMock || ThemeContext;\n    return (\n      // @ts-ignore\n      <ContextComponent.Consumer>{(theme) => <Component {...props} theme={theme.v1} />}</ContextComponent.Consumer>\n    );\n  };\n\n  WithTheme.displayName = `WithTheme(${Component.displayName})`;\n  hoistNonReactStatics(WithTheme, Component);\n  type Hoisted = typeof WithTheme & S;\n  return WithTheme as Hoisted;\n};\n\n/** @alpha */\nexport const withTheme2 = <P extends Themeable2, S extends {} = {}>(Component: React.ComponentType<P>) => {\n  const WithTheme: React.FunctionComponent<Subtract<P, Themeable2>> = (props) => {\n    /**\n     * If theme context is mocked, let's use it instead of the original context\n     * This is used in tests when mocking theme using mockThemeContext function defined below\n     */\n    const ContextComponent = ThemeContextMock || ThemeContext;\n    return (\n      // @ts-ignore\n      <ContextComponent.Consumer>{(theme) => <Component {...props} theme={theme} />}</ContextComponent.Consumer>\n    );\n  };\n\n  WithTheme.displayName = `WithTheme(${Component.displayName})`;\n  hoistNonReactStatics(WithTheme, Component);\n  type Hoisted = typeof WithTheme & S;\n  return WithTheme as Hoisted;\n};\n\n/** @deprecated use useTheme2 */\n/** @public */\nexport function useTheme(): GrafanaTheme {\n  return useContext(ThemeContextMock || ThemeContext).v1;\n}\n\n/** @public */\nexport function useTheme2(): GrafanaTheme2 {\n  return useContext(ThemeContextMock || ThemeContext);\n}\n\n/**\n * Hook for using memoized styles with access to the theme.\n *\n * NOTE: For memoization to work, you need to ensure that the function\n * you pass in doesn't change, or only if it needs to. (i.e. declare\n * your style creator outside of a function component or use `useCallback()`.)\n * */\n/** @deprecated use useStyles2 */\n/** @public */\nexport function useStyles<T>(getStyles: (theme: GrafanaTheme) => T) {\n  const theme = useTheme();\n\n  let memoizedStyleCreator: typeof getStyles = memoizedStyleCreators.get(getStyles);\n\n  if (!memoizedStyleCreator) {\n    memoizedStyleCreator = stylesFactory(getStyles);\n    memoizedStyleCreators.set(getStyles, memoizedStyleCreator);\n  }\n\n  return memoizedStyleCreator(theme);\n}\n\n/**\n * Hook for using memoized styles with access to the theme. Pass additional\n * arguments to the getStyles function as additional arguments to this hook.\n *\n * Prefer using primitive values (boolean, number, string, etc) for\n * additional arguments for better performance\n *\n * ```\n * const getStyles = (theme, isDisabled, isOdd) => {css(...)}\n * [...]\n * const styles = useStyles2(getStyles, true, Boolean(index % 2))\n * ```\n *\n * NOTE: For memoization to work, ensure that all arguments don't change\n * across renders (or only change if they need to)\n *\n * @public\n * */\nexport function useStyles2<T extends unknown[], CSSReturnValue>(\n  getStyles: (theme: GrafanaTheme2, ...args: T) => CSSReturnValue,\n  ...additionalArguments: T\n): CSSReturnValue {\n  const theme = useTheme2();\n\n  // Grafana ui can be bundled and used in older versions of Grafana where the theme doesn't have elevated background\n  // This can be removed post G12\n  if (!theme.colors.background.elevated) {\n    theme.colors.background.elevated =\n      theme.colors.mode === 'light' ? theme.colors.background.primary : theme.colors.background.secondary;\n  }\n\n  let memoizedStyleCreator: typeof getStyles = memoizedStyleCreators.get(getStyles);\n\n  if (!memoizedStyleCreator) {\n    memoizedStyleCreator = memoize(getStyles, { maxSize: 10 }); // each getStyles function will memoize 10 different sets of props\n    memoizedStyleCreators.set(getStyles, memoizedStyleCreator);\n  }\n\n  return memoizedStyleCreator(theme, ...additionalArguments);\n}\n\n/**\n * Enables theme context mocking\n */\n/** @public */\nexport const mockThemeContext = (theme: Partial<GrafanaTheme2>) => {\n  ThemeContextMock = React.createContext(theme as GrafanaTheme2);\n\n  return () => {\n    ThemeContextMock = null;\n  };\n};\n","import tinycolor from 'tinycolor2';\n\nimport { GrafanaTheme, GrafanaTheme2 } from '@grafana/data';\n\nexport function cardChrome(theme: GrafanaTheme2): string {\n  return `\n    background: ${theme.colors.background.secondary};\n    &:hover {\n      background: ${hoverColor(theme.colors.background.secondary, theme)};\n    }\n    box-shadow: ${theme.components.panel.boxShadow};\n    border-radius: ${theme.shape.radius.default};\n`;\n}\n\nexport function hoverColor(color: string, theme: GrafanaTheme2): string {\n  return theme.isDark ? tinycolor(color).brighten(2).toString() : tinycolor(color).darken(2).toString();\n}\n\nexport function listItem(theme: GrafanaTheme2): string {\n  return `\n  background: ${theme.colors.background.secondary};\n  &:hover {\n    background: ${hoverColor(theme.colors.background.secondary, theme)};\n  }\n  box-shadow: ${theme.components.panel.boxShadow};\n  border-radius: ${theme.shape.radius.default};\n`;\n}\n\nexport function listItemSelected(theme: GrafanaTheme2): string {\n  return `\n    background: ${hoverColor(theme.colors.background.secondary, theme)};\n    color: ${theme.colors.text.maxContrast};\n`;\n}\n\nexport function mediaUp(breakpoint: string) {\n  return `only screen and (min-width: ${breakpoint})`;\n}\n\nconst isGrafanaTheme2 = (theme: GrafanaTheme | GrafanaTheme2): theme is GrafanaTheme2 => theme.hasOwnProperty('v1');\nexport const focusCss = (theme: GrafanaTheme | GrafanaTheme2) => {\n  const isTheme2 = isGrafanaTheme2(theme);\n  const firstColor = isTheme2 ? theme.colors.background.canvas : theme.colors.bodyBg;\n  const secondColor = isTheme2 ? theme.colors.primary.main : theme.colors.formFocusOutline;\n\n  return `\n  outline: 2px dotted transparent;\n  outline-offset: 2px;\n  box-shadow: 0 0 0 2px ${firstColor}, 0 0 0px 4px ${secondColor};\n  transition-property: outline, outline-offset, box-shadow;\n  transition-duration: 0.2s;\n  transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1);`;\n};\n\nexport function getMouseFocusStyles(theme: GrafanaTheme | GrafanaTheme2) {\n  return {\n    outline: 'none',\n    boxShadow: `none`,\n  };\n}\n\nexport function getFocusStyles(theme: GrafanaTheme2) {\n  return {\n    outline: '2px dotted transparent',\n    outlineOffset: '2px',\n    boxShadow: `0 0 0 2px ${theme.colors.background.canvas}, 0 0 0px 4px ${theme.colors.primary.main}`,\n    transitionTimingFunction: `cubic-bezier(0.19, 1, 0.22, 1)`,\n    transitionDuration: '0.2s',\n    transitionProperty: 'outline, outline-offset, box-shadow',\n  };\n}\n\n// max-width is set up based on .grafana-tooltip class that's used in dashboard\nexport const getTooltipContainerStyles = (theme: GrafanaTheme2) => ({\n  overflow: 'hidden',\n  background: theme.colors.background.elevated,\n  boxShadow: theme.shadows.z2,\n  maxWidth: '800px',\n  padding: theme.spacing(1),\n  borderRadius: theme.shape.radius.default,\n  zIndex: theme.zIndex.tooltip,\n});\n","import memoize from 'micro-memoize';\n\n/**\n * @public\n * @deprecated use useStyles hook\n *  Creates memoized version of styles creator\n * @param stylesCreator function accepting dependencies based on which styles are created\n */\nexport function stylesFactory<ResultFn extends (this: any, ...newArgs: any[]) => ReturnType<ResultFn>>(\n  stylesCreator: ResultFn\n) {\n  return memoize(stylesCreator);\n}\n","import { availableIconsIndex, Field, FieldType, IconName } from '@grafana/data';\n\nimport { ComponentSize } from './size';\n\n// Exported from here for backwards compatibility\nexport type { IconName } from '@grafana/data';\nexport { toIconName } from '@grafana/data';\n\nexport type IconType = 'mono' | 'default' | 'solid';\nexport type IconSize = ComponentSize | 'xl' | 'xxl' | 'xxxl';\nexport const isIconSize = (value: string): value is IconSize => {\n  return ['xs', 'sm', 'md', 'lg', 'xl', 'xxl', 'xxxl'].includes(value);\n};\n\n// function remains for backwards compatibility\nexport const getAvailableIcons = () => Object.keys(availableIconsIndex);\n\n/**\n * Get the icon for a given field\n */\nexport function getFieldTypeIcon(field?: Field): IconName {\n  return getFieldTypeIconName(field?.type);\n}\n\n/** Get an icon for a given field type  */\nexport function getFieldTypeIconName(type?: FieldType): IconName {\n  if (type) {\n    switch (type) {\n      case FieldType.time:\n        return 'clock-nine';\n      case FieldType.string:\n        return 'font';\n      case FieldType.number:\n        return 'calculator-alt';\n      case FieldType.boolean:\n        return 'toggle-on';\n      case FieldType.trace:\n        return 'info-circle';\n      case FieldType.enum:\n        return 'list-ol';\n      case FieldType.geo:\n        return 'map-marker';\n      case FieldType.other:\n        return 'brackets-curly';\n    }\n  }\n  return 'question-circle';\n}\n","import i18next from 'i18next';\nimport { ReactElement } from 'react';\nimport { Trans as I18NextTrans, initReactI18next } from 'react-i18next'; // eslint-disable-line no-restricted-imports\n\n// We want to translate grafana-ui without introducing any breaking changes for consumers\n// who use grafana-ui outside of grafana (such as grafana.com self serve). The other struggle\n// is that grafana-ui does not require a top-level provider component, so we don't get the\n// chance to do the mandatory i18next setup that <Trans /> and t() requires\n//\n// We wrap <Trans /> and t() and do a simple check if it hasn't already been set up\n// (Grafana will init i18next in app.ts), and just set it up with a minimal config\n// to use the default phrases in the source jsx.\n\n// Creates a default, english i18next instance when running outside of grafana.\n// we don't support changing the locale of grafana ui when outside of Grafana\nfunction initI18n() {\n  // resources is undefined by default and set either by grafana app.ts or here\n  if (typeof i18next.options.resources !== 'object') {\n    i18next.use(initReactI18next).init({\n      resources: {},\n      returnEmptyString: false,\n      lng: 'en-US', // this should be the locale of the phrases in our source JSX\n    });\n  }\n}\n\ntype I18NextTransType = typeof I18NextTrans;\ntype I18NextTransProps = Parameters<I18NextTransType>[0];\n\ninterface TransProps extends I18NextTransProps {\n  i18nKey: string;\n}\n\nexport const Trans = (props: TransProps): ReactElement => {\n  initI18n();\n  return <I18NextTrans {...props} />;\n};\n\n// Reassign t() so i18next-parser doesn't warn on dynamic key, and we can have 'failOnWarnings' enabled\nconst tFunc = i18next.t;\n\nexport const t = (id: string, defaultMessage: string, values?: Record<string, unknown>) => {\n  initI18n();\n\n  return tFunc(id, defaultMessage, values);\n};\n","import { keyframes } from '@emotion/css';\n\nexport const spin = keyframes({\n  '0%': {\n    transform: 'rotate(0deg)',\n  },\n  '100%': {\n    transform: 'rotate(359deg)',\n  },\n});\n","import { css } from '@emotion/css';\nimport { Placement } from '@floating-ui/react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { TooltipPlacement } from '../components/Tooltip';\n\nexport function getPlacement(placement?: TooltipPlacement): Placement {\n  switch (placement) {\n    case 'auto':\n      return 'bottom';\n    case 'auto-start':\n      return 'bottom-start';\n    case 'auto-end':\n      return 'bottom-end';\n    default:\n      return placement ?? 'bottom';\n  }\n}\n\nexport function buildTooltipTheme(\n  theme: GrafanaTheme2,\n  tooltipBg: string,\n  toggletipBorder: string,\n  tooltipText: string,\n  tooltipPadding: { topBottom: number; rightLeft: number }\n) {\n  return {\n    arrow: css({\n      fill: tooltipBg,\n    }),\n    container: css({\n      backgroundColor: tooltipBg,\n      borderRadius: theme.shape.radius.default,\n      border: `1px solid ${toggletipBorder}`,\n      boxShadow: theme.shadows.z2,\n      color: tooltipText,\n      fontSize: theme.typography.bodySmall.fontSize,\n      padding: theme.spacing(tooltipPadding.topBottom, tooltipPadding.rightLeft),\n      [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n        transition: 'opacity 0.3s',\n      },\n      zIndex: theme.zIndex.tooltip,\n      maxWidth: '400px',\n      overflowWrap: 'break-word',\n\n      \"&[data-popper-interactive='false']\": {\n        pointerEvents: 'none',\n      },\n    }),\n    headerClose: css({\n      color: theme.colors.text.secondary,\n      position: 'absolute',\n      right: theme.spacing(1),\n      top: theme.spacing(1.5),\n      backgroundColor: 'transparent',\n      border: 0,\n    }),\n    header: css({\n      paddingTop: theme.spacing(1),\n      paddingBottom: theme.spacing(2),\n    }),\n    body: css({\n      paddingTop: theme.spacing(1),\n      paddingBottom: theme.spacing(1),\n    }),\n    footer: css({\n      paddingTop: theme.spacing(2),\n      paddingBottom: theme.spacing(1),\n    }),\n  };\n}\n","import { EventBusSrv, EventBusExtended } from '@grafana/data';\n\nexport const appEvents: EventBusExtended = new EventBusSrv();\n\nexport default appEvents;\n","import { PluginState } from '@grafana/data';\nimport { config, GrafanaBootConfig } from '@grafana/runtime';\nexport { config, GrafanaBootConfig as Settings };\n\nlet grafanaConfig: GrafanaBootConfig = config;\n\nexport default grafanaConfig;\n\nexport const getConfig = () => {\n  return grafanaConfig;\n};\n\nexport const updateConfig = (update: Partial<GrafanaBootConfig>) => {\n  grafanaConfig = {\n    ...grafanaConfig,\n    ...update,\n  };\n};\n\n// The `enable_alpha` flag is not exposed directly, this is equivalent\nexport const hasAlphaPanels = Boolean(config.panels?.debug?.state === PluginState.alpha);\n","import { monacoLanguageRegistry } from '@grafana/data';\nimport { CorsWorker as Worker } from 'app/core/utils/CorsWorker';\n\nexport function setMonacoEnv() {\n  self.MonacoEnvironment = {\n    getWorker(_moduleId, label) {\n      const language = monacoLanguageRegistry.getIfExists(label);\n\n      if (language) {\n        return language.init();\n      }\n\n      if (label === 'json') {\n        return new Worker(new URL('monaco-editor/esm/vs/language/json/json.worker', import.meta.url));\n      }\n\n      if (label === 'css' || label === 'scss' || label === 'less') {\n        return new Worker(new URL('monaco-editor/esm/vs/language/css/css.worker', import.meta.url));\n      }\n\n      if (label === 'html' || label === 'handlebars' || label === 'razor') {\n        return new Worker(new URL('monaco-editor/esm/vs/language/html/html.worker', import.meta.url));\n      }\n\n      if (label === 'typescript' || label === 'javascript') {\n        return new Worker(new URL('monaco-editor/esm/vs/language/typescript/ts.worker', import.meta.url));\n      }\n\n      return new Worker(new URL('monaco-editor/esm/vs/editor/editor.worker', import.meta.url));\n    },\n  };\n}\n","declare global {\n  interface Window {\n    panelsRendered?: number;\n  }\n}\n\nexport class Profiler {\n  panelsRendered = 0;\n  enabled?: boolean = undefined;\n\n  renderingCompleted() {\n    // add render counter to root scope\n    // used by image renderer to know when panel has rendered\n    this.panelsRendered += 1;\n\n    // this window variable is used by backend rendering tools to know\n    // all panels have completed rendering\n    window.panelsRendered = this.panelsRendered;\n  }\n}\n\nconst profiler = new Profiler();\nexport { profiler };\n","import { extend } from 'lodash';\n\nimport {\n  AnalyticsSettings,\n  OrgRole,\n  rangeUtil,\n  WithAccessControlMetadata,\n  userHasPermission,\n  userHasPermissionInMetadata,\n  userHasAnyPermission,\n} from '@grafana/data';\nimport { featureEnabled, getBackendSrv } from '@grafana/runtime';\nimport { getSessionExpiry } from 'app/core/utils/auth';\nimport { AccessControlAction, UserPermission } from 'app/types';\nimport { CurrentUserInternal } from 'app/types/config';\n\nimport config from '../../core/config';\n\n// When set to auto, the interval will be based on the query range\n// NOTE: this is defined here rather than TimeSrv so we avoid circular dependencies\nexport const AutoRefreshInterval = 'auto';\nexport const RedirectToUrlKey = 'redirectTo';\n\nexport class User implements Omit<CurrentUserInternal, 'lightTheme'> {\n  isSignedIn: boolean;\n  id: number;\n  uid: string;\n  login: string;\n  email: string;\n  name: string;\n  externalUserId: string;\n  theme: string;\n  orgCount: number;\n  orgId: number;\n  orgName: string;\n  orgRole: OrgRole | '';\n  isGrafanaAdmin: boolean;\n  gravatarUrl: string;\n  timezone: string;\n  weekStart: string;\n  locale: string;\n  language: string;\n  helpFlags1: number;\n  hasEditPermissionInFolders: boolean;\n  permissions?: UserPermission;\n  analytics: AnalyticsSettings;\n  fiscalYearStartMonth: number;\n  authenticatedBy: string;\n\n  constructor() {\n    this.id = 0;\n    this.uid = '';\n    this.isGrafanaAdmin = false;\n    this.isSignedIn = false;\n    this.orgRole = '';\n    this.orgId = 0;\n    this.orgName = '';\n    this.login = '';\n    this.externalUserId = '';\n    this.orgCount = 0;\n    this.timezone = '';\n    this.fiscalYearStartMonth = 0;\n    this.helpFlags1 = 0;\n    this.theme = 'dark';\n    this.hasEditPermissionInFolders = false;\n    this.email = '';\n    this.name = '';\n    this.locale = '';\n    this.language = '';\n    this.weekStart = '';\n    this.gravatarUrl = '';\n    this.analytics = {\n      identifier: '',\n    };\n    this.authenticatedBy = '';\n\n    if (config.bootData.user) {\n      extend(this, config.bootData.user);\n    }\n  }\n}\n\nexport class ContextSrv {\n  user: User;\n  isSignedIn: boolean;\n  isGrafanaAdmin: boolean;\n  isEditor: boolean;\n  sidemenuSmallBreakpoint = false;\n  hasEditPermissionInFolders: boolean;\n  minRefreshInterval: string;\n\n  private tokenRotationJobId = 0;\n\n  constructor() {\n    if (!config.bootData) {\n      config.bootData = { user: {}, settings: {}, navTree: [] } as any;\n    }\n\n    this.user = new User();\n    this.isSignedIn = this.user.isSignedIn;\n    this.isGrafanaAdmin = this.user.isGrafanaAdmin;\n    this.isEditor = this.hasRole('Editor') || this.hasRole('Admin');\n    this.hasEditPermissionInFolders = this.user.hasEditPermissionInFolders;\n    this.minRefreshInterval = config.minRefreshInterval;\n\n    this.scheduleTokenRotationJob();\n  }\n\n  async fetchUserPermissions() {\n    try {\n      this.user.permissions = await getBackendSrv().get('/api/access-control/user/actions', {\n        reloadcache: true,\n      });\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  /**\n   * Indicate the user has been logged out\n   */\n  setLoggedOut() {\n    this.setRedirectToUrl();\n    this.cancelTokenRotationJob();\n    this.user.isSignedIn = false;\n    this.isSignedIn = false;\n    window.location.reload();\n  }\n\n  setRedirectToUrl() {\n    if (config.featureToggles.useSessionStorageForRedirection) {\n      window.sessionStorage.setItem(\n        RedirectToUrlKey,\n        encodeURIComponent(window.location.href.substring(window.location.origin.length))\n      );\n    }\n  }\n\n  hasRole(role: string) {\n    if (role === 'ServerAdmin') {\n      return this.isGrafanaAdmin;\n    } else {\n      return this.user.orgRole === role;\n    }\n  }\n\n  licensedAccessControlEnabled(): boolean {\n    return featureEnabled('accesscontrol');\n  }\n\n  // Checks whether user has required permission\n  hasPermissionInMetadata(action: AccessControlAction | string, object: WithAccessControlMetadata): boolean {\n    return userHasPermissionInMetadata(action, object);\n  }\n\n  // Checks whether user has required permission\n  hasPermission(action: AccessControlAction | string): boolean {\n    return userHasPermission(action, this.user);\n  }\n\n  isGrafanaVisible() {\n    return document.visibilityState === undefined || document.visibilityState === 'visible';\n  }\n\n  // checks whether the passed interval is longer than the configured minimum refresh rate\n  isAllowedInterval(interval: string) {\n    if (!config.minRefreshInterval || interval === AutoRefreshInterval) {\n      return true;\n    }\n    return rangeUtil.intervalToMs(interval) >= rangeUtil.intervalToMs(config.minRefreshInterval);\n  }\n\n  getValidInterval(interval: string) {\n    if (!this.isAllowedInterval(interval)) {\n      return config.minRefreshInterval;\n    }\n    return interval;\n  }\n\n  getValidIntervals(intervals: string[]): string[] {\n    if (this.minRefreshInterval) {\n      return intervals.filter((str) => str !== '').filter(this.isAllowedInterval);\n    }\n    return intervals;\n  }\n\n  hasAccessToExplore() {\n    return this.hasPermission(AccessControlAction.DataSourcesExplore) && config.exploreEnabled;\n  }\n\n  // evaluates access control permissions, granting access if the user has any of them\n  evaluatePermission(actions: string[]) {\n    if (userHasAnyPermission(actions, this.user)) {\n      return [];\n    }\n    // Hack to reject when user does not have permission\n    return ['Reject'];\n  }\n\n  // schedules a job to perform token ration in the background\n  private scheduleTokenRotationJob() {\n    // check if we can schedula the token rotation job\n    if (this.canScheduleRotation()) {\n      // get the time token is going to expire\n      let expires = getSessionExpiry();\n\n      // because this job is scheduled for every tab we have open that shares a session we try\n      // to distribute the scheduling of the job. For now this can be between 1 and 20 seconds\n      const expiresWithDistribution = expires - Math.floor(Math.random() * (20 - 1) + 1);\n\n      // nextRun is when the job should be scheduled for in ms. setTimeout ms has a max value of 2147483647.\n      let nextRun = Math.min(expiresWithDistribution * 1000 - Date.now(), 2147483647);\n      // @ts-ignore\n      this.tokenRotationJobId = setTimeout(() => {\n        // if we have a new expiry time from the expiry cookie another tab have already performed the rotation\n        // so the only thing we need to do is reschedule the job and exit\n        if (getSessionExpiry() > expires) {\n          this.scheduleTokenRotationJob();\n          return;\n        }\n        this.rotateToken().then();\n      }, nextRun);\n    }\n  }\n\n  private canScheduleRotation() {\n    // skip if user is not signed in, this happens on login page or when using anonymous auth\n    if (!this.isSignedIn) {\n      return false;\n    }\n\n    // skip if there is no session to rotate\n    // if a user has a session but not yet a session expiry cookie, can happen during upgrade\n    // from an older version of grafana, we never schedule the job and the fallback logic\n    // in backend_srv will take care of rotations until first rotation has been made and\n    // page has been reloaded.\n    if (getSessionExpiry() === 0) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private cancelTokenRotationJob() {\n    if (this.tokenRotationJobId > 0) {\n      clearTimeout(this.tokenRotationJobId);\n    }\n  }\n\n  private rotateToken() {\n    // We directly use fetch here to bypass the request queue from backendSvc\n    return fetch(config.appSubUrl + '/api/user/auth-tokens/rotate', { method: 'POST' })\n      .then((res) => {\n        if (res.status === 200) {\n          this.scheduleTokenRotationJob();\n          return;\n        }\n\n        if (res.status === 401) {\n          this.setLoggedOut();\n          return;\n        }\n      })\n      .catch((e) => {\n        console.error(e);\n      });\n  }\n}\n\nlet contextSrv = new ContextSrv();\nexport { contextSrv };\n\nexport const setContextSrv = (override: ContextSrv) => {\n  if (process.env.NODE_ENV !== 'test') {\n    throw new Error('contextSrv can be only overridden in test environment');\n  }\n  contextSrv = override;\n};\n","import { isNumber, isFinite, escape } from 'lodash';\n\nimport { DecimalCount, formattedValueToString, getValueFormat, stringToJsRegex, ValueFormatter } from '@grafana/data';\n\nfunction matchSeriesOverride(aliasOrRegex: string, seriesAlias: string) {\n  if (!aliasOrRegex) {\n    return false;\n  }\n\n  if (aliasOrRegex[0] === '/') {\n    const regex = stringToJsRegex(aliasOrRegex);\n    return seriesAlias.match(regex) != null;\n  }\n\n  return aliasOrRegex === seriesAlias;\n}\n\nfunction translateFillOption(fill: number) {\n  return fill === 0 ? 0.001 : fill / 10;\n}\n\nfunction getFillGradient(amount: number) {\n  if (!amount) {\n    return null;\n  }\n\n  return {\n    colors: [{ opacity: 0.0 }, { opacity: amount / 10 }],\n  };\n}\n\n/**\n * Calculate decimals for legend and update values for each series.\n * @param data series data\n * @param panel\n * @param height\n */\nexport function updateLegendValues(data: TimeSeries[], panel: any, height: number) {\n  for (let i = 0; i < data.length; i++) {\n    const series = data[i];\n    const yaxes = panel.yaxes;\n    const seriesYAxis = series.yaxis || 1;\n    const axis = yaxes[seriesYAxis - 1];\n    const formatter = getValueFormat(axis.format);\n\n    // decimal override\n    if (isNumber(panel.decimals)) {\n      series.updateLegendValues(formatter, panel.decimals);\n    } else if (isNumber(axis.decimals)) {\n      series.updateLegendValues(formatter, axis.decimals + 1);\n    } else {\n      series.updateLegendValues(formatter, null);\n    }\n  }\n}\n\n/**\n * @deprecated: This class should not be used in new panels\n *\n * Use DataFrame and helpers instead\n */\nexport default class TimeSeries {\n  datapoints: any;\n  id: string;\n  // Represents index of original data frame in the quey response\n  dataFrameIndex: number;\n  // Represents index of field in the data frame\n  fieldIndex: number;\n  label: string;\n  alias: string;\n  aliasEscaped: string;\n  color?: string;\n  valueFormater: any;\n  stats: any;\n  legend: boolean;\n  hideTooltip?: boolean;\n  allIsNull?: boolean;\n  allIsZero?: boolean;\n  decimals: DecimalCount;\n  hasMsResolution: boolean;\n  isOutsideRange?: boolean;\n\n  lines: any;\n  hiddenSeries?: boolean;\n  dashes: any;\n  bars: any;\n  points: any;\n  yaxis: any;\n  zindex: any;\n  stack: any;\n  nullPointMode: any;\n  fillBelowTo: any;\n  transform: any;\n  flotpairs: any;\n  unit: any;\n\n  constructor(opts: any) {\n    this.datapoints = opts.datapoints;\n    this.label = opts.alias;\n    this.id = opts.alias;\n    this.alias = opts.alias;\n    this.aliasEscaped = escape(opts.alias);\n    this.color = opts.color;\n    this.bars = { fillColor: opts.color };\n    this.valueFormater = getValueFormat('none');\n    this.stats = {};\n    this.legend = true;\n    this.unit = opts.unit;\n    this.dataFrameIndex = opts.dataFrameIndex;\n    this.fieldIndex = opts.fieldIndex;\n    this.hasMsResolution = this.isMsResolutionNeeded();\n  }\n\n  applySeriesOverrides(overrides: any[]) {\n    this.lines = {};\n    this.dashes = {\n      dashLength: [],\n    };\n    this.points = {};\n    this.yaxis = 1;\n    this.zindex = 0;\n    this.nullPointMode = null;\n    delete this.stack;\n    delete this.bars.show;\n\n    for (let i = 0; i < overrides.length; i++) {\n      const override = overrides[i];\n      if (!matchSeriesOverride(override.alias, this.alias)) {\n        continue;\n      }\n      if (override.lines !== void 0) {\n        this.lines.show = override.lines;\n      }\n      if (override.dashes !== void 0) {\n        this.dashes.show = override.dashes;\n        this.lines.lineWidth = 0;\n      }\n      if (override.points !== void 0) {\n        this.points.show = override.points;\n      }\n      if (override.bars !== void 0) {\n        this.bars.show = override.bars;\n      }\n      if (override.fill !== void 0) {\n        this.lines.fill = translateFillOption(override.fill);\n      }\n      if (override.fillGradient !== void 0) {\n        this.lines.fillColor = getFillGradient(override.fillGradient);\n      }\n      if (override.stack !== void 0) {\n        this.stack = override.stack;\n      }\n      if (override.linewidth !== void 0) {\n        this.lines.lineWidth = this.dashes.show ? 0 : override.linewidth;\n        this.dashes.lineWidth = override.linewidth;\n      }\n      if (override.dashLength !== void 0) {\n        this.dashes.dashLength[0] = override.dashLength;\n      }\n      if (override.spaceLength !== void 0) {\n        this.dashes.dashLength[1] = override.spaceLength;\n      }\n      if (override.nullPointMode !== void 0) {\n        this.nullPointMode = override.nullPointMode;\n      }\n      if (override.pointradius !== void 0) {\n        this.points.radius = override.pointradius;\n      }\n      if (override.steppedLine !== void 0) {\n        this.lines.steps = override.steppedLine;\n      }\n      if (override.zindex !== void 0) {\n        this.zindex = override.zindex;\n      }\n      if (override.fillBelowTo !== void 0) {\n        this.fillBelowTo = override.fillBelowTo;\n      }\n      if (override.color !== void 0) {\n        this.setColor(override.color);\n      }\n      if (override.transform !== void 0) {\n        this.transform = override.transform;\n      }\n      if (override.legend !== void 0) {\n        this.legend = override.legend;\n      }\n      if (override.hideTooltip !== void 0) {\n        this.hideTooltip = override.hideTooltip;\n      }\n\n      if (override.yaxis !== void 0) {\n        this.yaxis = override.yaxis;\n      }\n      if (override.hiddenSeries !== void 0) {\n        this.hiddenSeries = override.hiddenSeries;\n      }\n    }\n  }\n\n  getFlotPairs(fillStyle: string) {\n    const result = [];\n\n    this.stats.total = 0;\n    this.stats.max = -Number.MAX_VALUE;\n    this.stats.min = Number.MAX_VALUE;\n    this.stats.logmin = Number.MAX_VALUE;\n    this.stats.avg = null;\n    this.stats.current = null;\n    this.stats.first = null;\n    this.stats.delta = 0;\n    this.stats.diff = null;\n    this.stats.diffperc = 0;\n    this.stats.range = null;\n    this.stats.timeStep = Number.MAX_VALUE;\n    this.allIsNull = true;\n    this.allIsZero = true;\n\n    const ignoreNulls = fillStyle === 'connected';\n    const nullAsZero = fillStyle === 'null as zero';\n    let currentTime;\n    let currentValue;\n    let nonNulls = 0;\n    let previousTime;\n    let previousValue = 0;\n    let previousDeltaUp = true;\n\n    for (let i = 0; i < this.datapoints.length; i++) {\n      currentValue = this.datapoints[i][0];\n      currentTime = this.datapoints[i][1];\n\n      // Due to missing values we could have different timeStep all along the series\n      // so we have to find the minimum one (could occur with aggregators such as ZimSum)\n      if (previousTime !== undefined) {\n        const timeStep = currentTime - previousTime;\n        if (timeStep < this.stats.timeStep) {\n          this.stats.timeStep = timeStep;\n        }\n      }\n      previousTime = currentTime;\n\n      if (currentValue === null) {\n        if (ignoreNulls) {\n          continue;\n        }\n        if (nullAsZero) {\n          currentValue = 0;\n        }\n      }\n\n      if (currentValue !== null) {\n        if (isNumber(currentValue)) {\n          this.stats.total += currentValue;\n          this.allIsNull = false;\n          nonNulls++;\n        }\n\n        if (currentValue > this.stats.max) {\n          this.stats.max = currentValue;\n        }\n\n        if (currentValue < this.stats.min) {\n          this.stats.min = currentValue;\n        }\n\n        if (this.stats.first === null) {\n          this.stats.first = currentValue;\n        } else {\n          if (previousValue > currentValue) {\n            // counter reset\n            previousDeltaUp = false;\n            if (i === this.datapoints.length - 1) {\n              // reset on last\n              this.stats.delta += currentValue;\n            }\n          } else {\n            if (previousDeltaUp) {\n              this.stats.delta += currentValue - previousValue; // normal increment\n            } else {\n              this.stats.delta += currentValue; // account for counter reset\n            }\n            previousDeltaUp = true;\n          }\n        }\n        previousValue = currentValue;\n\n        if (currentValue < this.stats.logmin && currentValue > 0) {\n          this.stats.logmin = currentValue;\n        }\n\n        if (currentValue !== 0) {\n          this.allIsZero = false;\n        }\n      }\n\n      result.push([currentTime, currentValue]);\n    }\n\n    if (this.stats.max === -Number.MAX_VALUE) {\n      this.stats.max = null;\n    }\n    if (this.stats.min === Number.MAX_VALUE) {\n      this.stats.min = null;\n    }\n\n    if (result.length && !this.allIsNull) {\n      this.stats.avg = this.stats.total / nonNulls;\n      this.stats.current = result[result.length - 1][1];\n      if (this.stats.current === null && result.length > 1) {\n        this.stats.current = result[result.length - 2][1];\n      }\n    }\n    if (this.stats.max !== null && this.stats.min !== null) {\n      this.stats.range = this.stats.max - this.stats.min;\n    }\n    if (this.stats.current !== null && this.stats.first !== null) {\n      this.stats.diff = this.stats.current - this.stats.first;\n      this.stats.diffperc = this.stats.diff / this.stats.first;\n    }\n\n    this.stats.count = result.length;\n    return result;\n  }\n\n  updateLegendValues(formater: ValueFormatter, decimals: DecimalCount) {\n    this.valueFormater = formater;\n    this.decimals = decimals;\n  }\n\n  formatValue(value: number | null) {\n    if (!isFinite(value)) {\n      value = null; // Prevent NaN formatting\n    }\n    return formattedValueToString(this.valueFormater(value, this.decimals));\n  }\n\n  isMsResolutionNeeded() {\n    for (let i = 0; i < this.datapoints.length; i++) {\n      if (this.datapoints[i][1] !== null && this.datapoints[i][1] !== undefined) {\n        const timestamp = this.datapoints[i][1].toString();\n        if (timestamp.length === 13 && timestamp % 1000 !== 0) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  hideFromLegend(options: any) {\n    if (options.hideEmpty && this.allIsNull) {\n      return true;\n    }\n    // ignore series excluded via override\n    if (!this.legend) {\n      return true;\n    }\n\n    // ignore zero series\n    if (options.hideZero && this.allIsZero) {\n      return true;\n    }\n\n    return false;\n  }\n\n  setColor(color: string) {\n    this.color = color;\n    this.bars.fillColor = color;\n  }\n}\n","import { textUtil } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nconst CSP_REPORT_ONLY_ENABLED = config.bootData.settings.cspReportOnlyEnabled;\n\nexport const defaultTrustedTypesPolicy = {\n  createHTML: (string: string, source: string, sink: string) => {\n    if (!CSP_REPORT_ONLY_ENABLED) {\n      return string.replace(/<script/gi, '&lt;script');\n    }\n    console.error('[HTML not sanitized with Trusted Types]', string, source, sink);\n    return string;\n  },\n  createScript: (string: string) => string,\n  createScriptURL: (string: string, source: string, sink: string) => {\n    if (!CSP_REPORT_ONLY_ENABLED) {\n      return textUtil.sanitizeUrl(string);\n    }\n    console.error('[ScriptURL not sanitized with Trusted Types]', string, source, sink);\n    return string;\n  },\n};\n\nif (\n  config.bootData.settings.trustedTypesDefaultPolicyEnabled &&\n  window.trustedTypes &&\n  window.trustedTypes.createPolicy\n) {\n  // check if browser supports Trusted Types\n  window.trustedTypes.createPolicy('default', defaultTrustedTypesPolicy);\n}\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { SkeletonTheme } from 'react-loading-skeleton';\n\nimport { GrafanaTheme2, ThemeContext } from '@grafana/data';\nimport { ThemeChangedEvent, config } from '@grafana/runtime';\n\nimport { appEvents } from '../core';\n\nimport 'react-loading-skeleton/dist/skeleton.css';\n\nexport const ThemeProvider = ({ children, value }: { children: React.ReactNode; value: GrafanaTheme2 }) => {\n  const [theme, setTheme] = useState(value);\n\n  useEffect(() => {\n    const sub = appEvents.subscribe(ThemeChangedEvent, (event) => {\n      config.theme2 = event.payload;\n      setTheme(event.payload);\n    });\n\n    return () => sub.unsubscribe();\n  }, []);\n\n  return (\n    <ThemeContext.Provider value={theme}>\n      <SkeletonTheme\n        baseColor={theme.colors.emphasize(theme.colors.background.secondary)}\n        highlightColor={theme.colors.emphasize(theme.colors.background.secondary, 0.1)}\n        borderRadius={theme.shape.radius.default}\n      >\n        {children}\n      </SkeletonTheme>\n    </ThemeContext.Provider>\n  );\n};\n\nexport const provideTheme = <P extends {}>(component: React.ComponentType<P>, theme: GrafanaTheme2) => {\n  return function ThemeProviderWrapper(props: P) {\n    return <ThemeProvider value={theme}>{React.createElement(component, { ...props })}</ThemeProvider>;\n  };\n};\n","// works with webpack plugin: scripts/webpack/plugins/CorsWorkerPlugin.js\nexport class CorsWorker extends window.Worker {\n  constructor(url: URL, options?: WorkerOptions) {\n    // by default, worker inherits HTML document's location and pathname which leads to wrong public path value\n    // the CorsWorkerPlugin will override it with the value based on the initial worker chunk, ie.\n    //    initial worker chunk: http://host.com/cdn/scripts/worker-123.js\n    //    resulting public path: http://host.com/cdn/scripts\n\n    const scriptUrl = url.toString();\n    const scriptsBasePathUrl = new URL('.', url).toString();\n\n    const importScripts = `importScripts('${scriptUrl}');`;\n    const objectURL = URL.createObjectURL(\n      new Blob([`__webpack_worker_public_path__ = '${scriptsBasePathUrl}'; ${importScripts}`], {\n        type: 'application/javascript',\n      })\n    );\n    super(objectURL, options);\n    URL.revokeObjectURL(objectURL);\n  }\n}\n","export function getSessionExpiry() {\n  const expiryCookie = document.cookie.split('; ').find((row) => row.startsWith('grafana_session_expiry='));\n  if (!expiryCookie) {\n    return 0;\n  }\n\n  let expiresStr = expiryCookie.split('=').at(1);\n  if (!expiresStr) {\n    return 0;\n  }\n\n  return parseInt(expiresStr, 10);\n}\n\nexport function hasSessionExpiry() {\n  return document.cookie.split('; ').findIndex((row) => row.startsWith('grafana_session_expiry=')) > -1;\n}\n","/**\n * UserPermission is a map storing permissions in a form of\n * {\n *   action: true;\n * }\n */\nexport type UserPermission = Record<string, boolean>;\n\n// Permission actions\nexport enum AccessControlAction {\n  UsersRead = 'users:read',\n  UsersWrite = 'users:write',\n  UsersAuthTokenList = 'users.authtoken:read',\n  UsersAuthTokenUpdate = 'users.authtoken:write',\n  UsersPasswordUpdate = 'users.password:write',\n  UsersDelete = 'users:delete',\n  UsersCreate = 'users:create',\n  UsersEnable = 'users:enable',\n  UsersDisable = 'users:disable',\n  UsersPermissionsUpdate = 'users.permissions:write',\n  UsersLogout = 'users:logout',\n  UsersQuotasList = 'users.quotas:read',\n  UsersQuotasUpdate = 'users.quotas:write',\n\n  ServiceAccountsRead = 'serviceaccounts:read',\n  ServiceAccountsCreate = 'serviceaccounts:create',\n  ServiceAccountsWrite = 'serviceaccounts:write',\n  ServiceAccountsDelete = 'serviceaccounts:delete',\n  ServiceAccountsPermissionsRead = 'serviceaccounts.permissions:read',\n  ServiceAccountsPermissionsWrite = 'serviceaccounts.permissions:write',\n\n  OrgsRead = 'orgs:read',\n  OrgsPreferencesRead = 'orgs.preferences:read',\n  OrgsWrite = 'orgs:write',\n  OrgsPreferencesWrite = 'orgs.preferences:write',\n  OrgsCreate = 'orgs:create',\n  OrgsDelete = 'orgs:delete',\n  OrgUsersRead = 'org.users:read',\n  OrgUsersAdd = 'org.users:add',\n  OrgUsersRemove = 'org.users:remove',\n  OrgUsersWrite = 'org.users:write',\n\n  LDAPUsersRead = 'ldap.user:read',\n  LDAPUsersSync = 'ldap.user:sync',\n  LDAPStatusRead = 'ldap.status:read',\n\n  DataSourcesExplore = 'datasources:explore',\n  DataSourcesRead = 'datasources:read',\n  DataSourcesCreate = 'datasources:create',\n  DataSourcesWrite = 'datasources:write',\n  DataSourcesDelete = 'datasources:delete',\n  DataSourcesPermissionsRead = 'datasources.permissions:read',\n  DataSourcesCachingRead = 'datasources.caching:read',\n  DataSourcesInsightsRead = 'datasources.insights:read',\n\n  ActionServerStatsRead = 'server.stats:read',\n\n  ActionTeamsCreate = 'teams:create',\n  ActionTeamsDelete = 'teams:delete',\n  ActionTeamsRead = 'teams:read',\n  ActionTeamsWrite = 'teams:write',\n  ActionTeamsPermissionsRead = 'teams.permissions:read',\n  ActionTeamsPermissionsWrite = 'teams.permissions:write',\n\n  ActionRolesList = 'roles:read',\n  ActionTeamsRolesList = 'teams.roles:read',\n  ActionTeamsRolesAdd = 'teams.roles:add',\n  ActionTeamsRolesRemove = 'teams.roles:remove',\n  ActionUserRolesList = 'users.roles:read',\n  ActionUserRolesAdd = 'users.roles:add',\n  ActionUserRolesRemove = 'users.roles:remove',\n\n  DashboardsRead = 'dashboards:read',\n  DashboardsWrite = 'dashboards:write',\n  DashboardsDelete = 'dashboards:delete',\n  DashboardsCreate = 'dashboards:create',\n  DashboardsPermissionsRead = 'dashboards.permissions:read',\n  DashboardsPermissionsWrite = 'dashboards.permissions:write',\n  DashboardsPublicWrite = 'dashboards.public:write',\n  SnapshotsCreate = 'snapshots:create',\n  SnapshotsDelete = 'snapshots:delete',\n  SnapshotsRead = 'snapshots:read',\n\n  FoldersRead = 'folders:read',\n  FoldersWrite = 'folders:write',\n  FoldersDelete = 'folders:delete',\n  FoldersCreate = 'folders:create',\n  FoldersPermissionsRead = 'folders.permissions:read',\n  FoldersPermissionsWrite = 'folders.permissions:write',\n\n  // Support bundle actions\n  ActionSupportBundlesCreate = 'support.bundles:create',\n  ActionSupportBundlesRead = 'support.bundles:read',\n  ActionSupportBundlesDelete = 'support.bundles:delete',\n\n  // Alerting rules\n  AlertingRuleCreate = 'alert.rules:create',\n  AlertingRuleRead = 'alert.rules:read',\n  AlertingRuleUpdate = 'alert.rules:write',\n  AlertingRuleDelete = 'alert.rules:delete',\n\n  // Alerting instances (+silences)\n  AlertingInstanceCreate = 'alert.instances:create',\n  AlertingInstanceUpdate = 'alert.instances:write',\n  AlertingInstanceRead = 'alert.instances:read',\n\n  // Alerting silences\n  AlertingSilenceCreate = 'alert.silences:create',\n  AlertingSilenceUpdate = 'alert.silences:write',\n  AlertingSilenceRead = 'alert.silences:read',\n\n  // Alerting Notification policies\n  AlertingNotificationsRead = 'alert.notifications:read',\n  AlertingNotificationsWrite = 'alert.notifications:write',\n\n  // External alerting rule actions.\n  AlertingRuleExternalWrite = 'alert.rules.external:write',\n  AlertingRuleExternalRead = 'alert.rules.external:read',\n\n  // External alerting instances actions.\n  AlertingInstancesExternalWrite = 'alert.instances.external:write',\n  AlertingInstancesExternalRead = 'alert.instances.external:read',\n\n  // External alerting notifications actions.\n  AlertingNotificationsExternalWrite = 'alert.notifications.external:write',\n  AlertingNotificationsExternalRead = 'alert.notifications.external:read',\n\n  // Alerting provisioning actions\n  AlertingProvisioningReadSecrets = 'alert.provisioning.secrets:read',\n  AlertingProvisioningRead = 'alert.provisioning:read',\n  AlertingProvisioningWrite = 'alert.provisioning:write',\n\n  // Alerting receivers actions\n  AlertingReceiversPermissionsRead = 'receivers.permissions:read',\n  AlertingReceiversPermissionsWrite = 'receivers.permissions:write',\n  AlertingReceiversCreate = 'alert.notifications.receivers:create',\n  AlertingReceiversWrite = 'alert.notifications.receivers:write',\n  AlertingReceiversRead = 'alert.notifications.receivers:read',\n\n  // Alerting routes actions\n  AlertingRoutesRead = 'alert.notifications.routes:read',\n  AlertingRoutesWrite = 'alert.notifications.routes:write',\n\n  // Alerting time intervals actions\n  AlertingTimeIntervalsRead = 'alert.notifications.time-intervals:read',\n  AlertingTimeIntervalsWrite = 'alert.notifications.time-intervals:write',\n\n  // Alerting templates actions\n  AlertingTemplatesRead = 'alert.notifications.templates:read',\n  AlertingTemplatesWrite = 'alert.notifications.templates:write',\n  AlertingTemplatesDelete = 'alert.notifications.templates:delete',\n\n  ActionAPIKeysRead = 'apikeys:read',\n  ActionAPIKeysCreate = 'apikeys:create',\n  ActionAPIKeysDelete = 'apikeys:delete',\n\n  PluginsInstall = 'plugins:install',\n  PluginsWrite = 'plugins:write',\n\n  // Settings\n  SettingsRead = 'settings:read',\n  SettingsWrite = 'settings:write',\n\n  // GroupSync\n  GroupSyncMappingsRead = 'groupsync.mappings:read',\n  GroupSyncMappingsWrite = 'groupsync.mappings:write',\n\n  // Migration Assistant\n  MigrationAssistantMigrate = 'migrationassistant:migrate',\n}\n\nexport interface Role {\n  uid: string;\n  name: string;\n  displayName: string;\n  description: string;\n  group: string;\n  global: boolean;\n  delegatable?: boolean;\n  mapped?: boolean;\n  version: number;\n  created: string;\n  updated: string;\n}\n","import { OrgRole } from '@grafana/data';\n\nexport enum TeamPermissionLevel {\n  Admin = 4,\n  Member = 0,\n}\n\nexport { OrgRole as OrgRole };\n\nexport type PermissionLevel = 'view' | 'edit' | 'admin';\n\n/** @deprecated Use PermissionLevel instead */\nexport enum PermissionLevelString {\n  View = 'View',\n  Edit = 'Edit',\n  Admin = 'Admin',\n}\n\nexport enum SearchQueryType {\n  Folder = 'dash-folder',\n  Dashboard = 'dash-db',\n}\n","import { DataQuery } from '@grafana/data';\nimport { Dashboard, DataSourceRef } from '@grafana/schema';\nimport { ObjectMeta } from 'app/features/apiserver/types';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\n\nexport interface HomeDashboardRedirectDTO {\n  redirectUri: string;\n}\n\nexport interface DashboardDTO {\n  dashboard: DashboardDataDTO;\n  meta: DashboardMeta;\n}\n\nexport interface ImportDashboardResponseDTO {\n  uid: string;\n  pluginId: string;\n  title: string;\n  imported: boolean;\n  importedRevision?: number;\n  importedUri: string;\n  importedUrl: string;\n  slug: string;\n  dashboardId: number;\n  folderId: number;\n  folderUid: string;\n  description: string;\n  path: string;\n  removed: boolean;\n}\n\nexport interface SaveDashboardResponseDTO {\n  id: number;\n  slug: string;\n  status: string;\n  uid: string;\n  url: string;\n  version: number;\n}\n\nexport interface DashboardMeta {\n  slug?: string;\n  uid?: string;\n  canSave?: boolean;\n  canEdit?: boolean;\n  canDelete?: boolean;\n  canShare?: boolean;\n  canStar?: boolean;\n  canAdmin?: boolean;\n  url?: string;\n  folderUid?: string;\n  canMakeEditable?: boolean;\n  provisioned?: boolean;\n  provisionedExternalId?: string;\n  isStarred?: boolean;\n  showSettings?: boolean;\n  expires?: string;\n  isFolder?: boolean;\n  isSnapshot?: boolean;\n  folderTitle?: string;\n  folderUrl?: string;\n  folderId?: number;\n  created?: string;\n  createdBy?: string;\n  updated?: string;\n  updatedBy?: string;\n  fromScript?: boolean;\n  fromFile?: boolean;\n  hasUnsavedFolderChange?: boolean;\n  annotationsPermissions?: AnnotationsPermissions;\n  publicDashboardEnabled?: boolean;\n  isEmbedded?: boolean;\n  isNew?: boolean;\n  version?: number;\n\n  // When loaded from kubernetes, we stick the raw metadata here\n  // yes weird, but this means all the editor structures can exist unchanged\n  // until we use the resource as the main container\n  k8s?: Partial<ObjectMeta>;\n\n  // This is a property added specifically for edge cases where dashboards should be reloaded on scopes, time range or variables changes\n  // This property is not persisted in the DB but its existence is controlled by the API\n  reloadOnParamsChange?: boolean;\n}\n\nexport interface AnnotationActions {\n  canAdd: boolean;\n  canEdit: boolean;\n  canDelete: boolean;\n}\n\nexport interface AnnotationsPermissions {\n  dashboard: AnnotationActions;\n  organization: AnnotationActions;\n}\n\n// FIXME: This should not override Dashboard types\nexport interface DashboardDataDTO extends Dashboard {\n  title: string;\n  uid: string;\n  panels?: any[];\n}\n\nexport enum DashboardRoutes {\n  Home = 'home-dashboard',\n  New = 'new-dashboard',\n  Normal = 'normal-dashboard',\n  Scripted = 'scripted-dashboard',\n  Public = 'public-dashboard',\n  Embedded = 'embedded-dashboard',\n  Report = 'report-dashboard',\n}\n\nexport enum DashboardInitPhase {\n  NotStarted = 'Not started',\n  Fetching = 'Fetching',\n  Services = 'Services',\n  Failed = 'Failed',\n  Completed = 'Completed',\n}\n\nexport interface DashboardInitError {\n  message: string;\n  error: unknown;\n}\n\nexport enum KioskMode {\n  Full = 'full',\n}\n\nexport type GetMutableDashboardModelFn = () => DashboardModel | null;\n\nexport interface QueriesToUpdateOnDashboardLoad {\n  panelId: number;\n  queries: DataQuery[];\n}\n\nexport interface DashboardState {\n  getModel: GetMutableDashboardModelFn;\n  initPhase: DashboardInitPhase;\n  initialDatasource?: DataSourceRef['uid'];\n  initError: DashboardInitError | null;\n}\n\nexport const DASHBOARD_FROM_LS_KEY = 'DASHBOARD_FROM_LS_KEY';\n\nexport function isRedirectResponse(dto: DashboardDTO | HomeDashboardRedirectDTO): dto is HomeDashboardRedirectDTO {\n  return 'redirectUri' in dto;\n}\n","import { AnnotationQuery, BusEventBase, BusEventWithPayload, eventFactory } from '@grafana/data';\nimport { IconName, ButtonVariant } from '@grafana/ui';\nimport { HistoryEntryView } from 'app/core/components/AppChrome/types';\n\n/**\n * Event Payloads\n */\n\nexport interface ShowDashSearchPayload {\n  query?: string;\n}\n\nexport interface LocationChangePayload {\n  href: string;\n}\n\nexport interface ShowModalPayload {\n  model?: any;\n  modalClass?: string;\n  src?: string;\n  templateHtml?: string;\n  backdrop?: any;\n  scope?: any;\n}\n\nexport interface ShowModalReactPayload {\n  component: React.ComponentType<any>;\n  props?: any;\n}\n\nexport interface ShowConfirmModalPayload {\n  title?: string;\n  text?: string;\n  text2?: string;\n  text2htmlBind?: boolean;\n  confirmText?: string;\n  altActionText?: string;\n  yesText?: string;\n  noText?: string;\n  icon?: IconName;\n  yesButtonVariant?: ButtonVariant;\n\n  onDismiss?: () => void;\n  onConfirm?: () => void;\n  onAltAction?: () => void;\n}\n\nexport interface ToggleKioskModePayload {\n  exit?: boolean;\n}\n\nexport interface GraphClickedPayload {\n  pos: any;\n  panel: any;\n  item: any;\n}\n\nexport interface ThresholdChangedPayload {\n  threshold: any;\n  handleIndex: number;\n}\n\nexport interface DashScrollPayload {\n  restore?: boolean;\n  animate?: boolean;\n  pos?: number;\n}\n\nexport interface PanelChangeViewPayload {}\n\n/**\n * Events\n */\n\nexport const templateVariableValueUpdated = eventFactory('template-variable-value-updated');\nexport const graphClicked = eventFactory<GraphClickedPayload>('graph-click');\n\n/**\n * @internal\n */\nexport const thresholdChanged = eventFactory<ThresholdChangedPayload>('threshold-changed');\n\n/**\n * Used for syncing queries badge count in panel edit queries tab\n * Think we can get rid of this soon\n */\nexport class PanelQueriesChangedEvent extends BusEventBase {\n  static type = 'panel-queries-changed';\n}\n\n/**\n * Used for syncing transformations badge count in panel edit transform tab\n * Think we can get rid of this soon\n */\nexport class PanelTransformationsChangedEvent extends BusEventBase {\n  static type = 'panel-transformations-changed';\n}\n\n/**\n * Used by panel editor to know when panel plugin itself trigger option updates\n */\nexport class PanelOptionsChangedEvent extends BusEventBase {\n  static type = 'panels-options-changed';\n}\n\n/**\n * Used internally by DashboardModel to communicate with DashboardGrid that it needs to re-render\n */\nexport class DashboardPanelsChangedEvent extends BusEventBase {\n  static type = 'dashboard-panels-changed';\n}\n\nexport class DashboardMetaChangedEvent extends BusEventBase {\n  static type = 'dashboard-meta-changed';\n}\n\nexport class PanelDirectiveReadyEvent extends BusEventBase {\n  static type = 'panel-directive-ready';\n}\n\nexport class RenderEvent extends BusEventBase {\n  static type = 'render';\n}\n\ninterface ZoomOutEventPayload {\n  scale: number;\n  updateUrl?: boolean;\n}\n\nexport class ZoomOutEvent extends BusEventWithPayload<ZoomOutEventPayload> {\n  static type = 'zoom-out';\n}\n\nexport enum ShiftTimeEventDirection {\n  Left = -1,\n  Right = 1,\n}\n\ninterface ShiftTimeEventPayload {\n  direction: ShiftTimeEventDirection;\n  updateUrl?: boolean;\n}\n\nexport class ShiftTimeEvent extends BusEventWithPayload<ShiftTimeEventPayload> {\n  static type = 'shift-time';\n}\n\nexport class CopyTimeEvent extends BusEventBase {\n  static type = 'copy-time';\n}\n\ninterface PasteTimeEventPayload {\n  updateUrl?: boolean;\n}\n\nexport class PasteTimeEvent extends BusEventWithPayload<PasteTimeEventPayload> {\n  static type = 'paste-time';\n}\n\ninterface AbsoluteTimeEventPayload {\n  updateUrl: boolean;\n}\n\nexport class AbsoluteTimeEvent extends BusEventWithPayload<AbsoluteTimeEventPayload> {\n  static type = 'absolute-time';\n}\n\nexport class RemovePanelEvent extends BusEventWithPayload<number> {\n  static type = 'remove-panel';\n}\n\n/**\n * @deprecated use ShowModalReactEvent instead that has this capability built in\n */\nexport class ShowModalEvent extends BusEventWithPayload<ShowModalPayload> {\n  static type = 'show-modal';\n}\n\nexport class ShowConfirmModalEvent extends BusEventWithPayload<ShowConfirmModalPayload> {\n  static type = 'show-confirm-modal';\n}\n\nexport class ShowModalReactEvent extends BusEventWithPayload<ShowModalReactPayload> {\n  static type = 'show-react-modal';\n}\n\n/**\n * @deprecated use ShowModalReactEvent instead that has this capability built in\n */\nexport class HideModalEvent extends BusEventBase {\n  static type = 'hide-modal';\n}\n\nexport class DashboardSavedEvent extends BusEventBase {\n  static type = 'dashboard-saved';\n}\n\nexport class AnnotationQueryStarted extends BusEventWithPayload<AnnotationQuery> {\n  static type = 'annotation-query-started';\n}\n\nexport class AnnotationQueryFinished extends BusEventWithPayload<AnnotationQuery> {\n  static type = 'annotation-query-finished';\n}\n\nexport class PanelEditEnteredEvent extends BusEventWithPayload<number> {\n  static type = 'panel-edit-started';\n}\n\nexport class PanelEditExitedEvent extends BusEventWithPayload<number> {\n  static type = 'panel-edit-finished';\n}\n\nexport class RecordHistoryEntryEvent extends BusEventWithPayload<HistoryEntryView> {\n  static type = 'record-history-entry';\n}\n","import { Observable, SubscriptionLike, Unsubscribable } from 'rxjs';\n\nimport {\n  AbsoluteTimeRange,\n  DataFrame,\n  DataQuery,\n  DataQueryRequest,\n  DataSourceApi,\n  HistoryItem,\n  LogsModel,\n  PanelData,\n  RawTimeRange,\n  TimeRange,\n  EventBusExtended,\n  DataQueryResponse,\n  ExplorePanelsState,\n  SupplementaryQueryType,\n  UrlQueryMap,\n  ExploreCorrelationHelperData,\n  DataLinkTransformationConfig,\n} from '@grafana/data';\nimport { CorrelationData } from '@grafana/runtime';\nimport { RichHistorySearchFilters, RichHistorySettings } from 'app/core/utils/richHistoryTypes';\n\nexport type ExploreQueryParams = UrlQueryMap;\n\nexport enum CORRELATION_EDITOR_POST_CONFIRM_ACTION {\n  CLOSE_PANE,\n  CHANGE_DATASOURCE,\n  CLOSE_EDITOR,\n}\n\nexport interface CorrelationEditorDetails {\n  editorMode: boolean;\n  correlationDirty: boolean;\n  queryEditorDirty: boolean;\n  isExiting: boolean;\n  postConfirmAction?: {\n    // perform an action after a confirmation modal instead of exiting editor mode\n    exploreId: string;\n    action: CORRELATION_EDITOR_POST_CONFIRM_ACTION;\n    changeDatasourceUid?: string;\n    isActionLeft: boolean;\n  };\n  canSave?: boolean;\n  label?: string;\n  description?: string;\n  transformations?: DataLinkTransformationConfig[];\n}\n\n// updates can have any properties\nexport interface CorrelationEditorDetailsUpdate extends Partial<CorrelationEditorDetails> {}\n\n/**\n * Global Explore state\n */\nexport interface ExploreState {\n  /**\n   * True if time interval for panels are synced. Only possible with split mode.\n   */\n  syncedTimes: boolean;\n\n  panes: Record<string, ExploreItemState | undefined>;\n\n  /**\n   * History of all queries\n   */\n  richHistory: RichHistoryQuery[];\n  richHistorySearchFilters?: RichHistorySearchFilters;\n  richHistoryTotal?: number;\n\n  /**\n   * Settings for rich history (note: filters are stored per each pane separately)\n   */\n  richHistorySettings?: RichHistorySettings;\n\n  /**\n   * True if local storage quota was exceeded when a rich history item was added. This is to prevent showing\n   * multiple errors when local storage is full.\n   */\n  richHistoryStorageFull: boolean;\n\n  /**\n   * True if a warning message of hitting the exceeded number of items has been shown already.\n   */\n  richHistoryLimitExceededWarningShown: boolean;\n\n  /**\n   * Details on a correlation being created from explore\n   */\n  correlationEditorDetails?: CorrelationEditorDetails;\n\n  /**\n   * On a split manual resize, we calculate which pane is larger, or if they are roughly the same size. If undefined, it is not split or they are roughly the same size\n   */\n  largerExploreId?: keyof ExploreState['panes'];\n\n  /**\n   * If a maximize pane button is pressed, this indicates which side was maximized. Will be undefined if not split or if it is manually resized\n   */\n  maxedExploreId?: keyof ExploreState['panes'];\n\n  /**\n   * If a minimize pane button is pressed, it will do an even split of panes. Will be undefined if split or on a manual resize\n   */\n  evenSplitPanes?: boolean;\n}\n\nexport const EXPLORE_GRAPH_STYLES = ['lines', 'bars', 'points', 'stacked_lines', 'stacked_bars'] as const;\nexport type ExploreGraphStyle = (typeof EXPLORE_GRAPH_STYLES)[number];\n\nexport interface ExploreItemState {\n  /**\n   * Width used for calculating the graph interval (can't have more datapoints than pixels)\n   */\n  containerWidth: number;\n  /**\n   * Datasource instance that has been selected. Datasource-specific logic can be run on this object.\n   */\n  datasourceInstance?: DataSourceApi | null;\n  /**\n   * Emitter to send events to the rest of Grafana.\n   */\n  eventBridge: EventBusExtended;\n  /**\n   * List of timeseries to be shown in the Explore graph result viewer.\n   */\n  graphResult: DataFrame[] | null;\n  /**\n   * History of recent queries. Datasource-specific and initialized via localStorage.\n   */\n  history: HistoryItem[];\n  /**\n   * Queries for this Explore, e.g., set via URL. Each query will be\n   * converted to a query row.\n   */\n  queries: DataQuery[];\n  /**\n   * True if this Explore area has been initialized.\n   * Used to distinguish URL state injection versus split view state injection.\n   */\n  initialized: boolean;\n  /**\n   * Log query result to be displayed in the logs result viewer.\n   */\n  logsResult: LogsModel | null;\n\n  /**\n   * Time range for this Explore. Managed by the time picker and used by all query runs.\n   */\n  range: TimeRange;\n\n  absoluteRange: AbsoluteTimeRange;\n  /**\n   * True if scanning for more results is active.\n   */\n  scanning: boolean;\n  /**\n   * Current scanning range to be shown to the user while scanning is active.\n   */\n  scanRange?: RawTimeRange;\n\n  /**\n   * Table model that combines all query table results into a single table.\n   */\n  tableResult: DataFrame[] | null;\n\n  /**\n   * Simple UI that emulates native prometheus UI\n   */\n  rawPrometheusResult: DataFrame | null;\n\n  /**\n   * React keys for rendering of QueryRows\n   */\n  queryKeys: string[];\n\n  /**\n   * How often query should be refreshed\n   */\n  refreshInterval?: string;\n\n  /**\n   * If true, the view is in live tailing mode.\n   */\n  isLive: boolean;\n\n  /**\n   * If true, the live tailing view is paused.\n   */\n  isPaused: boolean;\n\n  /**\n   * Index of the last item in the list of logs\n   * when the live tailing views gets cleared.\n   */\n  clearedAtIndex: number | null;\n\n  querySubscription?: Unsubscribable;\n\n  queryResponse: ExplorePanelData;\n\n  showLogs?: boolean;\n  showMetrics?: boolean;\n  showTable?: boolean;\n  /**\n   * If true, the default \"raw\" prometheus instant query UI will be displayed in addition to table view\n   */\n  showRawPrometheus?: boolean;\n  showTrace?: boolean;\n  showNodeGraph?: boolean;\n  showFlameGraph?: boolean;\n  showCustom?: boolean;\n\n  /**\n   * We are using caching to store query responses of queries run from logs navigation.\n   * In logs navigation, we do pagination and we don't want our users to unnecessarily run the same queries that they've run just moments before.\n   * We are currently caching last 5 query responses.\n   */\n  cache: Array<{ key: string; value: ExplorePanelData }>;\n\n  /**\n   * Supplementary queries are additional queries used in Explore, e.g. for logs volume\n   */\n  supplementaryQueries: SupplementaryQueries;\n\n  panelsState: ExplorePanelsState;\n\n  correlationEditorHelperData?: ExploreCorrelationHelperData;\n\n  correlations?: CorrelationData[];\n}\n\nexport interface ExploreUpdateState {\n  datasource: boolean;\n  queries: boolean;\n  range: boolean;\n  mode: boolean;\n}\n\nexport interface QueryOptions {\n  minInterval?: string;\n  maxDataPoints?: number;\n  liveStreaming?: boolean;\n}\n\nexport interface QueryTransaction {\n  id: string;\n  done: boolean;\n  request: DataQueryRequest;\n  queries: DataQuery[];\n  scanning?: boolean;\n}\n\nexport type RichHistoryQuery<T extends DataQuery = DataQuery> = {\n  id: string;\n  createdAt: number;\n  datasourceUid: string;\n  datasourceName: string;\n  starred: boolean;\n  comment: string;\n  queries: T[];\n};\n\nexport interface ExplorePanelData extends PanelData {\n  graphFrames: DataFrame[];\n  tableFrames: DataFrame[];\n  logsFrames: DataFrame[];\n  traceFrames: DataFrame[];\n  customFrames: DataFrame[];\n  nodeGraphFrames: DataFrame[];\n  rawPrometheusFrames: DataFrame[];\n  flameGraphFrames: DataFrame[];\n  graphResult: DataFrame[] | null;\n  tableResult: DataFrame[] | null;\n  logsResult: LogsModel | null;\n  rawPrometheusResult: DataFrame | null;\n}\n\nexport enum TABLE_RESULTS_STYLE {\n  table = 'table',\n  raw = 'raw',\n}\nexport const TABLE_RESULTS_STYLES = [TABLE_RESULTS_STYLE.table, TABLE_RESULTS_STYLE.raw];\nexport type TableResultsStyle = (typeof TABLE_RESULTS_STYLES)[number];\n\nexport interface SupplementaryQuery {\n  enabled: boolean;\n  dataProvider?: Observable<DataQueryResponse>;\n  dataSubscription?: SubscriptionLike;\n  data?: DataQueryResponse;\n}\n\nexport type SupplementaryQueries = {\n  [key in SupplementaryQueryType]: SupplementaryQuery;\n};\n","import { WithAccessControlMetadata } from '@grafana/data';\n\nimport { ApiKey, OrgRole, Role } from '.';\n\nexport interface OrgServiceAccount extends WithAccessControlMetadata {\n  serviceAccountId: number;\n  avatarUrl: string;\n  email: string;\n  login: string;\n  name: string;\n  displayName: string;\n  orgId: number;\n  role: OrgRole;\n  tokens: number[];\n}\n\nexport interface ServiceAccount {\n  id: number;\n  label: string;\n  avatarUrl: string;\n  login: string;\n  email: string;\n  name: string;\n  displayName: string;\n  orgId?: number;\n}\n\nexport interface ServiceAccountDTO extends WithAccessControlMetadata {\n  id: number;\n  uid: string;\n  orgId: number;\n  tokens: number;\n  name: string;\n  login: string;\n  avatarUrl?: string;\n  createdAt: string;\n  isDisabled: boolean;\n  isExternal?: boolean;\n  requiredBy?: string;\n  teams: string[];\n  role: OrgRole;\n  roles?: Role[];\n}\n\nexport interface ServiceAccountCreateApiResponse {\n  avatarUrl?: string;\n  id: number;\n  uid: string;\n  isDisabled: boolean;\n  login: string;\n  name: string;\n  orgId: number;\n  role: OrgRole;\n  tokens: number;\n}\n\nexport interface ServiceAccountProfileState {\n  serviceAccount: ServiceAccountDTO;\n  isLoading: boolean;\n  rolesLoading?: boolean;\n  tokens: ApiKey[];\n}\n\nexport enum ServiceAccountStateFilter {\n  All = 'All',\n  WithExpiredTokens = 'WithExpiredTokens',\n  External = 'External',\n  Disabled = 'Disabled',\n}\n\nexport interface ServiceAccountsState {\n  serviceAccounts: ServiceAccountDTO[];\n  isLoading: boolean;\n  roleOptions: Role[];\n\n  // search / filtering\n  query: string;\n  perPage: number;\n  page: number;\n  totalPages: number;\n  showPaging: boolean;\n  serviceAccountStateFilter: ServiceAccountStateFilter;\n}\n\nexport interface ServiceAccountsUpgradeStatus {\n  upgraded: boolean;\n}\n","export interface AppNotification {\n  id: string;\n  severity: AppNotificationSeverity;\n  icon: string;\n  title: string;\n  text: string;\n  traceId?: string;\n  component?: React.ReactElement;\n  showing: boolean;\n  timestamp: number;\n}\n\nexport enum AppNotificationSeverity {\n  Success = 'success',\n  Warning = 'warning',\n  Error = 'error',\n  Info = 'info',\n}\n\nexport enum AppNotificationTimeout {\n  Success = 3000,\n  Warning = 5000,\n  Error = 7000,\n}\n\nexport const timeoutMap = {\n  [AppNotificationSeverity.Success]: AppNotificationTimeout.Success,\n  [AppNotificationSeverity.Warning]: AppNotificationTimeout.Warning,\n  [AppNotificationSeverity.Error]: AppNotificationTimeout.Error,\n  [AppNotificationSeverity.Info]: AppNotificationTimeout.Success,\n};\n\nexport interface AppNotificationsState {\n  byId: Record<string, AppNotification>;\n  lastRead: number;\n}\n","/* eslint-disable no-restricted-imports */\nimport {\n  Action,\n  addListener as addListenerUntyped,\n  AsyncThunk,\n  AsyncThunkOptions,\n  AsyncThunkPayloadCreator,\n  createAsyncThunk as createAsyncThunkUntyped,\n  PayloadAction,\n  TypedAddListener,\n} from '@reduxjs/toolkit';\nimport {\n  useSelector as useSelectorUntyped,\n  TypedUseSelectorHook,\n  useDispatch as useDispatchUntyped,\n} from 'react-redux';\nimport { ThunkAction, ThunkDispatch as GenericThunkDispatch } from 'redux-thunk';\n\nimport type { createRootReducer } from 'app/core/reducers/root';\nimport { AppDispatch, RootState } from 'app/store/configureStore';\n\nexport type StoreState = ReturnType<ReturnType<typeof createRootReducer>>;\n\n/*\n * Utility type to get strongly types thunks\n */\nexport type ThunkResult<R> = ThunkAction<R, StoreState, undefined, PayloadAction<any>>;\n\nexport type ThunkDispatch = GenericThunkDispatch<StoreState, undefined, Action>;\n\n// Typed useDispatch & useSelector hooks\nexport const useDispatch: () => AppDispatch = useDispatchUntyped;\nexport const useSelector: TypedUseSelectorHook<RootState> = useSelectorUntyped;\n\ntype DefaultThunkApiConfig = { dispatch: AppDispatch; state: StoreState };\nexport const createAsyncThunk = <Returned, ThunkArg = void, ThunkApiConfig extends {} = DefaultThunkApiConfig>(\n  typePrefix: string,\n  payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>,\n  options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>\n): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> =>\n  createAsyncThunkUntyped<Returned, ThunkArg, ThunkApiConfig>(typePrefix, payloadCreator, options);\n\nexport const addListener = addListenerUntyped as TypedAddListener<RootState, AppDispatch>;\n","import { CorsWorker as Worker } from 'app/core/utils/CorsWorker';\n\nexport default function loadKusto() {\n  return new Worker(new URL('@kusto/monaco-kusto/release/esm/kusto.worker', import.meta.url));\n}\n","import loadKusto from './kusto';\n\nexport default function getDefaultMonacoLanguages() {\n  const kusto = { id: 'kusto', name: 'kusto', init: loadKusto };\n  return [kusto];\n}\n"],"names":["defaultTimeZoneResolver","setTimeZoneResolver","resolver","getTimeZone","options","units","isDurationUnit","value","isMathString","text","parse","roundUp","timezone","fiscalYearStartMonth","toDateTime","dateTimeRep","time","mathString","index","parseString","parseDateMath","isValid","date","strippedMathString","result","len","c","type","num","unitString","isFiscal","numFrom","unit","roundToFiscal","fyStartMonth","dateTime","DEFAULT_SYSTEM_DATE_FORMAT","DEFAULT_SYSTEM_DATE_MS_FORMAT","SystemDateFormatsState","settings","localTimeFormat","useMsResolution","locale","fallback","missingIntlDateTimeFormatSupport","dateTimeFormat","parts","mapping","part","systemDateFormats","dateInUtc","toTz","getFormat","dateTimeFormatISO","dateTimeFormatTimeAgo","dateTimeFormatWithAbbrevation","timeZoneAbbrevation","timeZone","zone","ISO_8601","setLocale","language","getLocale","getLocaleData","isDateTimeInput","v","isDateTime","toUtc","input","formatInput","toDuration","dateTimeAsMoment","dateTimeForTimeZone","getWeekdayIndex","day","wd","getWeekdayIndexByEnglishName","setWeekStart","weekStart","suffix","dow","dateTimeParse","parseOthers","parsed","format","spans","BASE_RANGE_OPTIONS","HIDDEN_RANGE_OPTIONS","STANDARD_RANGE_OPTIONS","findRangeInOptions","range","option","describeTextRange","expr","isLast","opt","amount","span","describeTimeRange","quickRanges","rangeOptions","isValidTimeSpan","describeTimeRangeAbbreviation","convertRawToRange","raw","from","to","isRelativeTime","timeRange","isRelativeTimeRange","secondsToHms","seconds","numYears","numDays","numHours","numMinutes","numSeconds","numMilliseconds","msRangeToTimeString","rangeMs","rangeSec","h","m","s","formattedH","formattedM","formattedS","calculateInterval","resolution","lowLimitInterval","lowLimitMs","intervalToMs","intervalMs","roundInterval","interval_regex","intervals_in_seconds","describeInterval","str","matches","sec","intervalToSeconds","info","interval","timeRangeToRelative","now","relativeToTimeRange","relativeTimeRange","EventBusSrv","event","typeFilter","handler","eventType","observer","key","filter","ScopedEventBus","payload","scope","emittedEvent","unbind","sub","path","eventBus","typeList","eventFactory","name","BusEventBase","tags","BusEventWithPayload","monacoLanguageRegistry","userHasPermission","action","user","userHasPermissionInMetadata","object","userHasAllPermissions","actions","userHasAnyPermission","XSSWL","acc","element","sanitizeTextPanelWhitelist","tag","isWhiteAttr","sanitizeUrl","sanitize","unsanitizedString","escapeHtml","sanitizeTrustedTypesRSS","sanitizeTrustedTypes","sanitizeTextPanelContent","sanitizeSVGContent","url","hasAnsiCodes","textUtil","specialMatcher","specialCharEscape","specialCharUnescape","escapeStringForRegex","unEscapeStringFromRegex","stringStartsAsRegEx","stringToJsRegex","match","stringToMs","nr","d","toNumberString","toIntegerOrUndefined","toFloatOrUndefined","toPascalCase","string","escapeRegex","clamp","min","max","hexToRgb","color","re","colors","n","intToHex","int","hex","rgbToHex","values","decomposeColor","asHexString","tColor","asRgbString","hslToRgb","l","a","f","k","rgb","recomposeColor","marker","colorSpace","i","getContrastRatio","foreground","background","canvas","lumA","getLuminance","lumB","backgroundParts","alpha","rgbNumbers","val","emphasize","coefficient","darken","lighten","colorManipulator","ThemeContext","createBreakpoints","keys","up","down","palette","DarkColors","LightColors","createColors","dark","light","base","primary","secondary","warning","success","error","tonalOffset","hoverFactor","contrastThreshold","other","getContrastText","threshold","getRichColor","factor","createComponents","shadows","panel","createShadows","createShape","baseBorderRadius","createSpacing","gridSize","transform","spacing","args","argument","output","easing","duration","create","props","durationOption","easingOption","delay","animatedProp","formatMs","handleMotion","prop","getAutoHeightDuration","height","constant","milliseconds","createTransitions","defaultFontFamily","defaultFontFamilyMonospace","createTypography","typographyInput","fontFamily","fontFamilyMonospace","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","coef","pxToRem","size","buildVariant","fontWeight","lineHeight","letterSpacing","casing","round","variants","createV1Theme","theme","oldCommon","basicColors","commonColorsPalette","backgrounds","borders","textColors","form","createVisualizationColors","hues","getLightHues","getDarkHues","byNameIndex","hue","shade","alias","getColorByName","colorName","realColor","nativeColor","nativeColorNames","getClassicPalette","zIndex","createTheme","colorsInput","spacingInput","shapeInput","breakpoints","shape","typography","transitions","components","visualization","whiteBase","secondaryBase","brandMain","brandText","disabledText","getThemeById","id","themeRegistry","getBuiltInThemes","allowedExtras","item","b","Registry","getSystemPreferenceTheme","FieldType","TIME_SERIES_VALUE_FIELD_NAME","TIME_SERIES_TIME_FIELD_NAME","TIME_SERIES_METRIC_FIELD_NAME","FieldColorModeId","FALLBACK_COLOR","availableIconsIndex","isIconName","iconName","toIconName","OrgRole","PluginState","PluginType","PluginSignatureStatus","PluginSignatureType","PluginErrorCode","PluginLoadingStrategy","PluginIncludeType","GrafanaPlugin","tab","GrafanaThemeType","DefaultTimeZone","TIME_FORMAT","getDefaultTimeRange","getDefaultRelativeTimeRange","makeTimeRange","fromDateTime","init","ext","current","select","currentOptions","ids","found","history","deprecationWarning","file","oldName","newName","message","last","toOption","currency","symbol","asSuffix","scaler","decimals","scaledDecimals","isNegative","scaled","SI_PREFIXES","SI_BASE_INDEX","getOffsetFromSIPrefix","charIndex","prefix","BIN_PREFIXES","binaryPrefix","offset","p","SIPrefix","toPercent","toFixed","toPercentUnit","toHex0x","asHex","toHex","sci","Interval","UNITS","INTERVALS_IN_SECONDS","toNanoSeconds","toFixedScaled","toMicroSeconds","toMilliSeconds","toSeconds","toMinutes","toHours","toDays","timeScale","strings","decrementDecimals","decimalsCount","floor","toClock","hours","toDurationInMilliseconds","toDurationInSeconds","toDurationInHoursMinutesSeconds","toDurationInDaysHoursMinutesSeconds","dayString","hmsString","toTimeTicks","toClockMilliseconds","toClockSeconds","toDateTimeValueFormatter","pattern","todayPattern","dateTimeAsIso","dateTimeAsIsoNoDateIfToday","dateTimeAsUS","dateTimeAsUSNoDateIfToday","getDateTimeAsLocalFormat","getDateTimeAsLocalFormatNoDateIfToday","dateTimeSystemFormatter","showMs","dateTimeFromNow","getCategories","toFixedUnit","stringFormater","scaledUnits","simpleCountUnit","booleanValueFormatter","formattedValueToString","categories","hasBuiltIndex","getDecimalsForValue","formatted","decimalPos","precision","absValue","dec","magn","appendPluralIf","condition","asPrefix","isBooleanUnit","t","logb","x","extArray","siIndex","buildFormats","cat","getValueFormat","fmt","idx","getValueFormatterIndex","getValueFormats","resolveSelectors","versionedSelectors","grafanaVersion","version","resolveSelectorGroup","group","isVersionedSelectorGroup","assertIsSemverValid","resolveSelector","target","first","versionedSelector","versionToUse","versions","selectorName","MIN_GRAFANA_VERSION","versionedComponents","title","mode","status","_","refId","stepNo","severity","tooltip","sectionId","folderName","tabId","versionedPages","alertRuleUid","dataSourceName","dataSourceUid","pluginName","annotationIndex","editIndex","uid","label","dashboardUid","variableName","page","pluginId","Pages","Components","selectors","GrafanaBootConfig","defaults","overrideFeatureTogglesFromUrl","overrideFeatureTogglesFromLocalStorage","config","featureToggles","localStorageValue","features","feature","featureName","featureValue","toggleState","isDevelopment","safeRuntimeFeatureFlags","bootData","RefreshEvent","ThemeChangedEvent","TimeRangeUpdatedEvent","CopyPanelEvent","singletonInstance","setAppEvents","instance","getAppEvents","isFetchError","e","setBackendSrv","getBackendSrv","featureEnabled","enabledFeatures","DataTopic","ScaleDimensionMode","ScalarDimensionMode","TextDimensionMode","ResourceDimensionMode","FrameGeometrySourceMode","HeatmapCalculationMode","HeatmapCellLayout","LogsSortOrder","AxisPlacement","AxisColorMode","VisibilityMode","GraphDrawStyle","GraphTransform","LineInterpolation","ScaleDistribution","GraphGradientMode","StackingMode","BarAlignment","ScaleOrientation","ScaleDirection","defaultLineStyle","GraphThresholdsStyleMode","LegendDisplayMode","defaultReduceDataOptions","VizOrientation","defaultOptionsWithTimezones","BigValueColorMode","BigValueGraphMode","BigValueJustifyMode","BigValueTextMode","PercentChangeColorMode","TooltipDisplayMode","SortOrder","defaultVizLegendOptions","BarGaugeDisplayMode","BarGaugeValueMode","BarGaugeNamePlacement","BarGaugeSizing","TableCellDisplayMode","TableCellBackgroundDisplayMode","defaultTableFooterOptions","TableCellHeight","VariableFormatID","LogsDedupStrategy","ComparisonOperation","defaultTableFieldOptions","defaultTimeZone","allButtonVariants","allButtonFills","Button","variant","fill","icon","fullWidth","children","className","disabled","tooltipPlacement","onClick","otherProps","ref","styles","getButtonStyles","buttonStyles","hasTooltip","button","IconRenderer","LinkButton","onBlur","onFocus","linkButtonStyles","iconType","iconOnly","padding","variantStyles","getPropertiesForVariant","disabledStyles","getPropertiesForDisabled","focusStyle","paddingMinusBorder","getButtonVariantStyles","outlineBorderColor","borderColor","hoverBorderColor","clearButtonStyles","clearLinkButtonStyles","ErrorWithStack","errorInfo","style","getStyles","getFocusStyle","sharedInputStyle","invalid","borderColorHover","textColor","autoFillBorder","inputPadding","inputSizes","inputSizesPixels","getPropertiesForButtonSize","getIconStyles","Icon","rest","iconRoot","svgSize","svgHgt","svgWid","subDir","svgPath","composedClassName","alwaysMonoIcons","getIconSubDir","getSvgSize","getIconRoot","grafanaPublicPath","IconButton","limitedIconSize","ariaLabel","buttonRef","deprecatedAriaLabel","ariaLabelProp","restProps","hoverSize","iconColor","AutoSizeInputContext","Input","addonAfter","addonBefore","suffixProp","loading","width","prefixRef","prefixRect","suffixRef","suffixRect","isInAutoSizeInput","accessoriesWidth","autoSizeWidth","getInputStyles","prefixSuffixStaticWidth","prefixSuffix","Box","margin","marginX","marginY","marginTop","marginBottom","marginLeft","marginRight","paddingX","paddingY","paddingTop","paddingBottom","paddingLeft","paddingRight","display","backgroundColor","grow","shrink","basis","flex","borderStyle","borderRadius","direction","justifyContent","alignItems","boxShadow","gap","minWidth","maxWidth","minHeight","maxHeight","position","sizeStyles","Element","customBorderColor","customBackgroundColor","Stack","wrap","breakpointCSS","getCSS","getResponsiveStyle","getSizeStyles","LoadingPlaceholder","findInsertIndex","line","ch","getCompletionItems","monaco","suggestions","items","suggestion","mapKinds","sug","registerSuggestions","getSuggestions","modelId","model","context","currentLine","UnthemedCodeEditor","customLanguage","onSave","onBeforeEditorMount","editor","onChange","onEditorDidMount","oldProps","newLanguage","showMiniMap","showLineNumbers","readOnly","wordWrap","monacoOptions","alwaysConsumeMouseWheel","restMonacoOptions","longText","containerStyles","ReactMonacoEditorLazy","CodeEditor","useAsyncDependency","importStatement","state","useAsync","dependency","ReactMonacoEditor","CodeEditorSuggestionItemKind","Portal","root","forwardedRef","node","portalRoot","getPortalContainer","PortalContainer","RefForwardingPortal","ScrollIndicators","showScrollTopIndicator","setShowTopScrollIndicator","showScrollBottomIndicator","setShowBottomScrollIndicator","scrollTopMarker","scrollBottomMarker","intersectionObserver","entries","entry","ScrollContainer","showScrollIndicators","onScroll","overflowX","overflowY","scrollbarWidth","boxProps","MultiValueContainer","innerProps","MultiValueRemove","CustomInput","testId","DropdownIndicator","selectProps","isOpen","IndicatorsContainer","InputControl","focused","getInputControlStyles","withPrefix","SelectOptionGroup","cx","getClassNames","Heading","headingProps","getSelectStyles","SelectOptionGroupHeader","Text","UnthemedValueContainer","valueChildren","otherChildren","truncatedValues","isMulti","noWrap","dataTestid","ValueContainer","cleanValue","filtered","selectedValue","findSelectedValue","omitDescriptions","description","CustomControl","menuIsOpen","onMenuClose","onMenuOpen","isFocused","getValue","innerRef","determineToggleAllState","SelectBase","allowCustomValue","allowCreateWhileLoading","autoFocus","backspaceRemovesValue","blurInputOnSelect","cacheOptions","closeMenuOnSelect","createOptionPosition","defaultOptions","defaultValue","filterOption","formatCreateLabel","getOptionLabel","getOptionValue","inputValue","isClearable","isLoading","inputId","isOptionDisabled","isSearchable","loadOptions","loadingMessage","maxMenuHeight","minMenuHeight","maxVisibleValues","menuPlacement","menuPosition","menuShouldPortal","noOptionsMessage","onCloseMenu","onCreateOption","onInputChange","onKeyDown","onMenuScrollToBottom","onMenuScrollToTop","onOpenMenu","toggleAllOptions","openMenuOnFocus","placeholder","renderControl","showAllSelectedWhenOpen","tabSelectsValue","virtualized","noMultiValueWrap","isValidNewOption","formatOptionLabel","hideSelectedOptions","reactSelectRef","closeToBottom","setCloseToBottom","selectStyles","hasInputValue","setHasInputValue","distance","onChangeWithEmpty","ReactSelectComponent","creatableProps","asyncSelectProps","selectableValue","hasValue","commonSelectProps","actionMeta","newValue","newHasValue","defaultFormatCreateLabel","SelectMenuComponent","SelectMenu","toggleAllState","toggleAll","toSelect","CustomIndicatorsContainer","IndicatorSeparator","clearValue","Spinner","SingleValue","MultiValue","selectedValuesCount","indicatorChildren","Select","MultiSelect","AsyncSelect","VirtualizedSelect","AsyncVirtualizedSelect","AsyncMultiSelect","SelectContainer","isDisabled","getSelectContainerStyles","optionsElement","SelectMenuOptions","ToggleAllOption","VIRTUAL_LIST_ITEM_HEIGHT","VIRTUAL_LIST_WIDTH_ESTIMATE_MULTIPLIER","VIRTUAL_LIST_PADDING","VIRTUAL_LIST_WIDTH_EXTRA","VirtualizedSelectMenu","scrollRef","focusedOption","listRef","optionComponent","flattenedOptions","focusedIndex","flattenedChildren","child","hasArrayChildren","longestOption","widthEstimate","heightEstimate","selectedCount","data","isSelected","renderOptionLabel","onMouseMove","onMouseOver","useDelayedSwitch","delayedValue","setDelayedValue","onStartTime","timeout","timeSpent","turnOff","FadeWithImage","SlideOutTransition","FadeTransition","resetSelectStyles","originalStyles","useCustomSelectStyles","top","bottom","provided","ToggleAllState","inline","iconClassName","deprecatedStyles","getDeprecatedStyles","TruncatedText","childElement","isOverflowing","setIsOverflowing","internalRef","resizeObserver","getTooltipText","Tooltip","weight","truncate","italic","textAlignment","tabular","getTextStyles","customWeight","customColor","customVariant","interactive","show","placement","content","arrowRef","controlledVisible","setControlledVisible","middleware","refs","floatingStyles","tooltipId","hover","focus","dismiss","getReferenceProps","getFloatingProps","contentIsFunction","handleRef","childHasMatchingAriaLabel","formatViewed","dateString","diffHours","getUserInitials","UserIcon","userView","showTooltip","lastActiveAt","isActive","getIconBorder","shadowColor","shadowHoverColor","visible","transitionRef","horizontal","measurement","ThemeContextMock","memoizedStyleCreators","withTheme","Component","WithTheme","ContextComponent","withTheme2","useTheme","useTheme2","useStyles","memoizedStyleCreator","useStyles2","additionalArguments","mockThemeContext","cardChrome","hoverColor","listItem","listItemSelected","mediaUp","breakpoint","isGrafanaTheme2","focusCss","isTheme2","firstColor","secondColor","getMouseFocusStyles","getFocusStyles","getTooltipContainerStyles","stylesFactory","stylesCreator","isIconSize","getAvailableIcons","getFieldTypeIcon","field","getFieldTypeIconName","initI18n","Trans","tFunc","defaultMessage","spin","getPlacement","buildTooltipTheme","tooltipBg","toggletipBorder","tooltipText","tooltipPadding","appEvents","grafanaConfig","getConfig","updateConfig","update","hasAlphaPanels","setMonacoEnv","_moduleId","Profiler","profiler","AutoRefreshInterval","RedirectToUrlKey","User","ContextSrv","role","intervals","expires","expiresWithDistribution","nextRun","res","contextSrv","setContextSrv","override","matchSeriesOverride","aliasOrRegex","seriesAlias","regex","translateFillOption","getFillGradient","updateLegendValues","series","yaxes","seriesYAxis","axis","formatter","TimeSeries","opts","overrides","fillStyle","ignoreNulls","nullAsZero","currentTime","currentValue","nonNulls","previousTime","previousValue","previousDeltaUp","timeStep","formater","timestamp","CSP_REPORT_ONLY_ENABLED","defaultTrustedTypesPolicy","source","sink","ThemeProvider","setTheme","provideTheme","component","CorsWorker","scriptUrl","scriptsBasePathUrl","importScripts","objectURL","getSessionExpiry","expiryCookie","row","expiresStr","hasSessionExpiry","AccessControlAction","TeamPermissionLevel","PermissionLevelString","SearchQueryType","DashboardRoutes","DashboardInitPhase","KioskMode","DASHBOARD_FROM_LS_KEY","isRedirectResponse","dto","templateVariableValueUpdated","graphClicked","thresholdChanged","PanelQueriesChangedEvent","PanelTransformationsChangedEvent","PanelOptionsChangedEvent","DashboardPanelsChangedEvent","DashboardMetaChangedEvent","PanelDirectiveReadyEvent","RenderEvent","ZoomOutEvent","ShiftTimeEventDirection","ShiftTimeEvent","CopyTimeEvent","PasteTimeEvent","AbsoluteTimeEvent","RemovePanelEvent","ShowModalEvent","ShowConfirmModalEvent","ShowModalReactEvent","HideModalEvent","DashboardSavedEvent","AnnotationQueryStarted","AnnotationQueryFinished","PanelEditEnteredEvent","PanelEditExitedEvent","RecordHistoryEntryEvent","CORRELATION_EDITOR_POST_CONFIRM_ACTION","EXPLORE_GRAPH_STYLES","TABLE_RESULTS_STYLE","TABLE_RESULTS_STYLES","ServiceAccountStateFilter","AppNotificationSeverity","AppNotificationTimeout","timeoutMap","useDispatch","useSelector","createAsyncThunk","typePrefix","payloadCreator","addListener","loadKusto","getDefaultMonacoLanguages"],"sourceRoot":""}