/usr/share/grafana/public/app/plugins/datasource/jaeger/dist
{"version":3,"file":"module.js","mappings":"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","sources":["webpack://jaeger/external amd \"@grafana/ui\"","webpack://jaeger/../../../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://jaeger/external amd \"rxjs/operators\"","webpack://jaeger/external amd \"@emotion/css\"","webpack://jaeger/external amd \"rxjs\"","webpack://jaeger/external amd \"module\"","webpack://jaeger/external amd \"@grafana/runtime\"","webpack://jaeger/../../../../../node_modules/react/jsx-runtime.js","webpack://jaeger/external amd \"@grafana/data\"","webpack://jaeger/external amd \"react\"","webpack://jaeger/webpack/bootstrap","webpack://jaeger/webpack/runtime/compat get default export","webpack://jaeger/webpack/runtime/define property getters","webpack://jaeger/webpack/runtime/hasOwnProperty shorthand","webpack://jaeger/webpack/runtime/make namespace object","webpack://jaeger/webpack/runtime/publicPath","webpack://jaeger/./node_modules/grafana-public-path.js","webpack://jaeger/./CheatSheet.tsx","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/TemporaryAlert.tsx","webpack://jaeger/./components/SearchForm.tsx","webpack://jaeger/./components/QueryEditor.tsx","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js","webpack://jaeger/../../../../../node_modules/react-use/esm/useDebounce.js","webpack://jaeger/../../../../../node_modules/react-use/esm/useTimeoutFn.js","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToLogs/TagMappingInput.tsx","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.tsx","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToMetrics/TraceToMetricsSettings.tsx","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/NodeGraph/NodeGraphSettings.tsx","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/SpanBar/SpanBarSettings.tsx","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/DataSourceDescription.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/styles.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/types.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/Auth.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/utils.js","webpack://jaeger/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js","webpack://jaeger/./configuration/TraceIdTimeParams.tsx","webpack://jaeger/./configuration/ConfigEditor.tsx","webpack://jaeger/../../../../../packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.ts","webpack://jaeger/./graphTransform.ts","webpack://jaeger/./responseTransform.ts","webpack://jaeger/./datasource.ts","webpack://jaeger/./module.ts"],"sourcesContent":["module.exports = __WEBPACK_EXTERNAL_MODULE__7__;","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__59__;","module.exports = __WEBPACK_EXTERNAL_MODULE__89__;","module.exports = __WEBPACK_EXTERNAL_MODULE__269__;","module.exports = __WEBPACK_EXTERNAL_MODULE__308__;","module.exports = __WEBPACK_EXTERNAL_MODULE__531__;","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__781__;","module.exports = __WEBPACK_EXTERNAL_MODULE__959__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"public/plugins/jaeger/\";","\n import amdMetaModule from 'amd-module';\n\n __webpack_public_path__ =\n amdMetaModule && amdMetaModule.uri\n ? amdMetaModule.uri.slice(0, amdMetaModule.uri.lastIndexOf('/') + 1)\n : 'public/plugins/jaeger/';\n ","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { TextLink, useStyles2 } from '@grafana/ui';\n\nexport default function CheatSheet() {\n const styles = useStyles2(getStyles);\n return (\n <>\n <h2 id=\"jaeger-cheat-sheet\">Jaeger Cheat Sheet</h2>\n <p>\n This cheat sheet provides a quick overview of the query types that are available. For more details about the\n Jaeger data source, check out{' '}\n <TextLink href=\"https://grafana.com/docs/grafana/latest/datasources/jaeger\" external>\n the documentation\n </TextLink>\n .\n </p>\n\n <hr />\n <ul className={styles.unorderedList}>\n <li>\n Search - filter traces by service name. Addtionally, you can filter by tags or min/max duration, as well as\n limit the number of traces that are returned.\n </li>\n <li>TraceID - if you have a trace ID, simply enter the trace ID to see the trace.</li>\n <li>\n JSON File - you can upload a JSON file that contains a single trace to visualize it. If the file has multiple\n traces then the first trace is used for visualization. An example of a valid JSON file can be found in{' '}\n <TextLink href=\"https://grafana.com/docs/grafana/latest/datasources/jaeger/#upload-json-trace-file\" external>\n this section\n </TextLink>{' '}\n of the documentation.\n </li>\n </ul>\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n unorderedList: css({\n listStyleType: 'none',\n }),\n});\n","import { css } from '@emotion/css';\nimport { useEffect, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Alert, AlertVariant, useTheme2 } from '@grafana/ui';\n\nenum AlertTimeout {\n Error = 7000,\n Info = 3000,\n Success = 3000,\n Warning = 5000,\n}\n\nconst getStyle = (theme: GrafanaTheme2) => {\n return css({\n position: 'absolute',\n zIndex: theme.zIndex.portal,\n top: 0,\n right: 10,\n });\n};\n\nconst timeoutMap = {\n ['error']: AlertTimeout.Error,\n ['info']: AlertTimeout.Info,\n ['success']: AlertTimeout.Success,\n ['warning']: AlertTimeout.Warning,\n};\n\ntype AlertProps = {\n // Severity of the alert. Controls the style of the alert (e.g., background color)\n severity: AlertVariant;\n // Displayed message. If set to empty string, the alert is not displayed\n text: string;\n};\n\nexport const TemporaryAlert = (props: AlertProps) => {\n const style = getStyle(useTheme2());\n const [visible, setVisible] = useState(false);\n const [timer, setTimer] = useState<NodeJS.Timeout>();\n\n useEffect(() => {\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [timer]);\n\n useEffect(() => {\n if (props.text !== '') {\n setVisible(true);\n\n const timer = setTimeout(() => {\n setVisible(false);\n }, timeoutMap[props.severity]);\n setTimer(timer);\n }\n }, [props.severity, props.text]);\n\n return (\n <>\n {visible && (\n <Alert\n className={style}\n elevated={true}\n onRemove={() => setVisible(false)}\n severity={props.severity}\n title={props.text}\n />\n )}\n </>\n );\n};\n","import { css } from '@emotion/css';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { TemporaryAlert } from '@grafana/o11y-ds-frontend';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { fuzzyMatch, InlineField, InlineFieldRow, Input, Select } from '@grafana/ui';\n\nimport { JaegerDatasource } from '../datasource';\nimport { JaegerQuery } from '../types';\n\nconst durationPlaceholder = 'e.g. 1.2s, 100ms, 500us';\n\ntype Props = {\n datasource: JaegerDatasource;\n query: JaegerQuery;\n onChange: (value: JaegerQuery) => void;\n};\n\nexport const ALL_OPERATIONS_KEY = 'All';\nconst allOperationsOption: SelectableValue<string> = {\n label: ALL_OPERATIONS_KEY,\n value: undefined,\n};\n\nexport function SearchForm({ datasource, query, onChange }: Props) {\n const [alertText, setAlertText] = useState('');\n const [serviceOptions, setServiceOptions] = useState<Array<SelectableValue<string>>>();\n const [operationOptions, setOperationOptions] = useState<Array<SelectableValue<string>>>();\n const [isLoading, setIsLoading] = useState<{\n services: boolean;\n operations: boolean;\n }>({\n services: false,\n operations: false,\n });\n\n const loadOptions = useCallback(\n async (url: string, loaderOfType: string, query = ''): Promise<Array<SelectableValue<string>>> => {\n setIsLoading((prevValue) => ({ ...prevValue, [loaderOfType]: true }));\n\n try {\n const values: string[] | null = await datasource.metadataRequest(url);\n if (!values) {\n return [{ label: `No ${loaderOfType} found`, value: `No ${loaderOfType} found` }];\n }\n\n const options: SelectableValue[] = values.sort().map((option) => ({\n label: option,\n value: option,\n }));\n\n const filteredOptions = options.filter((item) => (item.value ? fuzzyMatch(item.value, query).found : false));\n setAlertText('');\n return filteredOptions;\n } catch (error) {\n if (error instanceof Error) {\n setAlertText(`Error: ${error.message}`);\n }\n return [];\n } finally {\n setIsLoading((prevValue) => ({ ...prevValue, [loaderOfType]: false }));\n }\n },\n [datasource]\n );\n\n useEffect(() => {\n const getServices = async () => {\n const services = await loadOptions('services', 'services');\n if (query.service && getTemplateSrv().containsTemplate(query.service)) {\n services.push(toOption(query.service));\n }\n setServiceOptions(services);\n };\n getServices();\n }, [datasource, loadOptions, query.service]);\n\n useEffect(() => {\n const getOperations = async () => {\n const operations = await loadOptions(\n `services/${encodeURIComponent(getTemplateSrv().replace(query.service!))}/operations`,\n 'operations'\n );\n if (query.operation && getTemplateSrv().containsTemplate(query.operation)) {\n operations.push(toOption(query.operation));\n }\n setOperationOptions([allOperationsOption, ...operations]);\n };\n if (query.service) {\n getOperations();\n }\n }, [datasource, query.service, loadOptions, query.operation]);\n\n return (\n <>\n <div className={css({ maxWidth: '500px' })}>\n <InlineFieldRow>\n <InlineField label=\"Service Name\" labelWidth={14} grow>\n <Select\n inputId=\"service\"\n options={serviceOptions}\n onOpenMenu={() => loadOptions('services', 'services')}\n isLoading={isLoading.services}\n value={serviceOptions?.find((v) => v?.value === query.service) || undefined}\n placeholder=\"Select a service\"\n onChange={(v) =>\n onChange({\n ...query,\n service: v?.value!,\n operation: query.service !== v?.value ? undefined : query.operation,\n })\n }\n menuPlacement=\"bottom\"\n isClearable\n aria-label={'select-service-name'}\n allowCustomValue={true}\n />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <InlineField label=\"Operation Name\" labelWidth={14} grow disabled={!query.service}>\n <Select\n inputId=\"operation\"\n options={operationOptions}\n onOpenMenu={() =>\n loadOptions(\n `services/${encodeURIComponent(getTemplateSrv().replace(query.service!))}/operations`,\n 'operations'\n )\n }\n isLoading={isLoading.operations}\n value={operationOptions?.find((v) => v.value === query.operation) || null}\n placeholder=\"Select an operation\"\n onChange={(v) =>\n onChange({\n ...query,\n operation: v?.value! || undefined,\n })\n }\n menuPlacement=\"bottom\"\n isClearable\n aria-label={'select-operation-name'}\n allowCustomValue={true}\n />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <InlineField label=\"Tags\" labelWidth={14} grow tooltip=\"Values should be in logfmt.\">\n <Input\n id=\"tags\"\n value={query.tags}\n placeholder=\"http.status_code=200 error=true\"\n onChange={(v) =>\n onChange({\n ...query,\n tags: v.currentTarget.value,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <InlineField label=\"Min Duration\" labelWidth={14} grow>\n <Input\n id=\"minDuration\"\n name=\"minDuration\"\n value={query.minDuration || ''}\n placeholder={durationPlaceholder}\n onChange={(v) =>\n onChange({\n ...query,\n minDuration: v.currentTarget.value,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <InlineField label=\"Max Duration\" labelWidth={14} grow>\n <Input\n id=\"maxDuration\"\n name=\"maxDuration\"\n value={query.maxDuration || ''}\n placeholder={durationPlaceholder}\n onChange={(v) =>\n onChange({\n ...query,\n maxDuration: v.currentTarget.value,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <InlineField label=\"Limit\" labelWidth={14} grow tooltip=\"Maximum number of returned results\">\n <Input\n id=\"limit\"\n name=\"limit\"\n value={query.limit || ''}\n type=\"number\"\n onChange={(v) =>\n onChange({\n ...query,\n limit: v.currentTarget.value ? parseInt(v.currentTarget.value, 10) : undefined,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n </div>\n {alertText && <TemporaryAlert text={alertText} severity=\"error\" />}\n </>\n );\n}\n\nexport default SearchForm;\n","import { css } from '@emotion/css';\nimport { useState } from 'react';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport {\n Button,\n FileDropzone,\n InlineField,\n InlineFieldRow,\n Stack,\n Modal,\n QueryField,\n RadioButtonGroup,\n useStyles2,\n useTheme2,\n} from '@grafana/ui';\n\nimport { JaegerDatasource } from '../datasource';\nimport { JaegerQuery, JaegerQueryType } from '../types';\n\nimport { SearchForm } from './SearchForm';\n\ntype Props = QueryEditorProps<JaegerDatasource, JaegerQuery>;\n\nexport function QueryEditor({ datasource, query, onChange, onRunQuery }: Props) {\n const [uploadModalOpen, setUploadModalOpen] = useState(false);\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n const onChangeQuery = (value: string) => {\n const nextQuery: JaegerQuery = { ...query, query: value };\n onChange(nextQuery);\n };\n\n const renderEditorBody = () => {\n switch (query.queryType) {\n case 'search':\n return <SearchForm datasource={datasource} query={query} onChange={onChange} />;\n case 'dependencyGraph':\n return null;\n default:\n return (\n <InlineFieldRow>\n <InlineField label=\"Trace ID\" labelWidth={14} grow>\n <QueryField\n query={query.query}\n onChange={onChangeQuery}\n onRunQuery={onRunQuery}\n placeholder={'Enter a Trace ID (run with Shift+Enter)'}\n portalOrigin=\"jaeger\"\n />\n </InlineField>\n </InlineFieldRow>\n );\n }\n };\n\n return (\n <>\n <Modal title={'Upload trace'} isOpen={uploadModalOpen} onDismiss={() => setUploadModalOpen(false)}>\n <div className={css({ padding: theme.spacing(2) })}>\n <FileDropzone\n options={{ multiple: false }}\n onLoad={(result) => {\n datasource.uploadedJson = result;\n onChange({\n ...query,\n queryType: 'upload',\n });\n setUploadModalOpen(false);\n onRunQuery();\n }}\n />\n </div>\n </Modal>\n <div className={styles.container}>\n <InlineFieldRow>\n <InlineField label=\"Query type\" grow={true}>\n <Stack gap={1} alignItems=\"center\" justifyContent=\"space-between\">\n <RadioButtonGroup<JaegerQueryType>\n options={[\n { value: 'search', label: 'Search' },\n { value: undefined, label: 'TraceID' },\n { value: 'dependencyGraph', label: 'Dependency graph' },\n ]}\n value={query.queryType}\n onChange={(v) =>\n onChange({\n ...query,\n queryType: v,\n })\n }\n size=\"md\"\n />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setUploadModalOpen(true);\n }}\n >\n Import trace\n </Button>\n </Stack>\n </InlineField>\n </InlineFieldRow>\n {renderEditorBody()}\n </div>\n </>\n );\n}\n\nconst getStyles = () => ({\n container: css({\n width: '100%',\n }),\n});\n","import React__default, { useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, IconButton } from '@grafana/ui';\n\nconst GenericConfigSection = ({\n children,\n title,\n description,\n isCollapsible = false,\n isInitiallyOpen = true,\n kind = \"section\",\n className\n}) => {\n const { colors, typography, spacing } = useTheme2();\n const [isOpen, setIsOpen] = useState(isCollapsible ? isInitiallyOpen : true);\n const iconName = isOpen ? \"angle-up\" : \"angle-down\";\n const isSubSection = kind === \"sub-section\";\n const collapsibleButtonAriaLabel = `${isOpen ? \"Collapse\" : \"Expand\"} section ${title}`;\n const styles = {\n header: css({\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n }),\n title: css({\n margin: 0\n }),\n subtitle: css({\n margin: 0,\n fontWeight: typography.fontWeightRegular\n }),\n descriptionText: css({\n marginTop: spacing(isSubSection ? 0.25 : 0.5),\n marginBottom: 0,\n ...typography.bodySmall,\n color: colors.text.secondary\n }),\n content: css({\n marginTop: spacing(2)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.header }, kind === \"section\" ? /* @__PURE__ */ React__default.createElement(\"h3\", { className: styles.title }, title) : /* @__PURE__ */ React__default.createElement(\"h6\", { className: styles.subtitle }, title), isCollapsible && /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: iconName,\n onClick: () => setIsOpen(!isOpen),\n type: \"button\",\n size: \"xl\",\n \"aria-label\": collapsibleButtonAriaLabel\n }\n )), description && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.descriptionText }, description), isOpen && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { GenericConfigSection };\n//# sourceMappingURL=GenericConfigSection.js.map\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"section\" }, children);\n};\n\nexport { ConfigSection };\n//# sourceMappingURL=ConfigSection.js.map\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nfunction ConfigDescriptionLink(props) {\n const { description, suffix, feature } = props;\n const text = `Learn more about ${feature}`;\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"span\", { className: styles.container }, description, /* @__PURE__ */ React__default.createElement(\n \"a\",\n {\n \"aria-label\": text,\n href: `https://grafana.com/docs/grafana/next/datasources/${suffix}`,\n rel: \"noreferrer\",\n target: \"_blank\"\n },\n text\n ));\n}\nconst getStyles = (theme) => {\n return {\n container: css({\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n marginLeft: \"5px\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n};\n\nexport { ConfigDescriptionLink };\n//# sourceMappingURL=ConfigDescriptionLink.js.map\n","import { useEffect } from 'react';\nimport useTimeoutFn from './useTimeoutFn';\nexport default function useDebounce(fn, ms, deps) {\n if (ms === void 0) { ms = 0; }\n if (deps === void 0) { deps = []; }\n var _a = useTimeoutFn(fn, ms), isReady = _a[0], cancel = _a[1], reset = _a[2];\n useEffect(reset, deps);\n return [isReady, cancel];\n}\n","import { useCallback, useEffect, useRef } from 'react';\nexport default function useTimeoutFn(fn, ms) {\n if (ms === void 0) { ms = 0; }\n var ready = useRef(false);\n var timeout = useRef();\n var callback = useRef(fn);\n var isReady = useCallback(function () { return ready.current; }, []);\n var set = useCallback(function () {\n ready.current = false;\n timeout.current && clearTimeout(timeout.current);\n timeout.current = setTimeout(function () {\n ready.current = true;\n callback.current();\n }, ms);\n }, [ms]);\n var clear = useCallback(function () {\n ready.current = null;\n timeout.current && clearTimeout(timeout.current);\n }, []);\n // update ref when function changes\n useEffect(function () {\n callback.current = fn;\n }, [fn]);\n // set on mount, clear on unmount\n useEffect(function () {\n set();\n return clear;\n }, [ms]);\n return [isReady, clear, set];\n}\n","export const validateIntervalRegex = /^(-?\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])$/;\n\nexport const validateInterval = (val: string, regex = validateIntervalRegex) => {\n const matches = val.match(regex);\n return matches || !val ? false : true;\n};\n","import { useState } from 'react';\nimport { useDebounce } from 'react-use';\n\nimport { InlineField, Input } from '@grafana/ui';\n\nimport { validateInterval } from './validation';\n\ninterface Props {\n value: string;\n onChange: (val: string) => void;\n isInvalidError: string;\n placeholder?: string;\n width?: number;\n ariaLabel?: string;\n label?: string;\n tooltip?: string;\n disabled?: boolean;\n validationRegex?: RegExp;\n}\n\ninterface FieldProps {\n labelWidth: number;\n disabled: boolean;\n invalid: boolean;\n error: string;\n label?: string;\n tooltip?: string;\n}\n\nexport const IntervalInput = (props: Props) => {\n const [intervalIsInvalid, setIntervalIsInvalid] = useState(() => {\n return props.value ? validateInterval(props.value, props.validationRegex) : false;\n });\n\n useDebounce(\n () => {\n setIntervalIsInvalid(validateInterval(props.value, props.validationRegex));\n },\n 500,\n [props.value]\n );\n\n const fieldProps: FieldProps = {\n labelWidth: 26,\n disabled: props.disabled ?? false,\n invalid: intervalIsInvalid,\n error: props.isInvalidError,\n };\n if (props.label) {\n fieldProps.label = props.label;\n fieldProps.tooltip = props.tooltip || '';\n }\n\n return (\n <InlineField {...fieldProps}>\n <Input\n type=\"text\"\n placeholder={props.placeholder || '0'}\n width={props.width || 40}\n onChange={(e) => {\n props.onChange(e.currentTarget.value);\n }}\n value={props.value}\n aria-label={props.ariaLabel || 'interval input'}\n />\n </InlineField>\n );\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { InlineLabel, SegmentInput, ToolbarButton, useStyles2 } from '@grafana/ui';\n\nimport { TraceToLogsTag } from './TraceToLogsSettings';\n\ninterface Props {\n values: TraceToLogsTag[];\n onChange: (values: TraceToLogsTag[]) => void;\n id?: string;\n}\n\nexport const TagMappingInput = ({ values, onChange, id }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n {values.length ? (\n values.map((value, idx) => (\n <div className={styles.pair} key={idx}>\n <SegmentInput\n id={`${id}-key-${idx}`}\n placeholder={'Tag name'}\n value={value.key}\n onChange={(e) => {\n onChange(\n values.map((v, i) => {\n if (i === idx) {\n return { ...v, key: String(e) };\n }\n return v;\n })\n );\n }}\n />\n <InlineLabel aria-label=\"equals\" className={styles.operator}>\n as\n </InlineLabel>\n <SegmentInput\n id={`${id}-value-${idx}`}\n placeholder={'New name (optional)'}\n value={value.value || ''}\n onChange={(e) => {\n onChange(\n values.map((v, i) => {\n if (i === idx) {\n return { ...v, value: String(e) };\n }\n return v;\n })\n );\n }}\n />\n <ToolbarButton\n onClick={() => onChange([...values.slice(0, idx), ...values.slice(idx + 1)])}\n className={cx(styles.removeTag, 'query-part')}\n aria-label=\"Remove tag\"\n type=\"button\"\n icon=\"times\"\n />\n\n {idx === values.length - 1 ? (\n <ToolbarButton\n onClick={() => onChange([...values, { key: '', value: '' }])}\n className=\"query-part\"\n aria-label=\"Add tag\"\n type=\"button\"\n icon=\"plus\"\n />\n ) : null}\n </div>\n ))\n ) : (\n <ToolbarButton\n icon=\"plus\"\n onClick={() => onChange([...values, { key: '', value: '' }])}\n className=\"query-part\"\n aria-label=\"Add tag\"\n type=\"button\"\n />\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.spacing(0.5)} 0`,\n }),\n pair: css({\n display: 'flex',\n justifyContent: 'start',\n alignItems: 'center',\n }),\n operator: css({\n color: theme.v1.palette.orange,\n width: 'auto',\n }),\n removeTag: css({\n marginRight: theme.spacing(0.5),\n }),\n});\n","import { css } from '@emotion/css';\nimport { useCallback, useMemo } from 'react';\nimport * as React from 'react';\n\nimport { DataSourceJsonData, DataSourceInstanceSettings, DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSection } from '@grafana/plugin-ui';\nimport { DataSourcePicker } from '@grafana/runtime';\nimport { InlineField, InlineFieldRow, Input, InlineSwitch } from '@grafana/ui';\n\nimport { IntervalInput } from '../IntervalInput/IntervalInput';\n\nimport { TagMappingInput } from './TagMappingInput';\n\nexport interface TraceToLogsTag {\n key: string;\n value?: string;\n}\n\n// @deprecated use getTraceToLogsOptions to get the v2 version of this config from jsonData\nexport interface TraceToLogsOptions {\n datasourceUid?: string;\n tags?: string[];\n mappedTags?: TraceToLogsTag[];\n mapTagNamesEnabled?: boolean;\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n filterByTraceID?: boolean;\n filterBySpanID?: boolean;\n lokiSearch?: boolean; // legacy\n}\n\nexport interface TraceToLogsOptionsV2 {\n datasourceUid?: string;\n tags?: TraceToLogsTag[];\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n filterByTraceID?: boolean;\n filterBySpanID?: boolean;\n query?: string;\n customQuery: boolean;\n}\n\nexport interface TraceToLogsData extends DataSourceJsonData {\n tracesToLogs?: TraceToLogsOptions;\n tracesToLogsV2?: TraceToLogsOptionsV2;\n}\n\n/**\n * Gets new version of the traceToLogs config from the json data either returning directly or transforming the old\n * version to new and returning that.\n */\nexport function getTraceToLogsOptions(data?: TraceToLogsData): TraceToLogsOptionsV2 | undefined {\n if (data?.tracesToLogsV2) {\n return data.tracesToLogsV2;\n }\n if (!data?.tracesToLogs) {\n return undefined;\n }\n const traceToLogs: TraceToLogsOptionsV2 = {\n customQuery: false,\n };\n traceToLogs.datasourceUid = data.tracesToLogs.datasourceUid;\n traceToLogs.tags = data.tracesToLogs.mapTagNamesEnabled\n ? data.tracesToLogs.mappedTags\n : data.tracesToLogs.tags?.map((tag) => ({ key: tag }));\n traceToLogs.filterByTraceID = data.tracesToLogs.filterByTraceID;\n traceToLogs.filterBySpanID = data.tracesToLogs.filterBySpanID;\n traceToLogs.spanStartTimeShift = data.tracesToLogs.spanStartTimeShift;\n traceToLogs.spanEndTimeShift = data.tracesToLogs.spanEndTimeShift;\n return traceToLogs;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TraceToLogsData> {}\n\nexport function TraceToLogsSettings({ options, onOptionsChange }: Props) {\n const supportedDataSourceTypes = [\n 'loki',\n 'elasticsearch',\n 'grafana-splunk-datasource', // external\n 'grafana-opensearch-datasource', // external\n 'grafana-falconlogscale-datasource', // external\n 'googlecloud-logging-datasource', // external\n 'victoriametrics-logs-datasource', // external\n ];\n\n const traceToLogs = useMemo(\n (): TraceToLogsOptionsV2 => getTraceToLogsOptions(options.jsonData) || { customQuery: false },\n [options.jsonData]\n );\n const { query = '', tags, customQuery } = traceToLogs;\n\n const updateTracesToLogs = useCallback(\n (value: Partial<TraceToLogsOptionsV2>) => {\n // Cannot use updateDatasourcePluginJsonDataOption here as we need to update 2 keys, and they would overwrite each\n // other as updateDatasourcePluginJsonDataOption isn't synchronized\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n tracesToLogsV2: {\n ...traceToLogs,\n ...value,\n },\n tracesToLogs: undefined,\n },\n });\n },\n [onOptionsChange, options, traceToLogs]\n );\n\n return (\n <div className={css({ width: '100%' })}>\n <InlineFieldRow>\n <InlineField\n tooltip=\"The logs data source the trace is going to navigate to\"\n label=\"Data source\"\n labelWidth={26}\n >\n <DataSourcePicker\n inputId=\"trace-to-logs-data-source-picker\"\n filter={(ds) => supportedDataSourceTypes.includes(ds.type)}\n current={traceToLogs.datasourceUid}\n noDefault={true}\n width={40}\n onChange={(ds: DataSourceInstanceSettings) =>\n updateTracesToLogs({\n datasourceUid: ds.uid,\n })\n }\n onClear={() => updateTracesToLogs({ datasourceUid: undefined })}\n />\n </InlineField>\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('start')}\n tooltip={getTimeShiftTooltip('start', '0')}\n value={traceToLogs.spanStartTimeShift || ''}\n onChange={(val) => {\n updateTracesToLogs({ spanStartTimeShift: val });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('end')}\n tooltip={getTimeShiftTooltip('end', '0')}\n value={traceToLogs.spanEndTimeShift || ''}\n onChange={(val) => {\n updateTracesToLogs({ spanEndTimeShift: val });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <InlineField\n tooltip=\"Tags that will be used in the query. Default tags: 'cluster', 'hostname', 'namespace', 'pod', 'service.name', 'service.namespace'\"\n label=\"Tags\"\n labelWidth={26}\n >\n <TagMappingInput values={tags ?? []} onChange={(v) => updateTracesToLogs({ tags: v })} />\n </InlineField>\n </InlineFieldRow>\n\n <IdFilter\n disabled={customQuery}\n type={'trace'}\n id={'filterByTraceID'}\n value={Boolean(traceToLogs.filterByTraceID)}\n onChange={(val) => updateTracesToLogs({ filterByTraceID: val })}\n />\n <IdFilter\n disabled={customQuery}\n type={'span'}\n id={'filterBySpanID'}\n value={Boolean(traceToLogs.filterBySpanID)}\n onChange={(val) => updateTracesToLogs({ filterBySpanID: val })}\n />\n\n <InlineFieldRow>\n <InlineField\n tooltip=\"Use a custom query with the possibility to interpolate variables from the trace or span\"\n label=\"Use custom query\"\n labelWidth={26}\n >\n <InlineSwitch\n id={'customQuerySwitch'}\n value={customQuery}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) =>\n updateTracesToLogs({ customQuery: event.currentTarget.checked })\n }\n />\n </InlineField>\n </InlineFieldRow>\n\n {customQuery && (\n <InlineField\n label=\"Query\"\n labelWidth={26}\n tooltip=\"The query that will run when navigating from a trace to logs data source. Interpolate tags using the `$__tags` keyword\"\n grow\n >\n <Input\n label=\"Query\"\n type=\"text\"\n allowFullScreen\n value={query}\n onChange={(e) => updateTracesToLogs({ query: e.currentTarget.value })}\n />\n </InlineField>\n )}\n </div>\n );\n}\n\ninterface IdFilterProps {\n type: 'trace' | 'span';\n id: string;\n value: boolean;\n onChange: (val: boolean) => void;\n disabled: boolean;\n}\nfunction IdFilter(props: IdFilterProps) {\n return (\n <InlineFieldRow>\n <InlineField\n disabled={props.disabled}\n label={`Filter by ${props.type} ID`}\n labelWidth={26}\n grow\n tooltip={`Filters logs by ${props.type} ID, where the ${props.type} ID should be part of the log line`}\n >\n <InlineSwitch\n id={props.id}\n value={props.value}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) => props.onChange(event.currentTarget.checked)}\n />\n </InlineField>\n </InlineFieldRow>\n );\n}\n\nexport const getTimeShiftLabel = (type: 'start' | 'end') => {\n return `Span ${type} time shift`;\n};\n\nexport const getTimeShiftTooltip = (type: 'start' | 'end', defaultVal: string) => {\n return `Shifts the ${type} time of the span. Default: ${defaultVal} (Time units can be used here, for example: 5s, -1m, 3h)`;\n};\n\nexport const invalidTimeShiftError = 'Invalid time shift. See tooltip for examples.';\n\nexport const TraceToLogsSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#trace-to-logs' : '/#trace-to-logs';\n\n return (\n <ConfigSection\n title=\"Trace to logs\"\n description={\n <ConfigDescriptionLink\n description=\"Navigate from a trace span to the selected data source's logs.\"\n suffix={suffix}\n feature=\"trace to logs\"\n />\n }\n isCollapsible={true}\n isInitiallyOpen={true}\n >\n <TraceToLogsSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSection>\n );\n};\n","import { css } from '@emotion/css';\n\nimport {\n DataSourceInstanceSettings,\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSection } from '@grafana/plugin-ui';\nimport { DataSourcePicker } from '@grafana/runtime';\nimport { Button, InlineField, InlineFieldRow, Input, useStyles2 } from '@grafana/ui';\n\nimport { IntervalInput } from '../IntervalInput/IntervalInput';\nimport { TagMappingInput } from '../TraceToLogs/TagMappingInput';\nimport { getTimeShiftLabel, getTimeShiftTooltip, invalidTimeShiftError } from '../TraceToLogs/TraceToLogsSettings';\n\nexport interface TraceToMetricsOptions {\n datasourceUid?: string;\n tags?: Array<{ key: string; value: string }>;\n queries: TraceToMetricQuery[];\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n}\n\nexport interface TraceToMetricQuery {\n name?: string;\n query?: string;\n}\n\nexport interface TraceToMetricsData extends DataSourceJsonData {\n tracesToMetrics?: TraceToMetricsOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TraceToMetricsData> {}\n\nexport function TraceToMetricsSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={css({ width: '100%' })}>\n <InlineFieldRow className={styles.row}>\n <InlineField\n tooltip=\"The Prometheus data source the trace is going to navigate to\"\n label=\"Data source\"\n labelWidth={26}\n >\n <DataSourcePicker\n inputId=\"trace-to-metrics-data-source-picker\"\n pluginId=\"prometheus\"\n current={options.jsonData.tracesToMetrics?.datasourceUid}\n noDefault={true}\n width={40}\n onChange={(ds: DataSourceInstanceSettings) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n datasourceUid: ds.uid,\n })\n }\n onClear={() =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n datasourceUid: undefined,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('start')}\n tooltip={getTimeShiftTooltip('start', '-2m')}\n value={options.jsonData.tracesToMetrics?.spanStartTimeShift || ''}\n onChange={(val) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n spanStartTimeShift: val,\n });\n }}\n placeholder={'-2m'}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('end')}\n tooltip={getTimeShiftTooltip('end', '2m')}\n value={options.jsonData.tracesToMetrics?.spanEndTimeShift || ''}\n onChange={(val) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n spanEndTimeShift: val,\n });\n }}\n placeholder={'2m'}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <InlineField tooltip=\"Tags that will be used in the metrics query\" label=\"Tags\" labelWidth={26}>\n <TagMappingInput\n values={options.jsonData.tracesToMetrics?.tags ?? []}\n onChange={(v) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n tags: v,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n\n {options.jsonData.tracesToMetrics?.queries?.map((query, i) => (\n <div key={i} className={styles.queryRow}>\n <InlineField label=\"Link Label\" labelWidth={26} tooltip=\"Descriptive label for the linked query\">\n <Input\n label=\"Link Label\"\n type=\"text\"\n allowFullScreen\n value={query.name}\n width={40}\n onChange={(e) => {\n const newQueries = (options.jsonData.tracesToMetrics?.queries ?? []).map(\n (traceToMetricQuery, index) => {\n return index === i ? { ...traceToMetricQuery, name: e.currentTarget.value } : traceToMetricQuery;\n }\n );\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: newQueries,\n });\n }}\n />\n </InlineField>\n <InlineField\n label=\"Query\"\n labelWidth={10}\n tooltip=\"The Prometheus query that will run when navigating from a trace to metrics. Interpolate tags using the `$__tags` keyword\"\n grow\n >\n <Input\n label=\"Query\"\n type=\"text\"\n allowFullScreen\n value={query.query}\n onChange={(e) => {\n const updatedQueries = (options.jsonData.tracesToMetrics?.queries ?? []).map(\n (traceToMetricQuery, index) => {\n return index === i ? { ...traceToMetricQuery, query: e.currentTarget.value } : traceToMetricQuery;\n }\n );\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: updatedQueries,\n });\n }}\n />\n </InlineField>\n\n <Button\n variant=\"destructive\"\n aria-label=\"Remove query\"\n icon=\"times\"\n type=\"button\"\n onClick={() => {\n const newQueries = options.jsonData.tracesToMetrics?.queries.filter((_, index) => index !== i);\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: newQueries,\n });\n }}\n />\n </div>\n ))}\n\n <Button\n variant=\"secondary\"\n title=\"Add query\"\n icon=\"plus\"\n type=\"button\"\n onClick={() => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: [...(options.jsonData.tracesToMetrics?.queries ?? []), { query: '' }],\n });\n }}\n >\n Add query\n </Button>\n </div>\n );\n}\n\nexport const TraceToMetricsSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#trace-to-metrics' : '/#trace-to-metrics';\n\n return (\n <ConfigSection\n title=\"Trace to metrics\"\n description={\n <ConfigDescriptionLink\n description=\"Navigate from a trace span to the selected data source's metrics.\"\n suffix={suffix}\n feature=\"trace to metrics\"\n />\n }\n isCollapsible={true}\n isInitiallyOpen={true}\n >\n <TraceToMetricsSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSection>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: {\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n },\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n queryRow: css({\n label: 'queryRow',\n display: 'flex',\n flexFlow: 'wrap',\n }),\n});\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSubSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"sub-section\" }, children);\n};\n\nexport { ConfigSubSection };\n//# sourceMappingURL=ConfigSubSection.js.map\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/plugin-ui';\nimport { InlineField, InlineFieldRow, InlineSwitch, useStyles2 } from '@grafana/ui';\n\nexport interface NodeGraphOptions {\n enabled?: boolean;\n}\n\nexport interface NodeGraphData extends DataSourceJsonData {\n nodeGraph?: NodeGraphOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<NodeGraphData> {}\n\nexport function NodeGraphSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n <InlineFieldRow className={styles.row}>\n <InlineField\n tooltip=\"Displays the node graph above the trace view. Default: disabled\"\n label=\"Enable node graph\"\n labelWidth={26}\n >\n <InlineSwitch\n id=\"enableNodeGraph\"\n value={options.jsonData.nodeGraph?.enabled}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'nodeGraph', {\n ...options.jsonData.nodeGraph,\n enabled: event.currentTarget.checked,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n </div>\n );\n}\n\nexport const NodeGraphSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#node-graph' : '/#node-graph';\n\n return (\n <ConfigSubSection\n title=\"Node graph\"\n description={\n <ConfigDescriptionLink\n description=\"Show or hide the node graph visualization.\"\n suffix={suffix}\n feature=\"the node graph\"\n />\n }\n >\n <NodeGraphSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSubSection>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: css({\n label: 'infoText',\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n }),\n container: css({\n label: 'container',\n width: '100%',\n }),\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n});\n","import { css } from '@emotion/css';\n\nimport {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n toOption,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/plugin-ui';\nimport { InlineField, InlineFieldRow, Input, Select, useStyles2 } from '@grafana/ui';\n\nexport interface SpanBarOptions {\n type?: string;\n tag?: string;\n}\n\nexport interface SpanBarOptionsData extends DataSourceJsonData {\n spanBar?: SpanBarOptions;\n}\n\nexport const NONE = 'None';\nexport const DURATION = 'Duration';\nexport const TAG = 'Tag';\n\ninterface Props extends DataSourcePluginOptionsEditorProps<SpanBarOptionsData> {}\n\nexport default function SpanBarSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n const selectOptions = [NONE, DURATION, TAG].map(toOption);\n\n return (\n <div className={css({ width: '100%' })}>\n <InlineFieldRow className={styles.row}>\n <InlineField label=\"Label\" labelWidth={26} tooltip=\"Default: duration\" grow>\n <Select\n inputId=\"label\"\n options={selectOptions}\n value={options.jsonData.spanBar?.type || ''}\n onChange={(v) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'spanBar', {\n ...options.jsonData.spanBar,\n type: v?.value ?? '',\n });\n }}\n placeholder=\"Duration\"\n isClearable\n aria-label={'select-label-name'}\n width={40}\n />\n </InlineField>\n </InlineFieldRow>\n {options.jsonData.spanBar?.type === TAG && (\n <InlineFieldRow className={styles.row}>\n <InlineField\n label=\"Tag key\"\n labelWidth={26}\n tooltip=\"Tag key which will be used to get the tag value. A span's attributes and resources will be searched for the tag key\"\n >\n <Input\n type=\"text\"\n placeholder=\"Enter tag key\"\n onChange={(v) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'spanBar', {\n ...options.jsonData.spanBar,\n tag: v.currentTarget.value,\n })\n }\n value={options.jsonData.spanBar?.tag || ''}\n width={40}\n />\n </InlineField>\n </InlineFieldRow>\n )}\n </div>\n );\n}\n\nexport const SpanBarSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#span-bar' : '/#span-bar';\n\n return (\n <ConfigSubSection\n title=\"Span bar\"\n description={\n <ConfigDescriptionLink\n description=\"Add additional info next to the service and operation on a span bar row in the trace view.\"\n suffix={suffix}\n feature=\"the span bar\"\n />\n }\n >\n <SpanBarSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSubSection>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: css({\n label: 'infoText',\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n }),\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n});\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\n\nconst DataSourceDescription = ({ dataSourceName, docsLink, hasRequiredFields = true, className }) => {\n const theme = useTheme2();\n const styles = {\n container: css({\n p: {\n margin: 0\n },\n \"p + p\": {\n marginTop: theme.spacing(2)\n }\n }),\n text: css({\n ...theme.typography.body,\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, \"Before you can use the \", dataSourceName, \" data source, you must configure it below or in the config file. For detailed instructions,\", \" \", /* @__PURE__ */ React__default.createElement(\"a\", { href: docsLink, target: \"_blank\", rel: \"noreferrer\" }, \"view the documentation\"), \".\"), hasRequiredFields && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, /* @__PURE__ */ React__default.createElement(\"i\", null, \"Fields marked with * are required\")));\n};\n\nexport { DataSourceDescription };\n//# sourceMappingURL=DataSourceDescription.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input } from '@grafana/ui';\nimport { ConfigSection } from '../ConfigSection/ConfigSection.js';\nimport '@grafana/data';\n\nconst ConnectionSettings = ({\n config,\n onChange,\n description,\n urlPlaceholder,\n urlTooltip,\n urlLabel,\n className\n}) => {\n const isValidUrl = config.url !== undefined && /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(config.url);\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(ConfigSection, { title: \"Connection\", description, className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"connection-url\",\n label: urlLabel || \"URL\",\n labelWidth: 24,\n tooltip: urlTooltip || /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, \"Specify a complete HTTP URL\", /* @__PURE__ */ React__default.createElement(\"br\", null), \"(for example https://example.com:8080)\"),\n grow: true,\n disabled: config.readOnly,\n required: true,\n invalid: !isValidUrl && !config.readOnly,\n error: isValidUrl ? \"\" : \"Please enter a valid URL\",\n interactive: true\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"connection-url\",\n \"aria-label\": \"Data source connection URL\",\n onChange: (event) => onChange({\n ...config,\n url: event.currentTarget.value\n }),\n value: config.url || \"\",\n placeholder: urlPlaceholder || \"URL\"\n }\n )\n )));\n};\n\nexport { ConnectionSettings };\n//# sourceMappingURL=ConnectionSettings.js.map\n","import { css } from '@emotion/css';\n\nconst useCommonStyles = () => {\n return {\n inlineFieldNoMarginRight: css({\n marginRight: 0\n }),\n // This is dirty hack to make configured secret input grow\n inlineFieldWithSecret: css({\n '[class$=\"layoutChildrenWrapper\"]:first-child': {\n flexGrow: 1\n }\n })\n };\n};\n\nexport { useCommonStyles };\n//# sourceMappingURL=styles.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, SecretInput } from '@grafana/ui';\nimport { useCommonStyles } from '../styles.js';\n\nconst BasicAuth = ({\n user,\n passwordConfigured,\n userLabel = \"User\",\n userTooltip = \"The username of the data source account\",\n userPlaceholder = \"User\",\n passwordLabel = \"Password\",\n passwordTooltip = \"The password of the data source account\",\n passwordPlaceholder = \"Password\",\n onUserChange,\n onPasswordChange,\n onPasswordReset,\n readOnly\n}) => {\n const commonStyles = useCommonStyles();\n const styles = {\n lastInlineField: css({\n marginBottom: 0\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n className: commonStyles.inlineFieldNoMarginRight,\n label: userLabel,\n labelWidth: 24,\n tooltip: userTooltip,\n required: true,\n htmlFor: \"basic-auth-user-input\",\n interactive: true,\n grow: true,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"basic-auth-user-input\",\n placeholder: userPlaceholder,\n value: user,\n onChange: (e) => onUserChange(e.currentTarget.value),\n required: true\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n className: cx(\n commonStyles.inlineFieldNoMarginRight,\n commonStyles.inlineFieldWithSecret,\n styles.lastInlineField\n ),\n label: passwordLabel,\n labelWidth: 24,\n tooltip: passwordTooltip,\n required: true,\n htmlFor: \"basic-auth-password-input\",\n interactive: true,\n grow: true,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretInput,\n {\n id: \"basic-auth-password-input\",\n isConfigured: passwordConfigured,\n onReset: readOnly ? () => {\n } : onPasswordReset,\n placeholder: passwordPlaceholder,\n onChange: (e) => onPasswordChange(e.currentTarget.value),\n required: true\n }\n )\n ));\n};\n\nexport { BasicAuth };\n//# sourceMappingURL=BasicAuth.js.map\n","import 'react';\n\nvar AuthMethod = /* @__PURE__ */ ((AuthMethod2) => {\n AuthMethod2[\"NoAuth\"] = \"NoAuth\";\n AuthMethod2[\"BasicAuth\"] = \"BasicAuth\";\n AuthMethod2[\"OAuthForward\"] = \"OAuthForward\";\n AuthMethod2[\"CrossSiteCredentials\"] = \"CrossSiteCredentials\";\n return AuthMethod2;\n})(AuthMethod || {});\n\nexport { AuthMethod };\n//# sourceMappingURL=types.js.map\n","import React__default, { useState, useMemo } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Field, Select } from '@grafana/ui';\nimport '@grafana/data';\nimport { BasicAuth } from './BasicAuth.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport { AuthMethod } from '../types.js';\n\nconst defaultOptions = {\n [AuthMethod.BasicAuth]: {\n label: \"Basic authentication\",\n value: AuthMethod.BasicAuth,\n description: \"Authenticate with your data source username and password\"\n },\n [AuthMethod.CrossSiteCredentials]: {\n label: \"Enable cross-site access control requests\",\n value: AuthMethod.CrossSiteCredentials,\n description: \"Allow cross-site Access-Control requests with your existing credentials and cookies. This enables the server to authenticate the user and perform authorized requests on their behalf on other domains.\"\n },\n [AuthMethod.OAuthForward]: {\n label: \"Forward OAuth Identity\",\n value: AuthMethod.OAuthForward,\n description: \"Forward the OAuth access token (and if available: the OIDC ID token) of the user querying to the data source\"\n },\n [AuthMethod.NoAuth]: {\n label: \"No Authentication\",\n value: AuthMethod.NoAuth,\n description: \"Data source is available without authentication\"\n }\n};\nconst AuthMethodSettings = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods: visibleMethodsFromProps,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n readOnly\n}) => {\n var _a, _b, _c, _d;\n const [authMethodChanged, setAuthMethodChanged] = useState(false);\n const { colors, spacing } = useTheme2();\n const visibleMethods = useMemo(\n () => {\n var _a2;\n return visibleMethodsFromProps != null ? visibleMethodsFromProps : [\n AuthMethod.BasicAuth,\n AuthMethod.OAuthForward,\n AuthMethod.NoAuth,\n ...(_a2 = customMethods == null ? undefined : customMethods.map((m) => m.id)) != null ? _a2 : []\n ];\n },\n [customMethods, visibleMethodsFromProps]\n );\n const hasSelect = visibleMethods.length > 1;\n const preparedOptions = useMemo(() => {\n var _a2;\n const customOptions = (_a2 = customMethods == null ? undefined : customMethods.reduce((acc, method) => {\n acc[method.id] = {\n label: method.label,\n value: method.id,\n description: method.description\n };\n return acc;\n }, {})) != null ? _a2 : {};\n const preparedDefaultOptions = {};\n let k;\n for (k in defaultOptions) {\n preparedDefaultOptions[k] = {\n ...defaultOptions[k],\n ...defaultOptionsOverrides == null ? undefined : defaultOptionsOverrides[k]\n };\n }\n const allOptions = {\n ...customOptions,\n ...preparedDefaultOptions\n };\n return visibleMethods.filter((method) => Boolean(allOptions[method])).map((method) => {\n const option = allOptions[method];\n if (method === mostCommonMethod && hasSelect) {\n return {\n ...option,\n label: `${option.label} (most common)`\n };\n }\n return option;\n });\n }, [visibleMethods, customMethods, defaultOptionsOverrides, mostCommonMethod, hasSelect]);\n let selected = selectedMethod;\n if (!hasSelect) {\n selected = visibleMethods[0];\n } else if (selectedMethod === AuthMethod.NoAuth && mostCommonMethod && !authMethodChanged) {\n selected = mostCommonMethod;\n }\n let AuthFieldsComponent = null;\n if (selected === AuthMethod.BasicAuth && basicAuth) {\n AuthFieldsComponent = /* @__PURE__ */ React__default.createElement(BasicAuth, { ...basicAuth, readOnly });\n } else if (selected.startsWith(\"custom-\")) {\n AuthFieldsComponent = (_b = (_a = customMethods == null ? undefined : customMethods.find((m) => m.id === selected)) == null ? undefined : _a.component) != null ? _b : null;\n }\n const title = hasSelect ? \"Authentication methods\" : (_c = preparedOptions[0].label) != null ? _c : \"\";\n const description = hasSelect ? \"Choose an authentication method to access the data source\" : (_d = preparedOptions[0].description) != null ? _d : \"\";\n const styles = {\n authMethods: css({\n marginTop: spacing(2.5),\n ...hasSelect && {\n padding: spacing(2),\n border: `1px solid ${colors.border.weak}`\n }\n }),\n selectedMethodFields: css({\n marginTop: spacing(1.5)\n })\n };\n return /* @__PURE__ */ React__default.createElement(ConfigSubSection, { title, description }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.authMethods }, hasSelect && /* @__PURE__ */ React__default.createElement(Field, { label: \"Authentication method\" }, /* @__PURE__ */ React__default.createElement(\n Select,\n {\n inputId: \"auth-method-select\",\n options: preparedOptions,\n value: selected,\n onChange: (option) => {\n setAuthMethodChanged(true);\n onAuthMethodSelect(option.value);\n },\n disabled: readOnly\n }\n )), AuthFieldsComponent && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.selectedMethodFields }, AuthFieldsComponent)));\n};\n\nexport { AuthMethodSettings };\n//# sourceMappingURL=AuthMethodSettings.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Checkbox, Tooltip, Icon } from '@grafana/ui';\n\nconst TLSSettingsSection = ({\n children,\n enabled,\n label,\n tooltipText,\n onToggle,\n readOnly\n}) => {\n const { colors, spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: 3\n }),\n checkboxContainer: css({\n display: \"flex\",\n alignItems: \"center\"\n }),\n infoIcon: css({\n marginTop: -2,\n marginLeft: 5,\n color: colors.text.secondary\n }),\n content: css({\n margin: spacing(1, 0, 2, 3)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.checkboxContainer }, /* @__PURE__ */ React__default.createElement(Checkbox, { value: enabled, label, onChange: () => onToggle(!enabled), disabled: readOnly }), /* @__PURE__ */ React__default.createElement(Tooltip, { placement: \"top\", content: tooltipText, interactive: true }, /* @__PURE__ */ React__default.createElement(Icon, { name: \"info-circle\", className: styles.infoIcon, size: \"sm\" }))), enabled && children && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { TLSSettingsSection };\n//# sourceMappingURL=TLSSettingsSection.js.map\n","import React__default from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\nimport { useCommonStyles } from '../styles.js';\n\nconst SelfSignedCertificate = ({\n enabled,\n certificateConfigured,\n onToggle,\n onCertificateChange,\n onCertificateReset,\n tooltips,\n readOnly\n}) => {\n var _a;\n const commonStyles = useCommonStyles();\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"Add self-signed certificate\",\n tooltipText: \"Add your own Certificate Authority (CA) certificate on top of one generated by the certificate authorities for additional security measures\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"CA Certificate\",\n labelWidth: 24,\n tooltip: (_a = tooltips == null ? undefined : tooltips.certificateLabel) != null ? _a : \"Your self-signed certificate\",\n required: true,\n htmlFor: \"self-signed-certificate-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"self-signed-certificate-input\",\n isConfigured: certificateConfigured,\n onChange: (e) => onCertificateChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onCertificateReset,\n placeholder: \"Begins with --- BEGIN CERTIFICATE ---\",\n rows: 6,\n required: true\n }\n )\n )\n );\n};\n\nexport { SelfSignedCertificate };\n//# sourceMappingURL=SelfSignedCertificate.js.map\n","import React__default from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, Input, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\nimport { useCommonStyles } from '../styles.js';\n\nconst TLSClientAuth = ({\n enabled,\n serverName,\n clientCertificateConfigured,\n clientKeyConfigured,\n onToggle,\n onServerNameChange,\n onClientCertificateChange,\n onClientKeyChange,\n onClientCertificateReset,\n onClientKeyReset,\n tooltips,\n readOnly\n}) => {\n var _a, _b, _c;\n const commonStyles = useCommonStyles();\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"TLS Client Authentication\",\n tooltipText: \"Validate using TLS client authentication, in which the server authenticates the client\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"ServerName\",\n labelWidth: 24,\n tooltip: (_a = tooltips == null ? undefined : tooltips.serverNameLabel) != null ? _a : \"A Servername is used to verify the hostname on the returned certificate\",\n required: true,\n htmlFor: \"client-auth-servername-input\",\n interactive: true,\n grow: true,\n className: commonStyles.inlineFieldNoMarginRight,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"client-auth-servername-input\",\n placeholder: \"domain.example.com\",\n value: serverName,\n onChange: (e) => onServerNameChange(e.currentTarget.value),\n required: true\n }\n )\n ),\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Client Certificate\",\n labelWidth: 24,\n tooltip: (_b = tooltips == null ? undefined : tooltips.certificateLabel) != null ? _b : \"The client certificate can be generated from a Certificate Authority or be self-signed\",\n required: true,\n htmlFor: \"client-auth-client-certificate-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"client-auth-client-certificate-input\",\n isConfigured: clientCertificateConfigured,\n onChange: (e) => onClientCertificateChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onClientCertificateReset,\n placeholder: \"Begins with --- BEGIN CERTIFICATE ---\",\n rows: 6,\n required: true\n }\n )\n ),\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Client Key\",\n labelWidth: 24,\n tooltip: (_c = tooltips == null ? undefined : tooltips.keyLabel) != null ? _c : \"The client key can be generated from a Certificate Authority or be self-signed\",\n required: true,\n htmlFor: \"client-auth-client-key-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"client-auth-client-key-input\",\n isConfigured: clientKeyConfigured,\n onChange: (e) => onClientKeyChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onClientKeyReset,\n placeholder: `Begins with --- RSA PRIVATE KEY CERTIFICATE ---`,\n rows: 6,\n required: true\n }\n )\n )\n );\n};\n\nexport { TLSClientAuth };\n//# sourceMappingURL=TLSClientAuth.js.map\n","import React__default from 'react';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\n\nconst SkipTLSVerification = ({ enabled, onToggle, readOnly }) => {\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"Skip TLS certificate validation\",\n tooltipText: \"Skipping TLS certificate validation is not recommended unless absolutely necessary or for testing\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n }\n );\n};\n\nexport { SkipTLSVerification };\n//# sourceMappingURL=SkipTLSVerification.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { SelfSignedCertificate } from './SelfSignedCertificate.js';\nimport { TLSClientAuth } from './TLSClientAuth.js';\nimport { SkipTLSVerification } from './SkipTLSVerification.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst TLSSettings = ({ selfSignedCertificate, TLSClientAuth: TLSClientAuth$1, skipTLSVerification, readOnly }) => {\n const { spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: spacing(3)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\n ConfigSubSection,\n {\n className: styles.container,\n title: \"TLS settings\",\n description: \"Additional security measures that can be applied on top of authentication\"\n },\n /* @__PURE__ */ React__default.createElement(SelfSignedCertificate, { ...selfSignedCertificate, readOnly }),\n /* @__PURE__ */ React__default.createElement(TLSClientAuth, { ...TLSClientAuth$1, readOnly }),\n /* @__PURE__ */ React__default.createElement(SkipTLSVerification, { ...skipTLSVerification, readOnly })\n );\n};\n\nexport { TLSSettings };\n//# sourceMappingURL=TLSSettings.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useTheme2, InlineFieldRow, InlineField, Input, SecretInput, IconButton } from '@grafana/ui';\nimport { useCommonStyles } from '../styles.js';\n\nconst CustomHeader = ({ header, onChange, onBlur, onDelete, readOnly }) => {\n const { spacing } = useTheme2();\n const commonStyles = useCommonStyles();\n const styles = {\n container: css({\n alignItems: \"center\"\n }),\n input: css({\n minWidth: \"100%\"\n }),\n headerNameField: css({\n width: \"40%\",\n marginRight: 0,\n paddingRight: spacing(1)\n }),\n headerValueField: css({\n width: \"45%\",\n marginRight: 0\n }),\n removeHeaderBtn: css({\n margin: `0 0 3px 10px`\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(InlineFieldRow, { className: styles.container }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Header\",\n labelWidth: 9,\n grow: true,\n className: styles.headerNameField,\n htmlFor: `custom-header-${header.id}-name-input`,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: `custom-header-${header.id}-name-input`,\n placeholder: \"X-Custom-Header\",\n value: header.name,\n width: 12,\n onChange: (e) => onChange({ ...header, name: e.currentTarget.value }),\n onBlur,\n className: styles.input\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Value\",\n labelWidth: 9,\n grow: true,\n className: cx(commonStyles.inlineFieldWithSecret, styles.headerValueField),\n htmlFor: `custom-header-${header.id}-value-input`,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretInput,\n {\n id: `custom-header-${header.id}-value-input`,\n isConfigured: header.configured,\n placeholder: \"Header value\",\n value: header.value,\n width: 12,\n onChange: (e) => onChange({ ...header, value: e.currentTarget.value }),\n onReset: readOnly ? () => {\n } : () => onChange({ ...header, configured: false, value: \"\" }),\n onBlur,\n className: styles.input\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: \"trash-alt\",\n tooltip: \"Remove header\",\n tooltipPlacement: \"top\",\n className: styles.removeHeaderBtn,\n onClick: onDelete,\n type: \"button\",\n disabled: readOnly\n }\n )));\n};\n\nexport { CustomHeader };\n//# sourceMappingURL=CustomHeader.js.map\n","import React__default, { useState, useEffect } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Button } from '@grafana/ui';\nimport { CustomHeader } from './CustomHeader.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }) => {\n const { spacing } = useTheme2();\n const [headers, setHeaders] = useState(\n headersFromProps.map((header) => ({\n ...header,\n id: uniqueId(),\n value: \"\"\n }))\n );\n useEffect(() => {\n setHeaders((headers2) => {\n let changed = false;\n const newHeaders = headers2.map((header) => {\n var _a;\n const configured = (_a = headersFromProps.find((h) => h.name === header.name)) == null ? undefined : _a.configured;\n if (typeof configured !== \"undefined\" && header.configured !== configured) {\n changed = true;\n return { ...header, configured };\n }\n return header;\n });\n if (changed) {\n return newHeaders;\n }\n return headers2;\n });\n }, [headersFromProps]);\n const onHeaderAdd = () => {\n setHeaders([...headers, { id: uniqueId(), name: \"\", value: \"\", configured: false }]);\n };\n const onHeaderChange = (id, header) => {\n setHeaders(headers.map((h) => h.id === id ? { ...header } : h));\n };\n const onHeaderDelete = (id) => {\n const index = headers.findIndex((h) => h.id === id);\n if (index === -1) {\n return;\n }\n const newHeaders = [...headers];\n newHeaders.splice(index, 1);\n setHeaders(newHeaders);\n onChange(\n newHeaders.map(({ name, value, configured }) => ({\n name,\n value,\n configured\n }))\n );\n };\n const onBlur = () => {\n onChange(\n headers.map(({ name, value, configured }) => ({\n name,\n value,\n configured\n }))\n );\n };\n const styles = {\n container: css({\n marginTop: spacing(3)\n }),\n addHeaderButton: css({\n marginTop: spacing(1.5)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(\n ConfigSubSection,\n {\n title: \"HTTP headers\",\n description: \"Pass along additional context and metadata about the request/response\",\n isCollapsible: true,\n isInitiallyOpen: headers.length > 0\n },\n /* @__PURE__ */ React__default.createElement(\"div\", null, headers.map((header) => /* @__PURE__ */ React__default.createElement(\n CustomHeader,\n {\n key: header.id,\n header,\n onChange: (header2) => onHeaderChange(header2.id, header2),\n onDelete: () => onHeaderDelete(header.id),\n onBlur,\n readOnly\n }\n ))),\n /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.addHeaderButton }, /* @__PURE__ */ React__default.createElement(Button, { icon: \"plus\", variant: \"secondary\", fill: \"outline\", onClick: onHeaderAdd, disabled: readOnly }, headers.length === 0 ? \"Add header\" : \"Add another header\"))\n ));\n};\nfunction uniqueId() {\n return Math.random().toString(16).slice(2);\n}\n\nexport { CustomHeaders };\n//# sourceMappingURL=CustomHeaders.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { AuthMethodSettings } from './auth-method/AuthMethodSettings.js';\nimport { TLSSettings } from './tls/TLSSettings.js';\nimport '@grafana/ui';\nimport { CustomHeaders } from './custom-headers/CustomHeaders.js';\nimport { ConfigSection } from '../ConfigSection/ConfigSection.js';\nimport '@grafana/data';\n\nconst Auth = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n TLS,\n customHeaders,\n readOnly = false\n}) => {\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(ConfigSection, { title: \"Authentication\" }, /* @__PURE__ */ React__default.createElement(\n AuthMethodSettings,\n {\n selectedMethod,\n mostCommonMethod,\n customMethods,\n visibleMethods,\n defaultOptionsOverrides,\n onAuthMethodSelect,\n basicAuth,\n readOnly\n }\n ), TLS && /* @__PURE__ */ React__default.createElement(TLSSettings, { ...TLS, readOnly }), customHeaders && /* @__PURE__ */ React__default.createElement(CustomHeaders, { ...customHeaders, readOnly })));\n};\n\nexport { Auth };\n//# sourceMappingURL=Auth.js.map\n","import 'react';\nimport '@emotion/css';\nimport { AuthMethod } from './types.js';\nimport './auth-method/AuthMethodSettings.js';\nimport '@grafana/ui';\nimport '@grafana/data';\n\nconst headerNamePrefix = \"httpHeaderName\";\nconst headerValuePrefix = \"httpHeaderValue\";\nfunction convertLegacyAuthProps({\n config,\n onChange\n}) {\n const props = {\n selectedMethod: getSelectedMethod(config),\n onAuthMethodSelect: getOnAuthMethodSelectHandler(config, onChange),\n basicAuth: getBasicAuthProps(config, onChange),\n TLS: getTLSProps(config, onChange),\n customHeaders: getCustomHeaders(config, onChange),\n readOnly: config.readOnly\n };\n return props;\n}\nfunction getSelectedMethod(config) {\n if (config.basicAuth) {\n return AuthMethod.BasicAuth;\n }\n if (config.withCredentials) {\n return AuthMethod.CrossSiteCredentials;\n }\n if (config.jsonData.oauthPassThru) {\n return AuthMethod.OAuthForward;\n }\n return AuthMethod.NoAuth;\n}\nfunction getOnAuthMethodSelectHandler(config, onChange) {\n return (method) => {\n onChange({\n ...config,\n basicAuth: method === AuthMethod.BasicAuth,\n withCredentials: method === AuthMethod.CrossSiteCredentials,\n jsonData: {\n ...config.jsonData,\n oauthPassThru: method === AuthMethod.OAuthForward\n }\n });\n };\n}\nfunction getBasicAuthProps(config, onChange) {\n return {\n user: config.basicAuthUser,\n passwordConfigured: config.secureJsonFields.basicAuthPassword,\n onUserChange: (user) => onChange({ ...config, basicAuthUser: user }),\n onPasswordChange: (password) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n basicAuthPassword: password\n }\n }),\n onPasswordReset: () => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, basicAuthPassword: \"\" },\n secureJsonFields: {\n ...config.secureJsonFields,\n basicAuthPassword: false\n }\n })\n };\n}\nfunction getTLSProps(config, onChange) {\n var _a, _b, _c;\n return {\n selfSignedCertificate: {\n enabled: Boolean(config.jsonData.tlsAuthWithCACert),\n certificateConfigured: !!((_a = config.secureJsonFields) == null ? undefined : _a.tlsCACert),\n onToggle: (enabled) => enabled ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled }\n }) : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled },\n secureJsonData: { ...config.secureJsonData, tlsCACert: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false }\n }),\n onCertificateChange: (certificate) => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: certificate }\n }),\n onCertificateReset: () => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false }\n })\n },\n TLSClientAuth: {\n enabled: config.jsonData.tlsAuth,\n serverName: config.jsonData.serverName,\n clientCertificateConfigured: !!((_b = config.secureJsonFields) == null ? undefined : _b.tlsClientCert),\n clientKeyConfigured: !!((_c = config.secureJsonFields) == null ? undefined : _c.tlsClientKey),\n onToggle: (enabled) => enabled ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled }\n }) : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled, serverName: \"\" },\n secureJsonData: { ...config.secureJsonData, tlsClientCert: \"\", tlsClientKey: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsClientCert: false, tlsClientKey: false }\n }),\n onServerNameChange: (serverName) => onChange({\n ...config,\n jsonData: { ...config.jsonData, serverName }\n }),\n onClientCertificateChange: (clientCertificate) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: clientCertificate\n }\n }),\n onClientCertificateReset: () => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: \"\"\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientCert: false\n }\n }),\n onClientKeyChange: (clientKey) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: clientKey\n }\n }),\n onClientKeyReset: () => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: \"\"\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientKey: false\n }\n })\n },\n skipTLSVerification: {\n enabled: config.jsonData.tlsSkipVerify,\n onToggle: (enabled) => onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsSkipVerify: enabled }\n })\n }\n };\n}\nfunction getCustomHeaders(config, onChange) {\n const headers = Object.keys(config.jsonData).filter((key) => key.startsWith(headerNamePrefix)).sort().map((key) => {\n var _a;\n const index = key.slice(headerNamePrefix.length);\n return {\n name: config.jsonData[key],\n configured: (_a = config.secureJsonFields[`${headerValuePrefix}${index}`]) != null ? _a : false\n };\n });\n return {\n headers,\n onChange: (headers2) => {\n const newJsonData = Object.fromEntries(\n Object.entries(config.jsonData).filter(([key]) => !key.startsWith(headerNamePrefix))\n );\n const newSecureJsonData = Object.fromEntries(\n Object.entries(config.secureJsonData || {}).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n const newSecureJsonFields = Object.fromEntries(\n Object.entries(config.secureJsonFields).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n headers2.forEach((header, index) => {\n newJsonData[`${headerNamePrefix}${index + 1}`] = header.name;\n if (header.configured) {\n newSecureJsonFields[`${headerValuePrefix}${index + 1}`] = true;\n } else {\n newSecureJsonData[`${headerValuePrefix}${index + 1}`] = header.value;\n }\n });\n onChange({\n ...config,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n secureJsonFields: newSecureJsonFields\n });\n }\n };\n}\n\nexport { convertLegacyAuthProps, getBasicAuthProps, getCustomHeaders, getOnAuthMethodSelectHandler, getSelectedMethod, getTLSProps };\n//# sourceMappingURL=utils.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, TagsInput, Input } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst AdvancedHttpSettings = ({\n config,\n onChange,\n className\n}) => {\n const onCookiesChange = (cookies) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies\n }\n });\n };\n const onTimeoutChange = (event) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10)\n }\n });\n };\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(ConfigSubSection, { title: \"Advanced HTTP settings\", className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-cookies\",\n label: \"Allowed cookies\",\n labelWidth: 24,\n tooltip: \"Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n TagsInput,\n {\n id: \"advanced-http-cookies\",\n placeholder: \"New cookie (hit enter to add)\",\n tags: config.jsonData.keepCookies,\n onChange: onCookiesChange\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-timeout\",\n label: \"Timeout\",\n labelWidth: 24,\n tooltip: \"HTTP request timeout in seconds\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"advanced-http-timeout\",\n type: \"number\",\n min: 0,\n placeholder: \"Timeout in seconds\",\n \"aria-label\": \"Timeout in seconds\",\n value: config.jsonData.timeout,\n onChange: onTimeoutChange\n }\n )\n ));\n};\n\nexport { AdvancedHttpSettings };\n//# sourceMappingURL=AdvancedHttpSettings.js.map\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { InlineField, InlineFieldRow, InlineSwitch } from '@grafana/ui';\n\nexport interface TraceIdTimeParamsOptions {\n enabled?: boolean;\n}\n\nexport interface TraceIdTimeParamsData extends DataSourceJsonData {\n traceIdTimeParams?: TraceIdTimeParamsOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TraceIdTimeParamsData> {}\n\nexport function TraceIdTimeParams({ options, onOptionsChange }: Props) {\n return (\n <div className={styles.container}>\n <h3 className=\"page-heading\">Query Trace by ID with Time Params</h3>\n <InlineFieldRow className={styles.row}>\n <InlineField\n tooltip=\"pass time parameters when querying trace by ID\"\n label=\"Enable Time Parameters\"\n labelWidth={26}\n >\n <InlineSwitch\n id=\"enableTraceIdTimeParams\"\n value={options.jsonData.traceIdTimeParams?.enabled}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'traceIdTimeParams', {\n ...options.jsonData.traceIdTimeParams,\n enabled: event.currentTarget.checked,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n </div>\n );\n}\n\nconst styles = {\n container: css({\n label: 'container',\n width: '100%',\n }),\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n};\n","import { css } from '@emotion/css';\n\nimport { DataSourcePluginOptionsEditorProps, GrafanaTheme2 } from '@grafana/data';\nimport { NodeGraphSection, SpanBarSection, TraceToLogsSection, TraceToMetricsSection } from '@grafana/o11y-ds-frontend';\nimport {\n AdvancedHttpSettings,\n Auth,\n ConfigSection,\n ConnectionSettings,\n DataSourceDescription,\n convertLegacyAuthProps,\n} from '@grafana/plugin-ui';\nimport { config } from '@grafana/runtime';\nimport { useStyles2, Divider, Stack, SecureSocksProxySettings } from '@grafana/ui';\n\nimport { TraceIdTimeParams } from './TraceIdTimeParams';\n\nexport type Props = DataSourcePluginOptionsEditorProps;\n\nexport const ConfigEditor = ({ options, onOptionsChange }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n <DataSourceDescription\n dataSourceName=\"Jaeger\"\n docsLink=\"https://grafana.com/docs/grafana/latest/datasources/jaeger\"\n hasRequiredFields={false}\n />\n\n <Divider spacing={4} />\n\n <ConnectionSettings config={options} onChange={onOptionsChange} urlPlaceholder=\"http://localhost:16686\" />\n\n <Divider spacing={4} />\n <Auth\n {...convertLegacyAuthProps({\n config: options,\n onChange: onOptionsChange,\n })}\n />\n\n <Divider spacing={4} />\n <TraceToLogsSection options={options} onOptionsChange={onOptionsChange} />\n <Divider spacing={4} />\n\n <TraceToMetricsSection options={options} onOptionsChange={onOptionsChange} />\n <Divider spacing={4} />\n\n <ConfigSection\n title=\"Additional settings\"\n description=\"Additional settings are optional settings that can be configured for more control over your data source.\"\n isCollapsible={true}\n isInitiallyOpen={false}\n >\n <Stack gap={5} direction=\"column\">\n <AdvancedHttpSettings config={options} onChange={onOptionsChange} />\n\n {config.secureSocksDSProxyEnabled && (\n <SecureSocksProxySettings options={options} onOptionsChange={onOptionsChange} />\n )}\n\n <NodeGraphSection options={options} onOptionsChange={onOptionsChange} />\n <SpanBarSection options={options} onOptionsChange={onOptionsChange} />\n <TraceIdTimeParams options={options} onOptionsChange={onOptionsChange} />\n </Stack>\n </ConfigSection>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n marginBottom: theme.spacing(2),\n maxWidth: '900px',\n }),\n});\n","import {\n FieldType,\n NodeGraphDataFrameFieldNames as Fields,\n DataFrameView,\n DataFrame,\n MutableDataFrame,\n} from '@grafana/data';\n\nexport function createNodeGraphFrames(data: DataFrame): DataFrame[] {\n const { nodes, edges } = convertTraceToGraph(data);\n const [nodesFrame, edgesFrame] = makeFrames();\n\n for (const node of nodes) {\n nodesFrame.add(node);\n }\n for (const edge of edges) {\n edgesFrame.add(edge);\n }\n\n return [nodesFrame, edgesFrame];\n}\n\nfunction convertTraceToGraph(data: DataFrame): { nodes: Node[]; edges: Edge[] } {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const view = new DataFrameView<TraceRow>(data);\n\n const traceDuration = findTraceDuration(view);\n const spanMap = makeSpanMap((index) => {\n if (index >= data.length) {\n return undefined;\n }\n const span = view.get(index);\n return {\n span: { ...span },\n id: span.spanID,\n parentIds: span.parentSpanID ? [span.parentSpanID] : [],\n };\n });\n\n for (let i = 0; i < view.length; i++) {\n const row = view.get(i);\n\n const ranges: Array<[number, number]> = spanMap[row.spanID].children.map((c) => {\n const span = spanMap[c].span;\n return [span.startTime, span.startTime + span.duration];\n });\n const childrenDuration = getNonOverlappingDuration(ranges);\n const selfDuration = row.duration - childrenDuration;\n const stats = getStats(row.duration, traceDuration, selfDuration);\n\n nodes.push({\n [Fields.id]: row.spanID,\n [Fields.title]: row.serviceName ?? '',\n [Fields.subTitle]: row.operationName,\n [Fields.mainStat]: stats.main,\n [Fields.secondaryStat]: stats.secondary,\n [Fields.color]: selfDuration / traceDuration,\n });\n\n // Sometimes some span can be missing. Don't add edges for those.\n if (row.parentSpanID && spanMap[row.parentSpanID].span) {\n edges.push({\n [Fields.id]: row.parentSpanID + '--' + row.spanID,\n [Fields.target]: row.spanID,\n [Fields.source]: row.parentSpanID,\n });\n }\n }\n\n return { nodes, edges };\n}\n\n/**\n * Get non overlapping duration of the ranges as they can overlap or have gaps.\n */\nexport function getNonOverlappingDuration(ranges: Array<[number, number]>): number {\n ranges.sort((a, b) => a[0] - b[0]);\n const mergedRanges = ranges.reduce<Array<[number, number]>>((acc, range) => {\n if (!acc.length) {\n return [range];\n }\n const tail = acc.slice(-1)[0];\n const [prevStart, prevEnd] = tail;\n const [start, end] = range;\n if (end < prevEnd) {\n // In this case the range is completely inside the prev range so we can just ignore it.\n return acc;\n }\n\n if (start > prevEnd) {\n // There is no overlap so we can just add it to stack\n return [...acc, range];\n }\n\n // We know there is overlap and current range ends later than previous so we can just extend the range\n return [...acc.slice(0, -1), [prevStart, end]];\n }, []);\n\n return mergedRanges.reduce((acc, range) => {\n return acc + (range[1] - range[0]);\n }, 0);\n}\n\n/**\n * Returns a map of the spans with children array for easier processing. It will also contain empty spans in case\n * span is missing but other spans are its children. This is more generic because it needs to allow iterating over\n * both arrays and dataframe views.\n */\nexport function makeSpanMap<T>(getSpan: (index: number) => { span: T; id: string; parentIds: string[] } | undefined): {\n [id: string]: { span: T; children: string[] };\n} {\n const spanMap: { [id: string]: { span?: T; children: string[] } } = {};\n\n let span;\n for (let index = 0; (span = getSpan(index)), !!span; index++) {\n if (!spanMap[span.id]) {\n spanMap[span.id] = {\n span: span.span,\n children: [],\n };\n } else {\n spanMap[span.id].span = span.span;\n }\n\n for (const parentId of span.parentIds) {\n if (parentId) {\n if (!spanMap[parentId]) {\n spanMap[parentId] = {\n span: undefined,\n children: [span.id],\n };\n } else {\n spanMap[parentId].children.push(span.id);\n }\n }\n }\n }\n // Discussion on this type assertion here: https://github.com/grafana/grafana/pull/80362/files#r1451019375\n return spanMap as { [id: string]: { span: T; children: string[] } };\n}\n\nexport function getStats(duration: number, traceDuration: number, selfDuration: number) {\n return {\n main: `${toFixedNoTrailingZeros(duration)}ms (${toFixedNoTrailingZeros((duration / traceDuration) * 100)}%)`,\n secondary: `${toFixedNoTrailingZeros(selfDuration)}ms (${toFixedNoTrailingZeros(\n (selfDuration / duration) * 100\n )}%)`,\n };\n}\n\nfunction toFixedNoTrailingZeros(n: number) {\n return parseFloat(n.toFixed(2));\n}\n\n/**\n * Create default frames used when returning data for node graph.\n */\nexport function makeFrames() {\n const nodesFrame = new MutableDataFrame({\n fields: [\n { name: Fields.id, type: FieldType.string },\n { name: Fields.title, type: FieldType.string },\n { name: Fields.subTitle, type: FieldType.string },\n { name: Fields.mainStat, type: FieldType.string, config: { displayName: 'Total time (% of trace)' } },\n { name: Fields.secondaryStat, type: FieldType.string, config: { displayName: 'Self time (% of total)' } },\n {\n name: Fields.color,\n type: FieldType.number,\n config: { color: { mode: 'continuous-GrYlRd' }, displayName: 'Self time / Trace duration' },\n },\n ],\n meta: {\n preferredVisualisationType: 'nodeGraph',\n },\n });\n\n const edgesFrame = new MutableDataFrame({\n fields: [\n { name: Fields.id, type: FieldType.string },\n { name: Fields.target, type: FieldType.string },\n { name: Fields.source, type: FieldType.string },\n ],\n meta: {\n preferredVisualisationType: 'nodeGraph',\n },\n });\n\n return [nodesFrame, edgesFrame];\n}\n\n/**\n * Get the duration of the whole trace as it isn't a part of the response data.\n * Note: Seems like this should be the same as just longest span, but this is probably safer.\n */\nfunction findTraceDuration(view: DataFrameView<TraceRow>): number {\n let traceEndTime = 0;\n let traceStartTime = Infinity;\n\n for (let i = 0; i < view.length; i++) {\n const row = view.get(i);\n\n if (row.startTime < traceStartTime) {\n traceStartTime = row.startTime;\n }\n\n if (row.startTime + row.duration > traceEndTime) {\n traceEndTime = row.startTime + row.duration;\n }\n }\n\n return traceEndTime - traceStartTime;\n}\n\ninterface Node {\n [Fields.id]: string;\n [Fields.title]: string;\n [Fields.subTitle]: string;\n [Fields.mainStat]: string;\n [Fields.secondaryStat]: string;\n [Fields.color]: number;\n}\n\ninterface Edge {\n [Fields.id]: string;\n [Fields.target]: string;\n [Fields.source]: string;\n}\n\ninterface TraceRow {\n traceID: string;\n spanID: string;\n parentSpanID: string;\n operationName: string;\n serviceName: string;\n serviceTags: string;\n startTime: number;\n duration: number;\n logs: string;\n tags: string;\n}\n","import { DataFrame, NodeGraphDataFrameFieldNames as Fields } from '@grafana/data';\nimport { getNonOverlappingDuration, getStats, makeFrames, makeSpanMap } from '@grafana/o11y-ds-frontend';\n\nimport { Span, TraceResponse } from './types';\n\ninterface Node {\n [Fields.id]: string;\n [Fields.title]: string;\n [Fields.subTitle]: string;\n [Fields.mainStat]: string;\n [Fields.secondaryStat]: string;\n [Fields.color]: number;\n}\n\ninterface Edge {\n [Fields.id]: string;\n [Fields.target]: string;\n [Fields.source]: string;\n}\n\nexport function createGraphFrames(data: TraceResponse): DataFrame[] {\n const { nodes, edges } = convertTraceToGraph(data);\n const [nodesFrame, edgesFrame] = makeFrames();\n\n for (const node of nodes) {\n nodesFrame.add(node);\n }\n\n for (const edge of edges) {\n edgesFrame.add(edge);\n }\n\n return [nodesFrame, edgesFrame];\n}\n\nfunction convertTraceToGraph(data: TraceResponse): { nodes: Node[]; edges: Edge[] } {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const traceDuration = findTraceDuration(data.spans);\n\n const spanMap = makeSpanMap((index) => {\n if (index >= data.spans.length) {\n return undefined;\n }\n const span = data.spans[index];\n return {\n span,\n id: span.spanID,\n parentIds: span.references?.filter((r) => r.refType === 'CHILD_OF').map((r) => r.spanID) || [],\n };\n });\n\n for (const span of data.spans) {\n const process = data.processes[span.processID];\n\n const ranges: Array<[number, number]> = spanMap[span.spanID].children.map((c) => {\n const span = spanMap[c].span;\n return [span.startTime, span.startTime + span.duration];\n });\n const childrenDuration = getNonOverlappingDuration(ranges);\n const selfDuration = span.duration - childrenDuration;\n const stats = getStats(span.duration / 1000, traceDuration / 1000, selfDuration / 1000);\n\n nodes.push({\n [Fields.id]: span.spanID,\n [Fields.title]: process?.serviceName ?? '',\n [Fields.subTitle]: span.operationName,\n [Fields.mainStat]: stats.main,\n [Fields.secondaryStat]: stats.secondary,\n [Fields.color]: selfDuration / traceDuration,\n });\n\n const parentSpanID = span.references?.find((r) => r.refType === 'CHILD_OF')?.spanID;\n // Sometimes some span can be missing. Don't add edges for those.\n if (parentSpanID && spanMap[parentSpanID].span) {\n edges.push({\n [Fields.id]: parentSpanID + '--' + span.spanID,\n [Fields.target]: span.spanID,\n [Fields.source]: parentSpanID,\n });\n }\n }\n\n return { nodes, edges };\n}\n\n/**\n * Get the duration of the whole trace as it isn't a part of the response data.\n * Note: Seems like this should be the same as just longest span, but this is probably safer.\n */\nfunction findTraceDuration(spans: Span[]): number {\n let traceEndTime = 0;\n let traceStartTime = Infinity;\n\n for (const span of spans) {\n if (span.startTime < traceStartTime) {\n traceStartTime = span.startTime;\n }\n\n if (span.startTime + span.duration > traceEndTime) {\n traceEndTime = span.startTime + span.duration;\n }\n }\n\n return traceEndTime - traceStartTime;\n}\n","import { DataFrame, FieldType, MutableDataFrame, TraceLog, TraceSpanRow } from '@grafana/data';\n\nimport { JaegerResponse, Span, TraceProcess, TraceResponse } from './types';\n\nexport function createTraceFrame(data: TraceResponse): DataFrame {\n const spans = data.spans.map((s) => toSpanRow(s, data.processes));\n\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string },\n { name: 'spanID', type: FieldType.string },\n { name: 'parentSpanID', type: FieldType.string },\n { name: 'operationName', type: FieldType.string },\n { name: 'serviceName', type: FieldType.string },\n { name: 'serviceTags', type: FieldType.other },\n { name: 'startTime', type: FieldType.number },\n { name: 'duration', type: FieldType.number },\n { name: 'logs', type: FieldType.other },\n { name: 'references', type: FieldType.other, values: [] },\n { name: 'tags', type: FieldType.other },\n { name: 'warnings', type: FieldType.other },\n { name: 'stackTraces', type: FieldType.other },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'jaeger',\n },\n },\n });\n\n for (const span of spans) {\n frame.add(span);\n }\n\n return frame;\n}\n\nfunction toSpanRow(span: Span, processes: Record<string, TraceProcess>): TraceSpanRow {\n const parentSpanID = span.references?.find((r) => r.refType === 'CHILD_OF')?.spanID;\n\n return {\n spanID: span.spanID,\n traceID: span.traceID,\n parentSpanID: parentSpanID,\n operationName: span.operationName,\n // from micro to millis\n startTime: span.startTime / 1000,\n duration: span.duration / 1000,\n logs: span.logs.map((l) => ({\n ...l,\n timestamp: l.timestamp / 1000,\n })),\n tags: span.tags,\n warnings: span.warnings ?? undefined,\n stackTraces: span.stackTraces,\n references: span.references?.filter((r) => r.spanID !== parentSpanID) ?? [], // parentSpanID is pushed to references in the transformTraceDataFrame method\n serviceName: processes[span.processID].serviceName,\n serviceTags: processes[span.processID].tags,\n };\n}\n\nexport function transformToJaeger(data: MutableDataFrame): JaegerResponse {\n let traceResponse: TraceResponse = {\n traceID: '',\n spans: [],\n processes: {},\n warnings: null,\n };\n let processes: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n\n // Set traceID\n if (!traceResponse.traceID) {\n traceResponse.traceID = span.traceID;\n }\n\n // Create process if doesn't exist\n if (!processes.find((p) => p === span.serviceName)) {\n processes.push(span.serviceName);\n traceResponse.processes[`p${processes.length}`] = {\n serviceName: span.serviceName,\n tags: span.serviceTags,\n };\n }\n\n // Create span\n traceResponse.spans.push({\n traceID: span.traceID,\n spanID: span.spanID,\n duration: span.duration * 1000,\n references: span.parentSpanID\n ? [\n {\n refType: 'CHILD_OF',\n spanID: span.parentSpanID,\n traceID: span.traceID,\n },\n ]\n : [],\n flags: 0,\n logs: span.logs.map((l: TraceLog) => ({\n ...l,\n timestamp: l.timestamp * 1000,\n })),\n operationName: span.operationName,\n processID:\n Object.keys(traceResponse.processes).find(\n (key) => traceResponse.processes[key].serviceName === span.serviceName\n ) || '',\n startTime: span.startTime * 1000,\n tags: span.tags,\n warnings: span.warnings ? span.warnings : null,\n });\n }\n\n return { data: [traceResponse], total: 0, limit: 0, offset: 0, errors: null };\n}\n","import { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n DataSourceJsonData,\n FieldType,\n MutableDataFrame,\n ScopedVars,\n toDataFrame,\n} from '@grafana/data';\nimport { createNodeGraphFrames, NodeGraphOptions, SpanBarOptions } from '@grafana/o11y-ds-frontend';\nimport { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport { TraceIdTimeParamsOptions } from './configuration/TraceIdTimeParams';\nimport { createGraphFrames } from './graphTransform';\nimport { createTraceFrame } from './responseTransform';\nimport { JaegerQuery } from './types';\n\nexport interface JaegerJsonData extends DataSourceJsonData {\n nodeGraph?: NodeGraphOptions;\n traceIdTimeParams?: TraceIdTimeParamsOptions;\n}\n\nexport class JaegerDatasource extends DataSourceWithBackend<JaegerQuery, JaegerJsonData> {\n uploadedJson: string | ArrayBuffer | null = null;\n nodeGraph?: NodeGraphOptions;\n traceIdTimeParams?: TraceIdTimeParamsOptions;\n spanBar?: SpanBarOptions;\n constructor(\n instanceSettings: DataSourceInstanceSettings<JaegerJsonData>,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.nodeGraph = instanceSettings.jsonData.nodeGraph;\n this.traceIdTimeParams = instanceSettings.jsonData.traceIdTimeParams;\n }\n\n async metadataRequest(url: string, params?: Record<string, unknown>) {\n return await this.getResource(url, params);\n }\n\n query(options: DataQueryRequest<JaegerQuery>): Observable<DataQueryResponse> {\n // At this moment we expect only one target. In case we somehow change the UI to be able to show multiple\n // traces at one we need to change this.\n const target: JaegerQuery = options.targets[0];\n if (!target) {\n return of({ data: [emptyTraceDataFrame] });\n }\n\n if (target.queryType === 'upload') {\n if (!this.uploadedJson) {\n return of({ data: [] });\n }\n\n try {\n const traceData = JSON.parse(this.uploadedJson as string).data[0];\n let data = [createTraceFrame(traceData)];\n if (this.nodeGraph?.enabled) {\n data.push(...createGraphFrames(traceData));\n }\n return of({ data });\n } catch (error) {\n return of({ error: { message: 'The JSON file uploaded is not in a valid Jaeger format' }, data: [] });\n }\n }\n\n return super.query({ ...options, targets: [target] }).pipe(\n map((response) => {\n // If the node graph is enabled and the query is a trace ID query, add the node graph frames to the response\n if (this.nodeGraph?.enabled && !target.queryType) {\n return addNodeGraphFramesToResponse(response);\n }\n return response;\n })\n );\n }\n\n interpolateVariablesInQueries(queries: JaegerQuery[], scopedVars: ScopedVars): JaegerQuery[] {\n if (!queries || queries.length === 0) {\n return [];\n }\n\n return queries.map((query) => {\n return {\n ...query,\n datasource: this.getRef(),\n ...this.applyTemplateVariables(query, scopedVars),\n };\n });\n }\n\n applyTemplateVariables(query: JaegerQuery, scopedVars: ScopedVars) {\n let expandedQuery = { ...query };\n\n if (query.tags && this.templateSrv.containsTemplate(query.tags)) {\n expandedQuery = {\n ...query,\n tags: this.templateSrv.replace(query.tags, scopedVars),\n };\n }\n\n return {\n ...expandedQuery,\n service: this.templateSrv.replace(query.service ?? '', scopedVars),\n operation: this.templateSrv.replace(query.operation ?? '', scopedVars),\n minDuration: this.templateSrv.replace(query.minDuration ?? '', scopedVars),\n maxDuration: this.templateSrv.replace(query.maxDuration ?? '', scopedVars),\n };\n }\n\n async testDatasource() {\n return await super.testDatasource();\n }\n\n getQueryDisplayText(query: JaegerQuery) {\n return query.query || '';\n }\n}\n\nconst emptyTraceDataFrame = new MutableDataFrame({\n fields: [\n {\n name: 'trace',\n type: FieldType.trace,\n values: [],\n },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'jaeger',\n },\n },\n});\n\nexport function addNodeGraphFramesToResponse(response: DataQueryResponse): DataQueryResponse {\n if (!response.data || response.data.length === 0) {\n return response;\n }\n\n // Convert the first frame to a DataFrame for node graph processing\n const frame = toDataFrame(response.data[0]);\n // Add the node graph frames to the response\n const data = response.data.concat(createNodeGraphFrames(frame));\n return {\n ...response,\n data,\n };\n}\n","import { DataSourcePlugin } from '@grafana/data';\n\nimport CheatSheet from './CheatSheet';\nimport { QueryEditor } from './components/QueryEditor';\nimport { ConfigEditor } from './configuration/ConfigEditor';\nimport { JaegerDatasource } from './datasource';\n\nexport const plugin = new DataSourcePlugin(JaegerDatasource)\n .setConfigEditor(ConfigEditor)\n .setQueryEditor(QueryEditor)\n .setQueryEditorHelp(CheatSheet);\n"],"names":["module","exports","__WEBPACK_EXTERNAL_MODULE__7__","f","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","Fragment","jsx","jsxs","__WEBPACK_EXTERNAL_MODULE__59__","__WEBPACK_EXTERNAL_MODULE__89__","__WEBPACK_EXTERNAL_MODULE__269__","__WEBPACK_EXTERNAL_MODULE__308__","__WEBPACK_EXTERNAL_MODULE__531__","__WEBPACK_EXTERNAL_MODULE__781__","__WEBPACK_EXTERNAL_MODULE__959__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","o","defineProperty","enumerable","get","obj","prop","r","toStringTag","value","slice","lastIndexOf","getStyles","theme","unorderedList","css","listStyleType","timeoutMap","TemporaryAlert","style","useTheme2","position","zIndex","portal","top","right","visible","setVisible","useState","timer","setTimer","useEffect","clearTimeout","text","setTimeout","severity","Alert","className","elevated","onRemove","title","durationPlaceholder","allOperationsOption","label","SearchForm","datasource","query","onChange","alertText","setAlertText","serviceOptions","setServiceOptions","operationOptions","setOperationOptions","isLoading","setIsLoading","services","operations","loadOptions","useCallback","url","loaderOfType","prevValue","values","metadataRequest","filteredOptions","sort","map","option","filter","item","fuzzyMatch","found","error","Error","message","service","getTemplateSrv","containsTemplate","push","toOption","encodeURIComponent","replace","operation","div","maxWidth","InlineFieldRow","InlineField","labelWidth","grow","Select","inputId","options","onOpenMenu","find","v","placeholder","menuPlacement","isClearable","aria-label","allowCustomValue","disabled","tooltip","Input","id","tags","currentTarget","name","minDuration","maxDuration","limit","parseInt","container","width","GenericConfigSection","children","description","isCollapsible","isInitiallyOpen","kind","colors","typography","spacing","isOpen","setIsOpen","iconName","isSubSection","collapsibleButtonAriaLabel","styles","header","display","justifyContent","alignItems","margin","subtitle","fontWeight","fontWeightRegular","descriptionText","marginTop","marginBottom","bodySmall","color","secondary","content","IconButton","onClick","size","ConfigSection","ConfigDescriptionLink","suffix","feature","useStyles2","href","rel","target","link","textDecoration","marginLeft","useDebounce","fn","ms","deps","_a","ready","useRef","timeout","callback","isReady","set","clear","useTimeoutFn","cancel","reset","validateIntervalRegex","validateInterval","val","regex","match","IntervalInput","intervalIsInvalid","setIntervalIsInvalid","validationRegex","fieldProps","invalid","isInvalidError","ariaLabel","TagMappingInput","wrapper","length","idx","pair","SegmentInput","i","String","InlineLabel","operator","ToolbarButton","cx","removeTag","icon","flexDirection","gap","v1","palette","orange","marginRight","TraceToLogsSettings","onOptionsChange","supportedDataSourceTypes","traceToLogs","useMemo","data","tracesToLogsV2","tracesToLogs","customQuery","datasourceUid","mapTagNamesEnabled","mappedTags","tag","filterByTraceID","filterBySpanID","spanStartTimeShift","spanEndTimeShift","getTraceToLogsOptions","jsonData","updateTracesToLogs","DataSourcePicker","ds","includes","noDefault","uid","onClear","getTimeShiftLabel","getTimeShiftTooltip","invalidTimeShiftError","IdFilter","Boolean","InlineSwitch","event","checked","allowFullScreen","defaultVal","TraceToLogsSection","TraceToMetricsSettings","row","pluginId","tracesToMetrics","updateDatasourcePluginJsonDataOption","queries","queryRow","newQueries","traceToMetricQuery","index","updatedQueries","Button","variant","_","TraceToMetricsSection","infoText","paddingBottom","flexFlow","ConfigSubSection","NodeGraphSettings","nodeGraph","enabled","NodeGraphSection","NONE","DURATION","TAG","SpanBarSettings","selectOptions","spanBar","SpanBarSection","DataSourceDescription","dataSourceName","docsLink","hasRequiredFields","body","ConnectionSettings","config","urlPlaceholder","urlTooltip","urlLabel","isValidUrl","test","htmlFor","readOnly","required","interactive","useCommonStyles","inlineFieldNoMarginRight","inlineFieldWithSecret","flexGrow","BasicAuth","user","passwordConfigured","userLabel","userTooltip","userPlaceholder","passwordLabel","passwordTooltip","passwordPlaceholder","onUserChange","onPasswordChange","onPasswordReset","commonStyles","lastInlineField","SecretInput","isConfigured","onReset","AuthMethod","AuthMethod2","defaultOptions","CrossSiteCredentials","OAuthForward","NoAuth","AuthMethodSettings","selectedMethod","mostCommonMethod","visibleMethods","visibleMethodsFromProps","defaultOptionsOverrides","customMethods","onAuthMethodSelect","basicAuth","_b","_c","_d","authMethodChanged","setAuthMethodChanged","_a2","hasSelect","preparedOptions","customOptions","reduce","acc","method","preparedDefaultOptions","allOptions","selected","AuthFieldsComponent","startsWith","component","authMethods","padding","border","weak","selectedMethodFields","Field","TLSSettingsSection","tooltipText","onToggle","checkboxContainer","infoIcon","Checkbox","Tooltip","placement","Icon","SelfSignedCertificate","certificateConfigured","onCertificateChange","onCertificateReset","tooltips","newEnabled","certificateLabel","SecretTextArea","rows","TLSClientAuth","serverName","clientCertificateConfigured","clientKeyConfigured","onServerNameChange","onClientCertificateChange","onClientKeyChange","onClientCertificateReset","onClientKeyReset","serverNameLabel","keyLabel","SkipTLSVerification","TLSSettings","selfSignedCertificate","TLSClientAuth$1","skipTLSVerification","CustomHeader","onBlur","onDelete","input","minWidth","headerNameField","paddingRight","headerValueField","removeHeaderBtn","configured","tooltipPlacement","CustomHeaders","headers","headersFromProps","setHeaders","uniqueId","headers2","changed","newHeaders","addHeaderButton","header2","onHeaderChange","findIndex","splice","onHeaderDelete","fill","Math","random","toString","Auth","TLS","customHeaders","headerNamePrefix","headerValuePrefix","convertLegacyAuthProps","getSelectedMethod","getOnAuthMethodSelectHandler","getBasicAuthProps","getTLSProps","getCustomHeaders","withCredentials","oauthPassThru","basicAuthUser","secureJsonFields","basicAuthPassword","password","secureJsonData","tlsAuthWithCACert","tlsCACert","certificate","tlsAuth","tlsClientCert","tlsClientKey","clientCertificate","clientKey","tlsSkipVerify","keys","newJsonData","fromEntries","entries","newSecureJsonData","newSecureJsonFields","forEach","AdvancedHttpSettings","TagsInput","keepCookies","cookies","min","TraceIdTimeParams","h3","traceIdTimeParams","createNodeGraphFrames","nodes","edges","view","DataFrameView","traceDuration","traceEndTime","traceStartTime","Infinity","startTime","duration","findTraceDuration","spanMap","makeSpanMap","span","spanID","parentIds","parentSpanID","childrenDuration","getNonOverlappingDuration","selfDuration","stats","getStats","Fields","serviceName","subTitle","operationName","mainStat","main","secondaryStat","source","convertTraceToGraph","nodesFrame","edgesFrame","makeFrames","node","add","edge","ranges","range","tail","prevStart","prevEnd","start","end","getSpan","parentId","toFixedNoTrailingZeros","parseFloat","toFixed","MutableDataFrame","fields","FieldType","string","displayName","number","mode","meta","preferredVisualisationType","createGraphFrames","spans","references","refType","process","processes","processID","createTraceFrame","s","traceID","logs","timestamp","warnings","stackTraces","serviceTags","toSpanRow","frame","other","custom","traceFormat","JaegerDatasource","DataSourceWithBackend","params","this","getResource","targets","of","emptyTraceDataFrame","queryType","uploadedJson","traceData","JSON","parse","super","pipe","response","toDataFrame","concat","addNodeGraphFramesToResponse","interpolateVariablesInQueries","scopedVars","getRef","applyTemplateVariables","expandedQuery","templateSrv","testDatasource","getQueryDisplayText","constructor","instanceSettings","trace","plugin","DataSourcePlugin","setConfigEditor","Divider","Stack","direction","secureSocksDSProxyEnabled","SecureSocksProxySettings","setQueryEditor","onRunQuery","uploadModalOpen","setUploadModalOpen","onChangeQuery","nextQuery","Modal","onDismiss","FileDropzone","multiple","onLoad","result","RadioButtonGroup","QueryField","portalOrigin","renderEditorBody","setQueryEditorHelp","h2","TextLink","external","hr","ul","li"],"sourceRoot":""}
.
Edit
..
Edit
CHANGELOG.md
Edit
LICENSE
Edit
README.md
Edit
img
Edit
mockJsonResponse.json
Edit
mockSearchResponse.json
Edit
mockTraceResponse.json
Edit
module.js
Edit
module.js.LICENSE.txt
Edit
module.js.map
Edit
plugin.json
Edit