/usr/share/grafana/public/build
{"version":3,"file":"5923.b9c876b4bf528d8511cb.js","mappings":"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AAU,4BACV,CAACA,CAAmB,EAAG,eACzB,EACA,iBAAkB,CAChB,SAAU,gCACZ,EACA,MAAO,CACL,CAACA,CAAmB,EAAG,IAAM,iCAC/B,EACA,YAAa,CACX,CAACA,CAAmB,EAAG,IAAM,4BAC/B,CACF,EACA,kBAAmB,CACjB,QAAS,CACP,CAACA,CAAmB,EAAG,6BACzB,CACF,EACA,sBAAuB,CACrB,QAAS,CACP,CAACA,CAAmB,EAAG,gCACzB,CACF,EACA,aAAc,CACZ,YAAa,CACX,CAACA,CAAmB,EAAG,4CACzB,EACA,MAAO,CACL,SAAU,iCACZ,CACF,EACA,qBAAsB,CACpB,UAAW,CACT,CAACA,CAAmB,EAAG,qDACzB,CACF,EACA,iBAAkB,CAChB,UAAW,CACT,SAAU,kDACV,QAAS,qCACX,EACA,QAAS,CACP,SAAU,mCACV,CAACA,CAAmB,EAAG,sBACzB,EACA,eAAgB,CACd,SAAU,uCACZ,EACA,cAAe,CACb,eAAgB,CACd,SAAU,8BACZ,EACA,sBAAuB,CACrB,SAAU,uCACZ,CACF,CACF,EACA,eAAgB,CACd,YAAa,CACX,CAACA,CAAmB,EAAG,+CACzB,EACA,yBAA0B,CACxB,SAAU,0DACZ,CACF,EACA,gBAAiB,CACf,YAAa,CACX,CAACA,CAAmB,EAAG,6CACzB,EACA,YAAa,CACX,CAACA,CAAmB,EAAG,iCACzB,CACF,EACA,YAAa,CACX,QAAS,CACP,QAAS,8BACX,CACF,EACA,WAAY,CACV,UAAW,CACT,SAAU,0BACV,CAACA,CAAmB,EAAG,aACzB,CACF,EACA,aAAc,CACZ,cAAe,CACb,SAAU,6BACV,CAACA,CAAmB,EAAG,gBACzB,EACA,YAAa,CACX,SAAU,2BACV,CAACA,CAAmB,EAAG,cACzB,EACA,YAAa,CACX,SAAU,gCACZ,EACA,YAAa,CACX,SAAU,2BACV,CAACA,CAAmB,EAAG,cACzB,EACA,oBAAqB,CACnB,SAAU,oCACV,CAACA,CAAmB,EAAG,uBACzB,CACF,EACA,YAAa,CACX,OAAQ,CACN,SAAWhR,GAAiB,mCAAmCA,CAAI,EACrE,EACA,OAA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AC5B,CAACA,CAAmB,EAAG,2CACzB,EACA,8BAA+B,CAC7B,CAACA,CAAmB,EAAG,4CACzB,EACA,oCAAqC,CACnC,CAACA,CAAmB,EAAG,kDACzB,CACF,EACA,iBAAkB,CAChB,0BAA2B,CACzB,CAACA,CAAmB,EAAG,2CACzB,EACA,4BAA6B,CAC3B,CAACA,CAAmB,EAAG,uDACzB,CACF,EACA,mBAAoB,CAClB,iBAAkB,CAChB,CAACA,CAAmB,EAAG,iDACzB,EACA,WAAY,CACV,CAACA,CAAmB,EAAG,wDACzB,CACF,EACA,gBAAiB,CACf,yBAA0B,CACxB,CAACA,CAAmB,EAAG,0CACzB,EACA,2BAA4B,CAC1B,CAACA,CAAmB,EAAG,sDACzB,CACF,EACA,eAAgB,CACd,iBAAkB,CAChB,CAACA,CAAmB,EAAG,mCACzB,EACA,kBAAmB,CACjB,CAACA,CAAmB,EAAG,iDACzB,EACA,YAAa,CACX,CAACA,CAAmB,EAAG,0CACzB,CACF,EACA,iBAAkB,CAChB,oBAAqB,CACnB,CAACA,CAAmB,EAAG,+CACzB,EACA,oBAAqB,CACnB,SAAU,mDACZ,EACA,wBAAyB,CACvB,SAAU,gDACZ,EACA,iBAAkB,CAChB,SAAU,sDACZ,CACF,EACA,gBAAiB,CACf,iBAAkB,CAChB,SAAU,kCACZ,EACA,SAAU,CACR,SAAU,yCACZ,EACA,WAAY,CACV,SAAU,2CACZ,CACF,EACA,qBAAsB,CACpB,iBAAkB,CAChB,SAAU,kCACZ,EACA,SAAU,CACR,SAAU,+CACZ,EACA,WAAY,CACV,SAAU,iDACZ,CACF,EACA,eAAgB,CACd,oBAAqB,CAClB,SAAW,oDACd,EACA,kBAAmB,CAChB,SAAW,iDACd,EACA,mBAAoB,CACjB,SAAW,kDACd,CACF,EACA,oBAAqB,CACnB,UAAW,CACT,CAACA,CAAmB,EAAG,4DACzB,EACA,WAAY,CACV,CAACA,CAAmB,EAAG,6DACzB,EACA,WAAY,CACV,CAACA,CAAmB,EAAG,6DACzB,EACA,WAAY,CACV,CAACA,CAAmB,EAAG,6DACzB,EACA,aAAc,CACZ,CAACA,CAAm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","sources":["webpack://grafana/./packages/grafana-schema/src/common/common.gen.ts","webpack://grafana/./public/app/core/profiler.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/commonStyles.ts","webpack://grafana/./packages/grafana-ui/src/components/transitions/SlideOutTransition.tsx","webpack://grafana/./packages/grafana-data/src/datetime/formats.ts","webpack://grafana/./public/app/core/utils/ConfigProvider.tsx","webpack://grafana/./packages/grafana-data/src/themes/colorManipulator.ts","webpack://grafana/./packages/grafana-ui/src/components/LoadingPlaceholder/LoadingPlaceholder.tsx","webpack://grafana/./packages/grafana-data/src/themes/registry.ts","webpack://grafana/./packages/grafana-data/src/rbac/rbac.ts","webpack://grafana/./packages/grafana-data/src/text/string.ts","webpack://grafana/./public/app/types/accessControl.ts","webpack://grafana/./packages/grafana-data/src/types/plugin.ts","webpack://grafana/./public/app/core/services/context_srv.ts","webpack://grafana/./packages/grafana-ui/src/components/Layout/utils/styles.ts","webpack://grafana/./packages/grafana-ui/src/components/Portal/Portal.tsx","webpack://grafana/./public/app/core/monacoEnv.ts","webpack://grafana/./packages/grafana-data/src/datetime/rangeutil.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-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/transitions/FadeTransition.tsx","webpack://grafana/./packages/grafana-data/src/events/EventBus.ts","webpack://grafana/./packages/grafana-i18n/src/languages.ts","webpack://grafana/./packages/grafana-data/src/types/time.ts","webpack://grafana/./packages/grafana-data/src/datetime/moment_wrapper.ts","webpack://grafana/./public/lib/monaco-languages/kusto.ts","webpack://grafana/./public/lib/monaco-languages/index.ts","webpack://grafana/./packages/grafana-ui/src/utils/keyframes.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/types.ts","webpack://grafana/./packages/grafana-i18n/src/dates.ts","webpack://grafana/./packages/grafana-data/src/types/icon.ts","webpack://grafana/./packages/grafana-ui/src/components/Icon/Icon.tsx","webpack://grafana/./packages/grafana-data/src/utils/featureToggles.ts","webpack://grafana/./packages/grafana-ui/src/components/Layout/Box/Box.tsx","webpack://grafana/./packages/grafana-data/src/datetime/datemath.ts","webpack://grafana/./packages/grafana-ui/src/themes/mixins.ts","webpack://grafana/./packages/grafana-data/src/themes/context.tsx","webpack://grafana/./packages/grafana-ui/src/components/UsersIndicator/UserIcon.tsx","webpack://grafana/./packages/grafana-data/src/utils/deprecationWarning.ts","webpack://grafana/./packages/grafana-ui/src/components/Layout/Stack/Stack.tsx","webpack://grafana/./packages/grafana-data/src/utils/Registry.ts","webpack://grafana/./packages/grafana-runtime/src/config.ts","webpack://grafana/./packages/grafana-ui/src/components/Layout/utils/responsiveness.tsx","webpack://grafana/./packages/grafana-data/src/datetime/parser.ts","webpack://grafana/./public/app/core/app_events.ts","webpack://grafana/./packages/grafana-ui/src/components/Button/Button.tsx","webpack://grafana/./packages/grafana-ui/src/components/Tooltip/Tooltip.tsx","webpack://grafana/./packages/grafana-data/src/utils/selectUtils.ts","webpack://grafana/./public/app/core/trustedTypePolicies.ts","webpack://grafana/./packages/grafana-data/src/valueFormats/symbolFormatters.ts","webpack://grafana/./packages/grafana-ui/src/components/Monaco/suggestions.ts","webpack://grafana/./packages/grafana-ui/src/components/Monaco/CodeEditor.tsx","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-data/src/monaco/languageRegistry.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-ui/src/components/ErrorBoundary/ErrorWithStack.tsx","webpack://grafana/./packages/grafana-i18n/src/constants.ts","webpack://grafana/./public/app/core/utils/auth.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/resetSelectStyles.ts","webpack://grafana/./public/app/core/time_series2.ts","webpack://grafana/./packages/grafana-ui/src/components/Icon/utils.ts","webpack://grafana/./packages/grafana-data/src/datetime/common.ts","webpack://grafana/./packages/grafana-runtime/src/utils/licensing.ts","webpack://grafana/./packages/grafana-ui/src/themes/ThemeContext.tsx","webpack://grafana/./packages/grafana-ui/src/components/Input/Input.tsx","webpack://grafana/./packages/grafana-data/src/text/sanitize.ts","webpack://grafana/./packages/grafana-data/src/types/fieldColor.ts","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/themes/stylesFactory.ts","webpack://grafana/./public/app/core/config.ts","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/Spinner/Spinner.tsx","webpack://grafana/./packages/grafana-runtime/src/services/backendSrv.ts","webpack://grafana/./packages/grafana-data/src/events/types.ts","webpack://grafana/./packages/grafana-data/src/types/theme.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/getSelectStyles.ts","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-ui/src/utils/tooltipUtils.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/SelectMenu.tsx","webpack://grafana/./packages/grafana-ui/src/components/Select/SelectContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/Input/AutoSizeInputContext.ts","webpack://grafana/./packages/grafana-runtime/src/services/appEvents.ts","webpack://grafana/./packages/grafana-ui/src/components/IconButton/IconButton.tsx","webpack://grafana/./packages/grafana-ui/src/utils/floating.ts","webpack://grafana/./packages/grafana-ui/src/components/Monaco/types.ts","webpack://grafana/./packages/grafana-data/src/datetime/formatter.ts","webpack://grafana/./public/app/core/utils/CorsWorker.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/MultiValue.tsx","webpack://grafana/./packages/grafana-ui/src/utils/useDelayedSwitch.ts","webpack://grafana/./packages/grafana-ui/src/components/Select/SingleValue.tsx","webpack://grafana/./packages/grafana-i18n/src/i18n.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-data/src/types/dataFrame.ts","webpack://grafana/./packages/grafana-ui/src/types/icon.ts"],"sourcesContent":["// 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\n/**\n * Links to a resource (image/svg path)\n */\nexport interface ResourceDimensionConfig extends BaseDimensionConfig {\n fixed?: string;\n mode: ResourceDimensionMode;\n}\n\nexport enum ConnectionDirection {\n Both = 'both',\n Forward = 'forward',\n None = 'none',\n Reverse = 'reverse',\n}\n\nexport enum DirectionDimensionMode {\n Field = 'field',\n Fixed = 'fixed',\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 showValues?: boolean;\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 Geo = 'geo',\n GradientGauge = 'gradient-gauge',\n Image = 'image',\n JSONView = 'json-view',\n LcdGauge = 'lcd-gauge',\n Markdown = 'markdown',\n Pill = 'pill',\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 * Auto mode table cell options\n */\nexport interface TableAutoCellOptions {\n type: TableCellDisplayMode.Auto;\n}\n\n/**\n * Colored text cell options\n */\nexport interface TableColorTextCellOptions {\n type: TableCellDisplayMode.ColorText;\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}\n\nexport interface TablePillCellOptions {\n type: TableCellDisplayMode.Pill;\n}\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 * Options for time comparison\n */\nexport interface TimeCompareOptions {\n /**\n * Enable time comparison control\n */\n timeCompare?: boolean;\n}\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 CustomQueryParam = 'customqueryparam',\n Date = 'date',\n Distributed = 'distributed',\n DoubleQuote = 'doublequote',\n Glob = 'glob',\n HTML = 'html',\n JSON = 'json',\n Join = 'join',\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\nexport interface DirectionDimensionConfig extends BaseDimensionConfig {\n fixed?: ConnectionDirection;\n mode: DirectionDimensionMode;\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\nexport interface TableMarkdownCellOptions {\n dynamicHeight?: boolean;\n type: TableCellDisplayMode.Markdown;\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 | TablePillCellOptions | TableDataLinksCellOptions | TableActionsCellOptions | TableJsonViewCellOptions | TableMarkdownCellOptions | {\n type: TableCellDisplayMode.Geo\n });\n\nexport enum TableCellTooltipPlacement {\n Auto = 'auto',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n Top = 'top',\n}\n\nexport interface TableFooterOptions {\n /**\n * footer reducers to apply to this field\n */\n reducers?: Array<string>;\n}\n\nexport const defaultTableFooterOptions: Partial<TableFooterOptions> = {\n reducers: [],\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 extends HideableFieldConfig {\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 /**\n * options for the footer for this field\n */\n footer?: TableFooterOptions;\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 /**\n * The name of the field which contains styling overrides for this cell\n */\n styleField?: string;\n /**\n * Selecting or hovering this field will show a tooltip containing the content within the target field\n */\n tooltip?: {\n /**\n * The name of the field to get the tooltip content from\n */\n field: string;\n /**\n * placement of the tooltip\n */\n placement?: TableCellTooltipPlacement;\n };\n width?: number;\n /**\n * Enables text wrapping for column headers\n */\n wrapHeaderText?: boolean;\n /**\n * if true, wrap the text content of the cell\n */\n wrapText?: boolean;\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","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 { 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 } 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/ThemeContext';\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","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 let dateTimeFormat: Intl.DateTimeFormat;\n\n try {\n dateTimeFormat = new Intl.DateTimeFormat(locale || undefined, options);\n } catch {\n dateTimeFormat = new Intl.DateTimeFormat('en-US', options);\n }\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","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 useEffect(() => {\n setTheme(value);\n }, [value]);\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","// 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\n/**\n * given foreground and background colors, returns the color of the foreground color on the background color.\n * this is valuable for foreground colors with alpha.\n *\n * adapted from https://github.com/scttcper/tinycolor/blob/2927a9d2aa03e037486a79a295542a7848621691/src/index.ts#L583-L594\n *\n * @param foreground\n * @param background\n * @returns a tinycolor instance\n */\nexport const onBackground = (\n foreground: tinycolor.ColorInput,\n background: tinycolor.ColorInput\n): tinycolor.Instance => {\n const fg = tinycolor(foreground).toRgb();\n const bg = tinycolor(background).toRgb();\n const alpha = fg.a + bg.a * (1 - fg.a);\n\n return tinycolor({\n r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n a: alpha,\n });\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 onBackground,\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/ThemeContext';\nimport { Spinner } from '../Spinner/Spinner';\n\n/**\n * @public\n */\nexport interface LoadingPlaceholderProps extends HTMLAttributes<HTMLDivElement> {\n text: React.ReactNode;\n}\n\n/**\n * Loading indicator with a text. Used to alert a user to wait for an activity to complete.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-loadingplaceholder--docs\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 { 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 { 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 { 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","/**\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 AlertingRulesProvisioningRead = 'alert.rules.provisioning:read',\n AlertingRulesProvisioningWrite = 'alert.rules.provisioning:write',\n AlertingNotificationsProvisioningRead = 'alert.notifications.provisioning:read',\n AlertingNotificationsProvisioningWrite = 'alert.notifications.provisioning:write',\n AlertingProvisioningSetStatus = 'alert.provisioning.provenance: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 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 filteredDisplayName: string; // name to be shown in filtered role list\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 { 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}\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 // Paths to the translations for the plugin\n translations?: Record<string, 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 /** @deprecated it will be removed in a future release */\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 { 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 { UserPermission, AccessControlAction } from 'app/types/accessControl';\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 regionalFormat: 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.regionalFormat = '';\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 { 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 } 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/ThemeContext';\n\ninterface Props {\n className?: string;\n root?: HTMLElement;\n // the zIndex of the node; defaults to theme.zIndex.portal\n zIndex?: number;\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 = `${props.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 { monacoLanguageRegistry } from '@grafana/data';\nimport { CorsWorker as Worker } from 'app/core/utils/CorsWorker';\n\nexport function setMonacoEnv() {\n // Do not use window.self here, as it will not work in the worker context\n // eslint-disable-next-line no-restricted-globals\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","import { formatDateRange, t } from '@grafana/i18n';\n\nimport { RawTimeRange, TimeRange, TimeZone, IntervalValues, RelativeTimeRange, TimeOption } from '../types/time';\nimport { getFeatureToggle } from '../utils/featureToggles';\n\nimport * as dateMath from './datemath';\nimport { timeZoneAbbrevation, dateTimeFormat, dateTimeFormatTimeAgo, toIANATimezone } 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 getLastNMinutesDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.lastNMinutes', 'Last {{count}} minutes', {\n count,\n defaultValue_one: 'Last {{count}} minute',\n });\n};\n\nconst getLastNHoursDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.lastNHours', 'Last {{count}} hours', {\n count,\n defaultValue_one: 'Last {{count}} hour',\n });\n};\n\nconst getLastNDaysDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.lastNDays', 'Last {{count}} days', {\n count,\n defaultValue_one: 'Last {{count}} day',\n });\n};\n\nconst getLastNMonthsDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.lastNMonths', 'Last {{count}} months', {\n count,\n defaultValue_one: 'Last {{count}} month',\n });\n};\n\nconst getLastNYearsDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.lastNYears', 'Last {{count}} years', {\n count,\n defaultValue_one: 'Last {{count}} year',\n });\n};\n\nconst getNextNMinutesDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.nextNMinutes', 'Next {{count}} minutes', {\n count,\n defaultValue_one: 'Next {{count}} minute',\n });\n};\n\nconst getNextNHoursDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.nextNHours', 'Next {{count}} hours', {\n count,\n defaultValue_one: 'Next {{count}} hour',\n });\n};\n\nconst getNextNDaysDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.nextNDays', 'Next {{count}} days', {\n count,\n defaultValue_one: 'Next {{count}} day',\n });\n};\n\nconst getNextNMonthsDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.nextNMonths', 'Next {{count}} months', {\n count,\n defaultValue_one: 'Next {{count}} month',\n });\n};\n\nconst getNextNYearsDisplay = (count: number) => {\n return t('grafana-data.datetime.rangeutils.nextNYears', 'Next {{count}} years', {\n count,\n defaultValue_one: 'Next {{count}} year',\n });\n};\n\nconst getBaseRangeOptions: () => TimeOption[] = () => [\n { from: 'now/d', to: 'now/d', display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.today', 'Today') },\n {\n from: 'now/d',\n to: 'now',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.todaySoFar', 'Today so far'),\n },\n {\n from: 'now/w',\n to: 'now/w',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisWeek', 'This week'),\n },\n {\n from: 'now/w',\n to: 'now',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisWeekSoFar', 'This week so far'),\n },\n {\n from: 'now/M',\n to: 'now/M',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisMonth', 'This month'),\n },\n {\n from: 'now/M',\n to: 'now',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisMonthSoFar', 'This month so far'),\n },\n {\n from: 'now/y',\n to: 'now/y',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisYear', 'This year'),\n },\n {\n from: 'now/y',\n to: 'now',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisYearSoFar', 'This year so far'),\n },\n\n {\n from: 'now-1d/d',\n to: 'now-1d/d',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.yesterday', 'Yesterday'),\n },\n {\n from: 'now-2d/d',\n to: 'now-2d/d',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.dayBeforeYesterday', 'Day before yesterday'),\n },\n {\n from: 'now-7d/d',\n to: 'now-7d/d',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisDayLastWeek', 'This day last week'),\n },\n {\n from: 'now-1w/w',\n to: 'now-1w/w',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousWeek', 'Previous week'),\n },\n {\n from: 'now-1M/M',\n to: 'now-1M/M',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousMonth', 'Previous month'),\n },\n {\n from: 'now-1Q/fQ',\n to: 'now-1Q/fQ',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousFiscalQuarter', 'Previous fiscal quarter'),\n },\n {\n from: 'now-1y/y',\n to: 'now-1y/y',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousYear', 'Previous year'),\n },\n {\n from: 'now-1y/fy',\n to: 'now-1y/fy',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousFiscalYear', 'Previous fiscal year'),\n },\n\n {\n from: 'now-5m',\n to: 'now',\n display: getLastNMinutesDisplay(5),\n },\n {\n from: 'now-15m',\n to: 'now',\n display: getLastNMinutesDisplay(15),\n },\n {\n from: 'now-30m',\n to: 'now',\n display: getLastNMinutesDisplay(30),\n },\n {\n from: 'now-1h',\n to: 'now',\n display: getLastNHoursDisplay(1),\n },\n {\n from: 'now-3h',\n to: 'now',\n display: getLastNHoursDisplay(3),\n },\n {\n from: 'now-6h',\n to: 'now',\n display: getLastNHoursDisplay(6),\n },\n {\n from: 'now-12h',\n to: 'now',\n display: getLastNHoursDisplay(12),\n },\n {\n from: 'now-24h',\n to: 'now',\n display: getLastNHoursDisplay(24),\n },\n {\n from: 'now-2d',\n to: 'now',\n display: getLastNDaysDisplay(2),\n },\n {\n from: 'now-7d',\n to: 'now',\n display: getLastNDaysDisplay(7),\n },\n {\n from: 'now-30d',\n to: 'now',\n display: getLastNDaysDisplay(30),\n },\n {\n from: 'now-90d',\n to: 'now',\n display: getLastNDaysDisplay(90),\n },\n {\n from: 'now-6M',\n to: 'now',\n display: getLastNMonthsDisplay(6),\n },\n {\n from: 'now-1y',\n to: 'now',\n display: getLastNYearsDisplay(1),\n },\n {\n from: 'now-2y',\n to: 'now',\n display: getLastNYearsDisplay(2),\n },\n {\n from: 'now-5y',\n to: 'now',\n display: getLastNYearsDisplay(5),\n },\n {\n from: 'now/fQ',\n to: 'now',\n display: t(\n 'grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalQuarterSoFar',\n 'This fiscal quarter so far'\n ),\n },\n {\n from: 'now/fQ',\n to: 'now/fQ',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalQuarter', 'This fiscal quarter'),\n },\n {\n from: 'now/fy',\n to: 'now',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalYearSoFar', 'This fiscal year so far'),\n },\n {\n from: 'now/fy',\n to: 'now/fy',\n display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalYear', 'This fiscal year'),\n },\n];\n\nconst getHiddenRangeOptions: () => TimeOption[] = () => [\n {\n from: 'now',\n to: 'now+1m',\n display: getNextNMinutesDisplay(1),\n },\n {\n from: 'now',\n to: 'now+5m',\n display: getNextNMinutesDisplay(5),\n },\n {\n from: 'now',\n to: 'now+15m',\n display: getNextNMinutesDisplay(15),\n },\n {\n from: 'now',\n to: 'now+30m',\n display: getNextNMinutesDisplay(30),\n },\n {\n from: 'now',\n to: 'now+1h',\n display: getNextNHoursDisplay(1),\n },\n {\n from: 'now',\n to: 'now+3h',\n display: getNextNHoursDisplay(3),\n },\n {\n from: 'now',\n to: 'now+6h',\n display: getNextNHoursDisplay(6),\n },\n {\n from: 'now',\n to: 'now+12h',\n display: getNextNHoursDisplay(12),\n },\n {\n from: 'now',\n to: 'now+24h',\n display: getNextNHoursDisplay(24),\n },\n {\n from: 'now',\n to: 'now+2d',\n display: getNextNDaysDisplay(2),\n },\n {\n from: 'now',\n to: 'now+7d',\n display: getNextNDaysDisplay(7),\n },\n {\n from: 'now',\n to: 'now+30d',\n display: getNextNDaysDisplay(30),\n },\n {\n from: 'now',\n to: 'now+90d',\n display: getNextNDaysDisplay(90),\n },\n {\n from: 'now',\n to: 'now+6M',\n display: getNextNMonthsDisplay(6),\n },\n {\n from: 'now',\n to: 'now+1y',\n display: getNextNYearsDisplay(1),\n },\n {\n from: 'now',\n to: 'now+2y',\n display: getNextNYearsDisplay(2),\n },\n {\n from: 'now',\n to: 'now+5y',\n display: getNextNYearsDisplay(5),\n },\n];\n\nconst getStandardRangeOptions = () => [...getBaseRangeOptions(), ...getHiddenRangeOptions()];\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' }, getStandardRangeOptions());\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// TODO: Should we keep these format presets somewhere common?\nconst rangeFormatShort: Intl.DateTimeFormatOptions = {\n dateStyle: 'short',\n timeStyle: 'short',\n};\n\nconst rangeFormatFull: Intl.DateTimeFormatOptions = {\n dateStyle: 'short',\n timeStyle: 'medium',\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(getStandardRangeOptions()) : getStandardRangeOptions();\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 const fromDate = range.from.toDate();\n const toDate = range.to.toDate();\n\n if (!getFeatureToggle('localeFormatPreference')) {\n return dateTimeFormat(range.from, options) + ' to ' + dateTimeFormat(range.to, options);\n }\n\n const hasSeconds = fromDate.getSeconds() !== 0 || toDate.getSeconds() !== 0;\n const intlFormat = hasSeconds ? rangeFormatFull : rangeFormatShort;\n const intlFormatOptions = {\n ...intlFormat,\n timeZone: timeZone ? toIANATimezone(timeZone) : undefined,\n };\n\n return formatDateRange(fromDate, toDate, intlFormatOptions);\n }\n\n // TODO: We could update these to all use Intl APIs.\n // Could we use formatRangeToParts and replace the 'other side' with the ago formatting?\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\n/**\n * @internal\n * Returns a RawTimeRange that has been converted so that from and to are strings\n */\nexport function formatRawTimeRange(range: RawTimeRange): RawTimeRange {\n return {\n from: isDateTime(range.from) ? range.from.toISOString() : range.from,\n to: isDateTime(range.to) ? range.to.toISOString() : range.to,\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};\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\n gradients: {\n brandHorizontal: 'linear-gradient(270deg,rgba(255, 111, 97, 1) 0%, rgba(255, 167, 58, 1) 100%)',\n brandVertical: 'linear-gradient(0deg, rgba(255, 111, 97, 1) 0%, rgba(255, 167, 58, 1) 100%)',\n },\n contrastThreshold: 3,\n hoverFactor: 0.03,\n tonalOffset: 0.15,\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};\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};\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};\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};\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};\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 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};\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 = `195, 195, 245`;\n\n//const brandMain = '#3d71d9';\n//const brandText = '#6e9fff';\nconst brandMain = '#ff934d';\nconst brandText = '#f99a5c';\nconst disabledText = `rgba(${whiteBase}, 0.48)`;\n\nconst gloomTheme: NewThemeOptions = {\n name: 'Gloom',\n colors: {\n mode: 'dark',\n border: {\n weak: `rgba(${whiteBase}, 0.12)`,\n medium: `rgba(${whiteBase}, 0.20)`,\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: '#121118',\n secondary: '#211e28',\n elevated: '#211e28',\n },\n\n action: {\n hover: `rgba(${secondaryBase}, 0.07)`,\n selected: `rgba(${secondaryBase}, 0.11)`,\n selectedBorder: brandMain,\n focus: `rgba(${secondaryBase}, 0.07)`,\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};\n\nexport default gloomTheme;\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';\nimport { Spinner } from '../Spinner/Spinner';\n\nexport function DropdownIndicator({ selectProps }: DropdownIndicatorProps) {\n const isOpen = selectProps.menuIsOpen;\n const icon = isOpen ? 'search' : 'angle-down';\n const size = 'md';\n\n if (selectProps.isLoading) {\n return <Spinner inline />;\n }\n\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 { isEqual } from 'lodash';\nimport { Component, createRef, ReactNode } from 'react';\nimport { ValueContainerProps as BaseValueContainerProps, type GroupBase } from 'react-select';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { withTheme2 } from '../../themes/ThemeContext';\n\nimport { getSelectStyles } from './getSelectStyles';\nimport type { CustomComponentProps } from './types';\n\ntype ValueContainerProps<Option, isMulti extends boolean, Group extends GroupBase<Option>> = BaseValueContainerProps<\n Option,\n isMulti,\n Group\n> &\n CustomComponentProps<Option, isMulti, Group>;\n\nclass UnthemedValueContainer<Option, isMulti extends boolean, Group extends GroupBase<Option>> extends Component<\n ValueContainerProps<Option, isMulti, Group> & { theme: GrafanaTheme2 }\n> {\n private ref = createRef<HTMLDivElement>();\n\n componentDidUpdate(prevProps: ValueContainerProps<Option, isMulti, Group>) {\n if (\n this.ref.current &&\n this.props.selectProps.autoWidth &&\n !isEqual(prevProps.selectProps.value, this.props.selectProps.value)\n ) {\n // Reset in order to measure the new width\n this.ref.current.style.minWidth = '0px';\n\n const width = this.ref.current.offsetWidth;\n\n this.ref.current.style.minWidth = `${width}px`;\n }\n }\n\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 ref={this.ref} 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 { isArray, negate } from 'lodash';\nimport { ComponentProps, useCallback, useEffect, useRef, useState, useImperativeHandle } 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';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\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 selectRef,\n ...rest\n}: SelectBaseProps<T> & Rest) {\n const theme = useTheme2();\n const styles = getSelectStyles(theme);\n\n const reactSelectRef = useRef<HTMLElement & { 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 useImperativeHandle(selectRef, () => reactSelectRef.current!, []);\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={t('grafana-ui.select.clear-value', 'Clear value')}\n className={styles.singleValueRemove}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n }}\n />\n );\n },\n LoadingIndicator() {\n // Handled with DropdownIndicator, to avoid resize flickering with auto width\n return null;\n },\n LoadingMessage() {\n return <div className={styles.loadingMessage}>{loadingMessage}</div>;\n },\n NoOptionsMessage() {\n return (\n <div\n className={styles.loadingMessage}\n aria-label={t('grafana-ui.select.empty-options', 'No options provided')}\n >\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 autoWidth={width === 'auto'}\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/**\n * @deprecated Use Combobox component instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-select--docs\n */\nexport function Select<T, Rest = {}>(props: SelectCommonProps<T> & Rest) {\n return <SelectBase {...props} />;\n}\n\n/**\n * @deprecated Use Combobox component instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-select--docs\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/**\n * @deprecated Use Combobox component instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-select--docs\n */\nexport function AsyncSelect<T, Rest = {}>(props: AsyncSelectProps<T> & Rest) {\n return <SelectBase {...props} />;\n}\n\n/**\n * @deprecated Use Combobox component instead - it's virtualised by default!\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-select--docs\n */\nexport function VirtualizedSelect<T, Rest = {}>(props: VirtualizedSelectProps<T> & Rest) {\n return <SelectBase virtualized {...props} />;\n}\n\n/**\n * @deprecated Use Combobox component instead - it's virtualised by default!\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-select--docs\n */\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\n/**\n * @deprecated Use Combobox component instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-select--docs\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 } 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/ThemeContext';\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 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>) {\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\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 {\n ENGLISH_US,\n FRENCH_FRANCE,\n SPANISH_SPAIN,\n GERMAN_GERMANY,\n CHINESE_SIMPLIFIED,\n BRAZILIAN_PORTUGUESE,\n CHINESE_TRADITIONAL,\n ITALIAN_ITALY,\n JAPANESE_JAPAN,\n INDONESIAN_INDONESIA,\n KOREAN_KOREA,\n RUSSIAN_RUSSIA,\n CZECH_CZECHIA,\n DUTCH_NETHERLANDS,\n HUNGARIAN_HUNGARY,\n PORTUGUESE_PORTUGAL,\n POLISH_POLAND,\n SWEDISH_SWEDEN,\n TURKISH_TURKEY,\n} from './constants';\n\ninterface TranslationDefinition {\n /** IETF language tag */\n code: string;\n\n /** The language name in its own language (e.g. \"Français\" for French) */\n name: string;\n}\n\n/**\n * Supported languages for translation.\n */\nexport const LANGUAGES: TranslationDefinition[] = [\n { code: ENGLISH_US, name: 'English' },\n { code: FRENCH_FRANCE, name: 'Français' },\n { code: SPANISH_SPAIN, name: 'Español' },\n { code: GERMAN_GERMANY, name: 'Deutsch' },\n { code: CHINESE_SIMPLIFIED, name: '中文(简体)' },\n { code: BRAZILIAN_PORTUGUESE, name: 'Português Brasileiro' },\n { code: CHINESE_TRADITIONAL, name: '中文(繁體)' },\n { code: ITALIAN_ITALY, name: 'Italiano' },\n { code: JAPANESE_JAPAN, name: '日本語' },\n { code: INDONESIAN_INDONESIA, name: 'Bahasa Indonesia' },\n { code: KOREAN_KOREA, name: '한국어' },\n { code: RUSSIAN_RUSSIA, name: 'Русский' },\n { code: CZECH_CZECHIA, name: 'Čeština' },\n { code: DUTCH_NETHERLANDS, name: 'Nederlands' },\n { code: HUNGARIAN_HUNGARY, name: 'Magyar' },\n { code: PORTUGUESE_PORTUGAL, name: 'Português' },\n { code: POLISH_POLAND, name: 'Polski' },\n { code: SWEDISH_SWEDEN, name: 'Svenska' },\n { code: TURKISH_TURKEY, name: 'Türkçe' },\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 moment, { Moment, MomentInput, DurationInputArg1, DurationInputArg2 } from 'moment';\nimport { tz } from 'moment-timezone';\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 = tz(input, formatInput, timezone);\n } else {\n result = 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","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","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 * 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 /** Use a custom ref because generic component as output of React.forwardRef is not directly possible */\n selectRef?: React.Ref<HTMLElement>;\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 SelectCommonProps<Option> & {\n autoWidth: 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 deepEqual from 'fast-deep-equal';\nimport memoize, { AnyFn, Memoized } from 'micro-memoize';\n\nconst deepMemoize: typeof memoize = (fn) => memoize(fn, { isEqual: deepEqual });\n\nfunction clearMemoizedCache(fn: Memoized<AnyFn>) {\n fn.cache.keys.length = 0;\n fn.cache.values.length = 0;\n}\n\nlet regionalFormat: string | undefined;\n\nconst createDateTimeFormatter = deepMemoize((locale: string | undefined, options: Intl.DateTimeFormatOptions) => {\n try {\n return new Intl.DateTimeFormat(locale, options);\n } catch {\n return new Intl.DateTimeFormat('en-US', options);\n }\n});\n\nconst createDurationFormatter = deepMemoize((locale: string | undefined, options: Intl.DurationFormatOptions) => {\n return new Intl.DurationFormat(locale, options);\n});\n\nexport const formatDate = deepMemoize(\n (_value: number | Date | string, format: Intl.DateTimeFormatOptions = {}): string => {\n const value = typeof _value === 'string' ? new Date(_value) : _value;\n const dateFormatter = createDateTimeFormatter(regionalFormat, format);\n return dateFormatter.format(value);\n }\n);\n\nexport const formatDuration = deepMemoize(\n (duration: Intl.DurationInput, options: Intl.DurationFormatOptions = {}): string => {\n const dateFormatter = createDurationFormatter(regionalFormat, options);\n return dateFormatter.format(duration);\n }\n);\n\nexport const formatDateRange = (\n _from: number | Date | string,\n _to: number | Date | string,\n format: Intl.DateTimeFormatOptions = {}\n): string => {\n const from = typeof _from === 'string' ? new Date(_from) : _from;\n const to = typeof _to === 'string' ? new Date(_to) : _to;\n\n const dateFormatter = createDateTimeFormatter(regionalFormat, format);\n return dateFormatter.formatRange(from, to);\n};\n\nexport const initRegionalFormat = (regionalFormatArg: string) => {\n // We don't expect this to be called with a different locale during the lifetime of the app,\n // so this is mostly here so we can change it during tests and clear out previously memoized values.\n clearMemoizedCache(formatDate);\n clearMemoizedCache(formatDuration);\n\n regionalFormat = regionalFormatArg;\n};\n","export const availableIconsIndex = {\n google: true,\n microsoft: true,\n github: true,\n gitlab: true,\n okta: true,\n scim: 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-circle-right': 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-database-tree': true,\n 'cloud-download': true,\n 'cloud-exclamation': true,\n 'cloud-info': true,\n 'cloud-provider': 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-up-left': true,\n 'corner-up-right': 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 'adaptive-telemetry': 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-export': true,\n 'file-landscape-alt': true,\n filter: true,\n 'filter-plus': true,\n 'filter-minus': 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-ml-alt': 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 'laptop-cloud': true,\n 'layer-group': true,\n 'layers-alt': true,\n layers: true,\n 'layers-slash': 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-down': 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 ban: true,\n window: true,\n 'window-grid': 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': 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 'dollar-alt': true,\n 'ai-sparkle': true,\n bitbucket: true,\n git: true,\n 'tachometer-fast': true,\n 'cmab-logo': 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","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 { getIconPath, 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\n/**\n * Grafana's icon wrapper component.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/iconography-icon--docs\n */\nexport const Icon = React.memo(\n 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 svgSize = getSvgSize(size);\n const svgHgt = svgSize;\n const svgWid = name.startsWith('gf-bar-align') ? 16 : name.startsWith('gf-interp') ? 30 : svgSize;\n const svgPath = getIconPath(iconName, type);\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 element 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 <span\n className={cx(\n css({\n width: svgWid,\n height: svgHgt,\n }),\n composedClassName\n )}\n />\n }\n {...rest}\n />\n );\n }\n )\n);\n\nIcon.displayName = 'Icon';\n","import { FeatureToggles } from '../types/featureToggles.gen';\n\ntype FeatureToggleName = keyof FeatureToggles;\n\n/**\n * Check a featureToggle\n * @param featureName featureToggle name\n * @param def default value if featureToggles aren't defined, false if not provided\n * @returns featureToggle value or def.\n */\nexport function getFeatureToggle(featureName: FeatureToggleName, def = false) {\n return window.grafanaBootData?.settings.featureToggles[featureName] ?? def;\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/ThemeContext';\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\n/**\n * The Box Component is the most basic layout component. It can be used to build more complex components and layouts with properties that use our design tokens instead of using CSS.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-box--docs\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 { 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\nexport const 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","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\nexport function getButtonFocusStyles(theme: GrafanaTheme2) {\n return {\n ...getFocusStyles(theme),\n transitionProperty: undefined,\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\ninterface ExternalRadiusAdditionalOptions {\n selfBorderWidth?: number;\n childBorderRadius?: number;\n}\n/**\n * Calculates a border radius for an element, based on border radius of its child.\n *\n * @param theme\n * @param offset - The distance to offset from the child element, should be >= 0.\n * @param additionalOptions\n * @param additionalOptions.selfBorderWidth - The border width of the element itself (default: 1)\n * @param additionalOptions.childBorderRadius - The border radius of the child element (default: theme default radius)\n * @returns A CSS calc() expression that returns the relative external radius value\n */\nexport const getExternalRadius = (\n theme: GrafanaTheme2,\n offset: number,\n additionalOptions: ExternalRadiusAdditionalOptions = {}\n) => {\n const { selfBorderWidth = 1, childBorderRadius } = additionalOptions;\n\n const childBorderRadiusPx = childBorderRadius !== undefined ? `${childBorderRadius}px` : theme.shape.radius.default;\n return `calc(max(0px, ${childBorderRadiusPx} + ${offset}px + ${selfBorderWidth}px))`;\n};\n\ninterface InternalRadiusAdditionalOptions {\n parentBorderWidth?: number;\n parentBorderRadius?: number;\n}\n\n/**\n * Calculates a border radius for an element, based on border radius of its parent.\n *\n * @param theme\n * @param offset - The distance to offset from the parent element, should be >= 0.\n * @param additionalOptions\n * @param additionalOptions.parentBorderWidth - The border width of the parent element (default: 1)\n * @param additionalOptions.parentBorderRadius - The border radius of the parent element (default: theme default radius)\n * @returns A CSS calc() expression that returns the relative internal radius value\n */\nexport const getInternalRadius = (\n theme: GrafanaTheme2,\n offset: number,\n additionalOptions: InternalRadiusAdditionalOptions = {}\n) => {\n const { parentBorderWidth = 1, parentBorderRadius } = additionalOptions;\n\n const parentBorderRadiusPx =\n parentBorderRadius !== undefined ? `${parentBorderRadius}px` : theme.shape.radius.default;\n return `calc(max(0px, ${parentBorderRadiusPx} - ${offset}px - ${parentBorderWidth}px))`;\n};\n","import { createContext } from 'react';\n\nimport { createTheme } from './createTheme';\n\n/** @public */\nexport const ThemeContext = createContext(createTheme());\n\nThemeContext.displayName = 'ThemeContext';\n","import { css, cx } from '@emotion/css';\nimport { useMemo, PropsWithChildren } from 'react';\n\nimport { dateTime, DateTimeInput, GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { Tooltip } from '../Tooltip/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\n/**\n * UserIcon renders a user icon and displays the user's name or initials along with the user's active status or last viewed date.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/iconography-usericon--docs\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={t('grafana-ui.user-icon.label', '{{name}} icon', { name: user.name })}\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 { 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 { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeSpacingTokens } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\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 rowGap?: ResponsiveProp<ThemeSpacingTokens>;\n columnGap?: ResponsiveProp<ThemeSpacingTokens>;\n alignItems?: ResponsiveProp<AlignItems>;\n justifyContent?: ResponsiveProp<JustifyContent>;\n direction?: ResponsiveProp<Direction>;\n wrap?: ResponsiveProp<Wrap>;\n children?: React.ReactNode;\n}\n\n/**\n * The Stack component is a simple wrapper around the flexbox layout model that allows to easily create responsive and flexible layouts. It provides a simple and intuitive way to align and distribute items within a container either horizontally or vertically.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-stack--docs\n */\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>((props, ref) => {\n const {\n gap = 1,\n rowGap,\n columnGap,\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(\n getStyles,\n gap,\n rowGap,\n columnGap,\n alignItems,\n justifyContent,\n direction,\n wrap,\n grow,\n shrink,\n basis,\n flex\n );\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 rowGap: StackProps['rowGap'],\n columnGap: StackProps['columnGap'],\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, rowGap, (val) => ({\n rowGap: theme.spacing(val),\n })),\n getResponsiveStyle(theme, columnGap, (val) => ({\n columnGap: 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 { 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 { merge } from 'lodash';\n\nimport {\n AppPluginConfig as AppPluginConfigGrafanaData,\n AuthSettings,\n AzureSettings as AzureSettingsGrafanaData,\n BootData,\n BuildInfo,\n DataSourceInstanceSettings,\n FeatureToggles,\n GrafanaTheme,\n GrafanaTheme2,\n LicenseInfo,\n MapLayerOptions,\n OAuthSettings,\n PanelPluginMeta,\n PreinstalledPlugin as PreinstalledPluginGrafanaData,\n systemDateFormats,\n SystemDateFormatSettings,\n getThemeById,\n AngularMeta,\n PluginLoadingStrategy,\n PluginDependencies,\n PluginExtensions,\n TimeOption,\n UnifiedAlertingConfig,\n GrafanaConfig,\n CurrentUserDTO,\n} from '@grafana/data';\n\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\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\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\nexport interface AzureCloudInfo {\n name: string;\n displayName: string;\n}\n\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\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\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\nexport type PreinstalledPlugin = {\n id: string;\n version: string;\n};\n\n/**\n * Use to access Grafana config settings in application code.\n * This takes `window.grafanaBootData.settings` as input and returns a config object.\n */\nexport class GrafanaBootConfig {\n publicDashboardAccessToken?: string;\n publicDashboardsEnabled = true;\n snapshotEnabled = true;\n datasources: { [str: string]: DataSourceInstanceSettings } = {};\n panels: { [key: string]: PanelPluginMeta } = {};\n apps: Record<string, AppPluginConfigGrafanaData> = {};\n auth: AuthSettings = {};\n minRefreshInterval = '';\n appUrl = '';\n appSubUrl = '';\n namespace = 'default';\n windowTitlePrefix = 'Grafana - ';\n buildInfo: BuildInfo = {\n version: '1.0',\n commit: '1',\n env: 'production',\n } as BuildInfo;\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 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;\n viewersCanEdit = false;\n disableSanitizeHtml = false;\n trustedTypesDefaultPolicyEnabled = false;\n cspReportOnlyEnabled = false;\n liveEnabled = true;\n liveMessageSizeLimit = 65536;\n /** @deprecated Use `theme2` instead. */\n theme: GrafanaTheme;\n theme2: GrafanaTheme2;\n featureToggles: FeatureToggles = {};\n anonymousEnabled = false;\n anonymousDeviceLimit?: number;\n licenseInfo: LicenseInfo = {} as LicenseInfo;\n rendererAvailable = false;\n rendererVersion = '';\n rendererDefaultImageWidth = 1000;\n rendererDefaultImageHeight = 500;\n rendererDefaultImageScale = 1;\n supportBundlesEnabled = false;\n http2Enabled = false;\n dateFormats?: SystemDateFormatSettings;\n grafanaJavascriptAgent = {\n enabled: false,\n apiKey: '',\n customEndpoint: '',\n consoleInstrumentalizationEnabled: false,\n performanceInstrumentalizationEnabled: false,\n cspInstrumentalizationEnabled: false,\n tracingInstrumentalizationEnabled: false,\n webVitalsAttribution: false,\n internalLoggerLevel: 0,\n botFilterEnabled: false,\n };\n pluginCatalogURL = 'https://grafana.com/grafana/plugins/';\n pluginAdminEnabled = true;\n pluginAdminExternalManageEnabled = false;\n pluginCatalogHiddenPlugins: string[] = [];\n pluginCatalogManagedPlugins: string[] = [];\n pluginCatalogPreinstalledPlugins: PreinstalledPluginGrafanaData[] = [];\n pluginsCDNBaseURL = '';\n expressionsEnabled = false;\n awsAllowedAuthProviders: string[] = [];\n awsAssumeRoleEnabled = false;\n azure: AzureSettingsGrafanaData = {\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: UnifiedAlertingConfig = {\n minInterval: '',\n stateHistory: {\n backend: undefined,\n primary: undefined,\n prometheusTargetDatasourceUID: undefined,\n prometheusMetricName: undefined,\n },\n recordingRulesEnabled: false,\n defaultRecordingRulesTargetDatasourceUID: undefined,\n\n // Backward compatibility fields - populated by backend\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?: string;\n googleAnalytics4Id?: string;\n googleAnalytics4SendManualPageViews = false;\n rudderstackWriteKey?: string;\n rudderstackDataPlaneUrl?: string;\n rudderstackSdkUrl?: string;\n rudderstackConfigUrl?: string;\n rudderstackIntegrationsUrl?: string;\n analyticsConsoleReporting = false;\n dashboardPerformanceMetrics: string[] = [];\n panelSeriesLimit = 0;\n sqlConnectionLimits = {\n maxOpenConns: 100,\n maxIdleConns: 100,\n connMaxLifetime: 14400,\n };\n defaultDatasourceManageAlertsUiToggle = true;\n defaultAllowRecordingRulesTargetAlertsUiToggle = true;\n tokenExpirationDayLimit?: number;\n enableFrontendSandboxForPlugins: string[] = [];\n sharedWithMeFolderUID?: string;\n rootFolderUID?: string;\n localFileSystemAvailable?: boolean;\n cloudMigrationIsTarget?: boolean;\n cloudMigrationPollIntervalMs = 2000;\n reportingStaticContext?: Record<string, string>;\n exploreDefaultTimeOffset = '1h';\n exploreHideLogsDownload?: boolean;\n quickRanges?: TimeOption[];\n pluginRestrictedAPIsAllowList?: Record<string, string[]>;\n pluginRestrictedAPIsBlockList?: Record<string, string[]>;\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 /**\n * regionalFormat used in Grafana's UI. Default to 'es-US' in the backend and overwritten when the user select a different one in SharedPreferences.\n * This is the regionalFormat that is used for date formatting and other locale-specific features.\n */\n regionalFormat: string;\n listDashboardScopesEndpoint = '';\n listScopesEndpoint = '';\n\n openFeatureContext: Record<string, unknown> = {};\n\n constructor(\n options: BootData['settings'] & {\n bootData: BootData;\n }\n ) {\n this.bootData = options.bootData;\n\n merge(this, options);\n\n if (this.dateFormats) {\n systemDateFormats.update(this.dateFormats);\n }\n\n overrideFeatureTogglesFromUrl(this);\n overrideFeatureTogglesFromLocalStorage(this);\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 this.regionalFormat = options.bootData.user.regionalFormat;\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\nlet bootData = window.grafanaBootData;\n\nif (!bootData) {\n if (process.env.NODE_ENV !== 'test') {\n console.error('window.grafanaBootData was not set by the time config was initialized');\n }\n\n bootData = {\n assets: {\n dark: '',\n light: '',\n },\n settings: {} as GrafanaConfig,\n user: {} as CurrentUserDTO,\n navTree: [],\n };\n}\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({\n ...bootData.settings,\n // need to separately include bootData here\n // this allows people to access the user object on config.bootData.user and maintains backwards compatibility\n // TODO expose a user object (similar to `GrafanaBootConfig`) and deprecate this recursive bootData\n bootData,\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","/* 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 if (value.indexOf('now') !== -1) {\n if (!isValid(value)) {\n return dateTime();\n }\n\n const parsed = parse(value, options?.roundUp, options?.timeZone, options?.fiscalYearStartMonth);\n return parsed || dateTime();\n }\n\n let timeZone = getTimeZone(options);\n let format = options?.format ?? systemDateFormats.fullDate;\n if (value.endsWith('Z')) {\n // This is a special case when we have an ISO date string\n // In this case we want to force the format to be ISO and the timeZone to be UTC\n // This logic is needed for initial load when parsing the URL params\n format = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n timeZone = 'utc';\n }\n\n const zone = moment.tz.zone(timeZone);\n\n if (zone && zone.name) {\n return dateTimeForTimeZone(zone.name, value, 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 { EventBusSrv, EventBusExtended } from '@grafana/data';\n\nexport const appEvents: EventBusExtended = new EventBusSrv();\n\nexport default appEvents;\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/ThemeContext';\nimport { getButtonFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\nimport { IconName, IconSize, IconType } from '../../types/icon';\nimport { ComponentSize } from '../../types/size';\nimport { getPropertiesForButtonSize } from '../Forms/commonStyles';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { PopoverContent, TooltipPlacement } from '../Tooltip/types';\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 BaseProps = {\n size?: ComponentSize;\n variant?: ButtonVariant;\n fill?: ButtonFill;\n icon?: IconName | React.ReactElement;\n className?: string;\n fullWidth?: boolean;\n type?: string;\n tooltip?: PopoverContent;\n tooltipPlacement?: TooltipPlacement;\n /** Position of the icon */\n iconPlacement?: 'left' | 'right';\n};\n\n// either aria-label or tooltip is required for buttons without children\ntype NoChildrenAriaLabel = BaseProps & {\n children?: never;\n 'aria-label': string;\n};\ntype NoChildrenTooltip = BaseProps & {\n children?: never;\n tooltip: PopoverContent;\n tooltipPlacement?: TooltipPlacement;\n};\n\ntype BasePropsWithChildren = BaseProps & {\n children: React.ReactNode;\n};\n\ntype CommonProps = BasePropsWithChildren | NoChildrenTooltip | NoChildrenAriaLabel;\n\nexport type ButtonProps = CommonProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-button--docs\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n 'aria-label': ariaLabel,\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 iconPlacement = 'left',\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 const iconComponent = icon && <IconRenderer icon={icon} size={size} className={styles.icon} />;\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 aria-label={ariaLabel ?? (!children && typeof tooltip === 'string' ? tooltip : undefined)}\n >\n {iconPlacement === 'left' && iconComponent}\n {children && <span className={styles.content}>{children}</span>}\n {iconPlacement === 'right' && iconComponent}\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 = ButtonProps & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'aria-label'>;\n\nexport const LinkButton = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>(\n (\n {\n 'aria-label': ariaLabel,\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 aria-label={ariaLabel ?? (!children && typeof tooltip === 'string' ? tooltip : undefined)}\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 = getButtonFocusStyles(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 gap: theme.spacing(1),\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 [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create(['background-color', 'border-color', 'color'], {\n duration: theme.transitions.duration.short,\n }),\n },\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 : undefined,\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\nexport function getActiveButtonStyles(color: ThemeRichColor, fill: ButtonFill) {\n return {\n background: fill === 'solid' ? color.main : 'transparent',\n };\n}\n\nexport function 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 the 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\n '&:hover, &:focus': {\n background: color.transparent,\n borderColor: theme.colors.emphasize(outlineBorderColor, 0.25),\n color: color.text,\n },\n\n '&:active': {\n ...getActiveButtonStyles(color, fill),\n },\n };\n }\n\n if (fill === 'text') {\n return {\n background: 'transparent',\n color: color.text,\n border: '1px solid transparent',\n\n '&:hover, &:focus': {\n background: color.transparent,\n textDecoration: 'none',\n outline: 'none',\n },\n\n '&:active': {\n ...getActiveButtonStyles(color, fill),\n },\n };\n }\n\n return {\n background: color.main,\n color: color.contrastText,\n border: `1px solid ${borderColor}`,\n\n '&:hover': {\n background: color.shade,\n color: color.contrastText,\n boxShadow: theme.shadows.z1,\n borderColor: hoverBorderColor,\n },\n\n '&:focus': {\n background: color.shade,\n color: color.contrastText,\n },\n\n '&:active': {\n ...getActiveButtonStyles(color, fill),\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 background: theme.colors.action.disabledBackground,\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 {\n arrow,\n autoUpdate,\n FloatingArrow,\n offset,\n useDismiss,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n safePolygon,\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 { getPositioningMiddleware } from '../../utils/floating';\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\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/overlays-tooltip--docs\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 const floatingUIPlacement = getPlacement(placement);\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 ...getPositioningMiddleware(floatingUIPlacement),\n arrow({\n element: arrowRef,\n }),\n ];\n\n const { context, refs, floatingStyles } = useFloating({\n open: isOpen,\n placement: floatingUIPlacement,\n onOpenChange: setControlledVisible,\n middleware,\n whileElementsMounted: autoUpdate,\n });\n const tooltipId = useId();\n\n const hover = useHover(context, {\n handleClose: interactive ? safePolygon() : undefined,\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 { SelectableValue } from '../types/select';\n\nexport const toOption = (value: string): SelectableValue<string> => ({ label: value, value });\n","import { textUtil } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nconst CSP_REPORT_ONLY_ENABLED = config.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, '<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 (config.trustedTypesDefaultPolicyEnabled && window.trustedTypes && window.trustedTypes.createPolicy) {\n // check if browser supports Trusted Types\n window.trustedTypes.createPolicy('default', defaultTrustedTypesPolicy);\n}\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\n/**\n * Formats currency values without scaling abbreviations(K: Thousands, M: Millions, B: Billions), displaying full numeric values.\n * Uses cached Intl.NumberFormat objects for performance.\n *\n * @param symbol - Currency symbol (e.g., '$', '€', '£')\n * @param asSuffix - If true, places symbol after number\n *\n * @example\n * fullCurrency('$')(1234.56, 2) // { prefix: '$', text: '1,234.56' } - forces 2 decimals\n * fullCurrency('€', true)(42.5) // { suffix: '€', text: '42.5' }\n */\nexport function fullCurrency(symbol: string, asSuffix?: boolean): ValueFormatter {\n const locale = Intl.NumberFormat().resolvedOptions().locale;\n const defaultFormatter = new Intl.NumberFormat(locale, { minimumFractionDigits: 0, maximumFractionDigits: 1 });\n const formattersCache = new Map<number, Intl.NumberFormat>();\n\n return (value: number | null, decimals?: DecimalCount) => {\n if (value === null) {\n return { text: '' };\n }\n\n const numericValue: number = value;\n\n let text: string;\n if (decimals !== undefined && decimals !== null) {\n let formatter = formattersCache.get(decimals);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n formattersCache.set(decimals, formatter);\n }\n text = formatter.format(numericValue);\n } else {\n text = defaultFormatter.format(numericValue);\n }\n\n return {\n prefix: asSuffix ? '' : symbol,\n suffix: asSuffix ? symbol : '',\n text,\n };\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 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, cx } 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/ThemeContext';\nimport { Themeable2 } from '../../types/theme';\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 = cx(getStyles(theme).container, this.props.containerStyles);\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\n/**\n * Monaco Code editor.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-codeeditor--docs\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 overflow: 'hidden',\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 CanvasGridAddActions: {\n addPanel: {\n '12.1.0': 'data-testid CanvasGridAddActions add-panel',\n },\n groupPanels: {\n '12.1.0': 'data-testid CanvasGridAddActions group-panels',\n },\n ungroup: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup',\n },\n ungroupRows: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup-rows',\n },\n addRow: {\n '12.1.0': 'data-testid CanvasGridAddActions add-row',\n },\n pasteRow: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-row',\n },\n addTab: {\n '12.1.0': 'data-testid CanvasGridAddActions add-tab',\n },\n pasteTab: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-tab',\n },\n pastePanel: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-panel',\n },\n },\n DashboardEditPaneSplitter: {\n primaryBody: {\n '12.1.0': 'data-testid DashboardEditPaneSplitter primary body',\n },\n },\n EditPaneHeader: {\n deleteButton: {\n '12.1.0': 'data-testid EditPaneHeader delete panel',\n },\n copyDropdown: {\n '12.1.0': 'data-testid EditPaneHeader copy dropdown',\n },\n copy: {\n '12.1.0': 'data-testid EditPaneHeader copy',\n },\n duplicate: {\n '12.1.0': 'data-testid EditPaneHeader duplicate',\n },\n backButton: {\n '12.1.0': 'data-testid EditPaneHeader back',\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 '12.0.0': 'Permission level',\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 allowAsRecordingRulesTarget: {\n '12.1.0': 'prometheus-recording-rules-target',\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 seriesLimit: {\n '12.0.2': 'data-testid maximum series 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': 'data-testid 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': 'data-testid 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': 'data-testid 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 headerContainer: {\n '9.5.0': 'data-testid header-container',\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 TableNG: {\n Filters: {\n HeaderButton: {\n '12.1.0': 'data-testid tableng header filter',\n },\n Container: {\n '12.1.0': 'data-testid tablenf filter container',\n },\n SelectAll: {\n '12.1.0': 'data-testid tableng filter select-all',\n },\n },\n Tooltip: {\n Wrapper: {\n '12.2.0': 'data-testid tableng tooltip wrapper',\n },\n Caret: {\n '12.2.0': 'data-testid tableng tooltip caret',\n },\n },\n Footer: {\n ReducerLabel: {\n '12.2.0': 'data-testid tableng footer reducer-label',\n },\n Value: {\n '12.2.0': 'data-testid tableng footer value',\n },\n },\n },\n Tooltip: {\n Wrapper: {\n '12.3.0': 'data-testid viz-tooltip-wrapper',\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 '12.1.0': 'data-testid panel-editor-measure-button',\n '9.2.0': 'show measure tools',\n },\n\n Outline: {\n section: {\n '12.0.0': 'data-testid Outline section',\n },\n node: {\n '12.0.0': (type: string) => `data-testid outline node ${type}`,\n },\n item: {\n '12.0.0': (type: string) => `data-testid outline item ${type}`,\n },\n },\n ElementEditPane: {\n variableType: {\n '12.0.0': (type?: string) => `data-testid variable type ${type}`,\n },\n addVariableButton: {\n '12.0.0': 'data-testid add variable button',\n },\n variableNameInput: {\n '12.0.0': 'data-testid variable name input',\n },\n variableLabelInput: {\n '12.0.0': 'data-testid variable label input',\n },\n AutoGridLayout: {\n minColumnWidth: {\n '12.1.0': 'data-testid min column width selector',\n },\n customMinColumnWidth: {\n '12.1.0': 'data-testid custom min column width input',\n },\n clearCustomMinColumnWidth: {\n '12.1.0': 'data-testid clear custom min column width input',\n },\n maxColumns: {\n '12.1.0': 'data-testid max columns selector',\n },\n rowHeight: {\n '12.1.0': 'data-testid row height selector',\n },\n customRowHeight: {\n '12.1.0': 'data-testid custom row height input',\n },\n clearCustomRowHeight: {\n '12.1.0': 'data-testid clear custom row height input',\n },\n fillScreen: {\n '12.1.0': 'data-testid fill screen switch',\n },\n },\n TabsLayout: {\n titleInput: {\n '12.2.0': 'data-testid tab title input',\n },\n },\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 addQueryFromLibrary: {\n '11.5.0': 'data-testid query-tab-add-query-from-library',\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 DataLinksActionsTooltip: {\n tooltipWrapper: {\n '12.1.0': 'data-testid Data links actions tooltip wrapper',\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 wrapper: {\n '12.1.0': (title: string) => `data-testid dashboard-row-wrapper-for-${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 ExportImage: {\n formatOptions: {\n container: {\n ['12.1.0']: 'data-testid export-image-format-options',\n },\n png: {\n ['12.1.0']: 'data-testid export-image-format-png',\n },\n jpg: {\n ['12.1.0']: 'data-testid export-image-format-jpg',\n },\n },\n rendererAlert: {\n container: {\n ['12.1.0']: 'data-testid export-image-renderer-alert',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-title',\n },\n description: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-description',\n },\n },\n buttons: {\n generate: {\n ['12.1.0']: 'data-testid export-image-generate-button',\n },\n download: {\n ['12.1.0']: 'data-testid export-image-download-button',\n },\n cancel: {\n ['12.1.0']: 'data-testid export-image-cancel-button',\n },\n },\n preview: {\n container: {\n ['12.1.0']: 'data-testid export-image-preview-container',\n },\n loading: {\n ['12.1.0']: 'data-testid export-image-preview-loading',\n },\n image: {\n ['12.1.0']: 'data-testid export-image-preview',\n },\n error: {\n container: {\n ['12.1.0']: 'data-testid export-image-error',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-error-title',\n },\n message: {\n ['12.1.0']: 'data-testid export-image-error-message',\n },\n },\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 input: {\n '12.2.0': 'data-testid Confirm Modal Input',\n },\n },\n SecretsManagement: {\n SecretForm: {\n '12.2.0': 'data-testid Secret Form',\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 ImportDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/import',\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 exportAsImage: {\n '12.1.0': 'data-testid new export button export as image',\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 closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor close button',\n },\n editor: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor',\n },\n previewButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor preview button',\n },\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 queryOptionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor open button',\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 queryOptionsStaticOptionsToggle: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options toggle',\n },\n queryOptionsStaticOptionsOrderDropdown: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options Order dropdown',\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 nameFilter: {\n [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource name filter',\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 optionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-options-open-button',\n },\n closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-close-button',\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 SwitchVariable: {\n valuePairTypeSelect: {\n ['12.3.0']: 'data-testid switch variable value pair type select',\n },\n enabledValueInput: {\n ['12.3.0']: 'data-testid switch variable enabled value input',\n },\n disabledValueInput: {\n ['12.3.0']: 'data-testid switch variable disabled value input',\n },\n },\n StaticOptionsEditor: {\n addButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Add button',\n },\n labelInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Label input',\n },\n valueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Value input',\n },\n moveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Move button',\n },\n deleteButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Delete button',\n },\n row: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Row',\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 toggleView: {\n [MIN_GRAFANA_VERSION]: 'data-testid radio-button',\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 variablesWarningAlert: {\n '12.2.0': 'Dashboard settings Save Dashboard Modal Save variables Variables With Errors Warning Alert',\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 addFromQueryLibrary: {\n '11.5.0': 'data-testid explore add from query library button',\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 SearchDashboards: {\n table: {\n '10.2.0': 'Search results table',\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 MigrateToCloud: {\n url: {\n '11.2.0': '/admin/migrate-to-cloud',\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 { 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 { 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 { t } from '@grafana/i18n';\n\nimport { 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: t('grafana-data.valueFormats.categories.misc.name', 'Misc'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-number', 'Number'),\n id: 'none',\n fn: toFixedUnit(''),\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-string', 'String'),\n id: 'string',\n fn: stringFormater,\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-short', 'short'),\n id: 'short',\n fn: scaledUnits(1000, ['', ' K', ' Mil', ' Bil', ' Tri', ' Quadr', ' Quint', ' Sext', ' Sept']),\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-si-short', 'SI short'),\n id: 'sishort',\n fn: SIPrefix(''),\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-percent-100', 'Percent (0-100)'),\n id: 'percent',\n fn: toPercent,\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-percent-1', 'Percent (0.0-1.0)'),\n id: 'percentunit',\n fn: toPercentUnit,\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-humidity', 'Humidity (%H)'),\n id: 'humidity',\n fn: toFixedUnit('%H'),\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-decibel', 'Decibel'),\n id: 'dB',\n fn: toFixedUnit('dB'),\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-candala', 'Candela (cd)'),\n id: 'candela',\n fn: SIPrefix('cd'),\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-hexadecimal-0x', 'Hexadecimal (0x)'),\n id: 'hex0x',\n fn: toHex0x,\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-hexadecimal', 'Hexadecimal'),\n id: 'hex',\n fn: toHex,\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-scientific', 'Scientific notation'),\n id: 'sci',\n fn: sci,\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-locale', 'Locale format'),\n id: 'locale',\n fn: locale,\n },\n {\n name: t('grafana-data.valueFormats.categories.misc.formats.name-pixels', 'Pixels'),\n id: 'pixel',\n fn: toFixedUnit('px'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.acceleration.name', 'Acceleration'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.acceleration.formats.name-meters-sec', 'Meters/sec²'),\n id: 'accMS2',\n fn: toFixedUnit('m/sec²'),\n },\n {\n name: t('grafana-data.valueFormats.categories.acceleration.formats.name-feet-sec', 'Feet/sec²'),\n id: 'accFS2',\n fn: toFixedUnit('f/sec²'),\n },\n {\n name: t('grafana-data.valueFormats.categories.acceleration.formats.name-g-unit', 'G unit'),\n id: 'accG',\n fn: toFixedUnit('g'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.angle.name', 'Angle'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.angle.formats.name-degrees', 'Degrees (°)'),\n id: 'degree',\n fn: toFixedUnit('°'),\n },\n {\n name: t('grafana-data.valueFormats.categories.angle.formats.name-radians', 'Radians'),\n id: 'radian',\n fn: toFixedUnit('rad'),\n },\n {\n name: t('grafana-data.valueFormats.categories.angle.formats.name-gradian', 'Gradian'),\n id: 'grad',\n fn: toFixedUnit('grad'),\n },\n {\n name: t('grafana-data.valueFormats.categories.angle.formats.name-arc-minutes', 'Arc Minutes'),\n id: 'arcmin',\n fn: toFixedUnit('arcmin'),\n },\n {\n name: t('grafana-data.valueFormats.categories.angle.formats.name-arc-seconds', 'Arc Seconds'),\n id: 'arcsec',\n fn: toFixedUnit('arcsec'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.area.name', 'Area'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.area.formats.name-square-meters', 'Square Meters (m²)'),\n id: 'areaM2',\n fn: toFixedUnit('m²'),\n },\n {\n name: t('grafana-data.valueFormats.categories.area.formats.name-square-feet', 'Square Feet (ft²)'),\n id: 'areaF2',\n fn: toFixedUnit('ft²'),\n },\n {\n name: t('grafana-data.valueFormats.categories.area.formats.name-square-miles', 'Square Miles (mi²)'),\n id: 'areaMI2',\n fn: toFixedUnit('mi²'),\n },\n {\n name: t('grafana-data.valueFormats.categories.area.formats.name-acres', 'Acres (ac)'),\n id: 'acres',\n fn: toFixedUnit('ac'),\n },\n {\n name: t('grafana-data.valueFormats.categories.area.formats.name-hectares', 'Hectares (ha)'),\n id: 'hectares',\n fn: toFixedUnit('ha'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.name', 'Computation'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-flops', 'FLOP/s'),\n id: 'flops',\n fn: SIPrefix('FLOPS'),\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-mflops', 'MFLOP/s'),\n id: 'mflops',\n fn: SIPrefix('FLOPS', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-gflops', 'GFLOP/s'),\n id: 'gflops',\n fn: SIPrefix('FLOPS', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-tflops', 'TFLOP/s'),\n id: 'tflops',\n fn: SIPrefix('FLOPS', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-pflops', 'PFLOP/s'),\n id: 'pflops',\n fn: SIPrefix('FLOPS', 5),\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-eflops', 'EFLOP/s'),\n id: 'eflops',\n fn: SIPrefix('FLOPS', 6),\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-zflops', 'ZFLOP/s'),\n id: 'zflops',\n fn: SIPrefix('FLOPS', 7),\n },\n {\n name: t('grafana-data.valueFormats.categories.computation.formats.name-yflops', 'YFLOP/s'),\n id: 'yflops',\n fn: SIPrefix('FLOPS', 8),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.concentration.name', 'Concentration'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.concentration.formats.name-ppm', 'parts-per-million (ppm)'),\n id: 'ppm',\n fn: toFixedUnit('ppm'),\n },\n {\n name: t('grafana-data.valueFormats.categories.concentration.formats.name-ppb', 'parts-per-billion (ppb)'),\n id: 'conppb',\n fn: toFixedUnit('ppb'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-ng-m3',\n 'nanogram per cubic meter (ng/m³)'\n ),\n id: 'conngm3',\n fn: toFixedUnit('ng/m³'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-ng-nm3',\n 'nanogram per normal cubic meter (ng/Nm³)'\n ),\n id: 'conngNm3',\n fn: toFixedUnit('ng/Nm³'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-ug-m3',\n 'microgram per cubic meter (μg/m³)'\n ),\n id: 'conμgm3',\n fn: toFixedUnit('μg/m³'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-ug-nm3',\n 'microgram per normal cubic meter (μg/Nm³)'\n ),\n id: 'conμgNm3',\n fn: toFixedUnit('μg/Nm³'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-mg-m3',\n 'milligram per cubic meter (mg/m³)'\n ),\n id: 'conmgm3',\n fn: toFixedUnit('mg/m³'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-mg-nm3',\n 'milligram per normal cubic meter (mg/Nm³)'\n ),\n id: 'conmgNm3',\n fn: toFixedUnit('mg/Nm³'),\n },\n {\n name: t('grafana-data.valueFormats.categories.concentration.formats.name-g-m3', 'gram per cubic meter (g/m³)'),\n id: 'congm3',\n fn: toFixedUnit('g/m³'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-g-nm3',\n 'gram per normal cubic meter (g/Nm³)'\n ),\n id: 'congNm3',\n fn: toFixedUnit('g/Nm³'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-mg-dl',\n 'milligrams per decilitre (mg/dL)'\n ),\n id: 'conmgdL',\n fn: toFixedUnit('mg/dL'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.concentration.formats.name-mmol-l',\n 'millimoles per litre (mmol/L)'\n ),\n id: 'conmmolL',\n fn: toFixedUnit('mmol/L'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.name', 'Currency'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-usd', 'Dollars ($)'),\n id: 'currencyUSD',\n fn: currency('$'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-gbp', 'Pounds (£)'),\n id: 'currencyGBP',\n fn: currency('£'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-eur', 'Euro (€)'),\n id: 'currencyEUR',\n fn: currency('€'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-jpy', 'Yen (¥)'),\n id: 'currencyJPY',\n fn: currency('¥'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-rub', 'Rubles (₽)'),\n id: 'currencyRUB',\n fn: currency('₽'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-uah', 'Hryvnias (₴)'),\n id: 'currencyUAH',\n fn: currency('₴'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-brl', 'Real (R$)'),\n id: 'currencyBRL',\n fn: currency('R$'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-dkk', 'Danish Krone (kr)'),\n id: 'currencyDKK',\n fn: currency('kr', true),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-isk', 'Icelandic Króna (kr)'),\n id: 'currencyISK',\n fn: currency('kr', true),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-nok', 'Norwegian Krone (kr)'),\n id: 'currencyNOK',\n fn: currency('kr', true),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-sek', 'Swedish Krona (kr)'),\n id: 'currencySEK',\n fn: currency('kr', true),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-czk', 'Czech koruna (czk)'),\n id: 'currencyCZK',\n fn: currency('czk'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-chf', 'Swiss franc (CHF)'),\n id: 'currencyCHF',\n fn: currency('CHF'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-pln', 'Polish Złoty (PLN)'),\n id: 'currencyPLN',\n fn: currency('PLN'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-btc', 'Bitcoin (฿)'),\n id: 'currencyBTC',\n fn: currency('฿'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-mbtc', 'Milli Bitcoin (฿)'),\n id: 'currencymBTC',\n fn: currency('mBTC'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-ubtc', 'Micro Bitcoin (฿)'),\n id: 'currencyμBTC',\n fn: currency('μBTC'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-zar', 'South African Rand (R)'),\n id: 'currencyZAR',\n fn: currency('R'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-inr', 'Indian Rupee (₹)'),\n id: 'currencyINR',\n fn: currency('₹'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-krw', 'South Korean Won (₩)'),\n id: 'currencyKRW',\n fn: currency('₩'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-idr', 'Indonesian Rupiah (Rp)'),\n id: 'currencyIDR',\n fn: currency('Rp'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-php', 'Philippine Peso (PHP)'),\n id: 'currencyPHP',\n fn: currency('PHP'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-vnd', 'Vietnamese Dong (VND)'),\n id: 'currencyVND',\n fn: currency('đ', true),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-try', 'Turkish Lira (₺)'),\n id: 'currencyTRY',\n fn: currency('₺', true),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-myr', 'Malaysian Ringgit (RM)'),\n id: 'currencyMYR',\n fn: currency('RM'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-xpf', 'CFP franc (XPF)'),\n id: 'currencyXPF',\n fn: currency('XPF'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-bgn', 'Bulgarian Lev (BGN)'),\n id: 'currencyBGN',\n fn: currency('BGN'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-pyg', 'Guaraní (₲)'),\n id: 'currencyPYG',\n fn: currency('₲'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-uyu', 'Uruguay Peso (UYU)'),\n id: 'currencyUYU',\n fn: currency('UYU'),\n },\n {\n name: t('grafana-data.valueFormats.categories.currency.formats.name-ils', 'Israeli New Shekels (₪)'),\n id: 'currencyILS',\n fn: currency('₪'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.data.name', 'Data'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-bytes-iec', 'bytes(IEC)'),\n id: 'bytes',\n fn: binaryPrefix('B'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-bytes-si', 'bytes(SI)'),\n id: 'decbytes',\n fn: SIPrefix('B'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-bits-iec', 'bits(IEC)'),\n id: 'bits',\n fn: binaryPrefix('b'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-bits-si', 'bits(SI)'),\n id: 'decbits',\n fn: SIPrefix('b'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-kibibytes', 'kibibytes'),\n id: 'kbytes',\n fn: binaryPrefix('B', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-kilobytes', 'kilobytes'),\n id: 'deckbytes',\n fn: SIPrefix('B', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-mebibytes', 'mebibytes'),\n id: 'mbytes',\n fn: binaryPrefix('B', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-megabytes', 'megabytes'),\n id: 'decmbytes',\n fn: SIPrefix('B', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-gibibytes', 'gibibytes'),\n id: 'gbytes',\n fn: binaryPrefix('B', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-gigabytes', 'gigabytes'),\n id: 'decgbytes',\n fn: SIPrefix('B', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-tebibytes', 'tebibytes'),\n id: 'tbytes',\n fn: binaryPrefix('B', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-terabytes', 'terabytes'),\n id: 'dectbytes',\n fn: SIPrefix('B', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-pebibytes', 'pebibytes'),\n id: 'pbytes',\n fn: binaryPrefix('B', 5),\n },\n {\n name: t('grafana-data.valueFormats.categories.data.formats.name-petabytes', 'petabytes'),\n id: 'decpbytes',\n fn: SIPrefix('B', 5),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.name', 'Data rate'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-packets-sec', 'packets/sec'),\n id: 'pps',\n fn: SIPrefix('p/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-bytes-sec-iec', 'bytes/sec(IEC)'),\n id: 'binBps',\n fn: binaryPrefix('B/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-bytes-sec-si', 'bytes/sec(SI)'),\n id: 'Bps',\n fn: SIPrefix('B/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-bits-sec-iec', 'bits/sec(IEC)'),\n id: 'binbps',\n fn: binaryPrefix('b/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-bits-sec-si', 'bits/sec(SI)'),\n id: 'bps',\n fn: SIPrefix('b/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-kibibytes-sec', 'kibibytes/sec'),\n id: 'KiBs',\n fn: binaryPrefix('B/s', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-kibibits-sec', 'kibibits/sec'),\n id: 'Kibits',\n fn: binaryPrefix('b/s', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-kilobytes-sec', 'kilobytes/sec'),\n id: 'KBs',\n fn: SIPrefix('B/s', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-kilobits-sec', 'kilobits/sec'),\n id: 'Kbits',\n fn: SIPrefix('b/s', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-mebibytes-sec', 'mebibytes/sec'),\n id: 'MiBs',\n fn: binaryPrefix('B/s', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-mebibits-sec', 'mebibits/sec'),\n id: 'Mibits',\n fn: binaryPrefix('b/s', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-megabytes-sec', 'megabytes/sec'),\n id: 'MBs',\n fn: SIPrefix('B/s', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-megabits-sec', 'megabits/sec'),\n id: 'Mbits',\n fn: SIPrefix('b/s', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-gibibytes-sec', 'gibibytes/sec'),\n id: 'GiBs',\n fn: binaryPrefix('B/s', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-gibibits-sec', 'gibibits/sec'),\n id: 'Gibits',\n fn: binaryPrefix('b/s', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-gigabytes-sec', 'gigabytes/sec'),\n id: 'GBs',\n fn: SIPrefix('B/s', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-gigabits-sec', 'gigabits/sec'),\n id: 'Gbits',\n fn: SIPrefix('b/s', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-tebibytes-sec', 'tebibytes/sec'),\n id: 'TiBs',\n fn: binaryPrefix('B/s', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-tebibits-sec', 'tebibits/sec'),\n id: 'Tibits',\n fn: binaryPrefix('b/s', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-terabytes-sec', 'terabytes/sec'),\n id: 'TBs',\n fn: SIPrefix('B/s', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-terabits-sec', 'terabits/sec'),\n id: 'Tbits',\n fn: SIPrefix('b/s', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-pebibytes-sec', 'pebibytes/sec'),\n id: 'PiBs',\n fn: binaryPrefix('B/s', 5),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-pebibits-sec', 'pebibits/sec'),\n id: 'Pibits',\n fn: binaryPrefix('b/s', 5),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-petabytes-sec', 'petabytes/sec'),\n id: 'PBs',\n fn: SIPrefix('B/s', 5),\n },\n {\n name: t('grafana-data.valueFormats.categories.data-rate.formats.name-petabits-sec', 'petabits/sec'),\n id: 'Pbits',\n fn: SIPrefix('b/s', 5),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.date-time.name', 'Date & time'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.date-time.formats.name-datetime-iso', 'Datetime ISO'),\n id: 'dateTimeAsIso',\n fn: dateTimeAsIso,\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.date-time.formats.name-datetime-iso-no-date',\n 'Datetime ISO (No date if today)'\n ),\n id: 'dateTimeAsIsoNoDateIfToday',\n fn: dateTimeAsIsoNoDateIfToday,\n },\n {\n name: t('grafana-data.valueFormats.categories.date-time.formats.name-datetime-us', 'Datetime US'),\n id: 'dateTimeAsUS',\n fn: dateTimeAsUS,\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.date-time.formats.name-datetime-us-no-date',\n 'Datetime US (No date if today)'\n ),\n id: 'dateTimeAsUSNoDateIfToday',\n fn: dateTimeAsUSNoDateIfToday,\n },\n {\n name: t('grafana-data.valueFormats.categories.date-time.formats.name-datetime-local', 'Datetime local'),\n id: 'dateTimeAsLocal',\n fn: getDateTimeAsLocalFormat(),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.date-time.formats.name-datetime-local-no-date',\n 'Datetime local (No date if today)'\n ),\n id: 'dateTimeAsLocalNoDateIfToday',\n fn: getDateTimeAsLocalFormatNoDateIfToday(),\n },\n {\n name: t('grafana-data.valueFormats.categories.date-time.formats.name-datetime-default', 'Datetime default'),\n id: 'dateTimeAsSystem',\n fn: dateTimeSystemFormatter,\n },\n {\n name: t('grafana-data.valueFormats.categories.date-time.formats.name-from-now', 'From Now'),\n id: 'dateTimeFromNow',\n fn: dateTimeFromNow,\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.name', 'Energy'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-watt', 'Watt (W)'),\n id: 'watt',\n fn: SIPrefix('W'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kilowatt', 'Kilowatt (kW)'),\n id: 'kwatt',\n fn: SIPrefix('W', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-megawatt', 'Megawatt (MW)'),\n id: 'megwatt',\n fn: SIPrefix('W', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-gigawatt', 'Gigawatt (GW)'),\n id: 'gwatt',\n fn: SIPrefix('W', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-milliwatt', 'Milliwatt (mW)'),\n id: 'mwatt',\n fn: SIPrefix('W', -1),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.energy.formats.name-watt-square-meter',\n 'Watt per square meter (W/m²)'\n ),\n id: 'Wm2',\n fn: SIPrefix('W/m²'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-volt-ampere', 'Volt-Ampere (VA)'),\n id: 'voltamp',\n fn: SIPrefix('VA'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kilovolt-ampere', 'Kilovolt-Ampere (kVA)'),\n id: 'kvoltamp',\n fn: SIPrefix('VA', 1),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.energy.formats.name-volt-ampere-reactive',\n 'Volt-Ampere reactive (VAr)'\n ),\n id: 'voltampreact',\n fn: SIPrefix('VAr'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.energy.formats.name-kilovolt-ampere-reactive',\n 'Kilovolt-Ampere reactive (kVAr)'\n ),\n id: 'kvoltampreact',\n fn: SIPrefix('VAr', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-watt-hour', 'Watt-hour (Wh)'),\n id: 'watth',\n fn: SIPrefix('Wh'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.energy.formats.name-watt-hour-per-kg',\n 'Watt-hour per Kilogram (Wh/kg)'\n ),\n id: 'watthperkg',\n fn: SIPrefix('Wh/kg'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kilowatt-hour', 'Kilowatt-hour (kWh)'),\n id: 'kwatth',\n fn: SIPrefix('Wh', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kilowatt-min', 'Kilowatt-min (kWm)'),\n id: 'kwattm',\n fn: SIPrefix('W-Min', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-megawatt-hour', 'Megawatt-hour (MWh)'),\n id: 'mwatth',\n fn: SIPrefix('Wh', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-ampere-hour', 'Ampere-hour (Ah)'),\n id: 'amph',\n fn: SIPrefix('Ah'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kiloampere-hour', 'Kiloampere-hour (kAh)'),\n id: 'kamph',\n fn: SIPrefix('Ah', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-milliampere-hour', 'Milliampere-hour (mAh)'),\n id: 'mamph',\n fn: SIPrefix('Ah', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-joule', 'Joule (J)'),\n id: 'joule',\n fn: SIPrefix('J'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-electron-volt', 'Electron volt (eV)'),\n id: 'ev',\n fn: SIPrefix('eV'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-ampere', 'Ampere (A)'),\n id: 'amp',\n fn: SIPrefix('A'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kiloampere', 'Kiloampere (kA)'),\n id: 'kamp',\n fn: SIPrefix('A', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-milliampere', 'Milliampere (mA)'),\n id: 'mamp',\n fn: SIPrefix('A', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-volt', 'Volt (V)'),\n id: 'volt',\n fn: SIPrefix('V'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kilovolt', 'Kilovolt (kV)'),\n id: 'kvolt',\n fn: SIPrefix('V', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-millivolt', 'Millivolt (mV)'),\n id: 'mvolt',\n fn: SIPrefix('V', -1),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.energy.formats.name-decibel-milliwatt',\n 'Decibel-milliwatt (dBm)'\n ),\n id: 'dBm',\n fn: SIPrefix('dBm'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-milliohm', 'Milliohm (mΩ)'),\n id: 'mohm',\n fn: SIPrefix('Ω', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-ohm', 'Ohm (Ω)'),\n id: 'ohm',\n fn: SIPrefix('Ω'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-kiloohm', 'Kiloohm (kΩ)'),\n id: 'kohm',\n fn: SIPrefix('Ω', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-megaohm', 'Megaohm (MΩ)'),\n id: 'Mohm',\n fn: SIPrefix('Ω', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-farad', 'Farad (F)'),\n id: 'farad',\n fn: SIPrefix('F'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-microfarad', 'Microfarad (µF)'),\n id: 'µfarad',\n fn: SIPrefix('F', -2),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-nanofarad', 'Nanofarad (nF)'),\n id: 'nfarad',\n fn: SIPrefix('F', -3),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-picofarad', 'Picofarad (pF)'),\n id: 'pfarad',\n fn: SIPrefix('F', -4),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-femtofarad', 'Femtofarad (fF)'),\n id: 'ffarad',\n fn: SIPrefix('F', -5),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-henry', 'Henry (H)'),\n id: 'henry',\n fn: SIPrefix('H'),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-millihenry', 'Millihenry (mH)'),\n id: 'mhenry',\n fn: SIPrefix('H', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-microhenry', 'Microhenry (µH)'),\n id: 'µhenry',\n fn: SIPrefix('H', -2),\n },\n {\n name: t('grafana-data.valueFormats.categories.energy.formats.name-lumens', 'Lumens (Lm)'),\n id: 'lumens',\n fn: SIPrefix('Lm'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.name', 'Flow'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-gallons-min', 'Gallons/min (gpm)'),\n id: 'flowgpm',\n fn: toFixedUnit('gpm'),\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-cubic-meters-sec', 'Cubic meters/sec (cms)'),\n id: 'flowcms',\n fn: toFixedUnit('cms'),\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-cubic-feet-sec', 'Cubic feet/sec (cfs)'),\n id: 'flowcfs',\n fn: toFixedUnit('cfs'),\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-cubic-feet-min', 'Cubic feet/min (cfm)'),\n id: 'flowcfm',\n fn: toFixedUnit('cfm'),\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-litre-hour', 'Litre/hour'),\n id: 'litreh',\n fn: toFixedUnit('L/h'),\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-litre-min', 'Litre/min (L/min)'),\n id: 'flowlpm',\n fn: toFixedUnit('L/min'),\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-millilitre-min', 'milliLitre/min (mL/min)'),\n id: 'flowmlpm',\n fn: toFixedUnit('mL/min'),\n },\n {\n name: t('grafana-data.valueFormats.categories.flow.formats.name-lux', 'Lux (lx)'),\n id: 'lux',\n fn: toFixedUnit('lux'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.force.name', 'Force'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.force.formats.name-newton-meters', 'Newton-meters (Nm)'),\n id: 'forceNm',\n fn: SIPrefix('Nm'),\n },\n {\n name: t('grafana-data.valueFormats.categories.force.formats.name-kilonewton-meters', 'Kilonewton-meters (kNm)'),\n id: 'forcekNm',\n fn: SIPrefix('Nm', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.force.formats.name-newtons', 'Newtons (N)'),\n id: 'forceN',\n fn: SIPrefix('N'),\n },\n {\n name: t('grafana-data.valueFormats.categories.force.formats.name-kilonewtons', 'Kilonewtons (kN)'),\n id: 'forcekN',\n fn: SIPrefix('N', 1),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.name', 'Hash rate'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.formats.name-hashes-sec', 'hashes/sec'),\n id: 'Hs',\n fn: SIPrefix('H/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.formats.name-kilohashes-sec', 'kilohashes/sec'),\n id: 'KHs',\n fn: SIPrefix('H/s', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.formats.name-megahashes-sec', 'megahashes/sec'),\n id: 'MHs',\n fn: SIPrefix('H/s', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.formats.name-gigahashes-sec', 'gigahashes/sec'),\n id: 'GHs',\n fn: SIPrefix('H/s', 3),\n },\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.formats.name-terahashes-sec', 'terahashes/sec'),\n id: 'THs',\n fn: SIPrefix('H/s', 4),\n },\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.formats.name-petahashes-sec', 'petahashes/sec'),\n id: 'PHs',\n fn: SIPrefix('H/s', 5),\n },\n {\n name: t('grafana-data.valueFormats.categories.hash-rate.formats.name-exahashes-sec', 'exahashes/sec'),\n id: 'EHs',\n fn: SIPrefix('H/s', 6),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.mass.name', 'Mass'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.mass.formats.name-milligram', 'milligram (mg)'),\n id: 'massmg',\n fn: SIPrefix('g', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.mass.formats.name-gram', 'gram (g)'),\n id: 'massg',\n fn: SIPrefix('g'),\n },\n {\n name: t('grafana-data.valueFormats.categories.mass.formats.name-pound', 'pound (lb)'),\n id: 'masslb',\n fn: toFixedUnit('lb'),\n },\n {\n name: t('grafana-data.valueFormats.categories.mass.formats.name-kilogram', 'kilogram (kg)'),\n id: 'masskg',\n fn: SIPrefix('g', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.mass.formats.name-metric-ton', 'metric ton (t)'),\n id: 'masst',\n fn: toFixedUnit('t'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.length.name', 'Length'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.length.formats.name-millimeter', 'millimeter (mm)'),\n id: 'lengthmm',\n fn: SIPrefix('m', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.length.formats.name-inch', 'inch (in)'),\n id: 'lengthin',\n fn: toFixedUnit('in'),\n },\n {\n name: t('grafana-data.valueFormats.categories.length.formats.name-feet', 'feet (ft)'),\n id: 'lengthft',\n fn: toFixedUnit('ft'),\n },\n {\n name: t('grafana-data.valueFormats.categories.length.formats.name-meter', 'meter (m)'),\n id: 'lengthm',\n fn: SIPrefix('m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.length.formats.name-kilometer', 'kilometer (km)'),\n id: 'lengthkm',\n fn: SIPrefix('m', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.length.formats.name-mile', 'mile (mi)'),\n id: 'lengthmi',\n fn: toFixedUnit('mi'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.name', 'Pressure'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-millibars', 'Millibars'),\n id: 'pressurembar',\n fn: SIPrefix('bar', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-bars', 'Bars'),\n id: 'pressurebar',\n fn: SIPrefix('bar'),\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-kilobars', 'Kilobars'),\n id: 'pressurekbar',\n fn: SIPrefix('bar', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-pascals', 'Pascals'),\n id: 'pressurepa',\n fn: SIPrefix('Pa'),\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-hectopascals', 'Hectopascals'),\n id: 'pressurehpa',\n fn: toFixedUnit('hPa'),\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-kilopascals', 'Kilopascals'),\n id: 'pressurekpa',\n fn: toFixedUnit('kPa'),\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-inches-mercury', 'Inches of mercury'),\n id: 'pressurehg',\n fn: toFixedUnit('\"Hg'),\n },\n {\n name: t('grafana-data.valueFormats.categories.pressure.formats.name-psi', 'PSI'),\n id: 'pressurepsi',\n fn: scaledUnits(1000, ['psi', 'ksi', 'Mpsi']),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.name', 'Radiation'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-becquerel', 'Becquerel (Bq)'),\n id: 'radbq',\n fn: SIPrefix('Bq'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-curie', 'curie (Ci)'),\n id: 'radci',\n fn: SIPrefix('Ci'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-gray', 'Gray (Gy)'),\n id: 'radgy',\n fn: SIPrefix('Gy'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-rad', 'rad'),\n id: 'radrad',\n fn: SIPrefix('rad'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-sievert', 'Sievert (Sv)'),\n id: 'radsv',\n fn: SIPrefix('Sv'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-millisievert', 'milliSievert (mSv)'),\n id: 'radmsv',\n fn: SIPrefix('Sv', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-microsievert', 'microSievert (µSv)'),\n id: 'radusv',\n fn: SIPrefix('Sv', -2),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-rem', 'rem'),\n id: 'radrem',\n fn: SIPrefix('rem'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-exposure', 'Exposure (C/kg)'),\n id: 'radexpckg',\n fn: SIPrefix('C/kg'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-roentgen', 'roentgen (R)'),\n id: 'radr',\n fn: SIPrefix('R'),\n },\n {\n name: t('grafana-data.valueFormats.categories.radiation.formats.name-sievert-hour', 'Sievert/hour (Sv/h)'),\n id: 'radsvh',\n fn: SIPrefix('Sv/h'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.radiation.formats.name-millisievert-hour',\n 'milliSievert/hour (mSv/h)'\n ),\n id: 'radmsvh',\n fn: SIPrefix('Sv/h', -1),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.radiation.formats.name-microsievert-hour',\n 'microSievert/hour (µSv/h)'\n ),\n id: 'radusvh',\n fn: SIPrefix('Sv/h', -2),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.rotational-speed.name', 'Rotational Speed'),\n formats: [\n {\n name: t(\n 'grafana-data.valueFormats.categories.rotational-speed.formats.name-rpm',\n 'Revolutions per minute (rpm)'\n ),\n id: 'rotrpm',\n fn: toFixedUnit('rpm'),\n },\n {\n name: t('grafana-data.valueFormats.categories.rotational-speed.formats.name-hertz', 'Hertz (Hz)'),\n id: 'rothz',\n fn: SIPrefix('Hz'),\n },\n {\n name: t('grafana-data.valueFormats.categories.rotational-speed.formats.name-kilohertz', 'Kilohertz (kHz)'),\n id: 'rotkhz',\n fn: SIPrefix('Hz', 1),\n },\n {\n name: t('grafana-data.valueFormats.categories.rotational-speed.formats.name-megahertz', 'Megahertz (MHz)'),\n id: 'rotmhz',\n fn: SIPrefix('Hz', 2),\n },\n {\n name: t('grafana-data.valueFormats.categories.rotational-speed.formats.name-gigahertz', 'Gigahertz (GHz)'),\n id: 'rotghz',\n fn: SIPrefix('Hz', 3),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.rotational-speed.formats.name-radians-sec',\n 'Radians per second (rad/s)'\n ),\n id: 'rotrads',\n fn: toFixedUnit('rad/s'),\n },\n {\n name: t(\n 'grafana-data.valueFormats.categories.rotational-speed.formats.name-degrees-sec',\n 'Degrees per second (°/s)'\n ),\n id: 'rotdegs',\n fn: toFixedUnit('°/s'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.temperature.name', 'Temperature'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.temperature.formats.name-celsius', 'Celsius (°C)'),\n id: 'celsius',\n fn: toFixedUnit('°C'),\n },\n {\n name: t('grafana-data.valueFormats.categories.temperature.formats.name-fahrenheit', 'Fahrenheit (°F)'),\n id: 'fahrenheit',\n fn: toFixedUnit('°F'),\n },\n {\n name: t('grafana-data.valueFormats.categories.temperature.formats.name-kelvin', 'Kelvin (K)'),\n id: 'kelvin',\n fn: toFixedUnit('K'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.time.name', 'Time'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-hertz', 'Hertz (1/s)'),\n id: 'hertz',\n fn: SIPrefix('Hz'),\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-nanoseconds', 'nanoseconds (ns)'),\n id: 'ns',\n fn: toNanoSeconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-microseconds', 'microseconds (µs)'),\n id: 'µs',\n fn: toMicroSeconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-milliseconds', 'milliseconds (ms)'),\n id: 'ms',\n fn: toMilliSeconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-seconds', 'seconds (s)'),\n id: 's',\n fn: toSeconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-minutes', 'minutes (m)'),\n id: 'm',\n fn: toMinutes,\n },\n { name: t('grafana-data.valueFormats.categories.time.formats.name-hours', 'hours (h)'), id: 'h', fn: toHours },\n { name: t('grafana-data.valueFormats.categories.time.formats.name-days', 'days (d)'), id: 'd', fn: toDays },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-duration-ms', 'duration (ms)'),\n id: 'dtdurationms',\n fn: toDurationInMilliseconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-duration-s', 'duration (s)'),\n id: 'dtdurations',\n fn: toDurationInSeconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-duration-hms', 'duration (hh:mm:ss)'),\n id: 'dthms',\n fn: toDurationInHoursMinutesSeconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-duration-dhms', 'duration (d hh:mm:ss)'),\n id: 'dtdhms',\n fn: toDurationInDaysHoursMinutesSeconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-timeticks', 'Timeticks (s/100)'),\n id: 'timeticks',\n fn: toTimeTicks,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-clock-ms', 'clock (ms)'),\n id: 'clockms',\n fn: toClockMilliseconds,\n },\n {\n name: t('grafana-data.valueFormats.categories.time.formats.name-clock-s', 'clock (s)'),\n id: 'clocks',\n fn: toClockSeconds,\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.name', 'Throughput'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-counts-sec', 'counts/sec (cps)'),\n id: 'cps',\n fn: simpleCountUnit('c/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-ops-sec', 'ops/sec (ops)'),\n id: 'ops',\n fn: simpleCountUnit('ops/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-requests-sec', 'requests/sec (rps)'),\n id: 'reqps',\n fn: simpleCountUnit('req/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-reads-sec', 'reads/sec (rps)'),\n id: 'rps',\n fn: simpleCountUnit('rd/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-writes-sec', 'writes/sec (wps)'),\n id: 'wps',\n fn: simpleCountUnit('wr/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-io-ops-sec', 'I/O ops/sec (iops)'),\n id: 'iops',\n fn: simpleCountUnit('io/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-events-sec', 'events/sec (eps)'),\n id: 'eps',\n fn: simpleCountUnit('evt/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-messages-sec', 'messages/sec (mps)'),\n id: 'mps',\n fn: simpleCountUnit('msg/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-records-sec', 'records/sec (rps)'),\n id: 'recps',\n fn: simpleCountUnit('rec/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-rows-sec', 'rows/sec (rps)'),\n id: 'rowsps',\n fn: simpleCountUnit('rows/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-counts-min', 'counts/min (cpm)'),\n id: 'cpm',\n fn: simpleCountUnit('c/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-ops-min', 'ops/min (opm)'),\n id: 'opm',\n fn: simpleCountUnit('ops/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-requests-min', 'requests/min (rpm)'),\n id: 'reqpm',\n fn: simpleCountUnit('req/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-reads-min', 'reads/min (rpm)'),\n id: 'rpm',\n fn: simpleCountUnit('rd/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-writes-min', 'writes/min (wpm)'),\n id: 'wpm',\n fn: simpleCountUnit('wr/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-events-min', 'events/min (epm)'),\n id: 'epm',\n fn: simpleCountUnit('evts/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-messages-min', 'messages/min (mpm)'),\n id: 'mpm',\n fn: simpleCountUnit('msgs/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-records-min', 'records/min (rpm)'),\n id: 'recpm',\n fn: simpleCountUnit('rec/m'),\n },\n {\n name: t('grafana-data.valueFormats.categories.throughput.formats.name-rows-min', 'rows/min (rpm)'),\n id: 'rowspm',\n fn: simpleCountUnit('rows/m'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.velocity.name', 'Velocity'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.velocity.formats.name-meters-second', 'meters/second (m/s)'),\n id: 'velocityms',\n fn: toFixedUnit('m/s'),\n },\n {\n name: t('grafana-data.valueFormats.categories.velocity.formats.name-kilometers-hour', 'kilometers/hour (km/h)'),\n id: 'velocitykmh',\n fn: toFixedUnit('km/h'),\n },\n {\n name: t('grafana-data.valueFormats.categories.velocity.formats.name-miles-hour', 'miles/hour (mph)'),\n id: 'velocitymph',\n fn: toFixedUnit('mph'),\n },\n {\n name: t('grafana-data.valueFormats.categories.velocity.formats.name-knot', 'knot (kn)'),\n id: 'velocityknot',\n fn: toFixedUnit('kn'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.volume.name', 'Volume'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.volume.formats.name-millilitre', 'millilitre (mL)'),\n id: 'mlitre',\n fn: SIPrefix('L', -1),\n },\n {\n name: t('grafana-data.valueFormats.categories.volume.formats.name-litre', 'litre (L)'),\n id: 'litre',\n fn: SIPrefix('L'),\n },\n {\n name: t('grafana-data.valueFormats.categories.volume.formats.name-cubic-meter', 'cubic meter'),\n id: 'm3',\n fn: toFixedUnit('m³'),\n },\n {\n name: t('grafana-data.valueFormats.categories.volume.formats.name-normal-cubic-meter', 'Normal cubic meter'),\n id: 'Nm3',\n fn: toFixedUnit('Nm³'),\n },\n {\n name: t('grafana-data.valueFormats.categories.volume.formats.name-cubic-decimeter', 'cubic decimeter'),\n id: 'dm3',\n fn: toFixedUnit('dm³'),\n },\n {\n name: t('grafana-data.valueFormats.categories.volume.formats.name-gallons', 'gallons'),\n id: 'gallons',\n fn: toFixedUnit('gal'),\n },\n ],\n },\n {\n name: t('grafana-data.valueFormats.categories.boolean.name', 'Boolean'),\n formats: [\n {\n name: t('grafana-data.valueFormats.categories.boolean.formats.name-true-false', 'True / False'),\n id: 'bool',\n fn: booleanValueFormatter('True', 'False'),\n },\n {\n name: t('grafana-data.valueFormats.categories.boolean.formats.name-yes-no', 'Yes / No'),\n id: 'bool_yes_no',\n fn: booleanValueFormatter('Yes', 'No'),\n },\n {\n name: t('grafana-data.valueFormats.categories.boolean.formats.name-on-off', 'On / Off'),\n id: 'bool_on_off',\n fn: booleanValueFormatter('On', 'Off'),\n },\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, fullCurrency } 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 // Supported formats:\n // currency:$ -> scaled currency ($1.2K)\n // currency:financial:$ -> full currency ($1,234)\n // currency:financial:€:suffix -> full currency with suffix (1,234€)\n if (key === 'currency') {\n const keySplit = sub.split(':');\n\n if (keySplit[0] === 'financial' && keySplit.length >= 2) {\n const symbol = keySplit[1];\n if (!symbol) {\n return toFixedUnit(''); // fallback for empty symbol\n }\n const asSuffix = keySplit[2] === 'suffix';\n return fullCurrency(symbol, asSuffix);\n } else {\n return currency(sub);\n }\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 { css } from '@emotion/css';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\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","export const ENGLISH_US = 'en-US';\nexport const FRENCH_FRANCE = 'fr-FR';\nexport const SPANISH_SPAIN = 'es-ES';\nexport const GERMAN_GERMANY = 'de-DE';\nexport const BRAZILIAN_PORTUGUESE = 'pt-BR';\nexport const CHINESE_SIMPLIFIED = 'zh-Hans';\nexport const ITALIAN_ITALY = 'it-IT';\nexport const JAPANESE_JAPAN = 'ja-JP';\nexport const INDONESIAN_INDONESIA = 'id-ID';\nexport const KOREAN_KOREA = 'ko-KR';\nexport const RUSSIAN_RUSSIA = 'ru-RU';\nexport const CZECH_CZECHIA = 'cs-CZ';\nexport const DUTCH_NETHERLANDS = 'nl-NL';\nexport const HUNGARIAN_HUNGARY = 'hu-HU';\nexport const PORTUGUESE_PORTUGAL = 'pt-PT';\nexport const POLISH_POLAND = 'pl-PL';\nexport const SWEDISH_SWEDEN = 'sv-SE';\nexport const TURKISH_TURKEY = 'tr-TR';\nexport const CHINESE_TRADITIONAL = 'zh-Hant';\n\nexport const DEFAULT_LANGUAGE = ENGLISH_US;\nexport const PSEUDO_LOCALE = 'pseudo';\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","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 { 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 { 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 + 'build/img/icons/';\n } else {\n iconRoot = 'public/build/img/icons/';\n }\n\n return iconRoot;\n}\n\nexport function getIconPath(name: IconName, type: IconType = 'default'): string {\n const iconRoot = getIconRoot();\n const subDir = getIconSubDir(name, type);\n return `${iconRoot}${subDir}/${name}.svg`;\n}\n","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 { config } from '../config';\n\nexport const featureEnabled = (feature: string): boolean => {\n const { enabledFeatures } = config.licenseInfo;\n return enabledFeatures && enabledFeatures[feature];\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 { css, cx } from '@emotion/css';\nimport { forwardRef, HTMLProps, ReactNode, useContext } from 'react';\nimport { useMeasure } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { stylesFactory } from '../../themes/stylesFactory';\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\n/**\n * Used for regular text input. For an array of data or tree-structured data, consider using `Combobox` or `Cascader` respectively.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-input--docs\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: 'unset',\n borderBottomLeftRadius: 'unset',\n },\n },\n\n /* when input rendered with addon after only*/\n '&:first-child:not(:last-child)': {\n '> input': {\n borderRight: 'none',\n borderTopRightRadius: 'unset',\n borderBottomRightRadius: 'unset',\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: 'unset',\n borderBottomRightRadius: 'unset',\n borderTopLeftRadius: 'unset',\n borderBottomLeftRadius: 'unset',\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: 'unset',\n borderBottomRightRadius: 'unset',\n '> :last-child': {\n borderTopRightRadius: 'unset',\n borderBottomRightRadius: 'unset',\n },\n },\n\n '&:last-child': {\n borderTopLeftRadius: 'unset',\n borderBottomLeftRadius: 'unset',\n '> :first-child': {\n borderTopLeftRadius: 'unset',\n borderBottomLeftRadius: 'unset',\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: 'unset',\n borderBottomRightRadius: 'unset',\n })\n ),\n suffix: cx(\n prefixSuffix,\n css({\n label: 'input-suffix',\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n borderLeft: 'none',\n borderTopLeftRadius: 'unset',\n borderBottomLeftRadius: 'unset',\n right: 0,\n })\n ),\n loadingIndicator: css({\n '& + *': {\n marginLeft: theme.spacing(0.5),\n },\n }),\n };\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(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 onTag(tag, html, options) {\n if (html === '<input disabled=\"\" type=\"checkbox\">' || html === '<input checked=\"\" disabled=\"\" type=\"checkbox\">') {\n return html;\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 DOMPurify.addHook('afterSanitizeAttributes', (node) => {\n if (node.tagName === 'A' && node.getAttribute('target') === '_blank') {\n node.setAttribute('rel', 'noopener noreferrer');\n }\n });\n\n return DOMPurify.sanitize(unsanitizedString, {\n USE_PROFILES: { html: true },\n FORBID_TAGS: ['form', 'input'],\n ADD_ATTR: ['target'],\n });\n } catch (error) {\n console.error('String could not be sanitized', unsanitizedString);\n return escapeHtml(unsanitizedString);\n } finally {\n DOMPurify.removeHook('afterSanitizeAttributes');\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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/'/g, ''')\n .replace(/\"/g, '"');\n}\n\nexport class PathValidationError extends Error {\n constructor(message = 'Invalid request path') {\n super(message);\n this.name = 'PathValidationError';\n // Maintains proper stack trace for where error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, PathValidationError);\n }\n }\n}\n\n/**\n * Validates a path or URL, protecting against path traversal attacks.\n * Returns the original input if safe, or throw an error\n */\nexport function validatePath<OriginalPath extends string>(path: OriginalPath): OriginalPath {\n try {\n let decoded: string = path;\n while (true) {\n const nextDecode = decodeURIComponent(decoded);\n if (nextDecode === decoded) {\n break; // String is fully decoded.\n }\n decoded = nextDecode;\n }\n\n // Validate the entire decoded string for traversal attempts\n // This prevents attacks that use query separators to hide traversal payloads\n if (/\\.\\.|\\/\\\\|[\\t\\n\\r]/.test(decoded)) {\n throw new PathValidationError();\n }\n\n // Return the original path (not the decoded version) to preserve the full URL\n return path;\n } catch (err) {\n // Rethrow the original PathValidationError to preserve the stack trace\n if (err instanceof PathValidationError) {\n throw err;\n }\n\n // A decoding error can happen with malformed URIs (e.g., % not followed by hex).\n // These are suspicious, so we treat them as traversal attempts.\n throw new PathValidationError('Error validating request path');\n }\n}\n\nexport const textUtil = {\n escapeHtml,\n hasAnsiCodes,\n sanitize,\n sanitizeTextPanelContent,\n sanitizeUrl,\n sanitizeSVGContent,\n sanitizeTrustedTypes,\n sanitizeTrustedTypesRSS,\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","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';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\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 (\n <LoadingPlaceholder\n text={t('grafana-ui.monaco.loading-placeholder', 'Loading editor')}\n className={styles.container}\n />\n );\n }\n\n if (error) {\n return (\n <ErrorWithStack\n title={t('grafana-ui.monaco.error-label', '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","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 (...newArgs: any[]) => ReturnType<ResultFn>>(stylesCreator: ResultFn) {\n return memoize(stylesCreator);\n}\n","import { PluginState } from '@grafana/data';\nimport { config, GrafanaBootConfig } from '@grafana/runtime';\nexport { config, type 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 { 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/ThemeContext';\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' | 'li';\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\n/**\n * The Text component can be used to apply typography styles in a simple way, without the need of extra css.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/foundations-text--docs\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 { cx, css } from '@emotion/css';\nimport * as React from 'react';\nimport SVG from 'react-inlinesvg';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { IconSize, isIconSize } from '../../types/icon';\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 *\n * Spinner is `fa-spinner` icon animated. It is used to alert a user to wait for an activity to complete.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-spinner--docs\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 lineHeight: 0,\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 { 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 * Set to true to validate the URL path to prevent path traversal attacks.\n * Use this when constructing URLs from user input.\n */\n validatePath?: 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 = false` 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 { 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>): 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 { 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 { 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.sm,\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","/** @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: '#fbfbfb',\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.61)`,\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.65)`,\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';\nimport type { Radii } from './createShape';\nimport type { ThemeSpacingTokens } from './createSpacing';\n\ninterface MenuComponentTokens {\n borderRadius: keyof Radii;\n padding: ThemeSpacingTokens;\n}\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 drawer: {\n padding: number;\n };\n textHighlight: {\n background: string;\n text: string;\n };\n sidemenu: {\n width: number;\n };\n horizontalDrawer: {\n defaultHeight: number;\n };\n table: {\n rowHoverBackground: string;\n rowSelected: string;\n };\n menu: MenuComponentTokens;\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 const menu: MenuComponentTokens = {\n borderRadius: 'default',\n padding: 0.5,\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 drawer: {\n padding: 2,\n },\n overlay: {\n background: colors.mode === 'dark' ? 'rgba(63, 62, 62, 0.5)' : 'rgba(208, 209, 211, 0.5)',\n },\n sidemenu: {\n width: 57,\n },\n // @ts-expect-error (added here to not crash plugins that might use it)\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 menu,\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\nexport interface Radii {\n /**\n * Use for most things (inputs, buttons, cards, panels, etc)\n * Same as `md`\n */\n default: string;\n /**\n * Use for most things (inputs, buttons, cards, panels, etc)\n * Same as `default`\n */\n md: string;\n /**\n * Use for smaller things like chips, tags and badges\n */\n sm: string;\n /**\n * Use for large things, like modals\n */\n lg: string;\n /**\n * Used to create maximum half circle sides (e.g. for pills)\n */\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 ?? 6;\n\n const radius = {\n default: `${baseBorderRadius}px`,\n md: `${baseBorderRadius}px`,\n sm: `${Math.ceil(baseBorderRadius * (2 / 3))}px`, // for default base becomes 4\n lg: `${Math.ceil(baseBorderRadius * (5 / 3))}px`, // for default base becomes 10\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<T extends ThemeVizColorName> {\n color: string;\n name: ThemeVizColorShadeName<T>;\n aliases?: string[];\n primary?: boolean;\n}\n\ntype ThemeVizColorName = 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'purple';\n\ntype ThemeVizColorShadeName<T extends ThemeVizColorName> =\n | `super-light-${T}`\n | `light-${T}`\n | T\n | `semi-dark-${T}`\n | `dark-${T}`;\n\ntype ThemeVizHueGeneric<T> = T extends ThemeVizColorName\n ? {\n name: T;\n shades: Array<ThemeVizColor<T>>;\n }\n : never;\n\n/**\n * @alpha\n */\nexport type ThemeVizHue = ThemeVizHueGeneric<ThemeVizColorName>;\n\nexport type ThemeVisualizationColorsInput = {\n hues?: ThemeVizHue[];\n palette?: string[];\n};\n\n/**\n * @internal\n */\nexport function createVisualizationColors(\n colors: ThemeColors,\n options: ThemeVisualizationColorsInput = {}\n): ThemeVisualizationColors {\n const baseHues = colors.mode === 'light' ? getLightHues() : getDarkHues();\n const { palette = getClassicPalette(), hues: hueOverrides = [] } = options;\n\n const hues = [...baseHues];\n // override hues with user provided\n for (const hueOverride of hueOverrides) {\n const existingHue = hues.find((hue) => hue.name === hueOverride.name);\n if (existingHue) {\n for (const shadeOverride of hueOverride.shades) {\n const existingShade = existingHue.shades.find((shade) => shade.name === shadeOverride.name);\n if (existingShade) {\n existingShade.color = shadeOverride.color;\n }\n }\n }\n }\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 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',\n 'semi-dark-yellow',\n 'blue',\n 'orange',\n 'red',\n 'purple',\n 'dark-green',\n 'dark-yellow',\n 'dark-blue',\n 'dark-orange',\n 'dark-red',\n 'dark-purple',\n 'super-light-green',\n 'super-light-yellow',\n 'super-light-blue',\n 'super-light-orange',\n 'super-light-red',\n 'super-light-purple',\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, ThemeVisualizationColorsInput } 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 visualization?: ThemeVisualizationColorsInput;\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 visualization: visualizationInput = {},\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, visualizationInput);\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 { css } from '@emotion/css';\nimport { Placement } from '@floating-ui/react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { TooltipPlacement } from '../components/Tooltip/types';\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 { 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';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { clearButtonStyles } from '../Button/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={t('grafana-ui.select.menu-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={t('grafana-ui.select.menu-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 { 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 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 { 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 { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, deprecationWarning } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\nimport { IconName, IconSize, IconType } from '../../types/icon';\nimport { ComponentSize } from '../../types/size';\nimport { getActiveButtonStyles, IconRenderer } from '../Button/Button';\nimport { getSvgSize } from '../Icon/utils';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { PopoverContent, TooltipPlacement } from '../Tooltip/types';\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\ninterface BasePropsWithAriaLabelledBy extends BaseProps {\n /** Reference to an element id that labels the button. No tooltip will be set in this case. */\n ['aria-labelledby']: string;\n}\n\nexport type Props = BasePropsWithTooltip | BasePropsWithAriaLabel | BasePropsWithAriaLabelledBy;\n\n/**\n * This component looks just like an icon but behaves like a button.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-iconbutton--docs\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 const activeButtonStyle = getActiveButtonStyles(theme.colors.secondary, 'text');\n\n let iconColor = theme.colors.primary.text;\n let hoverColor = theme.colors.primary.transparent;\n\n if (variant === 'secondary') {\n iconColor = theme.colors.secondary.text;\n hoverColor = theme.colors.secondary.transparent;\n } else if (variant === 'destructive') {\n iconColor = theme.colors.error.text;\n hoverColor = theme.colors.error.transparent;\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 borderRadius: theme.shape.radius.default,\n\n '&:active': {\n '&:before, &:hover:before': {\n backgroundColor: activeButtonStyle.background,\n },\n },\n\n '&[disabled], &:disabled': {\n cursor: 'not-allowed',\n color: theme.colors.action.disabledText,\n opacity: 0.65,\n '&:hover:before': {\n backgroundColor: 'transparent',\n },\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:before': {\n backgroundColor: hoverColor,\n opacity: 1,\n },\n }),\n icon: css({\n verticalAlign: 'baseline',\n }),\n };\n};\n","import { flip, Placement, shift } from '@floating-ui/react';\n\nexport const BOUNDARY_ELEMENT_ID = 'floating-boundary';\n\nexport function getPositioningMiddleware(placement?: Placement) {\n const middleware = [];\n\n const flipMiddleware = flip({\n // Ensure we flip to the perpendicular axis if it doesn't fit\n // on narrow viewports.\n crossAxis: 'alignment',\n fallbackAxisSideDirection: 'end',\n boundary: document.getElementById(BOUNDARY_ELEMENT_ID) ?? undefined,\n });\n const shiftMiddleware = shift();\n\n // Prioritize flip over shift for edge-aligned placements only.\n if (placement?.includes('-')) {\n middleware.push(flipMiddleware, shiftMiddleware);\n } else {\n middleware.push(shiftMiddleware, flipMiddleware);\n }\n\n return middleware;\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","/* eslint-disable id-blacklist, no-restricted-imports */\nimport moment, { Moment } from 'moment-timezone';\n\nimport { formatDate } from '@grafana/i18n';\n\nimport { TimeZone } from '../types/time';\nimport { getFeatureToggle } from '../utils/featureToggles';\n\nimport { DateTimeOptions, getTimeZone } from './common';\nimport { systemDateFormats } from './formats';\nimport { DateTimeInput, toUtc, dateTimeAsMoment } from './moment_wrapper';\n\n/**\n * Converts a Grafana DateTimeInput to a plain Javascript Date object.\n */\nfunction toDate(dateInUtc: DateTimeInput): Date {\n if (dateInUtc instanceof Date) {\n return dateInUtc;\n }\n\n if (typeof dateInUtc === 'string' || typeof dateInUtc === 'number') {\n return new Date(dateInUtc);\n }\n\n return dateTimeAsMoment(dateInUtc).toDate();\n}\n\n/**\n * Converts a Grafana timezone string to an IANA timezone string.\n */\nexport function toIANATimezone(grafanaTimezone: string) {\n // Intl APIs will use the browser's timezone by default (if tz is undefined)\n if (grafanaTimezone === 'browser') {\n return undefined;\n }\n\n const zone = moment.tz.zone(grafanaTimezone);\n if (!zone) {\n // If the timezone is invalid, we default to the browser's timezone\n return undefined;\n }\n\n return grafanaTimezone;\n}\n\nfunction getIntlOptions(\n date: Date,\n options?: DateTimeOptionsWithFormat\n): Intl.DateTimeFormatOptions & { timeZone?: string } {\n const timeZone = getTimeZone(options);\n\n const intlOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric', // ↔ dateStyle: 'short'\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric', // ↔ timeStyle: 'short'\n minute: 'numeric',\n timeZone: toIANATimezone(timeZone),\n };\n\n // If the time has seconds, ensure they're included in the format\n const hasSeconds = date.getSeconds() !== 0;\n if (hasSeconds) {\n intlOptions.second = 'numeric';\n }\n\n if (options?.defaultWithMS) {\n intlOptions.second = 'numeric';\n intlOptions.fractionalSecondDigits = 3; // Include milliseconds\n }\n\n return intlOptions;\n}\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// NOTE:\n// These date formatting functions now just wrap the @grafana/i18n formatting functions\n// (which themselves wrap the browserIntl APIs). In the future we may deprecate these\n// in favor of using @grafana/i18n directly.\n\n/**\n * Helper function to format date and time according to the specified options.\n * If no options are supplied, then the date is formatting according to the user's locale preference.\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 // If a custom format is provided (or the toggle isn't enabled), use the previous implementation\n if (!getFeatureToggle('localeFormatPreference') || options?.format) {\n return toTz(dateInUtc, getTimeZone(options)).format(getFormat(options));\n }\n\n const dateAsDate = toDate(dateInUtc);\n const intlOptions = getIntlOptions(dateAsDate, options); // TODO - if invalid timezone, use browser timezone\n return formatDate(dateAsDate, intlOptions);\n};\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 // If a custom format is provided (or the toggle isn't enabled), use the previous implementation\n if (!getFeatureToggle('localeFormatPreference') || options?.format) {\n return toTz(dateInUtc, getTimeZone(options)).format(`${systemDateFormats.fullDate} z`);\n }\n\n const dateAsDate = toDate(dateInUtc);\n const intlOptions = getIntlOptions(dateAsDate, options);\n intlOptions.timeZoneName = 'short';\n\n return formatDate(dateAsDate, intlOptions);\n};\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","// 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","import * as React from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\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 (\n <IconButton\n {...innerProps}\n name=\"times\"\n size=\"sm\"\n className={styles.multiValueRemove}\n tooltip={t('grafana-ui.select.multi-value-remove', 'Remove')}\n />\n );\n};\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/ThemeContext';\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 i18n, { InitOptions, ReactOptions, TFunction as I18NextTFunction } from 'i18next';\nimport LanguageDetector, { DetectorOptions } from 'i18next-browser-languagedetector';\n// eslint-disable-next-line no-restricted-imports\nimport { initReactI18next, setDefaults, setI18n, Trans as I18NextTrans, getI18n } from 'react-i18next';\n\nimport { DEFAULT_LANGUAGE, PSEUDO_LOCALE } from './constants';\nimport { initRegionalFormat } from './dates';\nimport { LANGUAGES } from './languages';\nimport { ResourceLoader, Resources, TFunction, TransProps, TransType } from './types';\n\nlet tFunc: I18NextTFunction<string[], undefined> | undefined;\nlet transComponent: TransType;\n\nconst VALID_LANGUAGES = [\n ...LANGUAGES,\n {\n name: 'Pseudo',\n code: PSEUDO_LOCALE,\n },\n];\n\nfunction initTFuncAndTransComponent({ id, ns }: { id?: string; ns?: string[] } = {}) {\n if (id) {\n tFunc = getI18nInstance().getFixedT(null, id);\n transComponent = (props: TransProps) => <I18NextTrans shouldUnescape ns={id} {...props} />;\n return;\n }\n\n tFunc = getI18nInstance().t;\n transComponent = (props: TransProps) => <I18NextTrans shouldUnescape ns={ns} {...props} />;\n}\n\nexport async function loadNamespacedResources(namespace: string, language: string, loaders?: ResourceLoader[]) {\n if (!loaders?.length) {\n return;\n }\n\n const resolvedLanguage = language === PSEUDO_LOCALE ? DEFAULT_LANGUAGE : language;\n\n return Promise.all(\n loaders.map(async (loader) => {\n try {\n const resources = await loader(resolvedLanguage);\n addResourceBundle(resolvedLanguage, namespace, resources);\n } catch (error) {\n console.error(`Error loading resources for namespace ${namespace} and language: ${resolvedLanguage}`, error);\n }\n })\n );\n}\n\n// exported for testing\nexport function initDefaultI18nInstance() {\n // If the resources are not an object, we need to initialize the plugin translations\n if (getI18nInstance().options?.resources && typeof getI18nInstance().options.resources === 'object') {\n return;\n }\n\n const initPromise = getI18nInstance().use(initReactI18next).init({\n resources: {},\n returnEmptyString: false,\n lng: DEFAULT_LANGUAGE, // this should be the locale of the phrases in our source JSX\n });\n initTFuncAndTransComponent();\n return initPromise;\n}\n\n// exported for testing\nexport function initDefaultReactI18nInstance() {\n // If the initReactI18next is not set, we need to set them\n if (getI18n()?.options?.react) {\n return;\n }\n\n const options: ReactOptions = {};\n setDefaults(options);\n setI18n(getI18nInstance());\n}\n\nexport async function initPluginTranslations(id: string, loaders?: ResourceLoader[]) {\n await initDefaultI18nInstance();\n initDefaultReactI18nInstance();\n\n const language = getResolvedLanguage();\n initTFuncAndTransComponent({ id });\n\n await loadNamespacedResources(id, language, loaders);\n\n return { language };\n}\n\nexport function getI18nInstance(): typeof i18n {\n // in Grafana versions < 12.1.0 the i18n instance is exposed through the default export\n // used by plugins that support translations from Grafana >= 11.0.0\n const instance: typeof i18n & { default?: typeof i18n } = i18n;\n if (instance && instance.default) {\n return instance.default;\n }\n\n return instance;\n}\n\ninterface Module {\n type: 'backend';\n}\n\ninterface InitializeI18nOptions {\n ns?: string[];\n language?: string;\n module?: Module;\n}\n\nasync function initTranslations({\n ns,\n language = DEFAULT_LANGUAGE,\n module,\n}: InitializeI18nOptions): Promise<{ language: string | undefined }> {\n const options: InitOptions = {\n // We don't bundle any translations, we load them async\n partialBundledLanguages: true,\n resources: {},\n\n // If translations are empty strings (no translation), fall back to the default value in source code\n returnEmptyString: false,\n\n // Required to ensure that `resolvedLanguage` is set property when an invalid language is passed (such as through 'detect')\n supportedLngs: VALID_LANGUAGES.map((lang) => lang.code),\n fallbackLng: DEFAULT_LANGUAGE,\n\n ns,\n postProcess: [\n // Add pseudo processing even if we aren't necessarily going to use it\n PSEUDO_LOCALE,\n ],\n };\n\n if (language === 'detect') {\n getI18nInstance().use(LanguageDetector);\n const detection: DetectorOptions = { order: ['navigator'], caches: [] };\n options.detection = detection;\n } else {\n options.lng = VALID_LANGUAGES.find((lang) => lang.code === language)?.code ?? undefined;\n }\n\n if (module) {\n getI18nInstance().use(module).use(initReactI18next); // passes i18n down to react-i18next\n } else {\n getI18nInstance().use(initReactI18next); // passes i18n down to react-i18next\n }\n\n if (language === PSEUDO_LOCALE) {\n const { default: Pseudo } = await import('i18next-pseudo');\n getI18nInstance().use(\n new Pseudo({\n languageToPseudo: PSEUDO_LOCALE,\n enabled: true,\n wrapped: true,\n })\n );\n }\n\n await getI18nInstance().init(options);\n\n initTFuncAndTransComponent({ ns });\n\n return {\n language: getResolvedLanguage(),\n };\n}\n\nexport function getLanguage() {\n return getI18nInstance()?.language || DEFAULT_LANGUAGE;\n}\n\nexport function getResolvedLanguage() {\n return getI18nInstance()?.resolvedLanguage || DEFAULT_LANGUAGE;\n}\n\nexport function getNamespaces() {\n return getI18nInstance()?.options.ns;\n}\n\nexport async function changeLanguage(language?: string) {\n const validLanguage = VALID_LANGUAGES.find((lang) => lang.code === language)?.code ?? DEFAULT_LANGUAGE;\n await getI18nInstance().changeLanguage(validLanguage);\n}\n\nexport async function initializeI18n(\n { language, ns, module }: InitializeI18nOptions,\n regionalFormat: string\n): Promise<{ language: string | undefined }> {\n initRegionalFormat(regionalFormat);\n return initTranslations({ language, ns, module });\n}\n\nexport function addResourceBundle(language: string, namespace: string, resources: Resources) {\n getI18nInstance().addResourceBundle(language, namespace, resources, true, false);\n}\n\nexport const t: TFunction = (id: string, defaultMessage: string, values?: Record<string, unknown>) => {\n initDefaultI18nInstance();\n if (!tFunc) {\n if (process.env.NODE_ENV !== 'test') {\n console.warn(\n 't() was called before i18n was initialized. This is probably caused by calling t() in the root module scope, instead of lazily on render'\n );\n }\n\n if (process.env.NODE_ENV === 'development') {\n throw new Error('t() was called before i18n was initialized');\n }\n\n tFunc = getI18nInstance().t;\n }\n\n return tFunc(id, defaultMessage, values);\n};\n\nexport function Trans(props: TransProps) {\n initDefaultI18nInstance();\n const Component = transComponent ?? I18NextTrans;\n return <Component shouldUnescape {...props} />;\n}\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/ThemeContext';\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 role=\"presentation\"\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 role=\"presentation\"\n />\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n // we specifically don't want a theme color here\n // this gradient is more like a shadow\n const scrollGradientColor = `rgba(0, 0, 0, ${theme.isDark ? 0.25 : 0.08})`;\n return {\n scrollContent: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n position: 'relative',\n }),\n scrollIndicator: css({\n height: `max(5%, ${theme.spacing(3)})`,\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, ${scrollGradientColor})`,\n top: 0,\n }),\n scrollBottomIndicator: css({\n background: `linear-gradient(180deg, transparent, ${scrollGradientColor})`,\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/ThemeContext';\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\n/**\n * This component is used to create a scrollable container. It uses native scrollbars, has an option to show scroll indicators, and supports most `Box` properties.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-scrollcontainer--docs\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 {/* scrollable containers need tabindex set so keyboard users can focus them to scroll */}\n {/* see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/a7d1a12a6198d546c4a06477b385b4fde03b762e/docs/rules/no-noninteractive-tabindex.md#:~:text=If%20you%20know,scroll%20containers%22. */}\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */}\n <div tabIndex={0} 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 { 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 explicit 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-precision 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","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"],"names":["DataTopic","ScaleDimensionMode","ScalarDimensionMode","TextDimensionMode","ResourceDimensionMode","ConnectionDirection","DirectionDimensionMode","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","VariableFormatID","LogsDedupStrategy","ComparisonOperation","TableCellHeight","TableCellTooltipPlacement","defaultTableFooterOptions","defaultTableFieldOptions","defaultTimeZone","Profiler","profiler","getFocusStyle","theme","sharedInputStyle","invalid","borderColor","borderColorHover","background","textColor","autoFillBorder","inputPadding","inputSizes","inputSizesPixels","size","getPropertiesForButtonSize","SlideOutTransition","props","visible","children","duration","horizontal","styles","getStyles","transitionRef","measurement","DEFAULT_SYSTEM_DATE_FORMAT","DEFAULT_SYSTEM_DATE_MS_FORMAT","SystemDateFormatsState","settings","localTimeFormat","useMsResolution","options","locale","fallback","missingIntlDateTimeFormatSupport","dateTimeFormat","parts","mapping","part","systemDateFormats","ThemeProvider","value","setTheme","sub","event","provideTheme","component","clamp","min","max","hexToRgb","color","re","result","colors","n","index","intToHex","int","hex","rgbToHex","values","decomposeColor","asHexString","tColor","asRgbString","hslToRgb","h","s","l","a","f","k","type","rgb","recomposeColor","marker","colorSpace","i","getContrastRatio","foreground","canvas","lumA","getLuminance","lumB","backgroundParts","alpha","rgbNumbers","val","emphasize","coefficient","darken","lighten","c","colorManipulator","fg","bg","LoadingPlaceholder","text","className","rest","getThemeById","id","themeRegistry","getBuiltInThemes","allowedExtras","item","b","getSystemPreferenceTheme","userHasPermission","action","user","userHasPermissionInMetadata","object","userHasAllPermissions","actions","userHasAnyPermission","specialMatcher","specialCharEscape","specialCharUnescape","escapeStringForRegex","unEscapeStringFromRegex","stringStartsAsRegEx","str","stringToJsRegex","match","stringToMs","nr","unit","m","d","toNumberString","toIntegerOrUndefined","v","toFloatOrUndefined","toPascalCase","string","escapeRegex","AccessControlAction","PluginState","PluginType","PluginSignatureStatus","PluginSignatureType","PluginErrorCode","PluginLoadingStrategy","PluginIncludeType","GrafanaPlugin","tab","AutoRefreshInterval","RedirectToUrlKey","User","ContextSrv","e","role","interval","intervals","expires","expiresWithDistribution","nextRun","res","contextSrv","setContextSrv","override","getSizeStyles","width","minWidth","maxWidth","height","minHeight","maxHeight","Portal","root","forwardedRef","node","portalRoot","getPortalContainer","PortalContainer","RefForwardingPortal","ref","setMonacoEnv","_moduleId","label","language","spans","getLastNMinutesDisplay","count","getLastNHoursDisplay","getLastNDaysDisplay","getLastNMonthsDisplay","getLastNYearsDisplay","getNextNMinutesDisplay","getNextNHoursDisplay","getNextNDaysDisplay","getNextNMonthsDisplay","getNextNYearsDisplay","getBaseRangeOptions","getHiddenRangeOptions","getStandardRangeOptions","findRangeInOptions","range","option","describeTextRange","expr","isLast","opt","amount","span","rangeFormatShort","rangeFormatFull","describeTimeRange","timeZone","quickRanges","rangeOptions","fromDate","toDate","intlFormatOptions","parsed","isValidTimeSpan","describeTimeRangeAbbreviation","convertRawToRange","raw","fiscalYearStartMonth","format","from","to","isRelativeTime","isFiscal","timeRange","isRelativeTimeRange","secondsToHms","seconds","numYears","numDays","numHours","numMinutes","numSeconds","numMilliseconds","msRangeToTimeString","rangeMs","rangeSec","formattedH","formattedM","formattedS","calculateInterval","resolution","lowLimitInterval","lowLimitMs","intervalToMs","intervalMs","roundInterval","interval_regex","intervals_in_seconds","describeInterval","matches","sec","intervalToSeconds","info","timeRangeToRelative","now","relativeToTimeRange","relativeTimeRange","formatRawTimeRange","whiteBase","secondaryBase","brandMain","brandText","disabledText","CustomInput","testId","DropdownIndicator","selectProps","icon","Spinner","Icon","IndicatorsContainer","InputControl","focused","disabled","innerProps","prefix","otherProps","getInputControlStyles","withPrefix","SelectOptionGroup","cx","getClassNames","Heading","headingProps","getSelectStyles","SelectOptionGroupHeader","Text","UnthemedValueContainer","prevProps","valueChildren","otherChildren","truncatedValues","isMulti","noWrap","dataTestid","ValueContainer","cleanValue","filtered","selectedValue","findSelectedValue","found","omitDescriptions","description","CustomControl","menuIsOpen","onMenuClose","onMenuOpen","isFocused","getValue","innerRef","determineToggleAllState","SelectBase","allowCustomValue","allowCreateWhileLoading","ariaLabel","autoFocus","backspaceRemovesValue","blurInputOnSelect","cacheOptions","closeMenuOnSelect","components","createOptionPosition","defaultOptions","defaultValue","filterOption","formatCreateLabel","getOptionLabel","getOptionValue","inputValue","isClearable","isLoading","inputId","isOpen","isOptionDisabled","isSearchable","loadOptions","loadingMessage","maxMenuHeight","minMenuHeight","maxVisibleValues","menuPlacement","menuPosition","menuShouldPortal","noOptionsMessage","onBlur","onChange","onCloseMenu","onCreateOption","onInputChange","onKeyDown","onMenuScrollToBottom","onMenuScrollToTop","onOpenMenu","onFocus","toggleAllOptions","openMenuOnFocus","placeholder","renderControl","showAllSelectedWhenOpen","tabSelectsValue","virtualized","noMultiValueWrap","isValidNewOption","formatOptionLabel","hideSelectedOptions","selectRef","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","SingleValue","MultiValue","input","selectedValuesCount","indicatorChildren","Select","MultiSelect","AsyncSelect","VirtualizedSelect","AsyncVirtualizedSelect","AsyncMultiSelect","FadeTransition","EventBusSrv","typeFilter","handler","eventType","observer","key","filter","ScopedEventBus","payload","emittedEvent","path","eventBus","LANGUAGES","DefaultTimeZone","TIME_FORMAT","getDefaultTimeRange","getDefaultRelativeTimeRange","makeTimeRange","fromDateTime","toDateTime","ISO_8601","setLocale","getLocale","getLocaleData","isDateTimeInput","isDateTime","toUtc","formatInput","toDuration","dateTime","dateTimeAsMoment","dateTimeForTimeZone","timezone","getWeekdayIndex","day","wd","getWeekdayIndexByEnglishName","setWeekStart","weekStart","suffix","dow","loadKusto","getDefaultMonacoLanguages","spin","ToggleAllState","deepMemoize","fn","clearMemoizedCache","regionalFormat","createDateTimeFormatter","createDurationFormatter","formatDate","_value","formatDuration","formatDateRange","_from","_to","initRegionalFormat","regionalFormatArg","availableIconsIndex","isIconName","iconName","toIconName","getIconStyles","name","style","title","svgSize","svgHgt","svgWid","svgPath","composedClassName","getFeatureToggle","featureName","def","Box","margin","marginX","marginY","marginTop","marginBottom","marginLeft","marginRight","padding","paddingX","paddingY","paddingTop","paddingBottom","paddingLeft","paddingRight","display","backgroundColor","grow","shrink","basis","flex","borderStyle","borderRadius","direction","justifyContent","alignItems","boxShadow","element","gap","position","sizeStyles","Element","customBorderColor","customBackgroundColor","units","isDurationUnit","isMathString","parse","roundUp","dateTimeRep","time","mathString","parseString","parseDateMath","isValid","date","strippedMathString","len","num","unitString","numFrom","roundToFiscal","fyStartMonth","cardChrome","hoverColor","listItem","listItemSelected","mediaUp","breakpoint","isGrafanaTheme2","focusCss","isTheme2","firstColor","secondColor","getMouseFocusStyles","getFocusStyles","getButtonFocusStyles","getTooltipContainerStyles","getExternalRadius","offset","additionalOptions","selfBorderWidth","childBorderRadius","getInternalRadius","parentBorderWidth","parentBorderRadius","ThemeContext","formatViewed","dateString","diffHours","getUserInitials","first","last","UserIcon","userView","onClick","showTooltip","lastActiveAt","isActive","content","tooltip","getIconBorder","shadowColor","shadowHoverColor","history","deprecationWarning","file","oldName","newName","message","Stack","rowGap","columnGap","wrap","Registry","init","ext","current","select","currentOptions","ids","alias","GrafanaBootConfig","overrideFeatureTogglesFromUrl","overrideFeatureTogglesFromLocalStorage","config","featureToggles","localStorageValue","features","feature","featureValue","toggleState","isDevelopment","safeRuntimeFeatureFlags","bootData","breakpointCSS","prop","getCSS","getResponsiveStyle","dateTimeParse","parseOthers","zone","appEvents","allButtonVariants","allButtonFills","Button","variant","fill","fullWidth","tooltipPlacement","iconPlacement","getButtonStyles","buttonStyles","hasTooltip","iconComponent","IconRenderer","button","LinkButton","linkButtonStyles","iconType","iconOnly","fontSize","variantStyles","getPropertiesForVariant","disabledStyles","getPropertiesForDisabled","focusStyle","paddingMinusBorder","getActiveButtonStyles","getButtonVariantStyles","outlineBorderColor","hoverBorderColor","clearButtonStyles","clearLinkButtonStyles","Tooltip","interactive","show","placement","arrowRef","controlledVisible","setControlledVisible","floatingUIPlacement","middleware","context","refs","floatingStyles","tooltipId","hover","focus","dismiss","getReferenceProps","getFloatingProps","contentIsFunction","handleRef","childHasMatchingAriaLabel","error","toOption","CSP_REPORT_ONLY_ENABLED","defaultTrustedTypesPolicy","source","sink","currency","symbol","asSuffix","scaler","decimals","scaledDecimals","isNegative","scaled","fullCurrency","defaultFormatter","formattersCache","numericValue","formatter","SI_PREFIXES","SI_BASE_INDEX","getOffsetFromSIPrefix","charIndex","BIN_PREFIXES","binaryPrefix","p","SIPrefix","findInsertIndex","line","ch","getCompletionItems","monaco","suggestions","items","suggestion","mapKinds","sug","registerSuggestions","getSuggestions","modelId","model","currentLine","UnthemedCodeEditor","customLanguage","onSave","onBeforeEditorMount","editor","onEditorDidMount","oldProps","newLanguage","showMiniMap","showLineNumbers","readOnly","wordWrap","monacoOptions","alwaysConsumeMouseWheel","restMonacoOptions","longText","containerStyles","selectors","ReactMonacoEditorLazy","CodeEditor","resolveSelectors","versionedSelectors","grafanaVersion","version","resolveSelectorGroup","group","isVersionedSelectorGroup","assertIsSemverValid","resolveSelector","target","versionedSelector","versionToUse","versions","selectorName","MIN_GRAFANA_VERSION","versionedComponents","mode","status","_","refId","stepNo","severity","sectionId","folderName","tabId","versionedPages","alertRuleUid","dataSourceName","dataSourceUid","pluginName","annotationIndex","editIndex","uid","dashboardUid","variableName","page","pluginId","Pages","Components","monacoLanguageRegistry","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","factor","formatted","decimalPos","precision","absValue","dec","magn","appendPluralIf","condition","asPrefix","isBooleanUnit","t","logb","x","extArray","siIndex","buildFormats","cat","getValueFormat","fmt","idx","keySplit","getValueFormatterIndex","getValueFormats","ErrorWithStack","errorInfo","ENGLISH_US","FRENCH_FRANCE","SPANISH_SPAIN","GERMAN_GERMANY","BRAZILIAN_PORTUGUESE","CHINESE_SIMPLIFIED","ITALIAN_ITALY","JAPANESE_JAPAN","INDONESIAN_INDONESIA","KOREAN_KOREA","RUSSIAN_RUSSIA","CZECH_CZECHIA","DUTCH_NETHERLANDS","HUNGARIAN_HUNGARY","PORTUGUESE_PORTUGAL","POLISH_POLAND","SWEDISH_SWEDEN","TURKISH_TURKEY","CHINESE_TRADITIONAL","DEFAULT_LANGUAGE","PSEUDO_LOCALE","getSessionExpiry","expiryCookie","row","expiresStr","hasSessionExpiry","resetSelectStyles","originalStyles","useCustomSelectStyles","base","top","bottom","provided","state","matchSeriesOverride","aliasOrRegex","seriesAlias","regex","translateFillOption","getFillGradient","updateLegendValues","data","panel","series","yaxes","seriesYAxis","axis","TimeSeries","opts","overrides","fillStyle","ignoreNulls","nullAsZero","currentTime","currentValue","nonNulls","previousTime","previousValue","previousDeltaUp","timeStep","formater","timestamp","alwaysMonoIcons","getIconSubDir","getSvgSize","iconRoot","getIconRoot","grafanaPublicPath","getIconPath","subDir","defaultTimeZoneResolver","setTimeZoneResolver","resolver","getTimeZone","featureEnabled","enabledFeatures","ThemeContextMock","memoizedStyleCreators","withTheme","Component","WithTheme","ContextComponent","withTheme2","useTheme","useTheme2","useStyles","memoizedStyleCreator","useStyles2","additionalArguments","mockThemeContext","Input","addonAfter","addonBefore","suffixProp","loading","restProps","prefixRef","prefixRect","suffixRef","suffixRect","isInAutoSizeInput","accessoriesWidth","autoSizeWidth","getInputStyles","prefixSuffixStaticWidth","prefixSuffix","XSSWL","acc","sanitizeTextPanelWhitelist","tag","isWhiteAttr","sanitizeUrl","html","sanitize","unsanitizedString","escapeHtml","sanitizeTrustedTypesRSS","sanitizeTrustedTypes","sanitizeTextPanelContent","sanitizeSVGContent","url","hasAnsiCodes","PathValidationError","validatePath","decoded","nextDecode","err","textUtil","FieldColorModeId","FALLBACK_COLOR","useAsyncDependency","importStatement","useAsync","dependency","ReactMonacoEditor","stylesFactory","stylesCreator","grafanaConfig","getConfig","updateConfig","update","hasAlphaPanels","TruncatedText","childElement","isOverflowing","setIsOverflowing","internalRef","resizeObserver","entries","entry","getTooltipText","weight","truncate","italic","textAlignment","tabular","getTextStyles","customWeight","customColor","customVariant","inline","iconClassName","deprecatedStyles","getDeprecatedStyles","isFetchError","singletonInstance","setBackendSrv","instance","getBackendSrv","BusEventBase","tags","BusEventWithPayload","GrafanaThemeType","createBreakpoints","keys","up","down","palette","DarkColors","LightColors","createColors","dark","light","primary","secondary","warning","success","tonalOffset","hoverFactor","contrastThreshold","other","getContrastText","threshold","getRichColor","createComponents","shadows","menu","createShadows","createShape","baseBorderRadius","createSpacing","gridSize","transform","spacing","args","argument","output","easing","create","durationOption","easingOption","delay","animatedProp","formatMs","handleMotion","getAutoHeightDuration","constant","milliseconds","createTransitions","defaultFontFamily","defaultFontFamilyMonospace","createTypography","typographyInput","fontFamily","fontFamilyMonospace","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","coef","pxToRem","buildVariant","fontWeight","lineHeight","letterSpacing","casing","round","variants","createV1Theme","oldCommon","basicColors","commonColorsPalette","backgrounds","borders","textColors","form","createVisualizationColors","baseHues","getLightHues","getDarkHues","getClassicPalette","hueOverrides","hues","hueOverride","existingHue","hue","shadeOverride","existingShade","shade","byNameIndex","colorName","realColor","nativeColor","nativeColorNames","zIndex","createTheme","colorsInput","spacingInput","shapeInput","visualizationInput","breakpoints","shape","typography","transitions","visualization","getPlacement","buildTooltipTheme","tooltipBg","toggletipBorder","tooltipText","tooltipPadding","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","isSelected","renderOptionLabel","onMouseMove","onMouseOver","SelectContainer","isDisabled","getSelectContainerStyles","AutoSizeInputContext","RefreshEvent","ThemeChangedEvent","TimeRangeUpdatedEvent","CopyPanelEvent","setAppEvents","getAppEvents","IconButton","limitedIconSize","buttonRef","deprecatedAriaLabel","ariaLabelProp","hoverSize","activeButtonStyle","iconColor","BOUNDARY_ELEMENT_ID","getPositioningMiddleware","flipMiddleware","shiftMiddleware","CodeEditorSuggestionItemKind","dateInUtc","toIANATimezone","grafanaTimezone","getIntlOptions","intlOptions","toTz","getFormat","dateAsDate","dateTimeFormatISO","dateTimeFormatTimeAgo","dateTimeFormatWithAbbrevation","timeZoneAbbrevation","CorsWorker","scriptUrl","scriptsBasePathUrl","importScripts","objectURL","MultiValueContainer","MultiValueRemove","useDelayedSwitch","delayedValue","setDelayedValue","onStartTime","timeout","timeSpent","turnOff","FadeWithImage","tFunc","transComponent","VALID_LANGUAGES","initTFuncAndTransComponent","ns","getI18nInstance","loadNamespacedResources","namespace","loaders","resolvedLanguage","loader","resources","addResourceBundle","initDefaultI18nInstance","initPromise","initDefaultReactI18nInstance","initPluginTranslations","getResolvedLanguage","initTranslations","module","lang","detection","Pseudo","getLanguage","getNamespaces","changeLanguage","validLanguage","initializeI18n","defaultMessage","Trans","ScrollIndicators","showScrollTopIndicator","setShowTopScrollIndicator","showScrollBottomIndicator","setShowBottomScrollIndicator","scrollTopMarker","scrollBottomMarker","intersectionObserver","scrollGradientColor","ScrollContainer","showScrollIndicators","onScroll","overflowX","overflowY","scrollbarWidth","boxProps","FieldType","TIME_SERIES_VALUE_FIELD_NAME","TIME_SERIES_TIME_FIELD_NAME","TIME_SERIES_METRIC_FIELD_NAME","isIconSize","getAvailableIcons","getFieldTypeIcon","field","getFieldTypeIconName"],"sourceRoot":""}
.
Edit
..
Edit
1117.145ac642f59357bc40d8.js
Edit
1117.145ac642f59357bc40d8.js.map
Edit
1118.c684d1aadf16a6c70620.js
Edit
1118.c684d1aadf16a6c70620.js.map
Edit
1122.5fbf0d7cd148c610616d.js
Edit
1122.5fbf0d7cd148c610616d.js.map
Edit
1142.a4b35a0e8699cafd901e.js
Edit
1142.a4b35a0e8699cafd901e.js.map
Edit
1162.81868b3ac499fa5ea04b.js
Edit
1162.81868b3ac499fa5ea04b.js.map
Edit
1183.7444f51e5996a7f23c7d.js
Edit
1183.7444f51e5996a7f23c7d.js.map
Edit
1282.ae38cac1b732d8ac1d96.js
Edit
1282.ae38cac1b732d8ac1d96.js.map
Edit
130.a58aaeea748f37ee6482.js
Edit
130.a58aaeea748f37ee6482.js.map
Edit
1419.59f53ae25085b28e1e11.js
Edit
1419.59f53ae25085b28e1e11.js.map
Edit
1420.e63ce495727f83b8887d.js
Edit
1420.e63ce495727f83b8887d.js.map
Edit
1438.ccdd05d7188edf4191ff.js
Edit
1438.ccdd05d7188edf4191ff.js.map
Edit
1446.fe7b1f4563629b80793f.js
Edit
1446.fe7b1f4563629b80793f.js.map
Edit
1484.3da94e44ecdadcd342d4.js
Edit
1484.3da94e44ecdadcd342d4.js.map
Edit
1492.4026c6e7130c3afdae87.js
Edit
1494.ef220afb67ff6c52c7af.js
Edit
1494.ef220afb67ff6c52c7af.js.map
Edit
1560.538cd2395be11ba4e2c9.js
Edit
1560.538cd2395be11ba4e2c9.js.map
Edit
1579.c391ef869d4f7bfc0d1c.js
Edit
1579.c391ef869d4f7bfc0d1c.js.map
Edit
1646.d7d87a40853795910533.js
Edit
1646.d7d87a40853795910533.js.map
Edit
1710.7db3f56c6714c0c340e0.js
Edit
1710.7db3f56c6714c0c340e0.js.map
Edit
1716.f71f518289da5d2229bc.js
Edit
1716.f71f518289da5d2229bc.js.map
Edit
1740.baf38e7ee007e1a6935e.js
Edit
1740.baf38e7ee007e1a6935e.js.map
Edit
1821.c9a2456dc8d78cf6b02f.js
Edit
1821.c9a2456dc8d78cf6b02f.js.map
Edit
1888.d33142738af4fbf8a230.js
Edit
1888.d33142738af4fbf8a230.js.map
Edit
1914.5f33b3c2133b5bb7ea6e.js
Edit
1914.5f33b3c2133b5bb7ea6e.js.map
Edit
198.65a768ff6c601d19ea3f.js
Edit
198.65a768ff6c601d19ea3f.js.map
Edit
1990.9171129a8deabb59bf30.js
Edit
1990.9171129a8deabb59bf30.js.map
Edit
2018.5ff00ee0456301c1cf43.js
Edit
2018.5ff00ee0456301c1cf43.js.map
Edit
205.2eb73847215c8d021cc9.js
Edit
205.2eb73847215c8d021cc9.js.map
Edit
2077.a5848ca4b4b9fdebca17.js
Edit
2077.a5848ca4b4b9fdebca17.js.map
Edit
2094.97e7f0876201e76a77fd.js
Edit
2094.97e7f0876201e76a77fd.js.map
Edit
2150.7576285186c713978b39.js
Edit
2150.7576285186c713978b39.js.map
Edit
2152.b55841e6f422682a3891.js
Edit
2152.b55841e6f422682a3891.js.map
Edit
221.0fc4d14d0a67f3a25d64.js
Edit
221.0fc4d14d0a67f3a25d64.js.map
Edit
2218.623d73bd0985ddf5f8c4.js
Edit
2218.623d73bd0985ddf5f8c4.js.map
Edit
2223.e65417164a45701ed9dc.js
Edit
2223.e65417164a45701ed9dc.js.map
Edit
2244.70c156ada2487a05595c.js
Edit
2244.70c156ada2487a05595c.js.map
Edit
2278.f887de0a65e1b784ea9f.js
Edit
2278.f887de0a65e1b784ea9f.js.map
Edit
2288.6a65ba08c6c0f4f83435.js
Edit
2288.6a65ba08c6c0f4f83435.js.map
Edit
2311.73e1a2b949d289f5d6c9.js
Edit
2311.73e1a2b949d289f5d6c9.js.map
Edit
2398.d142e32be48079fc63c0.js
Edit
2398.d142e32be48079fc63c0.js.map
Edit
2405.c1b37a7cc8182472f6a6.js
Edit
2405.c1b37a7cc8182472f6a6.js.map
Edit
2446.0418c7ea000998178d8b.js
Edit
2446.0418c7ea000998178d8b.js.map
Edit
2450.d73c024ff7273aebf911.js
Edit
2450.d73c024ff7273aebf911.js.map
Edit
2586.668c65b61e9ea31b5bca.js
Edit
2586.668c65b61e9ea31b5bca.js.map
Edit
265.ed6933785cc750cbd9ed.js
Edit
265.ed6933785cc750cbd9ed.js.map
Edit
2658.7f70ebc378803654a814.js
Edit
2658.7f70ebc378803654a814.js.map
Edit
2686.ae267304ddd1380c30c7.js
Edit
2686.ae267304ddd1380c30c7.js.map
Edit
2692.fa24ada7d987a7ee05f1.js
Edit
2692.fa24ada7d987a7ee05f1.js.map
Edit
2699.b79e57051a1a63376320.js
Edit
2699.b79e57051a1a63376320.js.map
Edit
2710.e1ac8e57578a838f5bd8.js
Edit
2710.e1ac8e57578a838f5bd8.js.map
Edit
2744.d6b14bf01022bdb8eab5.js
Edit
2744.d6b14bf01022bdb8eab5.js.map
Edit
2745.8049d948cb362dfc6cb3.js
Edit
2745.8049d948cb362dfc6cb3.js.map
Edit
2835.01beb5b1a252d779aad7.js
Edit
2835.01beb5b1a252d779aad7.js.map
Edit
2961.4b27b21453fdbb115dd4.js
Edit
2961.4b27b21453fdbb115dd4.js.map
Edit
2962.85c9dc0cca68efab5e0c.js
Edit
2962.85c9dc0cca68efab5e0c.js.map
Edit
2975.e64aaea6ff35a7d3b3fd.js
Edit
2975.e64aaea6ff35a7d3b3fd.js.map
Edit
3003.f51365051eb27cf765d8.js
Edit
3003.f51365051eb27cf765d8.js.map
Edit
3042.44bad7d2d0536000b808.js
Edit
3042.44bad7d2d0536000b808.js.map
Edit
3062.ad5844391370fcc7525a.js
Edit
3062.ad5844391370fcc7525a.js.map
Edit
3082.704af6779ad700a5fa42.js
Edit
3082.704af6779ad700a5fa42.js.map
Edit
3096.aed61083f1ba4803ae84.js
Edit
3096.aed61083f1ba4803ae84.js.map
Edit
3126.10c85e1f02105e470a69.js
Edit
3126.10c85e1f02105e470a69.js.map
Edit
3169.0b88a5a2340f70961599.js
Edit
3169.0b88a5a2340f70961599.js.map
Edit
3171.c79c28e2611563e2dbcb.js
Edit
3171.c79c28e2611563e2dbcb.js.map
Edit
3182.831f754ed3b6f10441a0.js
Edit
3182.831f754ed3b6f10441a0.js.map
Edit
3192.2cb90eadf3399270363e.js
Edit
3192.2cb90eadf3399270363e.js.map
Edit
3217.c6faaa4f5637068f90f3.js
Edit
3217.c6faaa4f5637068f90f3.js.map
Edit
3259.c8e4d6ad93201a56e49f.js
Edit
3259.c8e4d6ad93201a56e49f.js.map
Edit
3284.79c2897655286b0c1f6d.js
Edit
3284.79c2897655286b0c1f6d.js.map
Edit
3303.225dae64cff0c2280c3b.js
Edit
3303.225dae64cff0c2280c3b.js.map
Edit
3326.cabc370d66d7ecfbd2c3.js
Edit
3326.cabc370d66d7ecfbd2c3.js.map
Edit
344.85cff3029cbbb5463c7e.js
Edit
344.85cff3029cbbb5463c7e.js.map
Edit
3466.fda7da0cb4150e59da98.js
Edit
3466.fda7da0cb4150e59da98.js.map
Edit
3474.74dfd856a9528c758a57.js
Edit
3474.74dfd856a9528c758a57.js.map
Edit
348.fd20e2547f12dbed76c7.js
Edit
348.fd20e2547f12dbed76c7.js.map
Edit
3495.9c1ae6f61edf7aef207b.js
Edit
3495.9c1ae6f61edf7aef207b.js.map
Edit
3501.a0ee7c2b24136aa91eb5.js
Edit
3501.a0ee7c2b24136aa91eb5.js.map
Edit
3520.a3c2b474e2dcaf9879fc.js
Edit
3520.a3c2b474e2dcaf9879fc.js.map
Edit
3605.41e3c44dfe2ca2966198.js
Edit
3605.41e3c44dfe2ca2966198.js.map
Edit
362.e5ce68af98ee6713a4e7.js
Edit
362.e5ce68af98ee6713a4e7.js.map
Edit
3622.0b196041f825b42c5233.js
Edit
3622.0b196041f825b42c5233.js.map
Edit
3630.1ffe9229d5c27fd0823a.js
Edit
3630.1ffe9229d5c27fd0823a.js.map
Edit
3659.f5dc1bb19d36546aadb8.js
Edit
3659.f5dc1bb19d36546aadb8.js.map
Edit
3688.ec5e74c60569e9498687.js
Edit
3688.ec5e74c60569e9498687.js.map
Edit
3718.b570aa4fa35f8dfc686e.js
Edit
3718.b570aa4fa35f8dfc686e.js.map
Edit
3726.84ef8bb1304f7adbc7f3.js
Edit
3726.84ef8bb1304f7adbc7f3.js.map
Edit
398.ceeafcf522343c717c4b.js
Edit
398.ceeafcf522343c717c4b.js.map
Edit
4064.e52eb763993ad947e4a1.js
Edit
4064.e52eb763993ad947e4a1.js.map
Edit
407.594046bd73cc88c29e80.js
Edit
407.594046bd73cc88c29e80.js.map
Edit
4113.3fa5432815c4662eb03e.js
Edit
4113.3fa5432815c4662eb03e.js.map
Edit
4114.c4741f0a73781d3f87dc.js
Edit
4114.c4741f0a73781d3f87dc.js.map
Edit
4120.968e1408d894f8515330.js
Edit
4120.968e1408d894f8515330.js.map
Edit
4162.8b8a683fa98d677f9137.js
Edit
4162.8b8a683fa98d677f9137.js.map
Edit
4209.de7f2b850ee1292a67e5.js
Edit
4209.de7f2b850ee1292a67e5.js.map
Edit
4224.cc13db0c6e3f7fdb05c9.js
Edit
4224.cc13db0c6e3f7fdb05c9.js.map
Edit
4251.28e90ad13c8fe749062c.js
Edit
4251.28e90ad13c8fe749062c.js.map
Edit
4334.396d65b7ba31733108e9.js
Edit
4334.396d65b7ba31733108e9.js.map
Edit
4350.6db49924324f8061d361.js
Edit
4350.6db49924324f8061d361.js.map
Edit
4463.24a3e34bed64cbbb8b99.js
Edit
4463.24a3e34bed64cbbb8b99.js.map
Edit
4514.03e966fee9064d7305dd.js
Edit
4514.03e966fee9064d7305dd.js.map
Edit
4564.ea4a09ba96ddbf74a0ee.js
Edit
4564.ea4a09ba96ddbf74a0ee.js.map
Edit
46.7809585ddbb4791e248a.js
Edit
46.7809585ddbb4791e248a.js.map
Edit
4630.54d7f3b9d384c6b95bbc.js
Edit
4630.54d7f3b9d384c6b95bbc.js.map
Edit
4656.a07d832134b096826a58.js
Edit
4656.a07d832134b096826a58.js.map
Edit
468.d3a2ba8b0d226ca1475b.js
Edit
468.d3a2ba8b0d226ca1475b.js.map
Edit
4680.abd86af55b75e75326ab.js
Edit
4680.abd86af55b75e75326ab.js.map
Edit
4691.2f69f76af87a66a1513c.js
Edit
4691.2f69f76af87a66a1513c.js.map
Edit
4698.c9a2c562b12da12dc66e.js
Edit
4698.c9a2c562b12da12dc66e.js.map
Edit
4791.fc3ef0337811ab73b164.js
Edit
4791.fc3ef0337811ab73b164.js.map
Edit
4814.2d8cb562606e508512d8.js
Edit
4814.2d8cb562606e508512d8.js.map
Edit
4824.2da8107f19d58bf153e0.js
Edit
4824.2da8107f19d58bf153e0.js.map
Edit
4839.f4d2edd5c2678ef2b624.js
Edit
4839.f4d2edd5c2678ef2b624.js.map
Edit
4857.4971a98037d2ec3b663d.js
Edit
4857.4971a98037d2ec3b663d.js.map
Edit
4865.be02c1283a83523c4414.js
Edit
4865.be02c1283a83523c4414.js.map
Edit
494.5463fc5a297eaedd150f.js
Edit
494.5463fc5a297eaedd150f.js.map
Edit
4958.226af5f19bf47305a407.js
Edit
4958.226af5f19bf47305a407.js.map
Edit
4962.bbff24c5a85e9314600a.js
Edit
4962.bbff24c5a85e9314600a.js.map
Edit
4964.1f2cc5acc0078feb7b08.js
Edit
4964.1f2cc5acc0078feb7b08.js.map
Edit
4965.ccdc00d808390be53820.js
Edit
4965.ccdc00d808390be53820.js.map
Edit
5065.a2c71dab50ccb4174ee2.js
Edit
5065.a2c71dab50ccb4174ee2.js.map
Edit
5074.92e2d1ae98dcd913506e.js
Edit
5074.92e2d1ae98dcd913506e.js.map
Edit
5091.987ffc33b70121541e5d.js
Edit
5091.987ffc33b70121541e5d.js.map
Edit
5106.581eaf66a6592320d97a.js
Edit
5106.581eaf66a6592320d97a.js.map
Edit
5110.96d49ea826be96c65045.js
Edit
5110.96d49ea826be96c65045.js.map
Edit
5130.cbdddcd716a093bdbaac.js
Edit
5130.cbdddcd716a093bdbaac.js.map
Edit
5196.9b7364caf64a8583ad01.js
Edit
5196.9b7364caf64a8583ad01.js.map
Edit
5198.2cd64d4e16a385dd9b91.js
Edit
5198.2cd64d4e16a385dd9b91.js.map
Edit
5280.2c29942977baa2dfbe0e.js
Edit
5280.2c29942977baa2dfbe0e.js.map
Edit
5364.0288d9c98f74f26b73e7.js
Edit
5364.0288d9c98f74f26b73e7.js.map
Edit
5446.ad01d0b233122dd49849.js
Edit
5446.ad01d0b233122dd49849.js.map
Edit
5550.5bf3e7d23d6b104740fd.js
Edit
5550.5bf3e7d23d6b104740fd.js.map
Edit
5618.909592bbe054b70f2377.js
Edit
5618.909592bbe054b70f2377.js.map
Edit
5648.a1fc2b0cbbca9bfa1d94.js
Edit
5648.a1fc2b0cbbca9bfa1d94.js.map
Edit
5664.c55be32f6d459ac3f3d8.js
Edit
5664.c55be32f6d459ac3f3d8.js.map
Edit
5671.e1e396b75d7b95ef461f.js
Edit
5671.e1e396b75d7b95ef461f.js.map
Edit
5742.117597ec799ab75cb2f4.js
Edit
5742.117597ec799ab75cb2f4.js.map
Edit
5747.b9389680058c12ffba68.js
Edit
5747.b9389680058c12ffba68.js.map
Edit
5757.5a4b7f2368dd09da42be.js
Edit
5786.c45dfaf9e1d969472e5e.js
Edit
5786.c45dfaf9e1d969472e5e.js.map
Edit
5790.29b0a5797fd46e9664f5.js
Edit
5790.29b0a5797fd46e9664f5.js.map
Edit
5923.b9c876b4bf528d8511cb.js
Edit
5923.b9c876b4bf528d8511cb.js.map
Edit
5984.1efdc4bb85100bd19ca9.js
Edit
5984.1efdc4bb85100bd19ca9.js.map
Edit
5995.5c7a375f33ea1cd16daa.js
Edit
5995.5c7a375f33ea1cd16daa.js.map
Edit
6018.befdd11bf701ea71f7bf.js
Edit
6018.befdd11bf701ea71f7bf.js.map
Edit
6029.bdcbf27bcdd36812f646.js
Edit
6029.bdcbf27bcdd36812f646.js.map
Edit
6088.7f526abfdb4003574c68.js
Edit
6088.7f526abfdb4003574c68.js.map
Edit
613.084d33252856771cf6e1.js
Edit
613.084d33252856771cf6e1.js.map
Edit
6185.2a7c893c6b3f2f0dadb8.js
Edit
6185.2a7c893c6b3f2f0dadb8.js.map
Edit
6208.571f272269524cfd14e7.js
Edit
6208.571f272269524cfd14e7.js.map
Edit
6236.30d1fa6aee173c946c50.js
Edit
6236.30d1fa6aee173c946c50.js.map
Edit
6244.64f83fc5d05560979c51.js
Edit
6244.64f83fc5d05560979c51.js.map
Edit
6260.b8be95165766a81dade2.js
Edit
6260.b8be95165766a81dade2.js.map
Edit
630.56b78dcdaeeb9d9c2967.js
Edit
630.56b78dcdaeeb9d9c2967.js.map
Edit
6302.a2ffa52069511df9772f.js
Edit
6302.a2ffa52069511df9772f.js.map
Edit
6315.f4d87fc6f8ae3cb40e38.js
Edit
6315.f4d87fc6f8ae3cb40e38.js.map
Edit
6414.7520859a2d9cc0a63d7f.js
Edit
6414.7520859a2d9cc0a63d7f.js.map
Edit
6446.1d75a8140260005fffbd.js
Edit
6446.1d75a8140260005fffbd.js.map
Edit
6743.67a52a99e2fdd1ae1e10.js
Edit
6743.67a52a99e2fdd1ae1e10.js.map
Edit
6759.0454d3c1e41385379bdc.js
Edit
6759.0454d3c1e41385379bdc.js.map
Edit
6772.0d4a074848bc323be8f8.js
Edit
6772.0d4a074848bc323be8f8.js.map
Edit
680.726adca366b4ecb272db.js
Edit
680.726adca366b4ecb272db.js.map
Edit
6830.a4b0ecf3a6d784ca7609.js
Edit
6830.a4b0ecf3a6d784ca7609.js.map
Edit
6834.0c9ef40e2f2b5428983d.js
Edit
6834.0c9ef40e2f2b5428983d.js.map
Edit
6857.252a60422ee275193aa7.js
Edit
6857.252a60422ee275193aa7.js.map
Edit
6940.b6c74df14413f0188f0d.js
Edit
6940.b6c74df14413f0188f0d.js.map
Edit
6990.d663924714fc213b17c6.js
Edit
6990.d663924714fc213b17c6.js.map
Edit
7018.5a037d2577fedc8d10f1.js
Edit
7018.5a037d2577fedc8d10f1.js.map
Edit
7031.047b15171c23b248efa0.js
Edit
7031.047b15171c23b248efa0.js.map
Edit
7033.141597840e42815ef6a4.js
Edit
7033.141597840e42815ef6a4.js.map
Edit
7048.3746fc9a274bf8ff72f1.js
Edit
7048.3746fc9a274bf8ff72f1.js.map
Edit
7051.604a402d305e093c00c2.js
Edit
7051.604a402d305e093c00c2.js.map
Edit
7061.f18464bcd6c6d7455662.js
Edit
7061.f18464bcd6c6d7455662.js.map
Edit
7080.9cdd1b7a0bf62b48e1fe.js
Edit
7080.9cdd1b7a0bf62b48e1fe.js.map
Edit
7200.d4425528f6cee80f9931.js
Edit
7200.d4425528f6cee80f9931.js.map
Edit
7235.46f071d3e4d0bb976223.js
Edit
7235.46f071d3e4d0bb976223.js.map
Edit
7246.03f5a8496e53f64602e2.js
Edit
7246.03f5a8496e53f64602e2.js.map
Edit
7249.3bea4aaf890f89fdad45.js
Edit
7249.3bea4aaf890f89fdad45.js.map
Edit
7299.cdff402b076dfea09ead.js
Edit
7299.cdff402b076dfea09ead.js.map
Edit
7348.6fd722455e8c7e077815.js
Edit
7348.6fd722455e8c7e077815.js.map
Edit
7396.ded473b7a47dc42fbb59.js
Edit
7396.ded473b7a47dc42fbb59.js.map
Edit
7466.b7c17c526c7b734dd5f7.js
Edit
7466.b7c17c526c7b734dd5f7.js.map
Edit
7539.5f405cae3b15e1e2f6fa.js
Edit
7539.5f405cae3b15e1e2f6fa.js.map
Edit
7585.084552e02c66201a55be.js
Edit
7585.084552e02c66201a55be.js.map
Edit
7626.38819cc0696f2d25cf99.js
Edit
7626.38819cc0696f2d25cf99.js.map
Edit
7651.5024ed8dd1beb08d01ab.js
Edit
7651.5024ed8dd1beb08d01ab.js.map
Edit
7681.7ef7b4f86e99abd7b7e1.js
Edit
7681.7ef7b4f86e99abd7b7e1.js.map
Edit
7691.0ad86f0c686b19ce829e.js
Edit
7691.0ad86f0c686b19ce829e.js.map
Edit
7790.4c141092868e7208a087.js
Edit
7790.4c141092868e7208a087.js.map
Edit
7806.dff3509790e494ca5a45.js
Edit
7806.dff3509790e494ca5a45.js.map
Edit
7836.afe37ef4be354f0a3b91.js
Edit
7836.afe37ef4be354f0a3b91.js.map
Edit
7882.e1721e9d6ac2d421bcda.js
Edit
7882.e1721e9d6ac2d421bcda.js.map
Edit
7886.8499ded396232466be7d.js
Edit
7886.8499ded396232466be7d.js.map
Edit
7887.a6dcfd824d57598ba1c3.js
Edit
7887.a6dcfd824d57598ba1c3.js.map
Edit
7969.a048d8060cabf1aede33.js
Edit
7969.a048d8060cabf1aede33.js.map
Edit
7996.bd232896e4559d37a26f.js
Edit
7996.bd232896e4559d37a26f.js.map
Edit
8016.8145cd87abcdd0646db2.js
Edit
8016.8145cd87abcdd0646db2.js.map
Edit
8018.c31846109f2dff21d8c4.js
Edit
8018.c31846109f2dff21d8c4.js.map
Edit
8056.4e8f71ed4d507f89b487.js
Edit
8056.4e8f71ed4d507f89b487.js.map
Edit
8177.52abd0953ac914f69e26.js
Edit
8177.52abd0953ac914f69e26.js.map
Edit
8220.aeea4a8f0893b3447b56.js
Edit
8220.aeea4a8f0893b3447b56.js.map
Edit
8224.75bd73bf51ff7a2fc4a0.js
Edit
8224.75bd73bf51ff7a2fc4a0.js.map
Edit
8230.d65bce2998eec95c6082.js
Edit
8230.d65bce2998eec95c6082.js.map
Edit
8260.c1da67af19b9259d5651.js
Edit
8260.c1da67af19b9259d5651.js.map
Edit
8271.0ee36e030014244adb47.js
Edit
8271.0ee36e030014244adb47.js.map
Edit
8332.a62e8632a336661f2969.js
Edit
8332.a62e8632a336661f2969.js.map
Edit
8334.1196f5ddcef25711fc25.js
Edit
8334.1196f5ddcef25711fc25.js.map
Edit
8347.de402f9280cd7a316c57.js
Edit
8347.de402f9280cd7a316c57.js.map
Edit
8390.9de755da2e214cc845a3.js
Edit
8390.9de755da2e214cc845a3.js.map
Edit
8393.30e95ae45cbe5455dcda.js
Edit
8393.30e95ae45cbe5455dcda.js.map
Edit
8477.4dad0537d13cf9315e86.js
Edit
8477.4dad0537d13cf9315e86.js.map
Edit
8494.659892f00c9d15ae441a.js
Edit
8494.659892f00c9d15ae441a.js.map
Edit
8530.0460c988ee4a40ce7769.js
Edit
8530.0460c988ee4a40ce7769.js.map
Edit
8542.317c15ed57f68fcf0c97.js
Edit
8542.317c15ed57f68fcf0c97.js.map
Edit
8547.390120a5caf7646e0e3e.js
Edit
8547.390120a5caf7646e0e3e.js.map
Edit
8566.5c8f392bb383ab92eed0.js
Edit
8566.5c8f392bb383ab92eed0.js.map
Edit
8622.5acf73c1485a11dfb0ab.js
Edit
8622.5acf73c1485a11dfb0ab.js.map
Edit
8706.f17afa6bcdfd511d5b03.js
Edit
8706.f17afa6bcdfd511d5b03.js.map
Edit
874.d24410518317d605c708.js
Edit
874.d24410518317d605c708.js.map
Edit
8813.e5137844631f6ddedbce.js
Edit
8813.e5137844631f6ddedbce.js.map
Edit
8856.2720526447b3adb5c75f.js
Edit
8856.2720526447b3adb5c75f.js.map
Edit
886.5f3383e84b10a6530b97.js
Edit
886.5f3383e84b10a6530b97.js.map
Edit
8864.2f4ee982114c25634e55.js
Edit
8864.2f4ee982114c25634e55.js.map
Edit
8902.71f14964ec6cea84dc8e.js
Edit
8902.71f14964ec6cea84dc8e.js.map
Edit
8932.e59e50ddb63414e0f2b9.js
Edit
8932.e59e50ddb63414e0f2b9.js.map
Edit
8990.665213a5c89afd6b2f83.js
Edit
8990.665213a5c89afd6b2f83.js.map
Edit
9034.a32e36472481cbe5d72d.js
Edit
9034.a32e36472481cbe5d72d.js.map
Edit
9038.f03b25f160057d4a0bf6.js
Edit
9038.f03b25f160057d4a0bf6.js.map
Edit
904.b68cd2a0cd6d68c5f1ae.js
Edit
904.b68cd2a0cd6d68c5f1ae.js.map
Edit
9044.441f64d6d946cc93be46.js
Edit
9044.441f64d6d946cc93be46.js.map
Edit
9147.8309cadbc384209d62e5.js
Edit
9147.8309cadbc384209d62e5.js.map
Edit
9150.38487365ffd149b730af.js
Edit
9150.38487365ffd149b730af.js.map
Edit
9292.e6befb57f8f116ad95a8.js
Edit
9292.e6befb57f8f116ad95a8.js.map
Edit
9355.95d7e1782f93f339549e.js
Edit
9355.95d7e1782f93f339549e.js.map
Edit
9388.88d95a230e9432e7037b.js
Edit
9388.88d95a230e9432e7037b.js.map
Edit
9390.c72fcd228017f7647b38.js
Edit
9390.c72fcd228017f7647b38.js.map
Edit
9414.642bfe0d5eb16efd0c16.js
Edit
9414.642bfe0d5eb16efd0c16.js.map
Edit
9449.502f2a824d0203e88d4d.js
Edit
9449.502f2a824d0203e88d4d.js.map
Edit
946.48c5e8c688cf29424295.js
Edit
946.48c5e8c688cf29424295.js.map
Edit
9473.e6fc327da88d88712828.js
Edit
9473.e6fc327da88d88712828.js.map
Edit
9510.1e255e96fe40aad2ed6f.js
Edit
9510.1e255e96fe40aad2ed6f.js.map
Edit
9521.e65411d726c29d77c526.js
Edit
9521.e65411d726c29d77c526.js.map
Edit
9538.a2289ff9ad06e24e391f.js
Edit
9538.a2289ff9ad06e24e391f.js.map
Edit
957.3c35d66aa698d8bdfe05.js
Edit
957.3c35d66aa698d8bdfe05.js.map
Edit
9571.41558d40bff9ea8c0726.js
Edit
9571.41558d40bff9ea8c0726.js.map
Edit
9578.9cfae16465bb9bc1f336.js
Edit
9578.9cfae16465bb9bc1f336.js.map
Edit
968.d4b150f9211c478b7b05.js
Edit
968.d4b150f9211c478b7b05.js.map
Edit
970.46f17b76711e4961a575.js
Edit
970.46f17b76711e4961a575.js.map
Edit
9700.02180b7a06c8a1f7606b.js
Edit
9700.02180b7a06c8a1f7606b.js.map
Edit
9744.aa6baaf988a68fa6a9ba.js
Edit
9744.aa6baaf988a68fa6a9ba.js.map
Edit
9820.6b462d83575efd05c883.js
Edit
9820.6b462d83575efd05c883.js.map
Edit
9838.06bd7dfd4290786f80e3.js
Edit
9838.06bd7dfd4290786f80e3.js.map
Edit
9992.fb08517d3ff77e887443.js
Edit
9992.fb08517d3ff77e887443.js.map
Edit
9996.21c451f22ff76b4bb683.js
Edit
9996.21c451f22ff76b4bb683.js.map
Edit
AdminAuthentication.076c98c6380fd1e42f7e.js
Edit
AdminAuthentication.076c98c6380fd1e42f7e.js.map
Edit
AdminEditOrgPage.8df8167ea6ff8f4803bd.js
Edit
AdminEditOrgPage.8df8167ea6ff8f4803bd.js.map
Edit
AdminListOrgsPage.176dac9ed391bda8952b.js
Edit
AdminListOrgsPage.176dac9ed391bda8952b.js.map
Edit
AdminSettings.7373ed8fa9b943bb2098.js
Edit
AdminSettings.7373ed8fa9b943bb2098.js.map
Edit
AlertGroups.81264e6e5009c36eed6e.js
Edit
AlertGroups.81264e6e5009c36eed6e.js.map
Edit
AlertRuleListIndex.98e7328feeaa2ffe67eb.js
Edit
AlertRuleListIndex.98e7328feeaa2ffe67eb.js.map
Edit
AlertingDisabled.b2c834be0ca4666dd793.js
Edit
AlertingDisabled.b2c834be0ca4666dd793.js.map
Edit
AlertingGroupDetails.3a2c6ef8085b505852e4.js
Edit
AlertingGroupDetails.3a2c6ef8085b505852e4.js.map
Edit
AlertingGroupEdit.69cfe9d5f37a1fc65326.js
Edit
AlertingGroupEdit.69cfe9d5f37a1fc65326.js.map
Edit
AlertingHome.06f307ab9a2a5d8b7f93.js
Edit
AlertingHome.06f307ab9a2a5d8b7f93.js.map
Edit
AlertingImportFromDSRules.f1224bcb622d25e2c94f.js
Edit
AlertingImportFromDSRules.f1224bcb622d25e2c94f.js.map
Edit
AlertingRedirectToRule.9ed1d16829d6833d2827.js
Edit
AlertingRedirectToRule.9ed1d16829d6833d2827.js.map
Edit
AlertingRuleForm.2e69d3f00eb6221e7355.js
Edit
AlertingRuleForm.2e69d3f00eb6221e7355.js.map
Edit
AlertingSettings.7a5f782f877cec4790cb.js
Edit
AlertingSettings.7a5f782f877cec4790cb.js.map
Edit
AlertingTriage.1174f36b4937ad0047c1.js
Edit
AlertingTriage.1174f36b4937ad0047c1.js.map
Edit
BenchmarksPage.ef387f4598ba2b2236ad.js
Edit
BenchmarksPage.ef387f4598ba2b2236ad.js.map
Edit
BookmarksPage.8fe93eb7377073f0c985.js
Edit
BookmarksPage.8fe93eb7377073f0c985.js.map
Edit
ChangePasswordPage.f21b0b1dd107ccd33c1a.js
Edit
ChangePasswordPage.f21b0b1dd107ccd33c1a.js.map
Edit
Connections.949b6389e73bcadb2109.js
Edit
Connections.949b6389e73bcadb2109.js.map
Edit
ContactPoints.9ae2d1927d60c6169b87.js
Edit
ContactPoints.9ae2d1927d60c6169b87.js.map
Edit
CorrelationsFeatureToggle.ec2f1aefce6b456e15eb.js
Edit
CorrelationsFeatureToggle.ec2f1aefce6b456e15eb.js.map
Edit
CorrelationsPage.bd7fcd24ed0b5fe8ac3e.js
Edit
CorrelationsPage.bd7fcd24ed0b5fe8ac3e.js.map
Edit
CreateTeam.429acf93986740280312.js
Edit
CreateTeam.429acf93986740280312.js.map
Edit
DashboardImport.3e9b6f980b81d6f1c755.js
Edit
DashboardImport.3e9b6f980b81d6f1c755.js.map
Edit
DashboardListPage.abeb0c29f072f888f9fb.js
Edit
DashboardListPage.abeb0c29f072f888f9fb.js.map
Edit
DashboardPage.72557fe6dd1a022b7d48.js
Edit
DashboardPage.72557fe6dd1a022b7d48.js.map
Edit
DashboardPageProxy.80adfefad8a885d8e2ef.js
Edit
DashboardPageProxy.80adfefad8a885d8e2ef.js.map
Edit
DashboardScenePage.83fe1fa9509b50120d65.js
Edit
DashboardScenePage.83fe1fa9509b50120d65.js.map
Edit
EditContactPoint.0c33428ddc8ba974d946.js
Edit
EditContactPoint.0c33428ddc8ba974d946.js.map
Edit
EditMuteTiming.8760cc9c77560acf0cd6.js
Edit
EditMuteTiming.8760cc9c77560acf0cd6.js.map
Edit
EditRepositoryPage.d71faaab1af2c8d70a22.js
Edit
EditRepositoryPage.d71faaab1af2c8d70a22.js.map
Edit
EmbeddedDashboard.57de550bce819e3d52e6.js
Edit
EmbeddedDashboard.57de550bce819e3d52e6.js.map
Edit
FileHistoryPage.154ab77c19bbe0ebed20.js
Edit
FileHistoryPage.154ab77c19bbe0ebed20.js.map
Edit
FileStatusPage.36f58cd61202ec603d22.js
Edit
FileStatusPage.36f58cd61202ec603d22.js.map
Edit
FolderAlerting.0b9acb6c42276aaee57d.js
Edit
FolderAlerting.0b9acb6c42276aaee57d.js.map
Edit
FolderLibraryPanelsPage.44f8cabf542ec314d176.js
Edit
FolderLibraryPanelsPage.44f8cabf542ec314d176.js.map
Edit
GettingStartedPage.4bea37f1c9bdcfd0f41b.js
Edit
GettingStartedPage.4bea37f1c9bdcfd0f41b.js.map
Edit
GlobalConfig.1377596507974d18caf6.js
Edit
GlobalConfig.1377596507974d18caf6.js.map
Edit
HistoryPage.4da98f4fa313ee3676ca.js
Edit
HistoryPage.4da98f4fa313ee3676ca.js.map
Edit
LdapSettingsPage.0e9f08d5e59150ecf466.js
Edit
LdapSettingsPage.0e9f08d5e59150ecf466.js.map
Edit
LibraryPanelsPage.824580d7751526c658e2.js
Edit
LibraryPanelsPage.824580d7751526c658e2.js.map
Edit
ListPublicDashboardPage.64c26ffd3ebe6c9076f3.js
Edit
ListPublicDashboardPage.64c26ffd3ebe6c9076f3.js.map
Edit
LoginPage.db48423ed1b455431daa.js
Edit
LoginPage.db48423ed1b455431daa.js.map
Edit
MetricsDrilldownRedirect.fcad4bdff346974952f4.js
Edit
MetricsDrilldownRedirect.fcad4bdff346974952f4.js.map
Edit
MigrateToCloud.5b474ad00e8a3d979750.js
Edit
MigrateToCloud.5b474ad00e8a3d979750.js.map
Edit
NewMuteTiming.2f6302420674f1c73aba.js
Edit
NewMuteTiming.2f6302420674f1c73aba.js.map
Edit
NewOrgPage.be31eaee06e2043d609b.js
Edit
NewOrgPage.be31eaee06e2043d609b.js.map
Edit
NewReceiverView.f1d83eb66a39882b8661.js
Edit
NewReceiverView.f1d83eb66a39882b8661.js.map
Edit
NewSilencePage.2643a48031f7e5d8f376.js
Edit
NewSilencePage.2643a48031f7e5d8f376.js.map
Edit
NotificationPoliciesPage.9333d10ecad1452ebf27.js
Edit
NotificationPoliciesPage.9333d10ecad1452ebf27.js.map
Edit
NotificationsPage.57df4ff5ba1433a4345d.js
Edit
NotificationsPage.57df4ff5ba1433a4345d.js.map
Edit
OrgDetailsPage.7b5835c30585aae81343.js
Edit
OrgDetailsPage.7b5835c30585aae81343.js.map
Edit
PlaylistEditPage.8310e384af659e40c313.js
Edit
PlaylistEditPage.8310e384af659e40c313.js.map
Edit
PlaylistNewPage.f45b642a98a747e28c0d.js
Edit
PlaylistNewPage.f45b642a98a747e28c0d.js.map
Edit
PlaylistPage.9af74957a1cdfb125338.js
Edit
PlaylistPage.9af74957a1cdfb125338.js.map
Edit
PlaylistStartPage.8011a98267ac64c7fa05.js
Edit
PlaylistStartPage.8011a98267ac64c7fa05.js.map
Edit
PluginExtensionsLog.54c02047d569b0c05823.js
Edit
PluginExtensionsLog.54c02047d569b0c05823.js.map
Edit
PluginListPage.e50c18fed21c23ca4ee8.js
Edit
PluginListPage.e50c18fed21c23ca4ee8.js.map
Edit
PluginPage.ae424531bce63dd4721e.js
Edit
PluginPage.ae424531bce63dd4721e.js.map
Edit
ProfileFeatureTogglePage.27378dcbb7520611348e.js
Edit
ProfileFeatureTogglePage.27378dcbb7520611348e.js.map
Edit
ProvisioningWizardPage.c4e4a8f431b4719b0e95.js
Edit
ProvisioningWizardPage.c4e4a8f431b4719b0e95.js.map
Edit
PublicDashboardPage.33d6ec8f685f1b70b9a6.js
Edit
PublicDashboardPage.33d6ec8f685f1b70b9a6.js.map
Edit
RecentlyDeleted.5e0ec16474d939fd9683.js
Edit
RecentlyDeleted.5e0ec16474d939fd9683.js.map
Edit
RecentlyDeletedPage.1dbc2b80b28204de8237.js
Edit
RecentlyDeletedPage.1dbc2b80b28204de8237.js.map
Edit
RepositoryListPage.ec3a0af1cbe2740800bf.js
Edit
RepositoryListPage.ec3a0af1cbe2740800bf.js.map
Edit
RepositoryStatusPage.9aee60589e35a4a19ec2.js
Edit
RepositoryStatusPage.9aee60589e35a4a19ec2.js.map
Edit
SelectOrgPage.910a8d842019a6d7fe93.js
Edit
SelectOrgPage.910a8d842019a6d7fe93.js.map
Edit
SendResetMailPage.513361d6980f98ff8139.js
Edit
SendResetMailPage.513361d6980f98ff8139.js.map
Edit
ServerStats.2830ca154f465dbdecea.js
Edit
ServerStats.2830ca154f465dbdecea.js.map
Edit
ServiceAccountCreatePage.80fcbdd2b7f5aa4e2da1.js
Edit
ServiceAccountCreatePage.80fcbdd2b7f5aa4e2da1.js.map
Edit
ServiceAccountPage.48944056459bb412ff33.js
Edit
ServiceAccountPage.48944056459bb412ff33.js.map
Edit
ServiceAccountsPage.d20b1eb9f87661f10b45.js
Edit
ServiceAccountsPage.d20b1eb9f87661f10b45.js.map
Edit
SignupInvited.fe2c29f380e9888c28cf.js
Edit
SignupInvited.fe2c29f380e9888c28cf.js.map
Edit
SilencesTablePage.b998fdbdcc3d60a81739.js
Edit
SilencesTablePage.b998fdbdcc3d60a81739.js.map
Edit
SnapshotListPage.6feaf24adb92e6a302ec.js
Edit
SnapshotListPage.6feaf24adb92e6a302ec.js.map
Edit
SoloPanelPage.7fc6a934aaadf4c1f84d.js
Edit
SoloPanelPage.7fc6a934aaadf4c1f84d.js.map
Edit
SoloPanelPageOld.bde57e000dd0a0108685.js
Edit
SoloPanelPageOld.bde57e000dd0a0108685.js.map
Edit
SupportBundles.1f46603ad3494624d67a.js
Edit
SupportBundles.1f46603ad3494624d67a.js.map
Edit
SupportBundlesCreate.5eaea61a9713f057277b.js
Edit
SupportBundlesCreate.5eaea61a9713f057277b.js.map
Edit
TeamList.6b088f83e6e8cb66b21d.js
Edit
TeamList.6b088f83e6e8cb66b21d.js.map
Edit
TeamPages.9d8b5dceef8be43c6923.js
Edit
TeamPages.9d8b5dceef8be43c6923.js.map
Edit
Templates.7a02a8497ebca052dcfb.js
Edit
Templates.7a02a8497ebca052dcfb.js.map
Edit
TestStuffPage.982c641592b2f7c9db40.js
Edit
TestStuffPage.982c641592b2f7c9db40.js.map
Edit
ThemePlayground.aeeec77fd8e9c1482f55.js
Edit
ThemePlayground.aeeec77fd8e9c1482f55.js.map
Edit
UserAdminPage.fc4d562eef05d9f59aca.js
Edit
UserAdminPage.fc4d562eef05d9f59aca.js.map
Edit
UserCreatePage.b7036214c66612fb31e9.js
Edit
UserCreatePage.b7036214c66612fb31e9.js.map
Edit
UserInvitePage.4a9bcd4084d7ae454c73.js
Edit
UserInvitePage.4a9bcd4084d7ae454c73.js.map
Edit
UserListPage.a452e1153ae820f58ac9.js
Edit
UserListPage.a452e1153ae820f58ac9.js.map
Edit
UserProfileEditPage.82c11690282e669eabb1.js
Edit
UserProfileEditPage.82c11690282e669eabb1.js.map
Edit
alert-rules-drawer-content.c95bb5ddd3fc813cae92.js
Edit
alert-rules-drawer-content.c95bb5ddd3fc813cae92.js.map
Edit
alert-rules-toolbar-button.0d86c1adae7edb55ff76.js
Edit
alert-rules-toolbar-button.0d86c1adae7edb55ff76.js.map
Edit
alertListPanel.0110106a8d1ab70d65d5.js
Edit
alertListPanel.0110106a8d1ab70d65d5.js.map
Edit
alertmanagerPlugin.2b59de5e7b7a556f87f1.js
Edit
alertmanagerPlugin.2b59de5e7b7a556f87f1.js.map
Edit
annoListPanel.0005a0eab0b05e24d970.js
Edit
annoListPanel.0005a0eab0b05e24d970.js.map
Edit
app.8385deda1df49aa75ec2.js
Edit
app.8385deda1df49aa75ec2.js.map
Edit
assets-manifest.json
Edit
barChartPanel.eecdaeab7d146d477721.js
Edit
barChartPanel.eecdaeab7d146d477721.js.map
Edit
barGaugePanel.6d9e94bbb72ba92a0e9b.js
Edit
barGaugePanel.6d9e94bbb72ba92a0e9b.js.map
Edit
candlestickPanel.af0e0decd06e7b7ab286.js
Edit
candlestickPanel.af0e0decd06e7b7ab286.js.map
Edit
canvasPanel.ddab72fab6e58c3419b2.js
Edit
canvasPanel.ddab72fab6e58c3419b2.js.map
Edit
cloudwatchPlugin.06ef34f60000c4f7ea37.js
Edit
cloudwatchPlugin.06ef34f60000c4f7ea37.js.map
Edit
dark.b66fa87185b9a313ec14.js
Edit
dashListPanel.23b954da0c4888602048.js
Edit
dashListPanel.23b954da0c4888602048.js.map
Edit
dataGridPanel.bb5d4b678cba38dd380b.js
Edit
debugPanel.fff63da32084d7a2e236.js
Edit
debugPanel.fff63da32084d7a2e236.js.map
Edit
elasticsearchPlugin.3f2edb012f5162b48903.js
Edit
elasticsearchPlugin.3f2edb012f5162b48903.js.map
Edit
explore-feature-toggle-page.3de03fa91c88d05cea1c.js
Edit
explore-feature-toggle-page.3de03fa91c88d05cea1c.js.map
Edit
explore.dd32637df83326225e0d.js
Edit
explore.dd32637df83326225e0d.js.map
Edit
flamegraphPanel.cc6c5b4bcd69e406fbb7.js
Edit
flamegraphPanel.cc6c5b4bcd69e406fbb7.js.map
Edit
gaugePanel.5da3c4e39a652e281cc4.js
Edit
gaugePanel.5da3c4e39a652e281cc4.js.map
Edit
gazetteer
Edit
geomapPanel.67ebb4567e9b5fa5074b.js
Edit
gettingStartedPanel.833059170dbbf8d5c4bf.js
Edit
gettingStartedPanel.833059170dbbf8d5c4bf.js.map
Edit
grafana.1492.25120d27db88f863e058.css
Edit
grafana.4350.a45e45977094df4a0bc9.css
Edit
grafana.5790.ffb3a9cd952d3cd7471b.css
Edit
grafana.DashboardPage.a66335f88cd003e4a44f.css
Edit
grafana.DashboardPageProxy.a66335f88cd003e4a44f.css
Edit
grafana.app.1f6473bb54b1e1647be8.css
Edit
grafana.dark.1e8d85816912aadbbba5.css
Edit
grafana.dataGridPanel.c1fc5db1829b1b31eb4d.css
Edit
grafana.geomapPanel.0057d964fa972bb207ec.css
Edit
grafana.light.111a5a99fcebc0962ddc.css
Edit
grafana.livePanel.25120d27db88f863e058.css
Edit
grafana.react-monaco-editor.ffb3a9cd952d3cd7471b.css
Edit
grafana.swagger.d0a2da197b9827204ac1.css
Edit
grafana.tablePanel.25120d27db88f863e058.css
Edit
grafanaPlugin.f21cdb4b84a732cc9dd8.js
Edit
grafanaPlugin.f21cdb4b84a732cc9dd8.js.map
Edit
heatmapPanel.7834b997bc573eddba88.js
Edit
heatmapPanel.7834b997bc573eddba88.js.map
Edit
histogramPanel.9953bfeccf8774500c0c.js
Edit
histogramPanel.9953bfeccf8774500c0c.js.map
Edit
img
Edit
influxdbPlugin.7a899e63be0a65d41e13.js
Edit
influxdbPlugin.7a899e63be0a65d41e13.js.map
Edit
light.827d442410485e491818.js
Edit
livePanel.2a43f499bc746d928d45.js
Edit
livePanel.2a43f499bc746d928d45.js.map
Edit
logsPanel.a328022d248508a083c1.js
Edit
logsPanel.a328022d248508a083c1.js.map
Edit
loki-query-field.f9a0b82b636d4821760c.js
Edit
loki-query-field.f9a0b82b636d4821760c.js.map
Edit
maps
Edit
mixedPlugin.3a69de93f366afbb2f85.js
Edit
newsPanel.c17f40f7c88ea14620e7.js
Edit
newsPanel.c17f40f7c88ea14620e7.js.map
Edit
nodeGraphPanel.f717a9075d994a9a8af4.js
Edit
nodeGraphPanel.f717a9075d994a9a8af4.js.map
Edit
opentsdbPlugin.1795eab1c223ea030c2e.js
Edit
opentsdbPlugin.1795eab1c223ea030c2e.js.map
Edit
pieChartPanel.45166aa6d57d163817ea.js
Edit
pieChartPanel.45166aa6d57d163817ea.js.map
Edit
prometheusPlugin.c3a55eb5353085fc3d2b.js
Edit
prometheusPlugin.c3a55eb5353085fc3d2b.js.map
Edit
radialBarPanel.294c52d497d8f5c2bebb.js
Edit
radialBarPanel.294c52d497d8f5c2bebb.js.map
Edit
runtime.a37cc2f12a959f33871a.js
Edit
runtime.a37cc2f12a959f33871a.js.map
Edit
sql-query-editor.e767d4a2aef360034bd9.js
Edit
sql-query-editor.e767d4a2aef360034bd9.js.map
Edit
statPanel.3a7f191bfb27fd320014.js
Edit
statPanel.3a7f191bfb27fd320014.js.map
Edit
stateTimelinePanel.08d857b143ef89dc195f.js
Edit
stateTimelinePanel.08d857b143ef89dc195f.js.map
Edit
static
Edit
statusHistoryPanel.29f7b8dc01039ba795af.js
Edit
statusHistoryPanel.29f7b8dc01039ba795af.js.map
Edit
swagger.06875a6266679f54141d.js
Edit
swagger.06875a6266679f54141d.js.map
Edit
tablePanel.43861ce2a60617dcd19d.js
Edit
tablePanel.43861ce2a60617dcd19d.js.map
Edit
textPanel.867ee60d01b2039aa159.js
Edit
textPanel.867ee60d01b2039aa159.js.map
Edit
timeseriesPanel.b4a947da450030262a31.js
Edit
timeseriesPanel.b4a947da450030262a31.js.map
Edit
tracesPanel.35bfc3e5ff6bea4212a3.js
Edit
tracesPanel.35bfc3e5ff6bea4212a3.js.map
Edit
trendPanel.001aff2bd153e737c464.js
Edit
trendPanel.001aff2bd153e737c464.js.map
Edit
vis-data.b34535ebabc0fcb91557.js
Edit
vis-data.b34535ebabc0fcb91557.js.map
Edit
vis-network.1b41caf21892c9525709.js
Edit
vis-network.1b41caf21892c9525709.js.map
Edit
welcomeBanner.1a693c9dc02006be4f0b.js
Edit
welcomeBanner.1a693c9dc02006be4f0b.js.map
Edit
xychart.cb20af67a6c495ba6ccd.js
Edit
xychart.cb20af67a6c495ba6ccd.js.map
Edit