{"version":3,"file":"514.766de06cfa1d0a077de4.js","mappings":"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","sources":["webpack://grafana/./packages/jaeger-ui-components/src/Theme.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/TimelineHeaderRow/TimelineCollapser.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/DraggableManager/EUpdateTypes.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/DraggableManager/DraggableManager.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/TimelineHeaderRow/TimelineColumnResizer.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/TimelineHeaderRow/TimelineViewingLayer.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/date.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/number.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/utils.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/Ticks.tsx","webpack://grafana/./packages/jaeger-ui-components/src/uberUtilityStyles.ts","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/TimelineRow.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/TimelineHeaderRow/TimelineHeaderRow.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/ListView/Positions.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/ListView/index.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/NewWindowIcon.tsx","webpack://grafana/./packages/jaeger-ui-components/src/uiElementsContext.tsx","webpack://grafana/./packages/jaeger-ui-components/src/url/externalLinkContext.tsx","webpack://grafana/./packages/jaeger-ui-components/src/url/ReferenceLink.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/ReferencesButton.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/span-ancestor-ids.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanTreeOffset.tsx","webpack://grafana/./node_modules/recompose/es/Recompose.js","webpack://grafana/./packages/jaeger-ui-components/src/common/CopyIcon.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/KeyValuesTable.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/AccordianKeyValues.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/AccordianKeyValues.markers.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/AccordianLogs.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanBar.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanBarRow.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/TextList.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/AccordianText.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/LabeledList.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/AccordianReferences.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetailRow.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/color-generator.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/VirtualizedTraceView.tsx","webpack://grafana/./packages/jaeger-ui-components/src/constants/tag-keys.tsx","webpack://grafana/./packages/jaeger-ui-components/src/keyboard-mappings.tsx","webpack://grafana/./packages/jaeger-ui-components/src/keyboard-shortcuts.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/index.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/CanvasSpanGraph.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/render-into-canvas.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/TickLabels.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/GraphTicks.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/Scrubber.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/ViewingLayer.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/index.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/UiFindInput.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/TracePageSearchBar.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/TracePageSearchBar.markers.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/BreakableText.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/LoadingIndicator.tsx","webpack://grafana/./packages/jaeger-ui-components/src/constants/index.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/TraceName.tsx","webpack://grafana/./packages/jaeger-ui-components/src/model/trace-viewer.ts","webpack://grafana/./node_modules/lru-memoize/dist/lru-memoize.es.js","webpack://grafana/./packages/jaeger-ui-components/src/constants/default-config.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/config/get-config.tsx","webpack://grafana/./packages/jaeger-ui-components/src/model/span.tsx","webpack://grafana/./packages/jaeger-ui-components/src/model/link-patterns.tsx","webpack://grafana/./packages/jaeger-ui-components/src/common/ExternalLinks.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TracePageHeader/TracePageHeader.tsx","webpack://grafana/./packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/DetailState.tsx","webpack://grafana/./packages/jaeger-ui-components/src/selectors/process.js","webpack://grafana/./packages/jaeger-ui-components/src/selectors/span.js","webpack://grafana/./packages/jaeger-ui-components/src/utils/TreeNode.js","webpack://grafana/./packages/jaeger-ui-components/src/selectors/trace.js","webpack://grafana/./packages/jaeger-ui-components/src/utils/sort.js","webpack://grafana/./packages/jaeger-ui-components/src/model/transform-trace-data.tsx","webpack://grafana/./packages/jaeger-ui-components/src/utils/filter-spans.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/responseTransform.ts","webpack://grafana/./node_modules/change-emitter/lib/index.js","webpack://grafana/./node_modules/combokeys/Combokeys/index.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/addEvents.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/bind.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/bindMultiple.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/bindSequence.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/bindSingle.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/detach.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/dom-event.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/fireCallback.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/getKeyInfo.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/getMatches.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/getReverseMap.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/handleKey.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/handleKeyEvent.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/modifiersMatch.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/pickBestAction.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/reset.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/resetSequenceTimer.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/resetSequences.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/stopCallback.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/trigger.js","webpack://grafana/./node_modules/combokeys/Combokeys/prototype/unbind.js","webpack://grafana/./node_modules/combokeys/Combokeys/reset.js","webpack://grafana/./node_modules/combokeys/helpers/characterFromEvent.js","webpack://grafana/./node_modules/combokeys/helpers/eventModifiers.js","webpack://grafana/./node_modules/combokeys/helpers/isModifier.js","webpack://grafana/./node_modules/combokeys/helpers/keysFromString.js","webpack://grafana/./node_modules/combokeys/helpers/preventDefault.js","webpack://grafana/./node_modules/combokeys/helpers/shift-map.js","webpack://grafana/./node_modules/combokeys/helpers/special-aliases.js","webpack://grafana/./node_modules/combokeys/helpers/special-characters-map.js","webpack://grafana/./node_modules/combokeys/helpers/special-keys-map.js","webpack://grafana/./node_modules/combokeys/helpers/stopPropagation.js","webpack://grafana/./node_modules/copy-to-clipboard/index.js","webpack://grafana/./node_modules/deep-freeze/index.js","webpack://grafana/./node_modules/fbjs/lib/shallowEqual.js","webpack://grafana/./node_modules/fuzzy/lib/fuzzy.js","webpack://grafana/./node_modules/json-markup/index.js","webpack://grafana/./node_modules/react-icon-base/lib/index.js","webpack://grafana/./node_modules/react-icons/lib/io/alert.js","webpack://grafana/./node_modules/react-icons/lib/io/android-locate.js","webpack://grafana/./node_modules/react-icons/lib/io/android-open.js","webpack://grafana/./node_modules/react-icons/lib/io/arrow-right-a.js","webpack://grafana/./node_modules/react-icons/lib/io/chevron-right.js","webpack://grafana/./node_modules/react-icons/lib/io/ios-arrow-down.js","webpack://grafana/./node_modules/react-icons/lib/io/ios-arrow-right.js","webpack://grafana/./node_modules/react-icons/lib/io/network.js","webpack://grafana/./node_modules/react-icons/lib/md/file-upload.js","webpack://grafana/./node_modules/react-icons/lib/md/keyboard-arrow-right.js","webpack://grafana/./node_modules/recompose/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://grafana/./node_modules/toggle-selection/index.js","webpack://grafana/./packages/jaeger-ui-components/node_modules/classnames/index.js","webpack://grafana/./packages/jaeger-ui-components/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://grafana/./packages/jaeger-ui-components/node_modules/react-is/cjs/react-is.production.min.js","webpack://grafana/./packages/jaeger-ui-components/node_modules/react-is/index.js"],"sourcesContent":["// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React, { useContext } from 'react';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport memoizeOne from 'memoize-one';\nimport tinycolor from 'tinycolor2';\n\nconst COLORS_HEX = [\n '#17B8BE',\n '#F8DCA1',\n '#B7885E',\n '#FFCB99',\n '#F89570',\n '#829AE3',\n '#E79FD5',\n '#1E96BE',\n '#89DAC1',\n '#B3AD9E',\n '#12939A',\n '#DDB27C',\n '#88572C',\n '#FF9833',\n '#EF5D28',\n '#162A65',\n '#DA70BF',\n '#125C77',\n '#4DC19C',\n '#776E57',\n];\n\nconst COLORS_HEX_DARK = [\n '#17B8BE',\n '#F8DCA1',\n '#B7885E',\n '#FFCB99',\n '#F89570',\n '#829AE3',\n '#E79FD5',\n '#1E96BE',\n '#89DAC1',\n '#B3AD9E',\n '#12939A',\n '#DDB27C',\n '#88572C',\n '#FF9833',\n '#EF5D28',\n '#DA70BF',\n '#4DC19C',\n '#776E57',\n];\n\nexport type ThemeOptions = Partial;\n\nexport enum ThemeType {\n Dark,\n Light,\n}\n\nexport type Theme = {\n type: ThemeType;\n servicesColorPalette: string[];\n borderStyle: string;\n components?: {\n TraceName?: {\n fontSize?: number | string;\n };\n };\n};\n\nexport const defaultTheme: Theme = {\n type: ThemeType.Light,\n borderStyle: '1px solid #bbb',\n servicesColorPalette: COLORS_HEX,\n};\n\nexport function isLight(theme?: Theme | ThemeOptions) {\n // Light theme is default type not set which only happens if called for ThemeOptions.\n return theme && theme.type ? theme.type === ThemeType.Light : false;\n}\n\nconst ThemeContext = React.createContext(undefined);\nThemeContext.displayName = 'ThemeContext';\n\nexport const ThemeProvider = ThemeContext.Provider;\n\ntype ThemeConsumerProps = {\n children: (theme: Theme) => React.ReactNode;\n};\nexport function ThemeConsumer(props: ThemeConsumerProps) {\n return (\n \n {(value: ThemeOptions | undefined) => {\n const theme = memoizedThemeMerge(value);\n return props.children(theme);\n }}\n \n );\n}\n\nconst memoizedThemeMerge = memoizeOne((value?: ThemeOptions) => {\n const darkOverrides: Partial = {};\n if (!isLight(value)) {\n darkOverrides.servicesColorPalette = COLORS_HEX_DARK;\n }\n return value\n ? {\n ...defaultTheme,\n ...darkOverrides,\n ...value,\n }\n : defaultTheme;\n});\n\ntype WrappedWithThemeComponent = React.ComponentType> & {\n wrapped: React.ComponentType;\n};\n\nexport const withTheme = (\n Component: React.ComponentType\n): WrappedWithThemeComponent => {\n let WithTheme: React.ComponentType> = (props) => {\n return (\n \n {(theme: Theme) => {\n return (\n \n );\n }}\n \n );\n };\n\n WithTheme.displayName = `WithTheme(${Component.displayName})`;\n WithTheme = hoistNonReactStatics>, React.ComponentType>(\n WithTheme,\n Component\n );\n (WithTheme as WrappedWithThemeComponent).wrapped = Component;\n return WithTheme as WrappedWithThemeComponent;\n};\n\nexport function useTheme(): Theme {\n const theme = useContext(ThemeContext);\n return {\n ...defaultTheme,\n ...theme,\n };\n}\n\nexport const createStyle = ReturnType>(fn: Fn) => {\n return memoizeOne(fn);\n};\n\n/**\n * Tries to get a dark variant color. Either by simply inverting the luminosity and darkening or lightening the color\n * a bit, or if base is provided, tries 2 variants of lighter and darker colors and checks which is more readable with\n * the base.\n * @param theme\n * @param hex\n * @param base\n */\nexport function autoColor(theme: Theme, hex: string, base?: string) {\n if (isLight(theme)) {\n return hex;\n } else {\n if (base) {\n const color = tinycolor(hex);\n return tinycolor\n .mostReadable(\n base,\n [\n color.clone().lighten(25),\n color.clone().lighten(10),\n color,\n color.clone().darken(10),\n color.clone().darken(25),\n ],\n {\n includeFallbackColors: false,\n }\n )\n .toHex8String();\n }\n const color = tinycolor(hex).toHsl();\n color.l = 1 - color.l;\n const newColor = tinycolor(color);\n return newColor.isLight() ? newColor.darken(5).toHex8String() : newColor.lighten(5).toHex8String();\n }\n}\n\n/**\n * With theme overrides you can use both number or string (for things like rem units) so this makes sure we convert\n * the value accordingly or use fallback if not set\n */\nexport function safeSize(size: number | string | undefined, fallback: string): string {\n if (!size) {\n return fallback;\n }\n\n if (typeof size === 'string') {\n return size;\n } else {\n return `${size}px`;\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { IconButton } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport React from 'react';\nimport { createStyle } from '../../Theme';\n\nconst getStyles = createStyle(() => {\n return {\n TimelineCollapser: css`\n align-items: center;\n display: flex;\n flex: none;\n justify-content: center;\n margin-right: 0.5rem;\n `,\n };\n});\n\ntype CollapserProps = {\n onCollapseAll: () => void;\n onCollapseOne: () => void;\n onExpandOne: () => void;\n onExpandAll: () => void;\n};\n\nexport function TimelineCollapser(props: CollapserProps) {\n const { onExpandAll, onExpandOne, onCollapseAll, onCollapseOne } = props;\n const styles = getStyles();\n return (\n
\n \n \n \n \n
\n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// // export default {\n// const updateTypes = {\n// DRAG_END: 'DRAG_END',\n// DRAG_MOVE: 'DRAG_MOVE',\n// DRAG_START: 'DRAG_START',\n// MOUSE_ENTER: 'MOUSE_ENTER',\n// MOUSE_LEAVE: 'MOUSE_LEAVE',\n// MOUSE_MOVE: 'MOUSE_MOVE',\n// };\n\n// const typeUpdateTypes = updateTypes as { [K in keyof typeof updateTypes]: K };\n\nenum EUpdateTypes {\n DragEnd = 'DragEnd',\n DragMove = 'DragMove',\n DragStart = 'DragStart',\n MouseEnter = 'MouseEnter',\n MouseLeave = 'MouseLeave',\n MouseMove = 'MouseMove',\n}\n\nexport default EUpdateTypes;\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { get as _get } from 'lodash';\n\nimport EUpdateTypes from './EUpdateTypes';\nimport { DraggableBounds, DraggingUpdate } from './types';\nimport { TNil } from '../../types';\n\nconst LEFT_MOUSE_BUTTON = 0;\n\ntype DraggableManagerOptions = {\n getBounds: (tag: string | TNil) => DraggableBounds;\n onMouseEnter?: (update: DraggingUpdate) => void;\n onMouseLeave?: (update: DraggingUpdate) => void;\n onMouseMove?: (update: DraggingUpdate) => void;\n onDragStart?: (update: DraggingUpdate) => void;\n onDragMove?: (update: DraggingUpdate) => void;\n onDragEnd?: (update: DraggingUpdate) => void;\n resetBoundsOnResize?: boolean;\n tag?: string;\n};\n\nexport default class DraggableManager {\n // cache the last known DraggableBounds (invalidate via `#resetBounds())\n _bounds: DraggableBounds | TNil;\n _isDragging: boolean;\n // optional callbacks for various dragging events\n _onMouseEnter: ((update: DraggingUpdate) => void) | TNil;\n _onMouseLeave: ((update: DraggingUpdate) => void) | TNil;\n _onMouseMove: ((update: DraggingUpdate) => void) | TNil;\n _onDragStart: ((update: DraggingUpdate) => void) | TNil;\n _onDragMove: ((update: DraggingUpdate) => void) | TNil;\n _onDragEnd: ((update: DraggingUpdate) => void) | TNil;\n // whether to reset the bounds on window resize\n _resetBoundsOnResize: boolean;\n\n /**\n * Get the `DraggableBounds` for the current drag. The returned value is\n * cached until either `#resetBounds()` is called or the window is resized\n * (assuming `_resetBoundsOnResize` is `true`). The `DraggableBounds` defines\n * the range the current drag can span to. It also establishes the left offset\n * to adjust `clientX` by (from the `MouseEvent`s).\n */\n getBounds: (tag: string | TNil) => DraggableBounds;\n\n // convenience data\n tag: string | TNil;\n\n // handlers for integration with DOM elements\n handleMouseEnter: (event: React.MouseEvent) => void;\n handleMouseMove: (event: React.MouseEvent) => void;\n handleMouseLeave: (event: React.MouseEvent) => void;\n handleMouseDown: (event: React.MouseEvent) => void;\n\n constructor({ getBounds, tag, resetBoundsOnResize = true, ...rest }: DraggableManagerOptions) {\n this.handleMouseDown = this._handleDragEvent;\n this.handleMouseEnter = this._handleMinorMouseEvent;\n this.handleMouseMove = this._handleMinorMouseEvent;\n this.handleMouseLeave = this._handleMinorMouseEvent;\n\n this.getBounds = getBounds;\n this.tag = tag;\n this._isDragging = false;\n this._bounds = undefined;\n this._resetBoundsOnResize = Boolean(resetBoundsOnResize);\n if (this._resetBoundsOnResize) {\n window.addEventListener('resize', this.resetBounds);\n }\n this._onMouseEnter = rest.onMouseEnter;\n this._onMouseLeave = rest.onMouseLeave;\n this._onMouseMove = rest.onMouseMove;\n this._onDragStart = rest.onDragStart;\n this._onDragMove = rest.onDragMove;\n this._onDragEnd = rest.onDragEnd;\n }\n\n _getBounds(): DraggableBounds {\n if (!this._bounds) {\n this._bounds = this.getBounds(this.tag);\n }\n return this._bounds;\n }\n\n _getPosition(clientX: number) {\n const { clientXLeft, maxValue, minValue, width } = this._getBounds();\n let x = clientX - clientXLeft;\n let value = x / width;\n if (minValue != null && value < minValue) {\n value = minValue;\n x = minValue * width;\n } else if (maxValue != null && value > maxValue) {\n value = maxValue;\n x = maxValue * width;\n }\n return { value, x };\n }\n\n _stopDragging() {\n window.removeEventListener('mousemove', this._handleDragEvent);\n window.removeEventListener('mouseup', this._handleDragEvent);\n const style = _get(document, 'body.style');\n if (style) {\n style.userSelect = null;\n }\n this._isDragging = false;\n }\n\n isDragging() {\n return this._isDragging;\n }\n\n dispose() {\n if (this._isDragging) {\n this._stopDragging();\n }\n if (this._resetBoundsOnResize) {\n window.removeEventListener('resize', this.resetBounds);\n }\n this._bounds = undefined;\n this._onMouseEnter = undefined;\n this._onMouseLeave = undefined;\n this._onMouseMove = undefined;\n this._onDragStart = undefined;\n this._onDragMove = undefined;\n this._onDragEnd = undefined;\n }\n\n resetBounds = () => {\n this._bounds = undefined;\n };\n\n _handleMinorMouseEvent = (event: React.MouseEvent) => {\n const { button, clientX, type: eventType } = event;\n if (this._isDragging || button !== LEFT_MOUSE_BUTTON) {\n return;\n }\n let type: EUpdateTypes | null = null;\n let handler: ((update: DraggingUpdate) => void) | TNil;\n if (eventType === 'mouseenter') {\n type = EUpdateTypes.MouseEnter;\n handler = this._onMouseEnter;\n } else if (eventType === 'mouseleave') {\n type = EUpdateTypes.MouseLeave;\n handler = this._onMouseLeave;\n } else if (eventType === 'mousemove') {\n type = EUpdateTypes.MouseMove;\n handler = this._onMouseMove;\n } else {\n throw new Error(`invalid event type: ${eventType}`);\n }\n if (!handler) {\n return;\n }\n const { value, x } = this._getPosition(clientX);\n handler({\n event,\n type,\n value,\n x,\n manager: this,\n tag: this.tag,\n });\n };\n\n _handleDragEvent = (event: MouseEvent | React.MouseEvent) => {\n const { button, clientX, type: eventType } = event;\n let type: EUpdateTypes | null = null;\n let handler: ((update: DraggingUpdate) => void) | TNil;\n if (eventType === 'mousedown') {\n if (this._isDragging || button !== LEFT_MOUSE_BUTTON) {\n return;\n }\n window.addEventListener('mousemove', this._handleDragEvent);\n window.addEventListener('mouseup', this._handleDragEvent);\n const style = _get(document, 'body.style');\n if (style) {\n style.userSelect = 'none';\n }\n this._isDragging = true;\n\n type = EUpdateTypes.DragStart;\n handler = this._onDragStart;\n } else if (eventType === 'mousemove') {\n if (!this._isDragging) {\n return;\n }\n type = EUpdateTypes.DragMove;\n handler = this._onDragMove;\n } else if (eventType === 'mouseup') {\n if (!this._isDragging) {\n return;\n }\n this._stopDragging();\n type = EUpdateTypes.DragEnd;\n handler = this._onDragEnd;\n } else {\n throw new Error(`invalid event type: ${eventType}`);\n }\n if (!handler) {\n return;\n }\n const { value, x } = this._getPosition(clientX);\n handler({\n event,\n type,\n value,\n x,\n manager: this,\n tag: this.tag,\n });\n };\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport { TNil } from '../../types';\nimport DraggableManager, { DraggableBounds, DraggingUpdate } from '../../utils/DraggableManager';\nimport { createStyle } from '../../Theme';\n\nexport const getStyles = createStyle(() => {\n return {\n TimelineColumnResizer: css`\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n `,\n wrapper: css`\n bottom: 0;\n position: absolute;\n top: 0;\n `,\n dragger: css`\n border-left: 2px solid transparent;\n cursor: col-resize;\n height: 5000px;\n margin-left: -1px;\n position: absolute;\n top: 0;\n width: 1px;\n z-index: 10;\n &:hover {\n border-left: 2px solid rgba(0, 0, 0, 0.3);\n }\n &::before {\n position: absolute;\n top: 0;\n bottom: 0;\n left: -8px;\n right: 0;\n content: ' ';\n }\n `,\n draggerDragging: css`\n background: rgba(136, 0, 136, 0.05);\n width: unset;\n &::before {\n left: -2000px;\n right: -2000px;\n }\n `,\n draggerDraggingLeft: css`\n border-left: 2px solid #808;\n border-right: 1px solid #999;\n `,\n draggerDraggingRight: css`\n border-left: 1px solid #999;\n border-right: 2px solid #808;\n `,\n gripIcon: css`\n position: absolute;\n top: 0;\n bottom: 0;\n &::before,\n &::after {\n border-right: 1px solid #ccc;\n content: ' ';\n height: 9px;\n position: absolute;\n right: 9px;\n top: 25px;\n }\n &::after {\n right: 5px;\n }\n `,\n gripIconDragging: css`\n &::before,\n &::after {\n border-right: 1px solid rgba(136, 0, 136, 0.5);\n }\n `,\n };\n});\n\ntype TimelineColumnResizerProps = {\n min: number;\n max: number;\n onChange: (newSize: number) => void;\n position: number;\n columnResizeHandleHeight: number;\n};\n\ntype TimelineColumnResizerState = {\n dragPosition: number | TNil;\n};\n\nexport default class TimelineColumnResizer extends React.PureComponent<\n TimelineColumnResizerProps,\n TimelineColumnResizerState\n> {\n state: TimelineColumnResizerState;\n\n _dragManager: DraggableManager;\n _rootElm: Element | TNil;\n\n constructor(props: TimelineColumnResizerProps) {\n super(props);\n this._dragManager = new DraggableManager({\n getBounds: this._getDraggingBounds,\n onDragEnd: this._handleDragEnd,\n onDragMove: this._handleDragUpdate,\n onDragStart: this._handleDragUpdate,\n });\n this._rootElm = undefined;\n this.state = {\n dragPosition: null,\n };\n }\n\n componentWillUnmount() {\n this._dragManager.dispose();\n }\n\n _setRootElm = (elm: Element | TNil) => {\n this._rootElm = elm;\n };\n\n _getDraggingBounds = (): DraggableBounds => {\n if (!this._rootElm) {\n throw new Error('invalid state');\n }\n const { left: clientXLeft, width } = this._rootElm.getBoundingClientRect();\n const { min, max } = this.props;\n return {\n clientXLeft,\n width,\n maxValue: max,\n minValue: min,\n };\n };\n\n _handleDragUpdate = ({ value }: DraggingUpdate) => {\n this.setState({ dragPosition: value });\n };\n\n _handleDragEnd = ({ manager, value }: DraggingUpdate) => {\n manager.resetBounds();\n this.setState({ dragPosition: null });\n this.props.onChange(value);\n };\n\n render() {\n let left;\n let draggerStyle: React.CSSProperties;\n const { position, columnResizeHandleHeight } = this.props;\n const { dragPosition } = this.state;\n left = `${position * 100}%`;\n const gripStyle = { left };\n let isDraggingLeft = false;\n let isDraggingRight = false;\n const styles = getStyles();\n\n if (this._dragManager.isDragging() && this._rootElm && dragPosition != null) {\n isDraggingLeft = dragPosition < position;\n isDraggingRight = dragPosition > position;\n left = `${dragPosition * 100}%`;\n // Draw a highlight from the current dragged position back to the original\n // position, e.g. highlight the change. Draw the highlight via `left` and\n // `right` css styles (simpler than using `width`).\n const draggerLeft = `${Math.min(position, dragPosition) * 100}%`;\n // subtract 1px for draggerRight to deal with the right border being off\n // by 1px when dragging left\n const draggerRight = `calc(${(1 - Math.max(position, dragPosition)) * 100}% - 1px)`;\n draggerStyle = { left: draggerLeft, right: draggerRight };\n } else {\n draggerStyle = gripStyle;\n }\n draggerStyle.height = columnResizeHandleHeight;\n\n const isDragging = isDraggingLeft || isDraggingRight;\n return (\n
\n \n \n
\n );\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css, cx } from '@emotion/css';\n\nimport { TUpdateViewRangeTimeFunction, ViewRangeTime, ViewRangeTimeUpdate } from '../types';\nimport { TNil } from '../../types';\nimport DraggableManager, { DraggableBounds, DraggingUpdate } from '../../utils/DraggableManager';\nimport { createStyle } from '../../Theme';\n\n// exported for testing\nexport const getStyles = createStyle(() => {\n return {\n TimelineViewingLayer: css`\n label: TimelineViewingLayer;\n bottom: 0;\n cursor: vertical-text;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n `,\n TimelineViewingLayerCursorGuide: css`\n label: TimelineViewingLayerCursorGuide;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 1px;\n background-color: red;\n `,\n TimelineViewingLayerDragged: css`\n label: TimelineViewingLayerDragged;\n position: absolute;\n top: 0;\n bottom: 0;\n `,\n TimelineViewingLayerDraggedDraggingLeft: css`\n label: TimelineViewingLayerDraggedDraggingLeft;\n border-left: 1px solid;\n `,\n TimelineViewingLayerDraggedDraggingRight: css`\n label: TimelineViewingLayerDraggedDraggingRight;\n border-right: 1px solid;\n `,\n TimelineViewingLayerDraggedShiftDrag: css`\n label: TimelineViewingLayerDraggedShiftDrag;\n background-color: rgba(68, 68, 255, 0.2);\n border-color: #44f;\n `,\n TimelineViewingLayerDraggedReframeDrag: css`\n label: TimelineViewingLayerDraggedReframeDrag;\n background-color: rgba(255, 68, 68, 0.2);\n border-color: #f44;\n `,\n TimelineViewingLayerFullOverlay: css`\n label: TimelineViewingLayerFullOverlay;\n bottom: 0;\n cursor: col-resize;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n user-select: none;\n `,\n };\n});\n\ntype TimelineViewingLayerProps = {\n /**\n * `boundsInvalidator` is an arbitrary prop that lets the component know the\n * bounds for dragging need to be recalculated. In practice, the name column\n * width serves fine for this.\n */\n boundsInvalidator: any | null | undefined;\n updateNextViewRangeTime: (update: ViewRangeTimeUpdate) => void;\n updateViewRangeTime: TUpdateViewRangeTimeFunction;\n viewRangeTime: ViewRangeTime;\n};\n\ntype TDraggingLeftLayout = {\n isDraggingLeft: boolean;\n left: string;\n width: string;\n};\n\ntype TOutOfViewLayout = {\n isOutOfView: true;\n};\n\nfunction isOutOfView(layout: TDraggingLeftLayout | TOutOfViewLayout): layout is TOutOfViewLayout {\n return Reflect.has(layout, 'isOutOfView');\n}\n\n/**\n * Map from a sub range to the greater view range, e.g, when the view range is\n * the middle half ([0.25, 0.75]), a value of 0.25 befomes 3/8.\n * @returns {number}\n */\nfunction mapFromViewSubRange(viewStart: number, viewEnd: number, value: number) {\n return viewStart + value * (viewEnd - viewStart);\n}\n\n/**\n * Map a value from the view ([0, 1]) to a sub-range, e.g, when the view range is\n * the middle half ([0.25, 0.75]), a value of 3/8 becomes 1/4.\n * @returns {number}\n */\nfunction mapToViewSubRange(viewStart: number, viewEnd: number, value: number) {\n return (value - viewStart) / (viewEnd - viewStart);\n}\n\n/**\n * Get the layout for the \"next\" view range time, e.g. the difference from the\n * drag start and the drag end. This is driven by `shiftStart`, `shiftEnd` or\n * `reframe` on `props.viewRangeTime`, not by the current state of the\n * component. So, it reflects in-progress dragging from the span minimap.\n */\nfunction getNextViewLayout(start: number, position: number): TDraggingLeftLayout | TOutOfViewLayout {\n let [left, right] = start < position ? [start, position] : [position, start];\n if (left >= 1 || right <= 0) {\n return { isOutOfView: true };\n }\n if (left < 0) {\n left = 0;\n }\n if (right > 1) {\n right = 1;\n }\n return {\n isDraggingLeft: start > position,\n left: `${left * 100}%`,\n width: `${(right - left) * 100}%`,\n };\n}\n\n/**\n * Render the visual indication of the \"next\" view range.\n */\nfunction getMarkers(viewStart: number, viewEnd: number, from: number, to: number, isShift: boolean): React.ReactNode {\n const mappedFrom = mapToViewSubRange(viewStart, viewEnd, from);\n const mappedTo = mapToViewSubRange(viewStart, viewEnd, to);\n const layout = getNextViewLayout(mappedFrom, mappedTo);\n if (isOutOfView(layout)) {\n return null;\n }\n const { isDraggingLeft, left, width } = layout;\n const styles = getStyles();\n const cls = cx({\n [styles.TimelineViewingLayerDraggedDraggingRight]: !isDraggingLeft,\n [styles.TimelineViewingLayerDraggedReframeDrag]: !isShift,\n [styles.TimelineViewingLayerDraggedShiftDrag]: isShift,\n });\n return (\n \n );\n}\n\n/**\n * `TimelineViewingLayer` is rendered on top of the TimelineHeaderRow time\n * labels; it handles showing the current view range and handles mouse UX for\n * modifying it.\n */\nexport default class TimelineViewingLayer extends React.PureComponent {\n _draggerReframe: DraggableManager;\n _root: Element | TNil;\n\n constructor(props: TimelineViewingLayerProps) {\n super(props);\n this._draggerReframe = new DraggableManager({\n getBounds: this._getDraggingBounds,\n onDragEnd: this._handleReframeDragEnd,\n onDragMove: this._handleReframeDragUpdate,\n onDragStart: this._handleReframeDragUpdate,\n onMouseLeave: this._handleReframeMouseLeave,\n onMouseMove: this._handleReframeMouseMove,\n });\n this._root = undefined;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: TimelineViewingLayerProps) {\n const { boundsInvalidator } = this.props;\n if (boundsInvalidator !== nextProps.boundsInvalidator) {\n this._draggerReframe.resetBounds();\n }\n }\n\n componentWillUnmount() {\n this._draggerReframe.dispose();\n }\n\n _setRoot = (elm: Element | TNil) => {\n this._root = elm;\n };\n\n _getDraggingBounds = (): DraggableBounds => {\n if (!this._root) {\n throw new Error('invalid state');\n }\n const { left: clientXLeft, width } = this._root.getBoundingClientRect();\n return { clientXLeft, width };\n };\n\n _handleReframeMouseMove = ({ value }: DraggingUpdate) => {\n const [viewStart, viewEnd] = this.props.viewRangeTime.current;\n const cursor = mapFromViewSubRange(viewStart, viewEnd, value);\n this.props.updateNextViewRangeTime({ cursor });\n };\n\n _handleReframeMouseLeave = () => {\n this.props.updateNextViewRangeTime({ cursor: undefined });\n };\n\n _handleReframeDragUpdate = ({ value }: DraggingUpdate) => {\n const { current, reframe } = this.props.viewRangeTime;\n const [viewStart, viewEnd] = current;\n const shift = mapFromViewSubRange(viewStart, viewEnd, value);\n const anchor = reframe ? reframe.anchor : shift;\n const update = { reframe: { anchor, shift } };\n this.props.updateNextViewRangeTime(update);\n };\n\n _handleReframeDragEnd = ({ manager, value }: DraggingUpdate) => {\n const { current, reframe } = this.props.viewRangeTime;\n const [viewStart, viewEnd] = current;\n const shift = mapFromViewSubRange(viewStart, viewEnd, value);\n const anchor = reframe ? reframe.anchor : shift;\n const [start, end] = shift < anchor ? [shift, anchor] : [anchor, shift];\n manager.resetBounds();\n this.props.updateViewRangeTime(start, end, 'timeline-header');\n };\n\n render() {\n const { viewRangeTime } = this.props;\n const { current, cursor, reframe, shiftEnd, shiftStart } = viewRangeTime;\n const [viewStart, viewEnd] = current;\n const haveNextTimeRange = reframe != null || shiftEnd != null || shiftStart != null;\n let cusrorPosition: string | TNil;\n if (!haveNextTimeRange && cursor != null && cursor >= viewStart && cursor <= viewEnd) {\n cusrorPosition = `${mapToViewSubRange(viewStart, viewEnd, cursor) * 100}%`;\n }\n const styles = getStyles();\n return (\n \n {cusrorPosition != null && (\n \n )}\n {reframe != null && getMarkers(viewStart, viewEnd, reframe.anchor, reframe.shift, false)}\n {shiftEnd != null && getMarkers(viewStart, viewEnd, viewEnd, shiftEnd, true)}\n {shiftStart != null && getMarkers(viewStart, viewEnd, viewStart, shiftStart, true)}\n \n );\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport moment from 'moment-timezone';\nimport { round as _round, dropWhile as _dropWhile } from 'lodash';\n\nimport { toFloatPrecision } from './number';\n\nconst TODAY = 'Today';\nconst YESTERDAY = 'Yesterday';\n\nexport const STANDARD_DATE_FORMAT = 'YYYY-MM-DD';\nexport const STANDARD_TIME_FORMAT = 'HH:mm';\nexport const STANDARD_DATETIME_FORMAT = 'MMMM D YYYY, HH:mm:ss.SSS';\nexport const ONE_MILLISECOND = 1000;\nexport const ONE_SECOND = 1000 * ONE_MILLISECOND;\nexport const ONE_MINUTE = 60 * ONE_SECOND;\nexport const ONE_HOUR = 60 * ONE_MINUTE;\nexport const ONE_DAY = 24 * ONE_HOUR;\nexport const DEFAULT_MS_PRECISION = Math.log10(ONE_MILLISECOND);\n\nconst UNIT_STEPS: Array<{ unit: string; microseconds: number; ofPrevious: number }> = [\n { unit: 'd', microseconds: ONE_DAY, ofPrevious: 24 },\n { unit: 'h', microseconds: ONE_HOUR, ofPrevious: 60 },\n { unit: 'm', microseconds: ONE_MINUTE, ofPrevious: 60 },\n { unit: 's', microseconds: ONE_SECOND, ofPrevious: 1000 },\n { unit: 'ms', microseconds: ONE_MILLISECOND, ofPrevious: 1000 },\n { unit: 'μs', microseconds: 1, ofPrevious: 1000 },\n];\n\n/**\n * @param {number} timestamp\n * @param {number} initialTimestamp\n * @param {number} totalDuration\n * @returns {number} 0-100 percentage\n */\nexport function getPercentageOfDuration(duration: number, totalDuration: number) {\n return (duration / totalDuration) * 100;\n}\n\nconst quantizeDuration = (duration: number, floatPrecision: number, conversionFactor: number) =>\n toFloatPrecision(duration / conversionFactor, floatPrecision) * conversionFactor;\n\n/**\n * @param {number} duration (in microseconds)\n * @returns {string} formatted, unit-labelled string with time in milliseconds\n */\nexport function formatDate(duration: number) {\n return moment(duration / ONE_MILLISECOND).format(STANDARD_DATE_FORMAT);\n}\n\n/**\n * @param {number} duration (in microseconds)\n * @returns {string} formatted, unit-labelled string with time in milliseconds\n */\nexport function formatTime(duration: number) {\n return moment(duration / ONE_MILLISECOND).format(STANDARD_TIME_FORMAT);\n}\n\n/**\n * @param {number} duration (in microseconds)\n * @returns {string} formatted, unit-labelled string with time in milliseconds\n */\nexport function formatDatetime(duration: number) {\n return moment(duration / ONE_MILLISECOND).format(STANDARD_DATETIME_FORMAT);\n}\n\n/**\n * @param {number} duration (in microseconds)\n * @returns {string} formatted, unit-labelled string with time in milliseconds\n */\nexport function formatMillisecondTime(duration: number) {\n const targetDuration = quantizeDuration(duration, DEFAULT_MS_PRECISION, ONE_MILLISECOND);\n return `${moment.duration(targetDuration / ONE_MILLISECOND).asMilliseconds()}ms`;\n}\n\n/**\n * @param {number} duration (in microseconds)\n * @returns {string} formatted, unit-labelled string with time in seconds\n */\nexport function formatSecondTime(duration: number) {\n const targetDuration = quantizeDuration(duration, DEFAULT_MS_PRECISION, ONE_SECOND);\n return `${moment.duration(targetDuration / ONE_MILLISECOND).asSeconds()}s`;\n}\n\n/**\n * Humanizes the duration for display.\n *\n * Example:\n * 5000ms => 5s\n * 1000μs => 1ms\n * 183840s => 2d 3h\n *\n * @param {number} duration (in microseconds)\n * @return {string} formatted duration\n */\nexport function formatDuration(duration: number): string {\n // Drop all units that are too large except the last one\n const [primaryUnit, secondaryUnit] = _dropWhile(\n UNIT_STEPS,\n ({ microseconds }, index) => index < UNIT_STEPS.length - 1 && microseconds > duration\n );\n\n if (primaryUnit.ofPrevious === 1000) {\n // If the unit is decimal based, display as a decimal\n return `${_round(duration / primaryUnit.microseconds, 2)}${primaryUnit.unit}`;\n }\n\n const primaryValue = Math.floor(duration / primaryUnit.microseconds);\n const primaryUnitString = `${primaryValue}${primaryUnit.unit}`;\n const secondaryValue = Math.round((duration / secondaryUnit.microseconds) % primaryUnit.ofPrevious);\n const secondaryUnitString = `${secondaryValue}${secondaryUnit.unit}`;\n return secondaryValue === 0 ? primaryUnitString : `${primaryUnitString} ${secondaryUnitString}`;\n}\n\nexport function formatRelativeDate(value: any, fullMonthName = false) {\n const m = moment.isMoment(value) ? value : moment(value);\n const monthFormat = fullMonthName ? 'MMMM' : 'MMM';\n const dt = new Date();\n if (dt.getFullYear() !== m.year()) {\n return m.format(`${monthFormat} D, YYYY`);\n }\n const mMonth = m.month();\n const mDate = m.date();\n const date = dt.getDate();\n if (mMonth === dt.getMonth() && mDate === date) {\n return TODAY;\n }\n dt.setDate(date - 1);\n if (mMonth === dt.getMonth() && mDate === dt.getDate()) {\n return YESTERDAY;\n }\n return m.format(`${monthFormat} D`);\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/**\n * given a number and a desired precision for the floating\n * side, return the number at the new precision.\n *\n * toFloatPrecision(3.55, 1) // 3.5\n * toFloatPrecision(0.04422, 2) // 0.04\n * toFloatPrecision(6.24e6, 2) // 6240000.00\n *\n * does not support numbers that use \"e\" notation on toString.\n *\n * @param {number} number\n * @param {number} precision\n * @returns {number} number at new floating precision\n */\nexport function toFloatPrecision(number: number, precision: number): number {\n const log10Length = Math.floor(Math.log10(Math.abs(number))) + 1;\n const targetPrecision = precision + log10Length;\n\n if (targetPrecision <= 0) {\n return Math.trunc(number);\n }\n\n return Number(number.toPrecision(targetPrecision));\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { TraceSpan } from '../types/trace';\n\nexport type ViewedBoundsFunctionType = (start: number, end: number) => { start: number; end: number };\n/**\n * Given a range (`min`, `max`) and factoring in a zoom (`viewStart`, `viewEnd`)\n * a function is created that will find the position of a sub-range (`start`, `end`).\n * The calling the generated method will return the result as a `{ start, end }`\n * object with values ranging in [0, 1].\n *\n * @param {number} min The start of the outer range.\n * @param {number} max The end of the outer range.\n * @param {number} viewStart The start of the zoom, on a range of [0, 1],\n * relative to the `min`, `max`.\n * @param {number} viewEnd The end of the zoom, on a range of [0, 1],\n * relative to the `min`, `max`.\n * @returns {(number, number) => Object} Created view bounds function\n */\nexport function createViewedBoundsFunc(viewRange: { min: number; max: number; viewStart: number; viewEnd: number }) {\n const { min, max, viewStart, viewEnd } = viewRange;\n const duration = max - min;\n const viewMin = min + viewStart * duration;\n const viewMax = max - (1 - viewEnd) * duration;\n const viewWindow = viewMax - viewMin;\n\n /**\n * View bounds function\n * @param {number} start The start of the sub-range.\n * @param {number} end The end of the sub-range.\n * @returns {Object} The resultant range.\n */\n return (start: number, end: number) => ({\n start: (start - viewMin) / viewWindow,\n end: (end - viewMin) / viewWindow,\n });\n}\n\n/**\n * Returns `true` if the `span` has a tag matching `key` = `value`.\n *\n * @param {string} key The tag key to match on.\n * @param {any} value The tag value to match.\n * @param {{tags}} span An object with a `tags` property of { key, value }\n * items.\n * @returns {boolean} True if a match was found.\n */\nexport function spanHasTag(key: string, value: any, span: TraceSpan) {\n if (!Array.isArray(span.tags) || !span.tags.length) {\n return false;\n }\n return span.tags.some((tag) => tag.key === key && tag.value === value);\n}\n\nexport const isClientSpan = spanHasTag.bind(null, 'span.kind', 'client');\nexport const isServerSpan = spanHasTag.bind(null, 'span.kind', 'server');\n\nconst isErrorBool = spanHasTag.bind(null, 'error', true);\nconst isErrorStr = spanHasTag.bind(null, 'error', 'true');\nexport const isErrorSpan = (span: TraceSpan) => isErrorBool(span) || isErrorStr(span);\n\n/**\n * Returns `true` if at least one of the descendants of the `parentSpanIndex`\n * span contains an error tag.\n *\n * @param {TraceSpan[]} spans The spans for a trace - should be\n * sorted with children following parents.\n * @param {number} parentSpanIndex The index of the parent span - only\n * subsequent spans with depth less than\n * the parent span will be checked.\n * @returns {boolean} Returns `true` if a descendant contains an error tag.\n */\nexport function spanContainsErredSpan(spans: TraceSpan[], parentSpanIndex: number) {\n const { depth } = spans[parentSpanIndex];\n let i = parentSpanIndex + 1;\n for (; i < spans.length && spans[i].depth > depth; i++) {\n if (isErrorSpan(spans[i])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Expects the first span to be the parent span.\n */\nexport function findServerChildSpan(spans: TraceSpan[]) {\n if (spans.length <= 1 || !isClientSpan(spans[0])) {\n return false;\n }\n const span = spans[0];\n const spanChildDepth = span.depth + 1;\n let i = 1;\n while (i < spans.length && spans[i].depth === spanChildDepth) {\n if (isServerSpan(spans[i])) {\n return spans[i];\n }\n i++;\n }\n return null;\n}\n\nexport const isKindClient = (span: TraceSpan): Boolean =>\n span.tags.some(({ key, value }) => key === 'span.kind' && value === 'client');\n\nexport { formatDuration } from '../utils/date';\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport { formatDuration } from './utils';\nimport { TNil } from '../types';\nimport { autoColor, createStyle, Theme, useTheme } from '../Theme';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n Ticks: css`\n label: Ticks;\n pointer-events: none;\n `,\n TicksTick: css`\n label: TicksTick;\n position: absolute;\n height: 100%;\n width: 1px;\n background: ${autoColor(theme, '#d8d8d8')};\n &:last-child {\n width: 0;\n }\n `,\n TicksTickLabel: css`\n label: TicksTickLabel;\n left: 0.25rem;\n position: absolute;\n `,\n TicksTickLabelEndAnchor: css`\n label: TicksTickLabelEndAnchor;\n left: initial;\n right: 0.25rem;\n `,\n };\n});\n\ntype TicksProps = {\n endTime?: number | TNil;\n numTicks: number;\n showLabels?: boolean | TNil;\n startTime?: number | TNil;\n};\n\nexport default function Ticks(props: TicksProps) {\n const { endTime, numTicks, showLabels, startTime } = props;\n\n let labels: undefined | string[];\n if (showLabels) {\n labels = [];\n const viewingDuration = (endTime || 0) - (startTime || 0);\n for (let i = 0; i < numTicks; i++) {\n const durationAtTick = (startTime || 0) + (i / (numTicks - 1)) * viewingDuration;\n labels.push(formatDuration(durationAtTick));\n }\n }\n const styles = getStyles(useTheme());\n const ticks: React.ReactNode[] = [];\n for (let i = 0; i < numTicks; i++) {\n const portion = i / (numTicks - 1);\n ticks.push(\n \n {labels && (\n = 1 })}>\n {labels[i]}\n \n )}\n \n );\n }\n return
{ticks}
;\n}\n\nTicks.defaultProps = {\n endTime: null,\n showLabels: null,\n startTime: null,\n};\n","import { css } from '@emotion/css';\n\nexport const ubRelative = css`\n position: relative;\n`;\n\nexport const ubMb1 = css`\n margin-bottom: 0.25rem;\n`;\n\nexport const ubMy1 = css`\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n`;\n\nexport const ubM0 = css`\n margin: 0;\n`;\n\nexport const ubPx2 = css`\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n`;\n\nexport const ubPb2 = css`\n padding-bottom: 0.5rem;\n`;\n\nexport const ubFlex = css`\n display: flex;\n`;\n\nexport const ubItemsCenter = css`\n align-items: center;\n`;\n\nexport const ubFlexAuto = css`\n flex: 1 1 auto;\n min-width: 0; /* 1 */\n min-height: 0; /* 1 */\n`;\n\nexport const ubTxRightAlign = css`\n text-align: right;\n`;\n\nexport const ubInlineBlock = css`\n display: inline-block;\n`;\n\nexport const uAlignIcon = css`\n margin: -0.2rem 0.25rem 0 0;\n`;\n\nexport const uTxEllipsis = css`\n text-overflow: ellipsis;\n`;\n\nexport const uWidth100 = css`\n width: 100%;\n`;\n\nexport const uTxMuted = css`\n color: #aaa;\n`;\n\nexport const ubJustifyEnd = css`\n justify-content: flex-end;\n`;\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\nimport { createStyle } from '../Theme';\nimport { ubRelative } from '../uberUtilityStyles';\n\nconst getStyles = createStyle(() => {\n return {\n flexRow: css`\n display: flex;\n flex: 0 1 auto;\n flex-direction: row;\n `,\n };\n});\n\ntype TTimelineRowProps = {\n children: React.ReactNode;\n className?: string;\n};\n\ninterface TimelineRowCellProps extends React.HTMLAttributes {\n children: React.ReactNode;\n className?: string;\n width: number;\n style?: {};\n}\n\nexport default function TimelineRow(props: TTimelineRowProps) {\n const { children, className = '', ...rest } = props;\n const styles = getStyles();\n return (\n
\n {children}\n
\n );\n}\n\nTimelineRow.defaultProps = {\n className: '',\n};\n\nexport function TimelineRowCell(props: TimelineRowCellProps) {\n const { children, className = '', width, style, ...rest } = props;\n const widthPercent = `${width * 100}%`;\n const mergedStyle = { ...style, flexBasis: widthPercent, maxWidth: widthPercent };\n return (\n
\n {children}\n
\n );\n}\n\nTimelineRowCell.defaultProps = { className: '', style: {} };\n\nTimelineRow.Cell = TimelineRowCell;\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport { TimelineCollapser } from './TimelineCollapser';\nimport TimelineColumnResizer from './TimelineColumnResizer';\nimport TimelineViewingLayer from './TimelineViewingLayer';\nimport Ticks from '../Ticks';\nimport TimelineRow from '../TimelineRow';\nimport { TUpdateViewRangeTimeFunction, ViewRangeTime, ViewRangeTimeUpdate } from '../types';\nimport { autoColor, createStyle, Theme, useTheme } from '../../Theme';\nimport { ubFlex, ubPx2 } from '../../uberUtilityStyles';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n TimelineHeaderRow: css`\n label: TimelineHeaderRow;\n background: ${autoColor(theme, '#ececec')};\n border-bottom: 1px solid ${autoColor(theme, '#ccc')};\n height: 38px;\n line-height: 38px;\n width: 100%;\n z-index: 4;\n position: relative;\n `,\n TimelineHeaderRowTitle: css`\n label: TimelineHeaderRowTitle;\n flex: 1;\n overflow: hidden;\n margin: 0;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n TimelineHeaderWrapper: css`\n label: TimelineHeaderWrapper;\n align-items: center;\n `,\n };\n});\n\ntype TimelineHeaderRowProps = {\n duration: number;\n nameColumnWidth: number;\n numTicks: number;\n onCollapseAll: () => void;\n onCollapseOne: () => void;\n onColummWidthChange: (width: number) => void;\n onExpandAll: () => void;\n onExpandOne: () => void;\n updateNextViewRangeTime: (update: ViewRangeTimeUpdate) => void;\n updateViewRangeTime: TUpdateViewRangeTimeFunction;\n viewRangeTime: ViewRangeTime;\n columnResizeHandleHeight: number;\n};\n\nexport default function TimelineHeaderRow(props: TimelineHeaderRowProps) {\n const {\n duration,\n nameColumnWidth,\n numTicks,\n onCollapseAll,\n onCollapseOne,\n onColummWidthChange,\n onExpandAll,\n onExpandOne,\n updateViewRangeTime,\n updateNextViewRangeTime,\n viewRangeTime,\n columnResizeHandleHeight,\n } = props;\n const [viewStart, viewEnd] = viewRangeTime.current;\n const styles = getStyles(useTheme());\n return (\n \n \n

Service & Operation

\n \n
\n \n \n \n \n \n
\n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype THeightGetter = (index: number) => number;\n\n/**\n * Keeps track of the height and y-position for anything sequenctial where\n * y-positions follow one-after-another and can be derived from the height of\n * the prior entries. The height is known from an accessor function parameter\n * to the methods that require new knowledge the heights.\n *\n * @export\n * @class Positions\n */\nexport default class Positions {\n /**\n * Indicates how far past the explicitly required height or y-values should\n * checked.\n */\n bufferLen: number;\n dataLen: number;\n heights: number[];\n /**\n * `lastI` keeps track of which values have already been visited. In many\n * scenarios, values do not need to be revisited. But, revisiting is required\n * when heights have changed, so `lastI` can be forced.\n */\n lastI: number;\n ys: number[];\n\n constructor(bufferLen: number) {\n this.ys = [];\n this.heights = [];\n this.bufferLen = bufferLen;\n this.dataLen = -1;\n this.lastI = -1;\n }\n\n /**\n * Used to make sure the length of y-values and heights is consistent with\n * the context; in particular `lastI` needs to remain valid.\n */\n profileData(dataLength: number) {\n if (dataLength !== this.dataLen) {\n this.dataLen = dataLength;\n this.ys.length = dataLength;\n this.heights.length = dataLength;\n if (this.lastI >= dataLength) {\n this.lastI = dataLength - 1;\n }\n }\n }\n\n /**\n * Calculate and save the heights and y-values, based on `heightGetter`, from\n * `lastI` until the`max` index; the starting point (`lastI`) can be forced\n * via the `forcedLastI` parameter.\n * @param {number=} forcedLastI\n */\n calcHeights(max: number, heightGetter: THeightGetter, forcedLastI?: number) {\n if (forcedLastI != null) {\n this.lastI = forcedLastI;\n }\n let _max = max + this.bufferLen;\n if (_max <= this.lastI) {\n return;\n }\n if (_max >= this.heights.length) {\n _max = this.heights.length - 1;\n }\n let i = this.lastI;\n if (this.lastI === -1) {\n i = 0;\n this.ys[0] = 0;\n }\n while (i <= _max) {\n // eslint-disable-next-line no-multi-assign\n const h = (this.heights[i] = heightGetter(i));\n this.ys[i + 1] = this.ys[i] + h;\n i++;\n }\n this.lastI = _max;\n }\n\n /**\n * Verify the height and y-values from `lastI` up to `yValue`.\n */\n calcYs(yValue: number, heightGetter: THeightGetter) {\n while ((this.ys[this.lastI] == null || yValue > this.ys[this.lastI]) && this.lastI < this.dataLen - 1) {\n this.calcHeights(this.lastI, heightGetter);\n }\n }\n\n /**\n * Get the latest height for index `_i`. If it's in new terretory\n * (_i > lastI), find the heights (and y-values) leading up to it. If it's in\n * known territory (_i <= lastI) and the height is different than what is\n * known, recalculate subsequent y values, but don't confirm the heights of\n * those items, just update based on the difference.\n */\n confirmHeight(_i: number, heightGetter: THeightGetter) {\n let i = _i;\n if (i > this.lastI) {\n this.calcHeights(i, heightGetter);\n return;\n }\n const h = heightGetter(i);\n if (h === this.heights[i]) {\n return;\n }\n const chg = h - this.heights[i];\n this.heights[i] = h;\n // shift the y positions by `chg` for all known y positions\n while (++i <= this.lastI) {\n this.ys[i] += chg;\n }\n if (this.ys[this.lastI + 1] != null) {\n this.ys[this.lastI + 1] += chg;\n }\n }\n\n /**\n * Given a target y-value (`yValue`), find the closest index (in the `.ys`\n * array) that is prior to the y-value; e.g. map from y-value to index in\n * `.ys`.\n */\n findFloorIndex(yValue: number, heightGetter: THeightGetter): number {\n this.calcYs(yValue, heightGetter);\n\n let imin = 0;\n let imax = this.lastI;\n\n if (this.ys.length < 2 || yValue < this.ys[1]) {\n return 0;\n }\n if (yValue > this.ys[imax]) {\n return imax;\n }\n let i;\n while (imin < imax) {\n // eslint-disable-next-line no-bitwise\n i = (imin + 0.5 * (imax - imin)) | 0;\n if (yValue > this.ys[i]) {\n if (yValue <= this.ys[i + 1]) {\n return i;\n }\n imin = i;\n } else if (yValue < this.ys[i]) {\n if (yValue >= this.ys[i - 1]) {\n return i - 1;\n }\n imax = i;\n } else {\n return i;\n }\n }\n throw new Error(`unable to find floor index for y=${yValue}`);\n }\n\n /**\n * Get the `y` and `height` for a given row.\n *\n * @returns {{ height: number, y: number }}\n */\n getRowPosition(index: number, heightGetter: THeightGetter) {\n this.confirmHeight(index, heightGetter);\n return {\n height: this.heights[index],\n y: this.ys[index],\n };\n }\n\n /**\n * Get the estimated height of the whole shebang by extrapolating based on\n * the average known height.\n */\n getEstimatedHeight(): number {\n const known = this.ys[this.lastI] + this.heights[this.lastI];\n if (this.lastI >= this.dataLen - 1) {\n // eslint-disable-next-line no-bitwise\n return known | 0;\n }\n // eslint-disable-next-line no-bitwise\n return ((known / (this.lastI + 1)) * this.heights.length) | 0;\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\n\nimport Positions from './Positions';\nimport { TNil } from '../../types';\n\ntype TWrapperProps = {\n style: React.CSSProperties;\n ref: (elm: HTMLDivElement) => void;\n onScroll?: () => void;\n};\n\n/**\n * @typedef\n */\ntype TListViewProps = {\n /**\n * Number of elements in the list.\n */\n dataLength: number;\n /**\n * Convert item index (number) to the key (string). ListView uses both indexes\n * and keys to handle the addition of new rows.\n */\n getIndexFromKey: (key: string) => number;\n /**\n * Convert item key (string) to the index (number). ListView uses both indexes\n * and keys to handle the addition of new rows.\n */\n getKeyFromIndex: (index: number) => string;\n /**\n * Number of items to draw and add to the DOM, initially.\n */\n initialDraw?: number;\n /**\n * The parent provides fallback height measurements when there is not a\n * rendered element to measure.\n */\n itemHeightGetter: (index: number, key: string) => number;\n /**\n * Function that renders an item; rendered items are added directly to the\n * DOM, they are not wrapped in list item wrapper HTMLElement.\n */\n // itemRenderer(itemKey, style, i, attrs)\n itemRenderer: (\n itemKey: string,\n style: Record,\n index: number,\n attributes: Record\n ) => React.ReactNode;\n /**\n * `className` for the HTMLElement that holds the items.\n */\n itemsWrapperClassName?: string;\n /**\n * When adding new items to the DOM, this is the number of items to add above\n * and below the current view. E.g. if list is 100 items and is scrolled\n * halfway down (so items [46, 55] are in view), then when a new range of\n * items is rendered, it will render items `46 - viewBuffer` to\n * `55 + viewBuffer`.\n */\n viewBuffer: number;\n /**\n * The minimum number of items offscreen in either direction; e.g. at least\n * `viewBuffer` number of items must be off screen above and below the\n * current view, or more items will be rendered.\n */\n viewBufferMin: number;\n /**\n * When `true`, expect `_wrapperElm` to have `overflow: visible` and to,\n * essentially, be tall to the point the entire page will will end up\n * scrolling as a result of the ListView. Similar to react-virtualized\n * window scroller.\n *\n * - Ref: https://bvaughn.github.io/react-virtualized/#/components/WindowScroller\n * - Ref:https://github.com/bvaughn/react-virtualized/blob/497e2a1942529560681d65a9ef9f5e9c9c9a49ba/docs/WindowScroller.md\n */\n windowScroller?: boolean;\n /**\n * You need to pass in scrollElement when windowScroller is set to false.\n * This element is responsible for tracking scrolling for lazy loading.\n */\n scrollElement?: Element;\n};\n\nconst DEFAULT_INITIAL_DRAW = 100;\n\n/**\n * Virtualized list view component, for the most part, only renders the window\n * of items that are in-view with some buffer before and after. Listens for\n * scroll events and updates which items are rendered. See react-virtualized\n * for a suite of components with similar, but generalized, functionality.\n * https://github.com/bvaughn/react-virtualized\n *\n * Note: Presently, ListView cannot be a PureComponent. This is because ListView\n * is sensitive to the underlying state that drives the list items, but it\n * doesn't actually receive that state. So, a render may still be required even\n * if ListView's props are unchanged.\n *\n * @export\n * @class ListView\n */\nexport default class ListView extends React.Component {\n /**\n * Keeps track of the height and y-value of items, by item index, in the\n * ListView.\n */\n _yPositions: Positions;\n /**\n * Keep track of the known / measured heights of the rendered items; populated\n * with values through observation and keyed on the item key, not the item\n * index.\n */\n _knownHeights: Map;\n /**\n * The start index of the items currently drawn.\n */\n _startIndexDrawn: number;\n /**\n * The end index of the items currently drawn.\n */\n _endIndexDrawn: number;\n /**\n * The start index of the items currently in view.\n */\n _startIndex: number;\n /**\n * The end index of the items currently in view.\n */\n _endIndex: number;\n /**\n * Height of the visual window, e.g. height of the scroller element.\n */\n _viewHeight: number;\n /**\n * `scrollTop` of the current scroll position.\n */\n _scrollTop: number;\n /**\n * Used to keep track of whether or not a re-calculation of what should be\n * drawn / viewable has been scheduled.\n */\n _isScrolledOrResized: boolean;\n /**\n * If `windowScroller` is true, this notes how far down the page the scroller\n * is located. (Note: repositioning and below-the-fold views are untested)\n */\n _htmlTopOffset: number;\n _windowScrollListenerAdded: boolean;\n _htmlElm: HTMLElement;\n /**\n * Element holding the scroller.\n */\n _wrapperElm: Element | TNil;\n /**\n * HTMLElement holding the rendered items.\n */\n _itemHolderElm: HTMLElement | TNil;\n\n static defaultProps = {\n initialDraw: DEFAULT_INITIAL_DRAW,\n itemsWrapperClassName: '',\n windowScroller: false,\n };\n\n constructor(props: TListViewProps) {\n super(props);\n\n this._yPositions = new Positions(200);\n // _knownHeights is (item-key -> observed height) of list items\n this._knownHeights = new Map();\n\n this._startIndexDrawn = 2 ** 20;\n this._endIndexDrawn = -(2 ** 20);\n this._startIndex = 0;\n this._endIndex = 0;\n this._viewHeight = -1;\n this._scrollTop = -1;\n this._isScrolledOrResized = false;\n\n this._htmlTopOffset = -1;\n this._windowScrollListenerAdded = false;\n // _htmlElm is only relevant if props.windowScroller is true\n this._htmlElm = document.documentElement as any;\n this._wrapperElm = undefined;\n this._itemHolderElm = undefined;\n }\n\n componentDidMount() {\n if (this.props.windowScroller) {\n if (this._wrapperElm) {\n const { top } = this._wrapperElm.getBoundingClientRect();\n this._htmlTopOffset = top + this._htmlElm.scrollTop;\n }\n window.addEventListener('scroll', this._onScroll);\n this._windowScrollListenerAdded = true;\n } else {\n // The wrapper element should be the one that handles the scrolling. Once we are not using scroll-canvas we can remove this.\n this._wrapperElm = this.props.scrollElement;\n this._wrapperElm?.addEventListener('scroll', this._onScroll);\n }\n }\n\n componentDidUpdate() {\n if (this._itemHolderElm) {\n this._scanItemHeights();\n }\n }\n\n componentWillUnmount() {\n if (this._windowScrollListenerAdded) {\n window.removeEventListener('scroll', this._onScroll);\n } else {\n this._wrapperElm?.removeEventListener('scroll', this._onScroll);\n }\n }\n\n getViewHeight = () => this._viewHeight;\n\n /**\n * Get the index of the item at the bottom of the current view.\n */\n getBottomVisibleIndex = (): number => {\n const bottomY = this._scrollTop + this._viewHeight;\n return this._yPositions.findFloorIndex(bottomY, this._getHeight);\n };\n\n /**\n * Get the index of the item at the top of the current view.\n */\n getTopVisibleIndex = (): number => this._yPositions.findFloorIndex(this._scrollTop, this._getHeight);\n\n getRowPosition = (index: number): { height: number; y: number } =>\n this._yPositions.getRowPosition(index, this._getHeight);\n\n /**\n * Scroll event listener that schedules a remeasuring of which items should be\n * rendered.\n */\n _onScroll = () => {\n if (!this._isScrolledOrResized) {\n this._isScrolledOrResized = true;\n window.requestAnimationFrame(this._positionList);\n }\n };\n\n /**\n * Returns true is the view height (scroll window) or scroll position have\n * changed.\n */\n _isViewChanged() {\n if (!this._wrapperElm) {\n return false;\n }\n const useRoot = this.props.windowScroller;\n const clientHeight = useRoot ? this._htmlElm.clientHeight : this._wrapperElm.clientHeight;\n const scrollTop = useRoot ? this._htmlElm.scrollTop : this._wrapperElm.scrollTop;\n return clientHeight !== this._viewHeight || scrollTop !== this._scrollTop;\n }\n\n /**\n * Recalculate _startIndex and _endIndex, e.g. which items are in view.\n */\n _calcViewIndexes() {\n const useRoot = this.props.windowScroller;\n // funky if statement is to satisfy flow\n if (!useRoot) {\n /* istanbul ignore next */\n if (!this._wrapperElm) {\n this._viewHeight = -1;\n this._startIndex = 0;\n this._endIndex = 0;\n return;\n }\n this._viewHeight = this._wrapperElm.clientHeight;\n this._scrollTop = this._wrapperElm.scrollTop;\n } else {\n this._viewHeight = window.innerHeight - this._htmlTopOffset;\n this._scrollTop = window.scrollY;\n }\n const yStart = this._scrollTop;\n const yEnd = this._scrollTop + this._viewHeight;\n this._startIndex = this._yPositions.findFloorIndex(yStart, this._getHeight);\n this._endIndex = this._yPositions.findFloorIndex(yEnd, this._getHeight);\n }\n\n /**\n * Checked to see if the currently rendered items are sufficient, if not,\n * force an update to trigger more items to be rendered.\n */\n _positionList = () => {\n this._isScrolledOrResized = false;\n if (!this._wrapperElm) {\n return;\n }\n this._calcViewIndexes();\n // indexes drawn should be padded by at least props.viewBufferMin\n const maxStart = this.props.viewBufferMin > this._startIndex ? 0 : this._startIndex - this.props.viewBufferMin;\n const minEnd =\n this.props.viewBufferMin < this.props.dataLength - this._endIndex\n ? this._endIndex + this.props.viewBufferMin\n : this.props.dataLength - 1;\n if (maxStart < this._startIndexDrawn || minEnd > this._endIndexDrawn) {\n this.forceUpdate();\n }\n };\n\n _initWrapper = (elm: HTMLElement | TNil) => {\n if (!this.props.windowScroller) {\n return;\n }\n this._wrapperElm = elm;\n if (elm) {\n this._viewHeight = elm.clientHeight;\n }\n };\n\n _initItemHolder = (elm: HTMLElement | TNil) => {\n this._itemHolderElm = elm;\n this._scanItemHeights();\n };\n\n /**\n * Go through all items that are rendered and save their height based on their\n * item-key (which is on a data-* attribute). If any new or adjusted heights\n * are found, re-measure the current known y-positions (via .yPositions).\n */\n _scanItemHeights = () => {\n const getIndexFromKey = this.props.getIndexFromKey;\n if (!this._itemHolderElm) {\n return;\n }\n // note the keys for the first and last altered heights, the `yPositions`\n // needs to be updated\n let lowDirtyKey = null;\n let highDirtyKey = null;\n let isDirty = false;\n // iterating childNodes is faster than children\n // https://jsperf.com/large-htmlcollection-vs-large-nodelist\n const nodes = this._itemHolderElm.childNodes;\n const max = nodes.length;\n for (let i = 0; i < max; i++) {\n const node: HTMLElement = nodes[i] as any;\n // use `.getAttribute(...)` instead of `.dataset` for jest / JSDOM\n const itemKey = node.getAttribute('data-item-key');\n if (!itemKey) {\n // eslint-disable-next-line no-console\n console.warn('itemKey not found');\n continue;\n }\n // measure the first child, if it's available, otherwise the node itself\n // (likely not transferable to other contexts, and instead is specific to\n // how we have the items rendered)\n const measureSrc: Element = node.firstElementChild || node;\n const observed = measureSrc.clientHeight;\n const known = this._knownHeights.get(itemKey);\n if (observed !== known) {\n this._knownHeights.set(itemKey, observed);\n if (!isDirty) {\n isDirty = true;\n // eslint-disable-next-line no-multi-assign\n lowDirtyKey = highDirtyKey = itemKey;\n } else {\n highDirtyKey = itemKey;\n }\n }\n }\n if (lowDirtyKey != null && highDirtyKey != null) {\n // update yPositions, then redraw\n const imin = getIndexFromKey(lowDirtyKey);\n const imax = highDirtyKey === lowDirtyKey ? imin : getIndexFromKey(highDirtyKey);\n this._yPositions.calcHeights(imax, this._getHeight, imin);\n this.forceUpdate();\n }\n };\n\n /**\n * Get the height of the element at index `i`; first check the known heights,\n * fallback to `.props.itemHeightGetter(...)`.\n */\n _getHeight = (i: number) => {\n const key = this.props.getKeyFromIndex(i);\n const known = this._knownHeights.get(key);\n // known !== known iff known is NaN\n // eslint-disable-next-line no-self-compare\n if (known != null && known === known) {\n return known;\n }\n return this.props.itemHeightGetter(i, key);\n };\n\n render() {\n const {\n dataLength,\n getKeyFromIndex,\n initialDraw = DEFAULT_INITIAL_DRAW,\n itemRenderer,\n viewBuffer,\n viewBufferMin,\n } = this.props;\n const heightGetter = this._getHeight;\n const items = [];\n let start;\n let end;\n\n this._yPositions.profileData(dataLength);\n\n if (!this._wrapperElm) {\n start = 0;\n end = (initialDraw < dataLength ? initialDraw : dataLength) - 1;\n } else {\n if (this._isViewChanged()) {\n this._calcViewIndexes();\n }\n const maxStart = viewBufferMin > this._startIndex ? 0 : this._startIndex - viewBufferMin;\n const minEnd = viewBufferMin < dataLength - this._endIndex ? this._endIndex + viewBufferMin : dataLength - 1;\n if (maxStart < this._startIndexDrawn || minEnd > this._endIndexDrawn) {\n start = viewBuffer > this._startIndex ? 0 : this._startIndex - viewBuffer;\n end = this._endIndex + viewBuffer;\n if (end >= dataLength) {\n end = dataLength - 1;\n }\n } else {\n start = this._startIndexDrawn;\n end = this._endIndexDrawn > dataLength - 1 ? dataLength - 1 : this._endIndexDrawn;\n }\n }\n\n this._yPositions.calcHeights(end, heightGetter, start || -1);\n this._startIndexDrawn = start;\n this._endIndexDrawn = end;\n\n items.length = end - start + 1;\n for (let i = start; i <= end; i++) {\n const { y: top, height } = this._yPositions.getRowPosition(i, heightGetter);\n const style = {\n height,\n top,\n position: 'absolute',\n };\n const itemKey = getKeyFromIndex(i);\n const attrs = { 'data-item-key': itemKey };\n items.push(itemRenderer(itemKey, style, i, attrs));\n }\n const wrapperProps: TWrapperProps = {\n style: { position: 'relative' },\n ref: this._initWrapper,\n };\n if (!this.props.windowScroller) {\n wrapperProps.onScroll = this._onScroll;\n wrapperProps.style.height = '100%';\n wrapperProps.style.overflowY = 'auto';\n }\n const scrollerStyle = {\n position: 'relative' as 'relative',\n height: this._yPositions.getEstimatedHeight(),\n };\n return (\n
\n
\n \n {items}\n
\n
\n \n );\n }\n}\n","// Copyright (c) 2018 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport cx from 'classnames';\nimport IoAndroidOpen from 'react-icons/lib/io/android-open';\nimport { css } from '@emotion/css';\n\nimport { createStyle } from '../Theme';\n\nexport const getStyles = createStyle(() => {\n return {\n NewWindowIconLarge: css`\n label: NewWindowIconLarge;\n font-size: 1.5em;\n `,\n };\n});\n\ntype Props = {\n isLarge?: boolean;\n className?: string;\n};\n\nexport default function NewWindowIcon(props: Props) {\n const { isLarge, className, ...rest } = props;\n const styles = getStyles();\n const cls = cx({ [styles.NewWindowIconLarge]: isLarge }, className);\n return ;\n}\n\nNewWindowIcon.defaultProps = {\n isLarge: false,\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React, { ReactElement } from 'react';\n\nexport type TooltipPlacement =\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom';\nexport type PopoverProps = {\n children: ReactElement;\n content: ReactElement;\n arrowPointAtCenter?: boolean;\n overlayClassName?: string;\n placement?: TooltipPlacement;\n};\n\nexport const UIPopover: React.ComponentType = function UIPopover(props: PopoverProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type TooltipProps = {\n title: string | ReactElement;\n getPopupContainer?: (triggerNode: Element) => HTMLElement;\n overlayClassName?: string;\n children: ReactElement;\n placement?: TooltipPlacement;\n mouseLeaveDelay?: number;\n arrowPointAtCenter?: boolean;\n onVisibleChange?: (visible: boolean) => void;\n};\n\nexport const UITooltip: React.ComponentType = function UITooltip(props: TooltipProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type IconProps = {\n type: string;\n className?: string;\n onClick?: React.MouseEventHandler;\n};\n\nexport const UIIcon: React.ComponentType = function UIIcon(props: IconProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type DropdownProps = {\n overlay: React.ReactNode;\n placement?: 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight';\n trigger?: Array<'click' | 'hover' | 'contextMenu'>;\n children?: React.ReactNode;\n};\n\nexport const UIDropdown = function UIDropdown(props: DropdownProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type MenuProps = {\n children?: React.ReactNode;\n};\n\nexport const UIMenu = function UIMenu(props: MenuProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type MenuItemProps = {\n children?: React.ReactNode;\n};\n\nexport const UIMenuItem = function UIMenuItem(props: MenuItemProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type ButtonHTMLType = 'submit' | 'button' | 'reset';\nexport type ButtonProps = {\n children?: React.ReactNode;\n className?: string;\n htmlType?: ButtonHTMLType;\n icon?: string;\n onClick?: React.MouseEventHandler;\n disabled?: boolean;\n};\n\nexport const UIButton = function UIButton(props: ButtonProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type DividerProps = {\n className?: string;\n type?: 'vertical' | 'horizontal';\n};\n\nexport const UIDivider = function UIDivider(props: DividerProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type InputProps = {\n autosize?: boolean | null;\n placeholder?: string;\n onChange: (value: React.ChangeEvent) => void;\n suffix: React.ReactNode;\n value?: string;\n};\n\nexport const UIInput: React.FC = function UIInput(props: InputProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type InputGroupProps = {\n className?: string;\n compact?: boolean;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n};\n\nexport const UIInputGroup = function UIInputGroup(props: InputGroupProps) {\n return (\n \n {(elements: Elements) => {\n return ;\n }}\n \n );\n};\n\nexport type Elements = {\n Popover: React.ComponentType;\n Tooltip: React.ComponentType;\n Icon: React.ComponentType;\n Dropdown: React.ComponentType;\n Menu: React.ComponentType;\n MenuItem: React.ComponentType;\n Button: React.ComponentType;\n Divider: React.ComponentType;\n Input: React.ComponentType;\n InputGroup: React.ComponentType;\n};\n\n/**\n * Allows for injecting custom UI elements that will be used. Mainly for styling and removing dependency on\n * any specific UI library but can also inject specific behaviour.\n */\nconst UIElementsContext = React.createContext(undefined);\nUIElementsContext.displayName = 'UIElementsContext';\nexport default UIElementsContext;\n\ntype GetElementsContextProps = {\n children: (elements: Elements) => React.ReactNode;\n};\n\n/**\n * Convenience render prop style component to handle error state when elements are not defined.\n */\nexport function GetElementsContext(props: GetElementsContextProps) {\n return (\n \n {(value: Elements | undefined) => {\n if (!value) {\n throw new Error('Elements context is required. You probably forget to use UIElementsContext.Provider');\n }\n return props.children(value);\n }}\n \n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\n\n/**\n * There are several places where external links to spans are created. The url layout though is something\n * that should be decided on the application level and not on the component level but at the same time\n * propagating the factory function everywhere could be cumbersome so we use this context for that.\n */\nconst ExternalLinkContext = React.createContext<((traceID: string, spanID: string) => string) | undefined>(undefined);\nExternalLinkContext.displayName = 'ExternalLinkContext';\nexport default ExternalLinkContext;\n","// Copyright (c) 2019 The Jaeger Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport { TraceSpanReference } from '../types/trace';\nimport ExternalLinkContext from './externalLinkContext';\n\ntype ReferenceLinkProps = {\n reference: TraceSpanReference;\n children: React.ReactNode;\n className?: string;\n focusSpan: (spanID: string) => void;\n onClick?: () => void;\n};\n\nexport default function ReferenceLink(props: ReferenceLinkProps) {\n const { reference, children, className, focusSpan, ...otherProps } = props;\n delete otherProps.onClick;\n if (reference.span) {\n return (\n focusSpan(reference.spanID)} className={className} {...otherProps}>\n {children}\n \n );\n }\n\n return (\n \n {(createLinkToExternalSpan) => {\n if (!createLinkToExternalSpan) {\n throw new Error(\"ExternalLinkContext does not have a value, you probably forgot to setup it's provider\");\n }\n return (\n \n {children}\n \n );\n }}\n \n );\n}\n","// Copyright (c) 2019 The Jaeger Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport { css } from '@emotion/css';\nimport NewWindowIcon from '../common/NewWindowIcon';\nimport { TraceSpanReference } from '../types/trace';\nimport { UITooltip, UIDropdown, UIMenuItem, UIMenu, TooltipPlacement } from '../uiElementsContext';\n\nimport ReferenceLink from '../url/ReferenceLink';\nimport { createStyle } from '../Theme';\n\nexport const getStyles = createStyle(() => {\n return {\n MultiParent: css`\n padding: 0 5px;\n color: #000;\n & ~ & {\n margin-left: 5px;\n }\n `,\n TraceRefLink: css`\n display: flex;\n justify-content: space-between;\n `,\n NewWindowIcon: css`\n margin: 0.2em 0 0;\n `,\n tooltip: css`\n max-width: none;\n `,\n };\n});\n\ntype TReferencesButtonProps = {\n references: TraceSpanReference[];\n children: React.ReactNode;\n tooltipText: string;\n focusSpan: (spanID: string) => void;\n};\n\nexport default class ReferencesButton extends React.PureComponent {\n referencesList = (references: TraceSpanReference[]) => {\n const styles = getStyles();\n return (\n \n {references.map((ref) => {\n const { span, spanID } = ref;\n return (\n \n \n {span\n ? `${span.process.serviceName}:${span.operationName} - ${ref.spanID}`\n : `(another trace) - ${ref.spanID}`}\n {!span && }\n \n \n );\n })}\n \n );\n };\n\n render() {\n const { references, children, tooltipText, focusSpan } = this.props;\n const styles = getStyles();\n\n const tooltipProps = {\n arrowPointAtCenter: true,\n mouseLeaveDelay: 0.5,\n placement: 'bottom' as TooltipPlacement,\n title: tooltipText,\n overlayClassName: styles.tooltip,\n };\n\n if (references.length > 1) {\n return (\n \n \n {children}\n \n \n );\n }\n const ref = references[0];\n return (\n \n \n {children}\n \n \n );\n }\n}\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { find as _find, get as _get } from 'lodash';\n\nimport { TNil } from '../types';\nimport { TraceSpan } from '../types/trace';\n\nfunction getFirstAncestor(span: TraceSpan): TraceSpan | TNil {\n return _get(\n _find(\n span.references,\n ({ span: ref, refType }) => ref && ref.spanID && (refType === 'CHILD_OF' || refType === 'FOLLOWS_FROM')\n ),\n 'span'\n );\n}\n\nexport default function spanAncestorIds(span: TraceSpan | TNil): string[] {\n const ancestorIDs: string[] = [];\n if (!span) {\n return ancestorIDs;\n }\n let ref = getFirstAncestor(span);\n while (ref) {\n ancestorIDs.push(ref.spanID);\n ref = getFirstAncestor(ref);\n }\n return ancestorIDs;\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport { get as _get } from 'lodash';\nimport IoChevronRight from 'react-icons/lib/io/chevron-right';\nimport IoIosArrowDown from 'react-icons/lib/io/ios-arrow-down';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport { TraceSpan } from '../types/trace';\nimport spanAncestorIds from '../utils/span-ancestor-ids';\n\nimport { autoColor, createStyle, Theme, withTheme } from '../Theme';\n\nexport const getStyles = createStyle((theme: Theme) => {\n return {\n SpanTreeOffset: css`\n label: SpanTreeOffset;\n color: ${autoColor(theme, '#000')};\n position: relative;\n `,\n SpanTreeOffsetParent: css`\n label: SpanTreeOffsetParent;\n &:hover {\n cursor: pointer;\n }\n `,\n indentGuide: css`\n label: indentGuide;\n /* The size of the indentGuide is based off of the iconWrapper */\n padding-right: calc(0.5rem + 12px);\n height: 100%;\n border-left: 3px solid transparent;\n display: inline-flex;\n &::before {\n content: '';\n padding-left: 1px;\n background-color: ${autoColor(theme, 'lightgrey')};\n }\n `,\n indentGuideActive: css`\n label: indentGuideActive;\n border-color: ${autoColor(theme, 'darkgrey')};\n &::before {\n background-color: transparent;\n }\n `,\n iconWrapper: css`\n label: iconWrapper;\n position: absolute;\n right: 0.25rem;\n `,\n };\n});\n\ntype TProps = {\n childrenVisible?: boolean;\n onClick?: () => void;\n span: TraceSpan;\n showChildrenIcon?: boolean;\n\n hoverIndentGuideIds: Set;\n addHoverIndentGuideId: (spanID: string) => void;\n removeHoverIndentGuideId: (spanID: string) => void;\n theme: Theme;\n};\n\nexport class UnthemedSpanTreeOffset extends React.PureComponent {\n static displayName = 'UnthemedSpanTreeOffset';\n\n ancestorIds: string[];\n\n static defaultProps = {\n childrenVisible: false,\n showChildrenIcon: true,\n };\n\n constructor(props: TProps) {\n super(props);\n\n this.ancestorIds = spanAncestorIds(props.span);\n // Some traces have multiple root-level spans, this connects them all under one guideline and adds the\n // necessary padding for the collapse icon on root-level spans.\n this.ancestorIds.push('root');\n\n this.ancestorIds.reverse();\n }\n\n /**\n * If the mouse leaves to anywhere except another span with the same ancestor id, this span's ancestor id is\n * removed from the set of hoverIndentGuideIds.\n *\n * @param {Object} event - React Synthetic event tied to mouseleave. Includes the related target which is\n * the element the user is now hovering.\n * @param {string} ancestorId - The span id that the user was hovering over.\n */\n handleMouseLeave = (event: React.MouseEvent, ancestorId: string) => {\n if (\n !(event.relatedTarget instanceof HTMLSpanElement) ||\n _get(event, 'relatedTarget.dataset.ancestorId') !== ancestorId\n ) {\n this.props.removeHoverIndentGuideId(ancestorId);\n }\n };\n\n /**\n * If the mouse entered this span from anywhere except another span with the same ancestor id, this span's\n * ancestorId is added to the set of hoverIndentGuideIds.\n *\n * @param {Object} event - React Synthetic event tied to mouseenter. Includes the related target which is\n * the last element the user was hovering.\n * @param {string} ancestorId - The span id that the user is now hovering over.\n */\n handleMouseEnter = (event: React.MouseEvent, ancestorId: string) => {\n if (\n !(event.relatedTarget instanceof HTMLSpanElement) ||\n _get(event, 'relatedTarget.dataset.ancestorId') !== ancestorId\n ) {\n this.props.addHoverIndentGuideId(ancestorId);\n }\n };\n\n render() {\n const { childrenVisible, onClick, showChildrenIcon, span, theme } = this.props;\n const { hasChildren, spanID } = span;\n const wrapperProps = hasChildren ? { onClick, role: 'switch', 'aria-checked': childrenVisible } : null;\n const icon = showChildrenIcon && hasChildren && (childrenVisible ? : );\n const styles = getStyles(theme);\n return (\n \n {this.ancestorIds.map((ancestorId) => (\n this.handleMouseEnter(event, ancestorId)}\n onMouseLeave={(event) => this.handleMouseLeave(event, ancestorId)}\n />\n ))}\n {icon && (\n this.handleMouseEnter(event, spanID)}\n onMouseLeave={(event) => this.handleMouseLeave(event, spanID)}\n data-test-id=\"icon-wrapper\"\n >\n {icon}\n \n )}\n \n );\n }\n}\n\nexport default withTheme(UnthemedSpanTreeOffset);\n","import React, { Component } from 'react';\nimport shallowEqual from 'fbjs/lib/shallowEqual';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { createChangeEmitter } from 'change-emitter';\nimport $$observable from 'symbol-observable';\n\nvar setStatic = function setStatic(key, value) {\n return function (BaseComponent) {\n /* eslint-disable no-param-reassign */\n BaseComponent[key] = value;\n /* eslint-enable no-param-reassign */\n return BaseComponent;\n };\n};\n\nvar setDisplayName = function setDisplayName(displayName) {\n return setStatic('displayName', displayName);\n};\n\nvar getDisplayName = function getDisplayName(Component$$1) {\n if (typeof Component$$1 === 'string') {\n return Component$$1;\n }\n\n if (!Component$$1) {\n return undefined;\n }\n\n return Component$$1.displayName || Component$$1.name || 'Component';\n};\n\nvar wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) {\n return hocName + '(' + getDisplayName(BaseComponent) + ')';\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\n\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar createEagerElementUtil = function createEagerElementUtil(hasKey, isReferentiallyTransparent, type, props, children) {\n if (process.env.NODE_ENV === 'production' && !hasKey && isReferentiallyTransparent) {\n if (children) {\n return type(_extends({}, props, { children: children }));\n }\n return type(props);\n }\n\n var Component$$1 = type;\n\n if (children) {\n return React.createElement(\n Component$$1,\n props,\n children\n );\n }\n\n return React.createElement(Component$$1, props);\n};\n\nvar isClassComponent = function isClassComponent(Component$$1) {\n return Boolean(Component$$1 && Component$$1.prototype && typeof Component$$1.prototype.render === 'function');\n};\n\nvar isReferentiallyTransparentFunctionComponent = function isReferentiallyTransparentFunctionComponent(Component$$1) {\n return Boolean(typeof Component$$1 === 'function' && !isClassComponent(Component$$1) && !Component$$1.defaultProps && !Component$$1.contextTypes);\n};\n\nvar createFactory = function createFactory(type) {\n var isReferentiallyTransparent = isReferentiallyTransparentFunctionComponent(type);\n return function (p, c) {\n return createEagerElementUtil(false, isReferentiallyTransparent, type, p, c);\n };\n};\n\nvar mapProps = function mapProps(propsMapper) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var MapProps = function MapProps(props) {\n return factory(propsMapper(props));\n };\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'mapProps'))(MapProps);\n }\n return MapProps;\n };\n};\n\nvar withProps = function withProps(input) {\n var hoc = mapProps(function (props) {\n return _extends({}, props, typeof input === 'function' ? input(props) : input);\n });\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withProps'))(hoc(BaseComponent));\n };\n }\n return hoc;\n};\n\nvar pick = function pick(obj, keys) {\n var result = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (obj.hasOwnProperty(key)) {\n result[key] = obj[key];\n }\n }\n return result;\n};\n\nvar withPropsOnChange = function withPropsOnChange(shouldMapOrKeys, propsMapper) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var shouldMap = typeof shouldMapOrKeys === 'function' ? shouldMapOrKeys : function (props, nextProps) {\n return !shallowEqual(pick(props, shouldMapOrKeys), pick(nextProps, shouldMapOrKeys));\n };\n\n var WithPropsOnChange = function (_Component) {\n inherits(WithPropsOnChange, _Component);\n\n function WithPropsOnChange() {\n var _temp, _this, _ret;\n\n classCallCheck(this, WithPropsOnChange);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.computedProps = propsMapper(_this.props), _temp), possibleConstructorReturn(_this, _ret);\n }\n\n WithPropsOnChange.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (shouldMap(this.props, nextProps)) {\n this.computedProps = propsMapper(nextProps);\n }\n };\n\n WithPropsOnChange.prototype.render = function render() {\n return factory(_extends({}, this.props, this.computedProps));\n };\n\n return WithPropsOnChange;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withPropsOnChange'))(WithPropsOnChange);\n }\n return WithPropsOnChange;\n };\n};\n\nvar mapValues = function mapValues(obj, func) {\n var result = {};\n /* eslint-disable no-restricted-syntax */\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n result[key] = func(obj[key], key);\n }\n }\n /* eslint-enable no-restricted-syntax */\n return result;\n};\n\n/* eslint-disable no-console */\nvar withHandlers = function withHandlers(handlers) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithHandlers = function (_Component) {\n inherits(WithHandlers, _Component);\n\n function WithHandlers() {\n var _temp, _this, _ret;\n\n classCallCheck(this, WithHandlers);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n }\n\n WithHandlers.prototype.componentWillReceiveProps = function componentWillReceiveProps() {\n this.cachedHandlers = {};\n };\n\n WithHandlers.prototype.render = function render() {\n return factory(_extends({}, this.props, this.handlers));\n };\n\n return WithHandlers;\n }(Component);\n\n var _initialiseProps = function _initialiseProps() {\n var _this2 = this;\n\n this.cachedHandlers = {};\n this.handlers = mapValues(typeof handlers === 'function' ? handlers(this.props) : handlers, function (createHandler, handlerName) {\n return function () {\n var cachedHandler = _this2.cachedHandlers[handlerName];\n if (cachedHandler) {\n return cachedHandler.apply(undefined, arguments);\n }\n\n var handler = createHandler(_this2.props);\n _this2.cachedHandlers[handlerName] = handler;\n\n if (process.env.NODE_ENV !== 'production' && typeof handler !== 'function') {\n console.error(\n // eslint-disable-line no-console\n 'withHandlers(): Expected a map of higher-order functions. ' + 'Refer to the docs for more info.');\n }\n\n return handler.apply(undefined, arguments);\n };\n });\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withHandlers'))(WithHandlers);\n }\n return WithHandlers;\n };\n};\n\nvar defaultProps = function defaultProps(props) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var DefaultProps = function DefaultProps(ownerProps) {\n return factory(ownerProps);\n };\n DefaultProps.defaultProps = props;\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'defaultProps'))(DefaultProps);\n }\n return DefaultProps;\n };\n};\n\nvar omit = function omit(obj, keys) {\n var rest = objectWithoutProperties(obj, []);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (rest.hasOwnProperty(key)) {\n delete rest[key];\n }\n }\n return rest;\n};\n\nvar renameProp = function renameProp(oldName, newName) {\n var hoc = mapProps(function (props) {\n var _babelHelpers$extends;\n\n return _extends({}, omit(props, [oldName]), (_babelHelpers$extends = {}, _babelHelpers$extends[newName] = props[oldName], _babelHelpers$extends));\n });\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'renameProp'))(hoc(BaseComponent));\n };\n }\n return hoc;\n};\n\nvar keys = Object.keys;\n\n\nvar mapKeys = function mapKeys(obj, func) {\n return keys(obj).reduce(function (result, key) {\n var val = obj[key];\n /* eslint-disable no-param-reassign */\n result[func(val, key)] = val;\n /* eslint-enable no-param-reassign */\n return result;\n }, {});\n};\n\nvar renameProps = function renameProps(nameMap) {\n var hoc = mapProps(function (props) {\n return _extends({}, omit(props, keys(nameMap)), mapKeys(pick(props, keys(nameMap)), function (_, oldName) {\n return nameMap[oldName];\n }));\n });\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'renameProps'))(hoc(BaseComponent));\n };\n }\n return hoc;\n};\n\nvar flattenProp = function flattenProp(propName) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var FlattenProp = function FlattenProp(props) {\n return factory(_extends({}, props, props[propName]));\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'flattenProp'))(FlattenProp);\n }\n return FlattenProp;\n };\n};\n\nvar withState = function withState(stateName, stateUpdaterName, initialState) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithState = function (_Component) {\n inherits(WithState, _Component);\n\n function WithState() {\n var _temp, _this, _ret;\n\n classCallCheck(this, WithState);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = {\n stateValue: typeof initialState === 'function' ? initialState(_this.props) : initialState\n }, _this.updateStateValue = function (updateFn, callback) {\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: typeof updateFn === 'function' ? updateFn(stateValue) : updateFn\n };\n }, callback);\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n WithState.prototype.render = function render() {\n var _babelHelpers$extends;\n\n return factory(_extends({}, this.props, (_babelHelpers$extends = {}, _babelHelpers$extends[stateName] = this.state.stateValue, _babelHelpers$extends[stateUpdaterName] = this.updateStateValue, _babelHelpers$extends)));\n };\n\n return WithState;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withState'))(WithState);\n }\n return WithState;\n };\n};\n\nvar withStateHandlers = function withStateHandlers(initialState, stateUpdaters) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithStateHandlers = function (_Component) {\n inherits(WithStateHandlers, _Component);\n\n function WithStateHandlers() {\n var _temp, _this, _ret;\n\n classCallCheck(this, WithStateHandlers);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n }\n\n WithStateHandlers.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n var propsChanged = nextProps !== this.props;\n // the idea is to skip render if stateUpdater handler return undefined\n // this allows to create no state update handlers with access to state and props\n var stateChanged = !shallowEqual(nextState, this.state);\n return propsChanged || stateChanged;\n };\n\n WithStateHandlers.prototype.render = function render() {\n return factory(_extends({}, this.props, this.state, this.stateUpdaters));\n };\n\n return WithStateHandlers;\n }(Component);\n\n var _initialiseProps = function _initialiseProps() {\n var _this2 = this;\n\n this.state = typeof initialState === 'function' ? initialState(this.props) : initialState;\n this.stateUpdaters = mapValues(stateUpdaters, function (handler) {\n return function (mayBeEvent) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n // Having that functional form of setState can be called async\n // we need to persist SyntheticEvent\n if (mayBeEvent && typeof mayBeEvent.persist === 'function') {\n mayBeEvent.persist();\n }\n\n _this2.setState(function (state, props) {\n return handler(state, props).apply(undefined, [mayBeEvent].concat(args));\n });\n };\n });\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withStateHandlers'))(WithStateHandlers);\n }\n return WithStateHandlers;\n };\n};\n\nvar withReducer = function withReducer(stateName, dispatchName, reducer, initialState) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithReducer = function (_Component) {\n inherits(WithReducer, _Component);\n\n function WithReducer() {\n var _temp, _this, _ret;\n\n classCallCheck(this, WithReducer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = {\n stateValue: _this.initializeStateValue()\n }, _this.dispatch = function (action) {\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: reducer(stateValue, action)\n };\n });\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n WithReducer.prototype.initializeStateValue = function initializeStateValue() {\n if (initialState !== undefined) {\n return typeof initialState === 'function' ? initialState(this.props) : initialState;\n }\n return reducer(undefined, { type: '@@recompose/INIT' });\n };\n\n WithReducer.prototype.render = function render() {\n var _babelHelpers$extends;\n\n return factory(_extends({}, this.props, (_babelHelpers$extends = {}, _babelHelpers$extends[stateName] = this.state.stateValue, _babelHelpers$extends[dispatchName] = this.dispatch, _babelHelpers$extends)));\n };\n\n return WithReducer;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withReducer'))(WithReducer);\n }\n return WithReducer;\n };\n};\n\nvar identity = function identity(Component$$1) {\n return Component$$1;\n};\n\nvar branch = function branch(test, left) {\n var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : identity;\n return function (BaseComponent) {\n var leftFactory = void 0;\n var rightFactory = void 0;\n var Branch = function Branch(props) {\n if (test(props)) {\n leftFactory = leftFactory || createFactory(left(BaseComponent));\n return leftFactory(props);\n }\n rightFactory = rightFactory || createFactory(right(BaseComponent));\n return rightFactory(props);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'branch'))(Branch);\n }\n return Branch;\n };\n};\n\nvar renderComponent = function renderComponent(Component$$1) {\n return function (_) {\n var factory = createFactory(Component$$1);\n var RenderComponent = function RenderComponent(props) {\n return factory(props);\n };\n if (process.env.NODE_ENV !== 'production') {\n RenderComponent.displayName = wrapDisplayName(Component$$1, 'renderComponent');\n }\n return RenderComponent;\n };\n};\n\nvar Nothing = function (_Component) {\n inherits(Nothing, _Component);\n\n function Nothing() {\n classCallCheck(this, Nothing);\n return possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n Nothing.prototype.render = function render() {\n return null;\n };\n\n return Nothing;\n}(Component);\n\nvar renderNothing = function renderNothing(_) {\n return Nothing;\n};\n\nvar shouldUpdate = function shouldUpdate(test) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var ShouldUpdate = function (_Component) {\n inherits(ShouldUpdate, _Component);\n\n function ShouldUpdate() {\n classCallCheck(this, ShouldUpdate);\n return possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n ShouldUpdate.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return test(this.props, nextProps);\n };\n\n ShouldUpdate.prototype.render = function render() {\n return factory(this.props);\n };\n\n return ShouldUpdate;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'shouldUpdate'))(ShouldUpdate);\n }\n return ShouldUpdate;\n };\n};\n\nvar pure = function pure(BaseComponent) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual(props, nextProps);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'pure'))(hoc(BaseComponent));\n }\n\n return hoc(BaseComponent);\n};\n\nvar onlyUpdateForKeys = function onlyUpdateForKeys(propKeys) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual(pick(nextProps, propKeys), pick(props, propKeys));\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForKeys'))(hoc(BaseComponent));\n };\n }\n return hoc;\n};\n\nvar onlyUpdateForPropTypes = function onlyUpdateForPropTypes(BaseComponent) {\n var propTypes = BaseComponent.propTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!propTypes) {\n /* eslint-disable */\n console.error('A component without any `propTypes` was passed to ' + '`onlyUpdateForPropTypes()`. Check the implementation of the ' + ('component with display name \"' + getDisplayName(BaseComponent) + '\".'));\n /* eslint-enable */\n }\n }\n\n var propKeys = Object.keys(propTypes || {});\n var OnlyUpdateForPropTypes = onlyUpdateForKeys(propKeys)(BaseComponent);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForPropTypes'))(OnlyUpdateForPropTypes);\n }\n return OnlyUpdateForPropTypes;\n};\n\nvar withContext = function withContext(childContextTypes, getChildContext) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithContext = function (_Component) {\n inherits(WithContext, _Component);\n\n function WithContext() {\n var _temp, _this, _ret;\n\n classCallCheck(this, WithContext);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.getChildContext = function () {\n return getChildContext(_this.props);\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n WithContext.prototype.render = function render() {\n return factory(this.props);\n };\n\n return WithContext;\n }(Component);\n\n WithContext.childContextTypes = childContextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withContext'))(WithContext);\n }\n return WithContext;\n };\n};\n\nvar getContext = function getContext(contextTypes) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var GetContext = function GetContext(ownerProps, context) {\n return factory(_extends({}, ownerProps, context));\n };\n\n GetContext.contextTypes = contextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'getContext'))(GetContext);\n }\n return GetContext;\n };\n};\n\n/* eslint-disable no-console */\nvar lifecycle = function lifecycle(spec) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n if (process.env.NODE_ENV !== 'production' && spec.hasOwnProperty('render')) {\n console.error('lifecycle() does not support the render method; its behavior is to ' + 'pass all props and state to the base component.');\n }\n\n var Lifecycle = function (_Component) {\n inherits(Lifecycle, _Component);\n\n function Lifecycle() {\n classCallCheck(this, Lifecycle);\n return possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n Lifecycle.prototype.render = function render() {\n return factory(_extends({}, this.props, this.state));\n };\n\n return Lifecycle;\n }(Component);\n\n Object.keys(spec).forEach(function (hook) {\n return Lifecycle.prototype[hook] = spec[hook];\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'lifecycle'))(Lifecycle);\n }\n return Lifecycle;\n };\n};\n\nvar toClass = function toClass(baseComponent) {\n if (isClassComponent(baseComponent)) {\n return baseComponent;\n }\n\n var ToClass = function (_Component) {\n inherits(ToClass, _Component);\n\n function ToClass() {\n classCallCheck(this, ToClass);\n return possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n ToClass.prototype.render = function render() {\n if (typeof baseComponent === 'string') {\n return React.createElement(baseComponent, this.props);\n }\n return baseComponent(this.props, this.context);\n };\n\n return ToClass;\n }(Component);\n\n ToClass.displayName = getDisplayName(baseComponent);\n ToClass.propTypes = baseComponent.propTypes;\n ToClass.contextTypes = baseComponent.contextTypes;\n ToClass.defaultProps = baseComponent.defaultProps;\n\n return ToClass;\n};\n\nvar setPropTypes = function setPropTypes(propTypes) {\n return setStatic('propTypes', propTypes);\n};\n\nfunction compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}\n\nvar createEagerElement = function createEagerElement(type, props, children) {\n var isReferentiallyTransparent = isReferentiallyTransparentFunctionComponent(type);\n /* eslint-disable */\n var hasKey = props && props.hasOwnProperty('key');\n /* eslint-enable */\n return createEagerElementUtil(hasKey, isReferentiallyTransparent, type, props, children);\n};\n\nvar createSink = function createSink(callback) {\n return function (_Component) {\n inherits(Sink, _Component);\n\n function Sink() {\n classCallCheck(this, Sink);\n return possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n Sink.prototype.componentWillMount = function componentWillMount() {\n callback(this.props);\n };\n\n Sink.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n callback(nextProps);\n };\n\n Sink.prototype.render = function render() {\n return null;\n };\n\n return Sink;\n }(Component);\n};\n\nvar componentFromProp = function componentFromProp(propName) {\n var Component$$1 = function Component$$1(props) {\n return createEagerElement(props[propName], omit(props, [propName]));\n };\n Component$$1.displayName = 'componentFromProp(' + propName + ')';\n return Component$$1;\n};\n\nvar nest = function nest() {\n for (var _len = arguments.length, Components = Array(_len), _key = 0; _key < _len; _key++) {\n Components[_key] = arguments[_key];\n }\n\n var factories = Components.map(createFactory);\n var Nest = function Nest(_ref) {\n var props = objectWithoutProperties(_ref, []),\n children = _ref.children;\n return factories.reduceRight(function (child, factory) {\n return factory(props, child);\n }, children);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n var displayNames = Components.map(getDisplayName);\n Nest.displayName = 'nest(' + displayNames.join(', ') + ')';\n }\n\n return Nest;\n};\n\nvar hoistStatics = function hoistStatics(higherOrderComponent) {\n return function (BaseComponent) {\n var NewComponent = higherOrderComponent(BaseComponent);\n hoistNonReactStatics(NewComponent, BaseComponent);\n return NewComponent;\n };\n};\n\nvar _config = {\n fromESObservable: null,\n toESObservable: null\n};\n\nvar configureObservable = function configureObservable(c) {\n _config = c;\n};\n\nvar config = {\n fromESObservable: function fromESObservable(observable) {\n return typeof _config.fromESObservable === 'function' ? _config.fromESObservable(observable) : observable;\n },\n toESObservable: function toESObservable(stream) {\n return typeof _config.toESObservable === 'function' ? _config.toESObservable(stream) : stream;\n }\n};\n\nvar componentFromStreamWithConfig = function componentFromStreamWithConfig(config$$1) {\n return function (propsToVdom) {\n return function (_Component) {\n inherits(ComponentFromStream, _Component);\n\n function ComponentFromStream() {\n var _config$fromESObserva;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, ComponentFromStream);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = { vdom: null }, _this.propsEmitter = createChangeEmitter(), _this.props$ = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = _this.propsEmitter.listen(function (props) {\n if (props) {\n observer.next(props);\n } else {\n observer.complete();\n }\n });\n return { unsubscribe: unsubscribe };\n }\n }, _config$fromESObserva[$$observable] = function () {\n return this;\n }, _config$fromESObserva)), _this.vdom$ = config$$1.toESObservable(propsToVdom(_this.props$)), _temp), possibleConstructorReturn(_this, _ret);\n }\n\n // Stream of props\n\n\n // Stream of vdom\n\n\n ComponentFromStream.prototype.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n // Subscribe to child prop changes so we know when to re-render\n this.subscription = this.vdom$.subscribe({\n next: function next(vdom) {\n _this2.setState({ vdom: vdom });\n }\n });\n this.propsEmitter.emit(this.props);\n };\n\n ComponentFromStream.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n // Receive new props from the owner\n this.propsEmitter.emit(nextProps);\n };\n\n ComponentFromStream.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n return nextState.vdom !== this.state.vdom;\n };\n\n ComponentFromStream.prototype.componentWillUnmount = function componentWillUnmount() {\n // Call without arguments to complete stream\n this.propsEmitter.emit();\n\n // Clean-up subscription before un-mounting\n this.subscription.unsubscribe();\n };\n\n ComponentFromStream.prototype.render = function render() {\n return this.state.vdom;\n };\n\n return ComponentFromStream;\n }(Component);\n };\n};\n\nvar componentFromStream = function componentFromStream(propsToVdom) {\n return componentFromStreamWithConfig(config)(propsToVdom);\n};\n\nvar identity$1 = function identity(t) {\n return t;\n};\n\nvar mapPropsStreamWithConfig = function mapPropsStreamWithConfig(config$$1) {\n var componentFromStream = componentFromStreamWithConfig({\n fromESObservable: identity$1,\n toESObservable: identity$1\n });\n return function (transform) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var fromESObservable = config$$1.fromESObservable,\n toESObservable = config$$1.toESObservable;\n\n return componentFromStream(function (props$) {\n var _ref;\n\n return _ref = {\n subscribe: function subscribe(observer) {\n var subscription = toESObservable(transform(fromESObservable(props$))).subscribe({\n next: function next(childProps) {\n return observer.next(factory(childProps));\n }\n });\n return {\n unsubscribe: function unsubscribe() {\n return subscription.unsubscribe();\n }\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n });\n };\n };\n};\n\nvar mapPropsStream = function mapPropsStream(transform) {\n var hoc = mapPropsStreamWithConfig(config)(transform);\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'mapPropsStream'))(hoc(BaseComponent));\n };\n }\n return hoc;\n};\n\nvar createEventHandlerWithConfig = function createEventHandlerWithConfig(config$$1) {\n return function () {\n var _config$fromESObserva;\n\n var emitter = createChangeEmitter();\n var stream = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = emitter.listen(function (value) {\n return observer.next(value);\n });\n return { unsubscribe: unsubscribe };\n }\n }, _config$fromESObserva[$$observable] = function () {\n return this;\n }, _config$fromESObserva));\n return {\n handler: emitter.emit,\n stream: stream\n };\n };\n};\n\nvar createEventHandler = createEventHandlerWithConfig(config);\n\n// Higher-order component helpers\n\nexport { mapProps, withProps, withPropsOnChange, withHandlers, defaultProps, renameProp, renameProps, flattenProp, withState, withStateHandlers, withReducer, branch, renderComponent, renderNothing, shouldUpdate, pure, onlyUpdateForKeys, onlyUpdateForPropTypes, withContext, getContext, lifecycle, toClass, setStatic, setPropTypes, setDisplayName, compose, getDisplayName, wrapDisplayName, shallowEqual, isClassComponent, createEagerElement, createFactory as createEagerFactory, createSink, componentFromProp, nest, hoistStatics, componentFromStream, componentFromStreamWithConfig, mapPropsStream, mapPropsStreamWithConfig, createEventHandler, createEventHandlerWithConfig, configureObservable as setObservableConfig };\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\nimport copy from 'copy-to-clipboard';\n\nimport { UITooltip, TooltipPlacement, UIButton } from '../uiElementsContext';\nimport { createStyle } from '../Theme';\n\nconst getStyles = createStyle(() => {\n return {\n CopyIcon: css`\n background-color: transparent;\n border: none;\n color: inherit;\n height: 100%;\n overflow: hidden;\n padding: 0px;\n &:focus {\n background-color: rgba(255, 255, 255, 0.25);\n color: inherit;\n }\n `,\n };\n});\n\ntype PropsType = {\n className?: string;\n copyText: string;\n icon?: string;\n placement?: TooltipPlacement;\n tooltipTitle: string;\n};\n\ntype StateType = {\n hasCopied: boolean;\n};\n\nexport default class CopyIcon extends React.PureComponent {\n static defaultProps: Partial = {\n className: undefined,\n icon: 'copy',\n placement: 'left',\n };\n\n state = {\n hasCopied: false,\n };\n\n handleClick = () => {\n this.setState({\n hasCopied: true,\n });\n copy(this.props.copyText);\n };\n\n handleTooltipVisibilityChange = (visible: boolean) => {\n if (!visible && this.state.hasCopied) {\n this.setState({\n hasCopied: false,\n });\n }\n };\n\n render() {\n const styles = getStyles();\n return (\n \n \n \n );\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport jsonMarkup from 'json-markup';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport CopyIcon from '../../common/CopyIcon';\n\nimport { TNil } from '../../types';\nimport { TraceKeyValuePair, TraceLink } from '../../types/trace';\nimport { UIDropdown, UIIcon, UIMenu, UIMenuItem } from '../../uiElementsContext';\nimport { autoColor, createStyle, Theme, useTheme } from '../../Theme';\nimport { ubInlineBlock, uWidth100 } from '../../uberUtilityStyles';\n\nconst copyIconClassName = 'copyIcon';\n\nexport const getStyles = createStyle((theme: Theme) => {\n return {\n KeyValueTable: css`\n label: KeyValueTable;\n background: ${autoColor(theme, '#fff')};\n border: 1px solid ${autoColor(theme, '#ddd')};\n margin-bottom: 0.7em;\n max-height: 450px;\n overflow: auto;\n `,\n body: css`\n label: body;\n vertical-align: baseline;\n `,\n row: css`\n label: row;\n & > td {\n padding: 0.25rem 0.5rem;\n padding: 0.25rem 0.5rem;\n vertical-align: top;\n }\n &:nth-child(2n) > td {\n background: ${autoColor(theme, '#f5f5f5')};\n }\n &:not(:hover) .${copyIconClassName} {\n visibility: hidden;\n }\n `,\n keyColumn: css`\n label: keyColumn;\n color: ${autoColor(theme, '#888')};\n white-space: pre;\n width: 125px;\n `,\n copyColumn: css`\n label: copyColumn;\n text-align: right;\n `,\n linkIcon: css`\n label: linkIcon;\n vertical-align: middle;\n font-weight: bold;\n `,\n };\n});\n\nconst jsonObjectOrArrayStartRegex = /^(\\[|\\{)/;\n\nfunction parseIfComplexJson(value: any) {\n // if the value is a string representing actual json object or array, then use json-markup\n if (typeof value === 'string' && jsonObjectOrArrayStartRegex.test(value)) {\n // otherwise just return as is\n try {\n return JSON.parse(value);\n // eslint-disable-next-line no-empty\n } catch (_) {}\n }\n return value;\n}\n\nexport const LinkValue = (props: { href: string; title?: string; children: React.ReactNode }) => {\n const styles = getStyles(useTheme());\n return (\n \n {props.children} \n \n );\n};\n\nLinkValue.defaultProps = {\n title: '',\n};\n\nconst linkValueList = (links: TraceLink[]) => (\n \n {links.map(({ text, url }, index) => (\n // `index` is necessary in the key because url can repeat\n \n {text}\n \n ))}\n \n);\n\ntype KeyValuesTableProps = {\n data: TraceKeyValuePair[];\n linksGetter: ((pairs: TraceKeyValuePair[], index: number) => TraceLink[]) | TNil;\n};\n\nexport default function KeyValuesTable(props: KeyValuesTableProps) {\n const { data, linksGetter } = props;\n const styles = getStyles(useTheme());\n return (\n
\n \n \n {data.map((row, i) => {\n const markup = {\n __html: jsonMarkup(parseIfComplexJson(row.value)),\n };\n const jsonTable =
;\n const links = linksGetter ? linksGetter(data, i) : null;\n let valueMarkup;\n if (links && links.length === 1) {\n valueMarkup = (\n
\n \n {jsonTable}\n \n
\n );\n } else if (links && links.length > 1) {\n valueMarkup = (\n
\n \n \n {jsonTable} \n \n \n
\n );\n } else {\n valueMarkup = jsonTable;\n }\n return (\n // `i` is necessary in the key because row.key can repeat\n
\n \n \n \n \n );\n })}\n \n
\n {row.key}\n {valueMarkup}\n \n
\n
\n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport IoIosArrowDown from 'react-icons/lib/io/ios-arrow-down';\nimport IoIosArrowRight from 'react-icons/lib/io/ios-arrow-right';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport * as markers from './AccordianKeyValues.markers';\nimport KeyValuesTable from './KeyValuesTable';\nimport { TNil } from '../../types';\nimport { TraceKeyValuePair, TraceLink } from '../../types/trace';\nimport { autoColor, createStyle, Theme, useTheme } from '../../Theme';\nimport { uAlignIcon, uTxEllipsis } from '../../uberUtilityStyles';\n\nexport const getStyles = createStyle((theme: Theme) => {\n return {\n header: css`\n label: header;\n cursor: pointer;\n overflow: hidden;\n padding: 0.25em 0.1em;\n text-overflow: ellipsis;\n white-space: nowrap;\n &:hover {\n background: ${autoColor(theme, '#e8e8e8')};\n }\n `,\n headerEmpty: css`\n label: headerEmpty;\n background: none;\n cursor: initial;\n `,\n headerHighContrast: css`\n label: headerHighContrast;\n &:hover {\n background: ${autoColor(theme, '#ddd')};\n }\n `,\n emptyIcon: css`\n label: emptyIcon;\n color: ${autoColor(theme, '#aaa')};\n `,\n summary: css`\n label: summary;\n display: inline;\n list-style: none;\n padding: 0;\n `,\n summaryItem: css`\n label: summaryItem;\n display: inline;\n margin-left: 0.7em;\n padding-right: 0.5rem;\n border-right: 1px solid ${autoColor(theme, '#ddd')};\n &:last-child {\n padding-right: 0;\n border-right: none;\n }\n `,\n summaryLabel: css`\n label: summaryLabel;\n color: ${autoColor(theme, '#777')};\n `,\n summaryDelim: css`\n label: summaryDelim;\n color: ${autoColor(theme, '#bbb')};\n padding: 0 0.2em;\n `,\n };\n});\n\ntype AccordianKeyValuesProps = {\n className?: string | TNil;\n data: TraceKeyValuePair[];\n highContrast?: boolean;\n interactive?: boolean;\n isOpen: boolean;\n label: string;\n linksGetter: ((pairs: TraceKeyValuePair[], index: number) => TraceLink[]) | TNil;\n onToggle?: null | (() => void);\n};\n\n// export for tests\nexport function KeyValuesSummary(props: { data?: TraceKeyValuePair[] }) {\n const { data } = props;\n const styles = getStyles(useTheme());\n\n if (!Array.isArray(data) || !data.length) {\n return null;\n }\n\n return (\n
    \n {data.map((item, i) => (\n // `i` is necessary in the key because item.key can repeat\n
  • \n {item.key}\n =\n {String(item.value)}\n
  • \n ))}\n
\n );\n}\n\nKeyValuesSummary.defaultProps = {\n data: null,\n};\n\nexport default function AccordianKeyValues(props: AccordianKeyValuesProps) {\n const { className, data, highContrast, interactive, isOpen, label, linksGetter, onToggle } = props;\n const isEmpty = !Array.isArray(data) || !data.length;\n const styles = getStyles(useTheme());\n const iconCls = cx(uAlignIcon, { [styles.emptyIcon]: isEmpty });\n let arrow: React.ReactNode | null = null;\n let headerProps: {} | null = null;\n if (interactive) {\n arrow = isOpen ? : ;\n headerProps = {\n 'aria-checked': isOpen,\n onClick: isEmpty ? null : onToggle,\n role: 'switch',\n };\n }\n\n return (\n
\n \n {arrow}\n \n {label}\n {isOpen || ':'}\n \n {!isOpen && }\n
\n {isOpen && }\n \n );\n}\n\nAccordianKeyValues.defaultProps = {\n className: null,\n highContrast: false,\n interactive: true,\n onToggle: null,\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const LABEL = 'label';\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { sortBy as _sortBy } from 'lodash';\nimport IoIosArrowDown from 'react-icons/lib/io/ios-arrow-down';\nimport IoIosArrowRight from 'react-icons/lib/io/ios-arrow-right';\nimport { css } from '@emotion/css';\n\nimport AccordianKeyValues from './AccordianKeyValues';\nimport { formatDuration } from '../utils';\nimport { TNil } from '../../types';\nimport { TraceLog, TraceKeyValuePair, TraceLink } from '../../types/trace';\nimport { autoColor, createStyle, Theme, useTheme } from '../../Theme';\nimport { uAlignIcon, ubMb1 } from '../../uberUtilityStyles';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n AccordianLogs: css`\n label: AccordianLogs;\n border: 1px solid ${autoColor(theme, '#d8d8d8')};\n position: relative;\n margin-bottom: 0.25rem;\n `,\n AccordianLogsHeader: css`\n label: AccordianLogsHeader;\n background: ${autoColor(theme, '#e4e4e4')};\n color: inherit;\n display: block;\n padding: 0.25rem 0.5rem;\n &:hover {\n background: ${autoColor(theme, '#dadada')};\n }\n `,\n AccordianLogsContent: css`\n label: AccordianLogsContent;\n background: ${autoColor(theme, '#f0f0f0')};\n border-top: 1px solid ${autoColor(theme, '#d8d8d8')};\n padding: 0.5rem 0.5rem 0.25rem 0.5rem;\n `,\n AccordianLogsFooter: css`\n label: AccordianLogsFooter;\n color: ${autoColor(theme, '#999')};\n `,\n };\n});\n\ntype AccordianLogsProps = {\n interactive?: boolean;\n isOpen: boolean;\n linksGetter: ((pairs: TraceKeyValuePair[], index: number) => TraceLink[]) | TNil;\n logs: TraceLog[];\n onItemToggle?: (log: TraceLog) => void;\n onToggle?: () => void;\n openedItems?: Set;\n timestamp: number;\n};\n\nexport default function AccordianLogs(props: AccordianLogsProps) {\n const { interactive, isOpen, linksGetter, logs, openedItems, onItemToggle, onToggle, timestamp } = props;\n let arrow: React.ReactNode | null = null;\n let HeaderComponent: 'span' | 'a' = 'span';\n let headerProps: {} | null = null;\n if (interactive) {\n arrow = isOpen ? : ;\n HeaderComponent = 'a';\n headerProps = {\n 'aria-checked': isOpen,\n onClick: onToggle,\n role: 'switch',\n };\n }\n\n const styles = getStyles(useTheme());\n return (\n
\n \n {arrow} Logs ({logs.length})\n \n {isOpen && (\n
\n {_sortBy(logs, 'timestamp').map((log, i) => (\n onItemToggle(log) : null}\n />\n ))}\n \n Log timestamps are relative to the start time of the full trace.\n \n
\n )}\n
\n );\n}\n\nAccordianLogs.defaultProps = {\n interactive: true,\n linksGetter: undefined,\n onItemToggle: undefined,\n onToggle: undefined,\n openedItems: undefined,\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport cx from 'classnames';\nimport { css } from '@emotion/css';\nimport { groupBy as _groupBy } from 'lodash';\nimport React from 'react';\nimport { compose, onlyUpdateForKeys, withProps, withState } from 'recompose';\nimport { autoColor, createStyle, Theme } from '../Theme';\nimport { TraceSpan } from '../types/trace';\nimport { TNil } from '../types';\nimport { UIPopover } from '../uiElementsContext';\nimport AccordianLogs from './SpanDetail/AccordianLogs';\nimport { ViewedBoundsFunctionType } from './utils';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n wrapper: css`\n label: wrapper;\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n overflow: hidden;\n z-index: 0;\n `,\n bar: css`\n label: bar;\n border-radius: 3px;\n min-width: 2px;\n position: absolute;\n height: 36%;\n top: 32%;\n `,\n rpc: css`\n label: rpc;\n position: absolute;\n top: 35%;\n bottom: 35%;\n z-index: 1;\n `,\n label: css`\n label: label;\n color: #aaa;\n font-size: 12px;\n font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n line-height: 1em;\n white-space: nowrap;\n padding: 0 0.5em;\n position: absolute;\n `,\n logMarker: css`\n label: logMarker;\n background-color: ${autoColor(theme, '#2c3235')};\n cursor: pointer;\n height: 60%;\n min-width: 1px;\n position: absolute;\n top: 20%;\n &:hover {\n background-color: ${autoColor(theme, '#464c54')};\n }\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n border: 1px solid transparent;\n }\n &::after {\n left: 0;\n }\n `,\n };\n});\n\ntype TCommonProps = {\n color: string;\n onClick?: (evt: React.MouseEvent) => void;\n viewEnd: number;\n viewStart: number;\n getViewedBounds: ViewedBoundsFunctionType;\n rpc:\n | {\n viewStart: number;\n viewEnd: number;\n color: string;\n }\n | TNil;\n traceStartTime: number;\n span: TraceSpan;\n className?: string;\n labelClassName?: string;\n theme: Theme;\n};\n\ntype TInnerProps = {\n label: string;\n setLongLabel: () => void;\n setShortLabel: () => void;\n} & TCommonProps;\n\ntype TOuterProps = {\n longLabel: string;\n shortLabel: string;\n} & TCommonProps;\n\nfunction toPercent(value: number) {\n return `${(value * 100).toFixed(1)}%`;\n}\n\nfunction SpanBar(props: TInnerProps) {\n const {\n viewEnd,\n viewStart,\n getViewedBounds,\n color,\n label,\n onClick,\n setLongLabel,\n setShortLabel,\n rpc,\n traceStartTime,\n span,\n theme,\n className,\n labelClassName,\n } = props;\n // group logs based on timestamps\n const logGroups = _groupBy(span.logs, (log) => {\n const posPercent = getViewedBounds(log.timestamp, log.timestamp).start;\n // round to the nearest 0.2%\n return toPercent(Math.round(posPercent * 500) / 500);\n });\n const styles = getStyles(theme);\n\n return (\n \n \n
\n {label}\n
\n \n
\n {Object.keys(logGroups).map((positionKey) => (\n \n }\n >\n
\n \n ))}\n
\n {rpc && (\n \n )}\n
\n );\n}\n\nexport default compose(\n withState('label', 'setLabel', (props: { shortLabel: string }) => props.shortLabel),\n withProps(\n ({\n setLabel,\n shortLabel,\n longLabel,\n }: {\n setLabel: (label: string) => void;\n shortLabel: string;\n longLabel: string;\n }) => ({\n setLongLabel: () => setLabel(longLabel),\n setShortLabel: () => setLabel(shortLabel),\n })\n ),\n onlyUpdateForKeys(['label', 'rpc', 'viewStart', 'viewEnd'])\n)(SpanBar);\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport IoAlert from 'react-icons/lib/io/alert';\nimport IoArrowRightA from 'react-icons/lib/io/arrow-right-a';\nimport IoNetwork from 'react-icons/lib/io/network';\nimport MdFileUpload from 'react-icons/lib/md/file-upload';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport ReferencesButton from './ReferencesButton';\nimport TimelineRow from './TimelineRow';\nimport { formatDuration, ViewedBoundsFunctionType } from './utils';\nimport SpanTreeOffset from './SpanTreeOffset';\nimport SpanBar from './SpanBar';\nimport Ticks from './Ticks';\n\nimport { TNil } from '../types';\nimport { TraceSpan } from '../types/trace';\nimport { autoColor, createStyle, Theme, withTheme } from '../Theme';\n\nconst spanBarClassName = 'spanBar';\nconst spanBarLabelClassName = 'spanBarLabel';\nconst nameWrapperClassName = 'nameWrapper';\nconst nameWrapperMatchingFilterClassName = 'nameWrapperMatchingFilter';\nconst viewClassName = 'jaegerView';\nconst nameColumnClassName = 'nameColumn';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n nameWrapper: css`\n label: nameWrapper;\n line-height: 27px;\n overflow: hidden;\n display: flex;\n `,\n nameWrapperMatchingFilter: css`\n label: nameWrapperMatchingFilter;\n background-color: ${autoColor(theme, '#fffce4')};\n `,\n nameColumn: css`\n label: nameColumn;\n position: relative;\n white-space: nowrap;\n z-index: 1;\n &:hover {\n z-index: 1;\n }\n `,\n endpointName: css`\n label: endpointName;\n color: ${autoColor(theme, '#808080')};\n `,\n view: css`\n label: view;\n position: relative;\n `,\n viewExpanded: css`\n label: viewExpanded;\n background: ${autoColor(theme, '#f8f8f8')};\n outline: 1px solid ${autoColor(theme, '#ddd')};\n `,\n viewExpandedAndMatchingFilter: css`\n label: viewExpandedAndMatchingFilter;\n background: ${autoColor(theme, '#fff3d7')};\n outline: 1px solid ${autoColor(theme, '#ddd')};\n `,\n row: css`\n label: row;\n &:hover .${spanBarClassName} {\n opacity: 1;\n }\n &:hover .${spanBarLabelClassName} {\n color: ${autoColor(theme, '#000')};\n }\n &:hover .${nameWrapperClassName} {\n background: #f8f8f8;\n background: linear-gradient(\n 90deg,\n ${autoColor(theme, '#fafafa')},\n ${autoColor(theme, '#f8f8f8')} 75%,\n ${autoColor(theme, '#eee')}\n );\n }\n &:hover .${viewClassName} {\n background-color: ${autoColor(theme, '#f5f5f5')};\n outline: 1px solid ${autoColor(theme, '#ddd')};\n }\n `,\n rowClippingLeft: css`\n label: rowClippingLeft;\n & .${nameColumnClassName}::before {\n content: ' ';\n height: 100%;\n position: absolute;\n width: 6px;\n background-image: linear-gradient(\n to right,\n ${autoColor(theme, 'rgba(25, 25, 25, 0.25)')},\n ${autoColor(theme, 'rgba(32, 32, 32, 0)')}\n );\n left: 100%;\n z-index: -1;\n }\n `,\n rowClippingRight: css`\n label: rowClippingRight;\n & .${viewClassName}::before {\n content: ' ';\n height: 100%;\n position: absolute;\n width: 6px;\n background-image: linear-gradient(\n to left,\n ${autoColor(theme, 'rgba(25, 25, 25, 0.25)')},\n ${autoColor(theme, 'rgba(25, 25, 25, 0.25)')}\n );\n right: 0%;\n z-index: 1;\n }\n `,\n rowExpanded: css`\n label: rowExpanded;\n & .${spanBarClassName} {\n opacity: 1;\n }\n & .${spanBarLabelClassName} {\n color: ${autoColor(theme, '#000')};\n }\n & .${nameWrapperClassName}, &:hover .${nameWrapperClassName} {\n background: ${autoColor(theme, '#f0f0f0')};\n box-shadow: 0 1px 0 ${autoColor(theme, '#ddd')};\n }\n & .${nameWrapperMatchingFilterClassName} {\n background: ${autoColor(theme, '#fff3d7')};\n }\n &:hover .${viewClassName} {\n background: ${autoColor(theme, '#eee')};\n }\n `,\n rowMatchingFilter: css`\n label: rowMatchingFilter;\n background-color: ${autoColor(theme, '#fffce4')};\n &:hover .${nameWrapperClassName} {\n background: linear-gradient(\n 90deg,\n ${autoColor(theme, '#fff5e1')},\n ${autoColor(theme, '#fff5e1')} 75%,\n ${autoColor(theme, '#ffe6c9')}\n );\n }\n &:hover .${viewClassName} {\n background-color: ${autoColor(theme, '#fff3d7')};\n outline: 1px solid ${autoColor(theme, '#ddd')};\n }\n `,\n\n rowExpandedAndMatchingFilter: css`\n label: rowExpandedAndMatchingFilter;\n &:hover .${viewClassName} {\n background: ${autoColor(theme, '#ffeccf')};\n }\n `,\n\n name: css`\n label: name;\n color: ${autoColor(theme, '#000')};\n cursor: pointer;\n flex: 1 1 auto;\n outline: none;\n overflow: hidden;\n padding-left: 4px;\n padding-right: 0.25em;\n position: relative;\n text-overflow: ellipsis;\n &::before {\n content: ' ';\n position: absolute;\n top: 4px;\n bottom: 4px;\n left: 0;\n border-left: 4px solid;\n border-left-color: inherit;\n }\n\n /* This is so the hit area of the span-name extends the rest of the width of the span-name column */\n &::after {\n background: transparent;\n bottom: 0;\n content: ' ';\n left: 0;\n position: absolute;\n top: 0;\n width: 1000px;\n }\n &:focus {\n text-decoration: none;\n }\n &:hover > small {\n color: ${autoColor(theme, '#000')};\n }\n `,\n nameDetailExpanded: css`\n label: nameDetailExpanded;\n &::before {\n bottom: 0;\n }\n `,\n svcName: css`\n label: svcName;\n padding: 0 0.25rem 0 0.5rem;\n font-size: 1.05em;\n `,\n svcNameChildrenCollapsed: css`\n label: svcNameChildrenCollapsed;\n font-weight: bold;\n font-style: italic;\n `,\n errorIcon: css`\n label: errorIcon;\n border-radius: 6.5px;\n color: ${autoColor(theme, '#fff')};\n font-size: 0.85em;\n margin-right: 0.25rem;\n padding: 1px;\n `,\n rpcColorMarker: css`\n label: rpcColorMarker;\n border-radius: 6.5px;\n display: inline-block;\n font-size: 0.85em;\n height: 1em;\n margin-right: 0.25rem;\n padding: 1px;\n width: 1em;\n vertical-align: middle;\n `,\n labelRight: css`\n label: labelRight;\n left: 100%;\n `,\n labelLeft: css`\n label: labelLeft;\n right: 100%;\n `,\n };\n});\n\ntype SpanBarRowProps = {\n className?: string;\n theme: Theme;\n color: string;\n columnDivision: number;\n isChildrenExpanded: boolean;\n isDetailExpanded: boolean;\n isMatchingFilter: boolean;\n onDetailToggled: (spanID: string) => void;\n onChildrenToggled: (spanID: string) => void;\n numTicks: number;\n rpc?:\n | {\n viewStart: number;\n viewEnd: number;\n color: string;\n operationName: string;\n serviceName: string;\n }\n | TNil;\n noInstrumentedServer?:\n | {\n color: string;\n serviceName: string;\n }\n | TNil;\n showErrorIcon: boolean;\n getViewedBounds: ViewedBoundsFunctionType;\n traceStartTime: number;\n span: TraceSpan;\n focusSpan: (spanID: string) => void;\n hoverIndentGuideIds: Set;\n addHoverIndentGuideId: (spanID: string) => void;\n removeHoverIndentGuideId: (spanID: string) => void;\n clippingLeft?: boolean;\n clippingRight?: boolean;\n createSpanLink?: (\n span: TraceSpan\n ) => { href: string; onClick?: (e: React.MouseEvent) => void; content: React.ReactNode };\n};\n\n/**\n * This was originally a stateless function, but changing to a PureComponent\n * reduced the render time of expanding a span row detail by ~50%. This is\n * even true in the case where the stateless function has the same prop types as\n * this class and arrow functions are created in the stateless function as\n * handlers to the onClick props. E.g. for now, the PureComponent is more\n * performance than the stateless function.\n */\nexport class UnthemedSpanBarRow extends React.PureComponent {\n static displayName = 'UnthemedSpanBarRow';\n static defaultProps: Partial = {\n className: '',\n rpc: null,\n };\n\n _detailToggle = () => {\n this.props.onDetailToggled(this.props.span.spanID);\n };\n\n _childrenToggle = () => {\n this.props.onChildrenToggled(this.props.span.spanID);\n };\n\n render() {\n const {\n className,\n color,\n columnDivision,\n isChildrenExpanded,\n isDetailExpanded,\n isMatchingFilter,\n numTicks,\n rpc,\n noInstrumentedServer,\n showErrorIcon,\n getViewedBounds,\n traceStartTime,\n span,\n focusSpan,\n hoverIndentGuideIds,\n addHoverIndentGuideId,\n removeHoverIndentGuideId,\n clippingLeft,\n clippingRight,\n theme,\n createSpanLink,\n } = this.props;\n const {\n duration,\n hasChildren: isParent,\n operationName,\n process: { serviceName },\n } = span;\n const label = formatDuration(duration);\n const viewBounds = getViewedBounds(span.startTime, span.startTime + span.duration);\n const viewStart = viewBounds.start;\n const viewEnd = viewBounds.end;\n const styles = getStyles(theme);\n\n const labelDetail = `${serviceName}::${operationName}`;\n let longLabel;\n let hintClassName;\n if (viewStart > 1 - viewEnd) {\n longLabel = `${labelDetail} | ${label}`;\n hintClassName = styles.labelLeft;\n } else {\n longLabel = `${label} | ${labelDetail}`;\n hintClassName = styles.labelRight;\n }\n\n return (\n \n \n \n \n \n \n {showErrorIcon && (\n \n )}\n {serviceName}{' '}\n {rpc && (\n \n \n {rpc.serviceName}\n \n )}\n {noInstrumentedServer && (\n \n {' '}\n \n {noInstrumentedServer.serviceName}\n \n )}\n \n {rpc ? rpc.operationName : operationName}\n | {label}\n \n {createSpanLink &&\n (() => {\n const link = createSpanLink(span);\n return (\n {\n if (!(event.ctrlKey || event.metaKey || event.shiftKey) && link.onClick) {\n event.preventDefault();\n link.onClick(event);\n }\n }\n : undefined\n }\n >\n {link.content}\n \n );\n })()}\n\n {span.references && span.references.length > 1 && (\n \n \n \n )}\n {span.subsidiarilyReferencedBy && span.subsidiarilyReferencedBy.length > 0 && (\n \n \n \n )}\n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withTheme(UnthemedSpanBarRow);\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport { createStyle } from '../../Theme';\n\nconst getStyles = createStyle(() => {\n return {\n TextList: css`\n max-height: 450px;\n overflow: auto;\n `,\n List: css`\n width: 100%;\n list-style: none;\n padding: 0;\n margin: 0;\n `,\n item: css`\n padding: 0.25rem 0.5rem;\n vertical-align: top;\n &:nth-child(2n) {\n background: #f5f5f5;\n }\n `,\n };\n});\n\ntype TextListProps = {\n data: string[];\n};\n\nexport default function TextList(props: TextListProps) {\n const { data } = props;\n const styles = getStyles();\n return (\n
\n
    \n {data.map((row, i) => {\n return (\n // `i` is necessary in the key because row.key can repeat\n
  • \n {row}\n
  • \n );\n })}\n
\n
\n );\n}\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\nimport IoIosArrowDown from 'react-icons/lib/io/ios-arrow-down';\nimport IoIosArrowRight from 'react-icons/lib/io/ios-arrow-right';\nimport TextList from './TextList';\nimport { TNil } from '../../types';\nimport { getStyles as getAccordianKeyValuesStyles } from './AccordianKeyValues';\nimport { autoColor, createStyle, Theme, useTheme } from '../../Theme';\nimport { uAlignIcon } from '../../uberUtilityStyles';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n header: css`\n cursor: pointer;\n overflow: hidden;\n padding: 0.25em 0.1em;\n text-overflow: ellipsis;\n white-space: nowrap;\n &:hover {\n background: ${autoColor(theme, '#e8e8e8')};\n }\n `,\n };\n});\n\ntype AccordianTextProps = {\n className?: string | TNil;\n headerClassName?: string | TNil;\n data: string[];\n highContrast?: boolean;\n interactive?: boolean;\n isOpen: boolean;\n label: React.ReactNode | string;\n onToggle?: null | (() => void);\n TextComponent?: React.ElementType<{ data: string[] }>;\n};\n\nfunction DefaultTextComponent({ data }: { data: string[] }) {\n return ;\n}\n\nexport default function AccordianText(props: AccordianTextProps) {\n const {\n className,\n data,\n headerClassName,\n interactive,\n isOpen,\n label,\n onToggle,\n TextComponent = DefaultTextComponent,\n } = props;\n const isEmpty = !Array.isArray(data) || !data.length;\n const accordianKeyValuesStyles = getAccordianKeyValuesStyles(useTheme());\n const iconCls = cx(uAlignIcon, { [accordianKeyValuesStyles.emptyIcon]: isEmpty });\n let arrow: React.ReactNode | null = null;\n let headerProps: {} | null = null;\n if (interactive) {\n arrow = isOpen ? : ;\n headerProps = {\n 'aria-checked': isOpen,\n onClick: isEmpty ? null : onToggle,\n role: 'switch',\n };\n }\n const styles = getStyles(useTheme());\n return (\n
\n
\n {arrow}\n {label} ({data.length})\n
\n {isOpen && }\n
\n );\n}\n\nAccordianText.defaultProps = {\n className: null,\n highContrast: false,\n interactive: true,\n onToggle: null,\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport { createStyle, isLight, Theme, useTheme } from '../Theme';\nimport { UIDivider } from '../uiElementsContext';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n LabeledList: css`\n label: LabeledList;\n list-style: none;\n margin: 0;\n padding: 0;\n `,\n LabeledListItem: css`\n label: LabeledListItem;\n display: inline-block;\n `,\n LabeledListLabel: css`\n label: LabeledListLabel;\n color: ${isLight(theme) ? '#999' : '#666'};\n margin-right: 0.25rem;\n `,\n };\n});\n\ntype LabeledListProps = {\n className?: string;\n dividerClassName?: string;\n items: Array<{ key: string; label: React.ReactNode; value: React.ReactNode }>;\n};\n\nexport default function LabeledList(props: LabeledListProps) {\n const { className, dividerClassName, items } = props;\n const styles = getStyles(useTheme());\n return (\n
    \n {items.map(({ key, label, value }, i) => {\n const divider = i < items.length - 1 && (\n
  • \n \n
  • \n );\n return [\n
  • \n {label}\n {value}\n
  • ,\n divider,\n ];\n })}\n
\n );\n}\n","// Copyright (c) 2019 The Jaeger Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport IoIosArrowDown from 'react-icons/lib/io/ios-arrow-down';\nimport IoIosArrowRight from 'react-icons/lib/io/ios-arrow-right';\nimport { TraceSpanReference } from '../../types/trace';\nimport ReferenceLink from '../../url/ReferenceLink';\n\nimport { createStyle } from '../../Theme';\nimport { uAlignIcon } from '../../uberUtilityStyles';\n\nconst getStyles = createStyle(() => {\n return {\n ReferencesList: css`\n background: #fff;\n border: 1px solid #ddd;\n margin-bottom: 0.7em;\n max-height: 450px;\n overflow: auto;\n `,\n list: css`\n width: 100%;\n list-style: none;\n padding: 0;\n margin: 0;\n background: #fff;\n `,\n itemContent: css`\n padding: 0.25rem 0.5rem;\n display: flex;\n width: 100%;\n justify-content: space-between;\n `,\n item: css`\n &:nth-child(2n) {\n background: #f5f5f5;\n }\n `,\n debugInfo: css`\n letter-spacing: 0.25px;\n margin: 0.5em 0 0;\n `,\n debugLabel: css`\n margin: 0 5px 0 5px;\n &::before {\n color: #bbb;\n content: attr(data-label);\n }\n `,\n };\n});\n\ntype AccordianReferencesProps = {\n data: TraceSpanReference[];\n highContrast?: boolean;\n interactive?: boolean;\n isOpen: boolean;\n onToggle?: null | (() => void);\n focusSpan: (uiFind: string) => void;\n};\n\ntype ReferenceItemProps = {\n data: TraceSpanReference[];\n focusSpan: (uiFind: string) => void;\n};\n\n// export for test\nexport function References(props: ReferenceItemProps) {\n const { data, focusSpan } = props;\n const styles = getStyles();\n\n return (\n
\n
    \n {data.map((reference) => {\n return (\n
  • \n \n \n {reference.span ? (\n \n {reference.span.process.serviceName}\n {reference.span.operationName}\n \n ) : (\n < span in another trace >\n )}\n \n \n {reference.refType}\n \n \n {reference.spanID}\n \n \n \n \n
  • \n );\n })}\n
\n
\n );\n}\n\nexport default class AccordianReferences extends React.PureComponent {\n static defaultProps: Partial = {\n highContrast: false,\n interactive: true,\n onToggle: null,\n };\n\n render() {\n const { data, interactive, isOpen, onToggle, focusSpan } = this.props;\n const isEmpty = !Array.isArray(data) || !data.length;\n const iconCls = uAlignIcon;\n let arrow: React.ReactNode | null = null;\n let headerProps: {} | null = null;\n if (interactive) {\n arrow = isOpen ? : ;\n headerProps = {\n 'aria-checked': isOpen,\n onClick: isEmpty ? null : onToggle,\n role: 'switch',\n };\n }\n return (\n
\n
\n {arrow}\n \n References\n {' '}\n ({data.length})\n
\n {isOpen && }\n
\n );\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport AccordianKeyValues from './AccordianKeyValues';\nimport AccordianLogs from './AccordianLogs';\nimport AccordianText from './AccordianText';\nimport DetailState from './DetailState';\nimport { formatDuration } from '../utils';\nimport CopyIcon from '../../common/CopyIcon';\nimport LabeledList from '../../common/LabeledList';\n\nimport { TNil } from '../../types';\nimport { TraceKeyValuePair, TraceLink, TraceLog, TraceSpan } from '../../types/trace';\nimport AccordianReferences from './AccordianReferences';\nimport { autoColor, createStyle, Theme, useTheme } from '../../Theme';\nimport { UIDivider } from '../../uiElementsContext';\nimport { ubFlex, ubFlexAuto, ubItemsCenter, ubM0, ubMb1, ubMy1, ubTxRightAlign } from '../../uberUtilityStyles';\nimport { DataLinkButton, TextArea } from '@grafana/ui';\nimport { CreateSpanLink } from '../types';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n divider: css`\n label: divider;\n background: ${autoColor(theme, '#ddd')};\n `,\n dividerVertical: css`\n label: dividerVertical;\n display: block;\n height: 1px;\n width: 100%;\n margin: 24px 0;\n clear: both;\n vertical-align: middle;\n position: relative;\n top: -0.06em;\n `,\n debugInfo: css`\n label: debugInfo;\n display: block;\n letter-spacing: 0.25px;\n margin: 0.5em 0 -0.75em;\n text-align: right;\n `,\n debugLabel: css`\n label: debugLabel;\n &::before {\n color: ${autoColor(theme, '#bbb')};\n content: attr(data-label);\n }\n `,\n debugValue: css`\n label: debugValue;\n background-color: inherit;\n border: none;\n color: ${autoColor(theme, '#888')};\n cursor: pointer;\n &:hover {\n color: ${autoColor(theme, '#333')};\n }\n `,\n AccordianWarnings: css`\n label: AccordianWarnings;\n background: ${autoColor(theme, '#fafafa')};\n border: 1px solid ${autoColor(theme, '#e4e4e4')};\n margin-bottom: 0.25rem;\n `,\n AccordianWarningsHeader: css`\n label: AccordianWarningsHeader;\n background: ${autoColor(theme, '#fff7e6')};\n padding: 0.25rem 0.5rem;\n &:hover {\n background: ${autoColor(theme, '#ffe7ba')};\n }\n `,\n AccordianWarningsHeaderOpen: css`\n label: AccordianWarningsHeaderOpen;\n border-bottom: 1px solid ${autoColor(theme, '#e8e8e8')};\n `,\n AccordianWarningsLabel: css`\n label: AccordianWarningsLabel;\n color: ${autoColor(theme, '#d36c08')};\n `,\n Textarea: css`\n word-break: break-all;\n white-space: pre;\n `,\n };\n});\n\ntype SpanDetailProps = {\n detailState: DetailState;\n linksGetter: ((links: TraceKeyValuePair[], index: number) => TraceLink[]) | TNil;\n logItemToggle: (spanID: string, log: TraceLog) => void;\n logsToggle: (spanID: string) => void;\n processToggle: (spanID: string) => void;\n span: TraceSpan;\n tagsToggle: (spanID: string) => void;\n traceStartTime: number;\n warningsToggle: (spanID: string) => void;\n stackTracesToggle: (spanID: string) => void;\n referencesToggle: (spanID: string) => void;\n focusSpan: (uiFind: string) => void;\n createSpanLink?: CreateSpanLink;\n};\n\nexport default function SpanDetail(props: SpanDetailProps) {\n const {\n detailState,\n linksGetter,\n logItemToggle,\n logsToggle,\n processToggle,\n span,\n tagsToggle,\n traceStartTime,\n warningsToggle,\n stackTracesToggle,\n referencesToggle,\n focusSpan,\n createSpanLink,\n } = props;\n const {\n isTagsOpen,\n isProcessOpen,\n logs: logsState,\n isWarningsOpen,\n isReferencesOpen,\n isStackTracesOpen,\n } = detailState;\n const {\n operationName,\n process,\n duration,\n relativeStartTime,\n spanID,\n logs,\n tags,\n warnings,\n references,\n stackTraces,\n } = span;\n const overviewItems = [\n {\n key: 'svc',\n label: 'Service:',\n value: process.serviceName,\n },\n {\n key: 'duration',\n label: 'Duration:',\n value: formatDuration(duration),\n },\n {\n key: 'start',\n label: 'Start Time:',\n value: formatDuration(relativeStartTime),\n },\n ];\n const deepLinkCopyText = `${window.location.origin}${window.location.pathname}?uiFind=${spanID}`;\n const styles = getStyles(useTheme());\n const link = createSpanLink?.(span);\n\n return (\n
\n
\n

{operationName}

\n \n
\n {link ? (\n \n ) : null}\n \n
\n
\n tagsToggle(spanID)}\n />\n {process.tags && (\n processToggle(spanID)}\n />\n )}\n
\n {logs && logs.length > 0 && (\n logsToggle(spanID)}\n onItemToggle={(logItem) => logItemToggle(spanID, logItem)}\n timestamp={traceStartTime}\n />\n )}\n {warnings && warnings.length > 0 && (\n Warnings}\n data={warnings}\n isOpen={isWarningsOpen}\n onToggle={() => warningsToggle(spanID)}\n />\n )}\n {stackTraces && stackTraces.length && (\n {\n let text;\n if (textComponentProps.data?.length > 1) {\n text = textComponentProps.data\n .map((stackTrace, index) => `StackTrace ${index + 1}:\\n${stackTrace}`)\n .join('\\n');\n } else {\n text = textComponentProps.data?.[0];\n }\n return (\n \n );\n }}\n onToggle={() => stackTracesToggle(spanID)}\n />\n )}\n {references && references.length > 0 && (references.length > 1 || references[0].refType !== 'CHILD_OF') && (\n referencesToggle(spanID)}\n focusSpan={focusSpan}\n />\n )}\n \n {spanID}\n \n \n
\n
\n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport { css } from '@emotion/css';\n\nimport SpanDetail from './SpanDetail';\nimport DetailState from './SpanDetail/DetailState';\nimport SpanTreeOffset from './SpanTreeOffset';\nimport TimelineRow from './TimelineRow';\nimport { autoColor, createStyle, Theme, withTheme } from '../Theme';\n\nimport { TraceLog, TraceSpan, TraceKeyValuePair, TraceLink } from '../types/trace';\nimport { CreateSpanLink } from './types';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n expandedAccent: css`\n cursor: pointer;\n height: 100%;\n overflow: hidden;\n position: absolute;\n width: 100%;\n &::before {\n border-left: 4px solid;\n pointer-events: none;\n width: 1000px;\n }\n &::after {\n border-right: 1000px solid;\n border-color: inherit;\n cursor: pointer;\n opacity: 0.2;\n }\n\n /* border-color inherit must come AFTER other border declarations for accent */\n &::before,\n &::after {\n border-color: inherit;\n content: ' ';\n position: absolute;\n height: 100%;\n }\n\n &:hover::after {\n opacity: 0.35;\n }\n `,\n infoWrapper: css`\n label: infoWrapper;\n border: 1px solid ${autoColor(theme, '#d3d3d3')};\n border-top: 3px solid;\n padding: 0.75rem;\n `,\n };\n});\n\ntype SpanDetailRowProps = {\n color: string;\n columnDivision: number;\n detailState: DetailState;\n onDetailToggled: (spanID: string) => void;\n linksGetter: (span: TraceSpan, links: TraceKeyValuePair[], index: number) => TraceLink[];\n logItemToggle: (spanID: string, log: TraceLog) => void;\n logsToggle: (spanID: string) => void;\n processToggle: (spanID: string) => void;\n referencesToggle: (spanID: string) => void;\n warningsToggle: (spanID: string) => void;\n stackTracesToggle: (spanID: string) => void;\n span: TraceSpan;\n tagsToggle: (spanID: string) => void;\n traceStartTime: number;\n focusSpan: (uiFind: string) => void;\n hoverIndentGuideIds: Set;\n addHoverIndentGuideId: (spanID: string) => void;\n removeHoverIndentGuideId: (spanID: string) => void;\n theme: Theme;\n createSpanLink?: CreateSpanLink;\n};\n\nexport class UnthemedSpanDetailRow extends React.PureComponent {\n _detailToggle = () => {\n this.props.onDetailToggled(this.props.span.spanID);\n };\n\n _linksGetter = (items: TraceKeyValuePair[], itemIndex: number) => {\n const { linksGetter, span } = this.props;\n return linksGetter(span, items, itemIndex);\n };\n\n render() {\n const {\n color,\n columnDivision,\n detailState,\n logItemToggle,\n logsToggle,\n processToggle,\n referencesToggle,\n warningsToggle,\n stackTracesToggle,\n span,\n tagsToggle,\n traceStartTime,\n focusSpan,\n hoverIndentGuideIds,\n addHoverIndentGuideId,\n removeHoverIndentGuideId,\n theme,\n createSpanLink,\n } = this.props;\n const styles = getStyles(theme);\n return (\n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n );\n }\n}\n\nexport default withTheme(UnthemedSpanDetailRow);\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Theme } from '../Theme';\nimport memoizeOne from 'memoize-one';\n\n// TS needs the precise return type\nfunction strToRgb(s: string): [number, number, number] {\n if (s.length !== 7) {\n return [0, 0, 0];\n }\n const r = s.slice(1, 3);\n const g = s.slice(3, 5);\n const b = s.slice(5);\n return [parseInt(r, 16), parseInt(g, 16), parseInt(b, 16)];\n}\n\nclass ColorGenerator {\n colorsHex: string[];\n colorsRgb: Array<[number, number, number]>;\n cache: Map;\n currentIdx: number;\n\n constructor(colorsHex: string[]) {\n this.colorsHex = colorsHex;\n this.colorsRgb = colorsHex.map(strToRgb);\n this.cache = new Map();\n this.currentIdx = 0;\n }\n\n _getColorIndex(key: string): number {\n let i = this.cache.get(key);\n if (i == null) {\n i = this.currentIdx;\n this.cache.set(key, this.currentIdx);\n this.currentIdx = ++this.currentIdx % this.colorsHex.length;\n }\n return i;\n }\n\n /**\n * Will assign a color to an arbitrary key.\n * If the key has been used already, it will\n * use the same color.\n */\n getColorByKey(key: string) {\n const i = this._getColorIndex(key);\n return this.colorsHex[i];\n }\n\n /**\n * Retrieve the RGB values associated with a key. Adds the key and associates\n * it with a color if the key is not recognized.\n * @returns {number[]} An array of three ints [0, 255] representing a color.\n */\n getRgbColorByKey(key: string): [number, number, number] {\n const i = this._getColorIndex(key);\n return this.colorsRgb[i];\n }\n\n clear() {\n this.cache.clear();\n this.currentIdx = 0;\n }\n}\n\nconst getGenerator = memoizeOne((colors: string[]) => {\n return new ColorGenerator(colors);\n});\n\nexport function clear() {\n getGenerator([]);\n}\n\nexport function getColorByKey(key: string, theme: Theme) {\n return getGenerator(theme.servicesColorPalette).getColorByKey(key);\n}\n\nexport function getRgbColorByKey(key: string, theme: Theme): [number, number, number] {\n return getGenerator(theme.servicesColorPalette).getRgbColorByKey(key);\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\n\nimport { isEqual } from 'lodash';\nimport memoizeOne from 'memoize-one';\nimport ListView from './ListView';\nimport SpanBarRow from './SpanBarRow';\nimport DetailState from './SpanDetail/DetailState';\nimport SpanDetailRow from './SpanDetailRow';\nimport {\n createViewedBoundsFunc,\n findServerChildSpan,\n isErrorSpan,\n isKindClient,\n spanContainsErredSpan,\n ViewedBoundsFunctionType,\n} from './utils';\nimport { Accessors } from '../ScrollManager';\nimport { getColorByKey } from '../utils/color-generator';\nimport { TNil } from '../types';\nimport { TraceLog, TraceSpan, Trace, TraceKeyValuePair, TraceLink } from '../types/trace';\nimport TTraceTimeline from '../types/TTraceTimeline';\nimport { PEER_SERVICE } from '../constants/tag-keys';\n\nimport { createStyle, Theme, withTheme } from '../Theme';\nimport { CreateSpanLink } from './types';\n\ntype TExtractUiFindFromStateReturn = {\n uiFind: string | undefined;\n};\n\nconst getStyles = createStyle(() => {\n return {\n rowsWrapper: css`\n width: 100%;\n `,\n row: css`\n width: 100%;\n `,\n };\n});\n\ntype RowState = {\n isDetail: boolean;\n span: TraceSpan;\n spanIndex: number;\n};\n\ntype TVirtualizedTraceViewOwnProps = {\n currentViewRangeTime: [number, number];\n findMatchesIDs: Set | TNil;\n scrollToFirstVisibleSpan: () => void;\n registerAccessors: (accesors: Accessors) => void;\n trace: Trace;\n focusSpan: (uiFind: string) => void;\n linksGetter: (span: TraceSpan, items: TraceKeyValuePair[], itemIndex: number) => TraceLink[];\n childrenToggle: (spanID: string) => void;\n clearShouldScrollToFirstUiFindMatch: () => void;\n detailLogItemToggle: (spanID: string, log: TraceLog) => void;\n detailLogsToggle: (spanID: string) => void;\n detailWarningsToggle: (spanID: string) => void;\n detailStackTracesToggle: (spanID: string) => void;\n detailReferencesToggle: (spanID: string) => void;\n detailProcessToggle: (spanID: string) => void;\n detailTagsToggle: (spanID: string) => void;\n detailToggle: (spanID: string) => void;\n setSpanNameColumnWidth: (width: number) => void;\n setTrace: (trace: Trace | TNil, uiFind: string | TNil) => void;\n hoverIndentGuideIds: Set;\n addHoverIndentGuideId: (spanID: string) => void;\n removeHoverIndentGuideId: (spanID: string) => void;\n theme: Theme;\n createSpanLink?: CreateSpanLink;\n scrollElement?: Element;\n};\n\ntype VirtualizedTraceViewProps = TVirtualizedTraceViewOwnProps & TExtractUiFindFromStateReturn & TTraceTimeline;\n\n// export for tests\nexport const DEFAULT_HEIGHTS = {\n bar: 28,\n detail: 161,\n detailWithLogs: 197,\n};\n\nconst NUM_TICKS = 5;\n\nfunction generateRowStates(\n spans: TraceSpan[] | TNil,\n childrenHiddenIDs: Set,\n detailStates: Map\n): RowState[] {\n if (!spans) {\n return [];\n }\n let collapseDepth = null;\n const rowStates = [];\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n const { spanID, depth } = span;\n let hidden = false;\n if (collapseDepth != null) {\n if (depth >= collapseDepth) {\n hidden = true;\n } else {\n collapseDepth = null;\n }\n }\n if (hidden) {\n continue;\n }\n if (childrenHiddenIDs.has(spanID)) {\n collapseDepth = depth + 1;\n }\n rowStates.push({\n span,\n isDetail: false,\n spanIndex: i,\n });\n if (detailStates.has(spanID)) {\n rowStates.push({\n span,\n isDetail: true,\n spanIndex: i,\n });\n }\n }\n return rowStates;\n}\n\nfunction getClipping(currentViewRange: [number, number]) {\n const [zoomStart, zoomEnd] = currentViewRange;\n return {\n left: zoomStart > 0,\n right: zoomEnd < 1,\n };\n}\n\nfunction generateRowStatesFromTrace(\n trace: Trace | TNil,\n childrenHiddenIDs: Set,\n detailStates: Map\n): RowState[] {\n return trace ? generateRowStates(trace.spans, childrenHiddenIDs, detailStates) : [];\n}\n\nconst memoizedGenerateRowStates = memoizeOne(generateRowStatesFromTrace);\nconst memoizedViewBoundsFunc = memoizeOne(createViewedBoundsFunc, isEqual);\nconst memoizedGetClipping = memoizeOne(getClipping, isEqual);\n\n// export from tests\nexport class UnthemedVirtualizedTraceView extends React.Component {\n listView: ListView | TNil;\n\n constructor(props: VirtualizedTraceViewProps) {\n super(props);\n const { setTrace, trace, uiFind } = props;\n setTrace(trace, uiFind);\n }\n\n shouldComponentUpdate(nextProps: VirtualizedTraceViewProps) {\n // If any prop updates, VirtualizedTraceViewImpl should update.\n const nextPropKeys = Object.keys(nextProps) as Array;\n for (let i = 0; i < nextPropKeys.length; i += 1) {\n if (nextProps[nextPropKeys[i]] !== this.props[nextPropKeys[i]]) {\n // Unless the only change was props.shouldScrollToFirstUiFindMatch changing to false.\n if (nextPropKeys[i] === 'shouldScrollToFirstUiFindMatch') {\n if (nextProps[nextPropKeys[i]]) {\n return true;\n }\n } else {\n return true;\n }\n }\n }\n return false;\n }\n\n componentDidUpdate(prevProps: Readonly) {\n const { registerAccessors, trace } = prevProps;\n const {\n shouldScrollToFirstUiFindMatch,\n clearShouldScrollToFirstUiFindMatch,\n scrollToFirstVisibleSpan,\n registerAccessors: nextRegisterAccessors,\n setTrace,\n trace: nextTrace,\n uiFind,\n } = this.props;\n\n if (trace !== nextTrace) {\n setTrace(nextTrace, uiFind);\n }\n\n if (this.listView && registerAccessors !== nextRegisterAccessors) {\n nextRegisterAccessors(this.getAccessors());\n }\n\n if (shouldScrollToFirstUiFindMatch) {\n scrollToFirstVisibleSpan();\n clearShouldScrollToFirstUiFindMatch();\n }\n }\n\n getRowStates(): RowState[] {\n const { childrenHiddenIDs, detailStates, trace } = this.props;\n return memoizedGenerateRowStates(trace, childrenHiddenIDs, detailStates);\n }\n\n getClipping(): { left: boolean; right: boolean } {\n const { currentViewRangeTime } = this.props;\n return memoizedGetClipping(currentViewRangeTime);\n }\n\n getViewedBounds(): ViewedBoundsFunctionType {\n const { currentViewRangeTime, trace } = this.props;\n const [zoomStart, zoomEnd] = currentViewRangeTime;\n\n return memoizedViewBoundsFunc({\n min: trace.startTime,\n max: trace.endTime,\n viewStart: zoomStart,\n viewEnd: zoomEnd,\n });\n }\n\n getAccessors() {\n const lv = this.listView;\n if (!lv) {\n throw new Error('ListView unavailable');\n }\n return {\n getViewRange: this.getViewRange,\n getSearchedSpanIDs: this.getSearchedSpanIDs,\n getCollapsedChildren: this.getCollapsedChildren,\n getViewHeight: lv.getViewHeight,\n getBottomRowIndexVisible: lv.getBottomVisibleIndex,\n getTopRowIndexVisible: lv.getTopVisibleIndex,\n getRowPosition: lv.getRowPosition,\n mapRowIndexToSpanIndex: this.mapRowIndexToSpanIndex,\n mapSpanIndexToRowIndex: this.mapSpanIndexToRowIndex,\n };\n }\n\n getViewRange = () => this.props.currentViewRangeTime;\n\n getSearchedSpanIDs = () => this.props.findMatchesIDs;\n\n getCollapsedChildren = () => this.props.childrenHiddenIDs;\n\n mapRowIndexToSpanIndex = (index: number) => this.getRowStates()[index].spanIndex;\n\n mapSpanIndexToRowIndex = (index: number) => {\n const max = this.getRowStates().length;\n for (let i = 0; i < max; i++) {\n const { spanIndex } = this.getRowStates()[i];\n if (spanIndex === index) {\n return i;\n }\n }\n throw new Error(`unable to find row for span index: ${index}`);\n };\n\n setListView = (listView: ListView | TNil) => {\n const isChanged = this.listView !== listView;\n this.listView = listView;\n if (listView && isChanged) {\n this.props.registerAccessors(this.getAccessors());\n }\n };\n\n // use long form syntax to avert flow error\n // https://github.com/facebook/flow/issues/3076#issuecomment-290944051\n getKeyFromIndex = (index: number) => {\n const { isDetail, span } = this.getRowStates()[index];\n return `${span.spanID}--${isDetail ? 'detail' : 'bar'}`;\n };\n\n getIndexFromKey = (key: string) => {\n const parts = key.split('--');\n const _spanID = parts[0];\n const _isDetail = parts[1] === 'detail';\n const max = this.getRowStates().length;\n for (let i = 0; i < max; i++) {\n const { span, isDetail } = this.getRowStates()[i];\n if (span.spanID === _spanID && isDetail === _isDetail) {\n return i;\n }\n }\n return -1;\n };\n\n getRowHeight = (index: number) => {\n const { span, isDetail } = this.getRowStates()[index];\n if (!isDetail) {\n return DEFAULT_HEIGHTS.bar;\n }\n if (Array.isArray(span.logs) && span.logs.length) {\n return DEFAULT_HEIGHTS.detailWithLogs;\n }\n return DEFAULT_HEIGHTS.detail;\n };\n\n renderRow = (key: string, style: React.CSSProperties, index: number, attrs: {}) => {\n const { isDetail, span, spanIndex } = this.getRowStates()[index];\n return isDetail\n ? this.renderSpanDetailRow(span, key, style, attrs)\n : this.renderSpanBarRow(span, spanIndex, key, style, attrs);\n };\n\n renderSpanBarRow(span: TraceSpan, spanIndex: number, key: string, style: React.CSSProperties, attrs: {}) {\n const { spanID } = span;\n const { serviceName } = span.process;\n const {\n childrenHiddenIDs,\n childrenToggle,\n detailStates,\n detailToggle,\n findMatchesIDs,\n spanNameColumnWidth,\n trace,\n focusSpan,\n hoverIndentGuideIds,\n addHoverIndentGuideId,\n removeHoverIndentGuideId,\n theme,\n createSpanLink,\n } = this.props;\n // to avert flow error\n if (!trace) {\n return null;\n }\n const color = getColorByKey(serviceName, theme);\n const isCollapsed = childrenHiddenIDs.has(spanID);\n const isDetailExpanded = detailStates.has(spanID);\n const isMatchingFilter = findMatchesIDs ? findMatchesIDs.has(spanID) : false;\n const showErrorIcon = isErrorSpan(span) || (isCollapsed && spanContainsErredSpan(trace.spans, spanIndex));\n\n // Check for direct child \"server\" span if the span is a \"client\" span.\n let rpc = null;\n if (isCollapsed) {\n const rpcSpan = findServerChildSpan(trace.spans.slice(spanIndex));\n if (rpcSpan) {\n const rpcViewBounds = this.getViewedBounds()(rpcSpan.startTime, rpcSpan.startTime + rpcSpan.duration);\n rpc = {\n color: getColorByKey(rpcSpan.process.serviceName, theme),\n operationName: rpcSpan.operationName,\n serviceName: rpcSpan.process.serviceName,\n viewEnd: rpcViewBounds.end,\n viewStart: rpcViewBounds.start,\n };\n }\n }\n\n const peerServiceKV = span.tags.find((kv) => kv.key === PEER_SERVICE);\n // Leaf, kind == client and has peer.service.tag, is likely a client span that does a request\n // to an uninstrumented/external service\n let noInstrumentedServer = null;\n if (!span.hasChildren && peerServiceKV && isKindClient(span)) {\n noInstrumentedServer = {\n serviceName: peerServiceKV.value,\n color: getColorByKey(peerServiceKV.value, theme),\n };\n }\n\n const styles = getStyles();\n return (\n
\n \n
\n );\n }\n\n renderSpanDetailRow(span: TraceSpan, key: string, style: React.CSSProperties, attrs: {}) {\n const { spanID } = span;\n const { serviceName } = span.process;\n const {\n detailLogItemToggle,\n detailLogsToggle,\n detailProcessToggle,\n detailReferencesToggle,\n detailWarningsToggle,\n detailStackTracesToggle,\n detailStates,\n detailTagsToggle,\n detailToggle,\n spanNameColumnWidth,\n trace,\n focusSpan,\n hoverIndentGuideIds,\n addHoverIndentGuideId,\n removeHoverIndentGuideId,\n linksGetter,\n theme,\n createSpanLink,\n } = this.props;\n const detailState = detailStates.get(spanID);\n if (!trace || !detailState) {\n return null;\n }\n const color = getColorByKey(serviceName, theme);\n const styles = getStyles();\n return (\n
\n \n
\n );\n }\n\n render() {\n const styles = getStyles();\n const { scrollElement } = this.props;\n return (\n
\n \n
\n );\n }\n}\n\nexport default withTheme(UnthemedVirtualizedTraceView);\n","// Copyright (c) 2018 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const HTTP_METHOD = 'http.method' as 'http.method';\nexport const PEER_SERVICE = 'peer.service' as 'peer.service';\nexport const SPAN_KIND = 'span.kind' as 'span.kind';\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nconst keyboardMappings: Record = {\n scrollPageDown: { binding: 's', label: 'Scroll down' },\n scrollPageUp: { binding: 'w', label: 'Scroll up' },\n scrollToNextVisibleSpan: { binding: 'f', label: 'Scroll to the next visible span' },\n scrollToPrevVisibleSpan: { binding: 'b', label: 'Scroll to the previous visible span' },\n panLeft: { binding: ['a', 'left'], label: 'Pan left' },\n panLeftFast: { binding: ['shift+a', 'shift+left'], label: 'Pan left — Large' },\n panRight: { binding: ['d', 'right'], label: 'Pan right' },\n panRightFast: { binding: ['shift+d', 'shift+right'], label: 'Pan right — Large' },\n zoomIn: { binding: 'up', label: 'Zoom in' },\n zoomInFast: { binding: 'shift+up', label: 'Zoom in — Large' },\n zoomOut: { binding: 'down', label: 'Zoom out' },\n zoomOutFast: { binding: 'shift+down', label: 'Zoom out — Large' },\n collapseAll: { binding: ']', label: 'Collapse All' },\n expandAll: { binding: '[', label: 'Expand All' },\n collapseOne: { binding: 'p', label: 'Collapse One Level' },\n expandOne: { binding: 'o', label: 'Expand One Level' },\n searchSpans: { binding: 'ctrl+b', label: 'Search Spans' },\n clearSearch: { binding: 'escape', label: 'Clear Search' },\n};\n\nexport default keyboardMappings;\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport Combokeys from 'combokeys';\n\nimport keyboardMappings from './keyboard-mappings';\n\nexport type CombokeysHandler =\n | (() => void)\n | ((event: React.KeyboardEvent) => void)\n | ((event: React.KeyboardEvent, s: string) => void);\n\nexport type ShortcutCallbacks = {\n [name: string]: CombokeysHandler;\n};\n\nlet instance: Combokeys | undefined;\n\nfunction getInstance(): Combokeys {\n if (instance) {\n return instance;\n }\n const local = new Combokeys(document.body);\n instance = local;\n return local;\n}\n\nexport function merge(callbacks: ShortcutCallbacks) {\n const inst = getInstance();\n Object.keys(callbacks).forEach((name) => {\n const keysHandler = callbacks[name];\n if (keysHandler) {\n inst.bind(keyboardMappings[name].binding, keysHandler);\n }\n });\n}\n\nexport function reset() {\n const combokeys = getInstance();\n combokeys.reset();\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport { css } from '@emotion/css';\n\nimport TimelineHeaderRow from './TimelineHeaderRow';\nimport VirtualizedTraceView from './VirtualizedTraceView';\nimport { merge as mergeShortcuts } from '../keyboard-shortcuts';\nimport { Accessors } from '../ScrollManager';\nimport { TUpdateViewRangeTimeFunction, ViewRange, ViewRangeTimeUpdate } from './types';\nimport { TNil } from '../types';\nimport { TraceSpan, Trace, TraceLog, TraceKeyValuePair, TraceLink } from '../types/trace';\nimport TTraceTimeline from '../types/TTraceTimeline';\nimport { autoColor, createStyle, Theme, withTheme } from '../Theme';\nimport ExternalLinkContext from '../url/externalLinkContext';\n\ntype TExtractUiFindFromStateReturn = {\n uiFind: string | undefined;\n};\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n TraceTimelineViewer: css`\n label: TraceTimelineViewer;\n border-bottom: 1px solid ${autoColor(theme, '#bbb')};\n\n & .json-markup {\n line-height: 17px;\n font-size: 13px;\n font-family: monospace;\n white-space: pre-wrap;\n }\n\n & .json-markup-key {\n font-weight: bold;\n }\n\n & .json-markup-bool {\n color: ${autoColor(theme, 'firebrick')};\n }\n\n & .json-markup-string {\n color: ${autoColor(theme, 'teal')};\n }\n\n & .json-markup-null {\n color: ${autoColor(theme, 'teal')};\n }\n\n & .json-markup-number {\n color: ${autoColor(theme, 'blue', 'black')};\n }\n `,\n };\n});\n\ntype TProps = TExtractUiFindFromStateReturn & {\n registerAccessors: (accessors: Accessors) => void;\n findMatchesIDs: Set | TNil;\n scrollToFirstVisibleSpan: () => void;\n traceTimeline: TTraceTimeline;\n trace: Trace;\n updateNextViewRangeTime: (update: ViewRangeTimeUpdate) => void;\n updateViewRangeTime: TUpdateViewRangeTimeFunction;\n viewRange: ViewRange;\n focusSpan: (uiFind: string) => void;\n createLinkToExternalSpan: (traceID: string, spanID: string) => string;\n\n setSpanNameColumnWidth: (width: number) => void;\n collapseAll: (spans: TraceSpan[]) => void;\n collapseOne: (spans: TraceSpan[]) => void;\n expandAll: () => void;\n expandOne: (spans: TraceSpan[]) => void;\n\n childrenToggle: (spanID: string) => void;\n clearShouldScrollToFirstUiFindMatch: () => void;\n detailLogItemToggle: (spanID: string, log: TraceLog) => void;\n detailLogsToggle: (spanID: string) => void;\n detailWarningsToggle: (spanID: string) => void;\n detailStackTracesToggle: (spanID: string) => void;\n detailReferencesToggle: (spanID: string) => void;\n detailProcessToggle: (spanID: string) => void;\n detailTagsToggle: (spanID: string) => void;\n detailToggle: (spanID: string) => void;\n setTrace: (trace: Trace | TNil, uiFind: string | TNil) => void;\n addHoverIndentGuideId: (spanID: string) => void;\n removeHoverIndentGuideId: (spanID: string) => void;\n linksGetter: (span: TraceSpan, items: TraceKeyValuePair[], itemIndex: number) => TraceLink[];\n theme: Theme;\n createSpanLink?: (\n span: TraceSpan\n ) => { href: string; onClick?: (e: React.MouseEvent) => void; content: React.ReactNode };\n scrollElement?: Element;\n};\n\ntype State = {\n // Will be set to real height of the component so it can be passed down to size some other elements.\n height: number;\n};\n\nconst NUM_TICKS = 5;\n\n/**\n * `TraceTimelineViewer` now renders the header row because it is sensitive to\n * `props.viewRange.time.cursor`. If `VirtualizedTraceView` renders it, it will\n * re-render the ListView every time the cursor is moved on the trace minimap\n * or `TimelineHeaderRow`.\n */\nexport class UnthemedTraceTimelineViewer extends React.PureComponent {\n constructor(props: TProps) {\n super(props);\n this.state = { height: 0 };\n }\n\n componentDidMount() {\n mergeShortcuts({\n collapseAll: this.collapseAll,\n expandAll: this.expandAll,\n collapseOne: this.collapseOne,\n expandOne: this.expandOne,\n });\n }\n\n collapseAll = () => {\n this.props.collapseAll(this.props.trace.spans);\n };\n\n collapseOne = () => {\n this.props.collapseOne(this.props.trace.spans);\n };\n\n expandAll = () => {\n this.props.expandAll();\n };\n\n expandOne = () => {\n this.props.expandOne(this.props.trace.spans);\n };\n\n render() {\n const {\n setSpanNameColumnWidth,\n updateNextViewRangeTime,\n updateViewRangeTime,\n viewRange,\n createLinkToExternalSpan,\n traceTimeline,\n theme,\n ...rest\n } = this.props;\n const { trace } = rest;\n const styles = getStyles(theme);\n\n return (\n \n ref && this.setState({ height: ref.getBoundingClientRect().height })}\n >\n \n \n \n \n );\n }\n}\n\nexport default withTheme(UnthemedTraceTimelineViewer);\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\n\nimport renderIntoCanvas from './render-into-canvas';\nimport { getRgbColorByKey } from '../../utils/color-generator';\nimport { TNil } from '../../types';\n\nimport { autoColor, createStyle, Theme, withTheme } from '../../Theme';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n CanvasSpanGraph: css`\n label: CanvasSpanGraph;\n background: ${autoColor(theme, '#fafafa')};\n height: 60px;\n position: absolute;\n width: 100%;\n `,\n };\n});\n\ntype CanvasSpanGraphProps = {\n items: Array<{ valueWidth: number; valueOffset: number; serviceName: string }>;\n valueWidth: number;\n theme: Theme;\n};\n\nexport class UnthemedCanvasSpanGraph extends React.PureComponent {\n _canvasElm: HTMLCanvasElement | TNil;\n\n constructor(props: CanvasSpanGraphProps) {\n super(props);\n this._canvasElm = undefined;\n }\n\n getColor = (key: string) => getRgbColorByKey(key, this.props.theme);\n\n componentDidMount() {\n this._draw();\n }\n\n componentDidUpdate() {\n this._draw();\n }\n\n _setCanvasRef = (elm: HTMLCanvasElement | TNil) => {\n this._canvasElm = elm;\n };\n\n _draw() {\n if (this._canvasElm) {\n const { valueWidth: totalValueWidth, items } = this.props;\n renderIntoCanvas(this._canvasElm, items, totalValueWidth, this.getColor, autoColor(this.props.theme, '#fff'));\n }\n }\n\n render() {\n return ;\n }\n}\n\nexport default withTheme(UnthemedCanvasSpanGraph);\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { TNil } from '../..';\n\n// exported for tests\nexport const ITEM_ALPHA = 0.8;\nexport const MIN_ITEM_HEIGHT = 2;\nexport const MAX_TOTAL_HEIGHT = 200;\nexport const MIN_ITEM_WIDTH = 10;\nexport const MIN_TOTAL_HEIGHT = 60;\nexport const MAX_ITEM_HEIGHT = 6;\n\nexport default function renderIntoCanvas(\n canvas: HTMLCanvasElement,\n items: Array<{ valueWidth: number; valueOffset: number; serviceName: string }>,\n totalValueWidth: number,\n getFillColor: (serviceName: string) => [number, number, number],\n bgColor: string\n) {\n const fillCache: Map = new Map();\n const cHeight = items.length < MIN_TOTAL_HEIGHT ? MIN_TOTAL_HEIGHT : Math.min(items.length, MAX_TOTAL_HEIGHT);\n const cWidth = window.innerWidth * 2;\n // eslint-disable-next-line no-param-reassign\n canvas.width = cWidth;\n // eslint-disable-next-line no-param-reassign\n canvas.height = cHeight;\n const itemHeight = Math.min(MAX_ITEM_HEIGHT, Math.max(MIN_ITEM_HEIGHT, cHeight / items.length));\n const itemYChange = cHeight / items.length;\n\n const ctx = canvas.getContext('2d', { alpha: false }) as CanvasRenderingContext2D;\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, cWidth, cHeight);\n for (let i = 0; i < items.length; i++) {\n const { valueWidth, valueOffset, serviceName } = items[i];\n const x = (valueOffset / totalValueWidth) * cWidth;\n let width = (valueWidth / totalValueWidth) * cWidth;\n if (width < MIN_ITEM_WIDTH) {\n width = MIN_ITEM_WIDTH;\n }\n let fillStyle = fillCache.get(serviceName);\n if (!fillStyle) {\n fillStyle = `rgba(${getFillColor(serviceName).concat(ITEM_ALPHA).join()})`;\n fillCache.set(serviceName, fillStyle);\n }\n ctx.fillStyle = fillStyle;\n ctx.fillRect(x, i * itemYChange, width, itemHeight);\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\n\nimport { formatDuration } from '../../utils/date';\n\nimport { createStyle } from '../../Theme';\nimport { css } from '@emotion/css';\n\nconst getStyles = createStyle(() => {\n return {\n TickLabels: css`\n label: TickLabels;\n height: 1rem;\n position: relative;\n `,\n TickLabelsLabel: css`\n label: TickLabelsLabel;\n color: #717171;\n font-size: 0.7rem;\n position: absolute;\n user-select: none;\n `,\n };\n});\n\ntype TickLabelsProps = {\n numTicks: number;\n duration: number;\n};\n\nexport default function TickLabels(props: TickLabelsProps) {\n const { numTicks, duration } = props;\n const styles = getStyles();\n\n const ticks = [];\n for (let i = 0; i < numTicks + 1; i++) {\n const portion = i / numTicks;\n const style = portion === 1 ? { right: '0%' } : { left: `${portion * 100}%` };\n ticks.push(\n
\n {formatDuration(duration * portion)}\n
\n );\n }\n\n return
{ticks}
;\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport { css } from '@emotion/css';\nimport { createStyle } from '../../Theme';\n\nconst getStyles = createStyle(() => {\n return {\n GraphTick: css`\n label: GraphTick;\n stroke: #aaa;\n stroke-width: 1px;\n `,\n };\n});\n\ntype GraphTicksProps = {\n numTicks: number;\n};\n\nexport default function GraphTicks(props: GraphTicksProps) {\n const { numTicks } = props;\n const ticks = [];\n // i starts at 1, limit is `i < numTicks` so the first and last ticks aren't drawn\n for (let i = 1; i < numTicks; i++) {\n const x = `${(i / numTicks) * 100}%`;\n ticks.push();\n }\n\n return (\n \n {ticks}\n \n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport cx from 'classnames';\n\nimport { createStyle } from '../../Theme';\nimport { css } from '@emotion/css';\n\nexport const getStyles = createStyle(() => {\n return {\n ScrubberHandleExpansion: cx(\n css`\n label: ScrubberHandleExpansion;\n cursor: col-resize;\n fill-opacity: 0;\n fill: #44f;\n `,\n 'scrubber-handle-expansion'\n ),\n ScrubberHandle: cx(\n css`\n label: ScrubberHandle;\n cursor: col-resize;\n fill: #555;\n `,\n 'scrubber-handle'\n ),\n ScrubberLine: cx(\n css`\n label: ScrubberLine;\n pointer-events: none;\n stroke: #555;\n `,\n 'scrubber-line'\n ),\n ScrubberDragging: css`\n label: ScrubberDragging;\n & .scrubber-handle-expansion {\n fill-opacity: 1;\n }\n & .scrubber-handle {\n fill: #44f;\n }\n & > .scrubber-line {\n stroke: #44f;\n }\n `,\n ScrubberHandles: css`\n label: ScrubberHandles;\n &:hover > .scrubber-handle-expansion {\n fill-opacity: 1;\n }\n &:hover > .scrubber-handle {\n fill: #44f;\n }\n &:hover + .scrubber.line {\n stroke: #44f;\n }\n `,\n };\n});\n\ntype ScrubberProps = {\n isDragging: boolean;\n position: number;\n onMouseDown: (evt: React.MouseEvent) => void;\n onMouseEnter: (evt: React.MouseEvent) => void;\n onMouseLeave: (evt: React.MouseEvent) => void;\n};\n\nexport default function Scrubber({ isDragging, onMouseDown, onMouseEnter, onMouseLeave, position }: ScrubberProps) {\n const xPercent = `${position * 100}%`;\n const styles = getStyles();\n const className = cx({ [styles.ScrubberDragging]: isDragging });\n return (\n \n \n {/* handleExpansion is only visible when `isDragging` is true */}\n \n \n \n \n \n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport cx from 'classnames';\nimport * as React from 'react';\nimport { css } from '@emotion/css';\n\nimport GraphTicks from './GraphTicks';\nimport Scrubber from './Scrubber';\nimport { TUpdateViewRangeTimeFunction, UIButton, ViewRange, ViewRangeTimeUpdate, TNil } from '../..';\nimport { withTheme, Theme, autoColor, createStyle } from '../../Theme';\nimport DraggableManager, { DraggableBounds, DraggingUpdate, EUpdateTypes } from '../../utils/DraggableManager';\n\nexport const getStyles = createStyle((theme: Theme) => {\n // Need this cause emotion will merge emotion generated classes into single className if used with cx from emotion\n // package and the selector won't work\n const ViewingLayerResetZoomHoverClassName = 'JaegerUiComponents__ViewingLayerResetZoomHoverClassName';\n const ViewingLayerResetZoom = css`\n label: ViewingLayerResetZoom;\n display: none;\n position: absolute;\n right: 1%;\n top: 10%;\n z-index: 1;\n `;\n return {\n ViewingLayer: css`\n label: ViewingLayer;\n cursor: vertical-text;\n position: relative;\n z-index: 1;\n &:hover > .${ViewingLayerResetZoomHoverClassName} {\n display: unset;\n }\n `,\n ViewingLayerGraph: css`\n label: ViewingLayerGraph;\n border: 1px solid ${autoColor(theme, '#999')};\n /* need !important here to overcome something from semantic UI */\n overflow: visible !important;\n position: relative;\n transform-origin: 0 0;\n width: 100%;\n `,\n ViewingLayerInactive: css`\n label: ViewingLayerInactive;\n fill: ${autoColor(theme, 'rgba(214, 214, 214, 0.5)')};\n `,\n ViewingLayerCursorGuide: css`\n label: ViewingLayerCursorGuide;\n stroke: ${autoColor(theme, '#f44')};\n stroke-width: 1;\n `,\n ViewingLayerDraggedShift: css`\n label: ViewingLayerDraggedShift;\n fill-opacity: 0.2;\n `,\n ViewingLayerDrag: css`\n label: ViewingLayerDrag;\n fill: ${autoColor(theme, '#44f')};\n `,\n ViewingLayerFullOverlay: css`\n label: ViewingLayerFullOverlay;\n bottom: 0;\n cursor: col-resize;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n user-select: none;\n `,\n ViewingLayerResetZoom,\n ViewingLayerResetZoomHoverClassName,\n };\n});\n\ntype ViewingLayerProps = {\n height: number;\n numTicks: number;\n updateViewRangeTime: TUpdateViewRangeTimeFunction;\n updateNextViewRangeTime: (update: ViewRangeTimeUpdate) => void;\n viewRange: ViewRange;\n theme: Theme;\n};\n\ntype ViewingLayerState = {\n /**\n * Cursor line should not be drawn when the mouse is over the scrubber handle.\n */\n preventCursorLine: boolean;\n};\n\n/**\n * Designate the tags for the different dragging managers. Exported for tests.\n */\nexport const dragTypes = {\n /**\n * Tag for dragging the right scrubber, e.g. end of the current view range.\n */\n SHIFT_END: 'SHIFT_END',\n /**\n * Tag for dragging the left scrubber, e.g. start of the current view range.\n */\n SHIFT_START: 'SHIFT_START',\n /**\n * Tag for dragging a new view range.\n */\n REFRAME: 'REFRAME',\n};\n\n/**\n * Returns the layout information for drawing the view-range differential, e.g.\n * show what will change when the mouse is released. Basically, this is the\n * difference from the start of the drag to the current position.\n *\n * @returns {{ x: string, width: string, leadginX: string }}\n */\nfunction getNextViewLayout(start: number, position: number) {\n const [left, right] = start < position ? [start, position] : [position, start];\n return {\n x: `${left * 100}%`,\n width: `${(right - left) * 100}%`,\n leadingX: `${position * 100}%`,\n };\n}\n\n/**\n * `ViewingLayer` is rendered on top of the Canvas rendering of the minimap and\n * handles showing the current view range and handles mouse UX for modifying it.\n */\nexport class UnthemedViewingLayer extends React.PureComponent {\n state: ViewingLayerState;\n\n _root: Element | TNil;\n\n /**\n * `_draggerReframe` handles clicking and dragging on the `ViewingLayer` to\n * redefined the view range.\n */\n _draggerReframe: DraggableManager;\n\n /**\n * `_draggerStart` handles dragging the left scrubber to adjust the start of\n * the view range.\n */\n _draggerStart: DraggableManager;\n\n /**\n * `_draggerEnd` handles dragging the right scrubber to adjust the end of\n * the view range.\n */\n _draggerEnd: DraggableManager;\n\n constructor(props: ViewingLayerProps) {\n super(props);\n\n this._draggerReframe = new DraggableManager({\n getBounds: this._getDraggingBounds,\n onDragEnd: this._handleReframeDragEnd,\n onDragMove: this._handleReframeDragUpdate,\n onDragStart: this._handleReframeDragUpdate,\n onMouseMove: this._handleReframeMouseMove,\n onMouseLeave: this._handleReframeMouseLeave,\n tag: dragTypes.REFRAME,\n });\n\n this._draggerStart = new DraggableManager({\n getBounds: this._getDraggingBounds,\n onDragEnd: this._handleScrubberDragEnd,\n onDragMove: this._handleScrubberDragUpdate,\n onDragStart: this._handleScrubberDragUpdate,\n onMouseEnter: this._handleScrubberEnterLeave,\n onMouseLeave: this._handleScrubberEnterLeave,\n tag: dragTypes.SHIFT_START,\n });\n\n this._draggerEnd = new DraggableManager({\n getBounds: this._getDraggingBounds,\n onDragEnd: this._handleScrubberDragEnd,\n onDragMove: this._handleScrubberDragUpdate,\n onDragStart: this._handleScrubberDragUpdate,\n onMouseEnter: this._handleScrubberEnterLeave,\n onMouseLeave: this._handleScrubberEnterLeave,\n tag: dragTypes.SHIFT_END,\n });\n\n this._root = undefined;\n this.state = {\n preventCursorLine: false,\n };\n }\n\n componentWillUnmount() {\n this._draggerReframe.dispose();\n this._draggerEnd.dispose();\n this._draggerStart.dispose();\n }\n\n _setRoot = (elm: SVGElement | TNil) => {\n this._root = elm;\n };\n\n _getDraggingBounds = (tag: string | TNil): DraggableBounds => {\n if (!this._root) {\n throw new Error('invalid state');\n }\n const { left: clientXLeft, width } = this._root.getBoundingClientRect();\n const [viewStart, viewEnd] = this.props.viewRange.time.current;\n let maxValue = 1;\n let minValue = 0;\n if (tag === dragTypes.SHIFT_START) {\n maxValue = viewEnd;\n } else if (tag === dragTypes.SHIFT_END) {\n minValue = viewStart;\n }\n return { clientXLeft, maxValue, minValue, width };\n };\n\n _handleReframeMouseMove = ({ value }: DraggingUpdate) => {\n this.props.updateNextViewRangeTime({ cursor: value });\n };\n\n _handleReframeMouseLeave = () => {\n this.props.updateNextViewRangeTime({ cursor: null });\n };\n\n _handleReframeDragUpdate = ({ value }: DraggingUpdate) => {\n const shift = value;\n const { time } = this.props.viewRange;\n const anchor = time.reframe ? time.reframe.anchor : shift;\n const update = { reframe: { anchor, shift } };\n this.props.updateNextViewRangeTime(update);\n };\n\n _handleReframeDragEnd = ({ manager, value }: DraggingUpdate) => {\n const { time } = this.props.viewRange;\n const anchor = time.reframe ? time.reframe.anchor : value;\n const [start, end] = value < anchor ? [value, anchor] : [anchor, value];\n manager.resetBounds();\n this.props.updateViewRangeTime(start, end, 'minimap');\n };\n\n _handleScrubberEnterLeave = ({ type }: DraggingUpdate) => {\n const preventCursorLine = type === EUpdateTypes.MouseEnter;\n this.setState({ preventCursorLine });\n };\n\n _handleScrubberDragUpdate = ({ event, tag, type, value }: DraggingUpdate) => {\n if (type === EUpdateTypes.DragStart) {\n event.stopPropagation();\n }\n if (tag === dragTypes.SHIFT_START) {\n this.props.updateNextViewRangeTime({ shiftStart: value });\n } else if (tag === dragTypes.SHIFT_END) {\n this.props.updateNextViewRangeTime({ shiftEnd: value });\n }\n };\n\n _handleScrubberDragEnd = ({ manager, tag, value }: DraggingUpdate) => {\n const [viewStart, viewEnd] = this.props.viewRange.time.current;\n let update: [number, number];\n if (tag === dragTypes.SHIFT_START) {\n update = [value, viewEnd];\n } else if (tag === dragTypes.SHIFT_END) {\n update = [viewStart, value];\n } else {\n // to satisfy flow\n throw new Error('bad state');\n }\n manager.resetBounds();\n this.setState({ preventCursorLine: false });\n this.props.updateViewRangeTime(update[0], update[1], 'minimap');\n };\n\n /**\n * Resets the zoom to fully zoomed out.\n */\n _resetTimeZoomClickHandler = () => {\n this.props.updateViewRangeTime(0, 1);\n };\n\n /**\n * Renders the difference between where the drag started and the current\n * position, e.g. the red or blue highlight.\n *\n * @returns React.Node[]\n */\n _getMarkers(from: number, to: number) {\n const styles = getStyles(this.props.theme);\n const layout = getNextViewLayout(from, to);\n return [\n ,\n ,\n ];\n }\n\n render() {\n const { height, viewRange, numTicks, theme } = this.props;\n const { preventCursorLine } = this.state;\n const { current, cursor, shiftStart, shiftEnd, reframe } = viewRange.time;\n const haveNextTimeRange = shiftStart != null || shiftEnd != null || reframe != null;\n const [viewStart, viewEnd] = current;\n let leftInactive = 0;\n if (viewStart) {\n leftInactive = viewStart * 100;\n }\n let rightInactive = 100;\n if (viewEnd) {\n rightInactive = 100 - viewEnd * 100;\n }\n let cursorPosition: string | undefined;\n if (!haveNextTimeRange && cursor != null && !preventCursorLine) {\n cursorPosition = `${cursor * 100}%`;\n }\n const styles = getStyles(theme);\n\n return (\n
\n {(viewStart !== 0 || viewEnd !== 1) && (\n \n Reset Selection\n \n )}\n \n {leftInactive > 0 && (\n \n )}\n {rightInactive > 0 && (\n \n )}\n \n {cursorPosition && (\n \n )}\n {shiftStart != null && this._getMarkers(viewStart, shiftStart)}\n {shiftEnd != null && this._getMarkers(viewEnd, shiftEnd)}\n \n \n {reframe != null && this._getMarkers(reframe.anchor, reframe.shift)}\n \n {/* fullOverlay updates the mouse cursor blocks mouse events */}\n {haveNextTimeRange &&
}\n
\n );\n }\n}\n\nexport default withTheme(UnthemedViewingLayer);\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport cx from 'classnames';\nimport memoizeOne from 'memoize-one';\n\nimport CanvasSpanGraph from './CanvasSpanGraph';\nimport TickLabels from './TickLabels';\nimport ViewingLayer from './ViewingLayer';\nimport { TUpdateViewRangeTimeFunction, ViewRange, ViewRangeTimeUpdate } from '../..';\nimport { TraceSpan, Trace } from '../../types/trace';\nimport { ubPb2, ubPx2, ubRelative } from '../../uberUtilityStyles';\n\nconst DEFAULT_HEIGHT = 60;\nconst TIMELINE_TICK_INTERVAL = 4;\n\ntype SpanGraphProps = {\n height?: number;\n trace: Trace;\n viewRange: ViewRange;\n updateViewRangeTime: TUpdateViewRangeTimeFunction;\n updateNextViewRangeTime: (nextUpdate: ViewRangeTimeUpdate) => void;\n};\n\ntype SpanItem = {\n valueOffset: number;\n valueWidth: number;\n serviceName: string;\n};\n\nfunction getItem(span: TraceSpan): SpanItem {\n return {\n valueOffset: span.relativeStartTime,\n valueWidth: span.duration,\n serviceName: span.process.serviceName,\n };\n}\n\nfunction getItems(trace: Trace): SpanItem[] {\n return trace.spans.map(getItem);\n}\n\nconst memoizedGetitems = memoizeOne(getItems);\n\nexport default class SpanGraph extends React.PureComponent {\n static defaultProps = {\n height: DEFAULT_HEIGHT,\n };\n\n render() {\n const { height, trace, viewRange, updateNextViewRangeTime, updateViewRangeTime } = this.props;\n if (!trace) {\n return
;\n }\n\n const items = memoizedGetitems(trace);\n return (\n
\n \n
\n \n \n
\n
\n );\n }\n}\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\n\nimport { TNil } from '../types/index';\nimport { UIIcon, UIInput } from '../uiElementsContext';\n\ntype Props = {\n allowClear?: boolean;\n inputProps: Record;\n location: Location;\n match: any;\n trackFindFunction?: (str: string | TNil) => void;\n value: string | undefined;\n onChange: (value: string) => void;\n};\n\nexport default class UiFindInput extends React.PureComponent {\n static defaultProps: Partial = {\n inputProps: {},\n trackFindFunction: undefined,\n value: undefined,\n };\n\n clearUiFind = () => {\n this.props.onChange('');\n };\n\n render() {\n const { allowClear, inputProps, value } = this.props;\n\n const suffix = (\n <>\n {allowClear && value && value.length && }\n {inputProps.suffix}\n \n );\n\n return (\n this.props.onChange(e.target.value)}\n suffix={suffix}\n value={value}\n />\n );\n }\n}\n","// Copyright (c) 2018 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport cx from 'classnames';\nimport IoAndroidLocate from 'react-icons/lib/io/android-locate';\nimport { css } from '@emotion/css';\n\nimport * as markers from './TracePageSearchBar.markers';\nimport UiFindInput from '../common/UiFindInput';\nimport { TNil } from '../types';\n\nimport { UIButton, UIInputGroup } from '../uiElementsContext';\nimport { createStyle } from '../Theme';\nimport { ubFlexAuto, ubJustifyEnd } from '../uberUtilityStyles';\n// eslint-disable-next-line no-duplicate-imports\nimport { memo } from 'react';\n\nexport const getStyles = createStyle(() => {\n return {\n TracePageSearchBar: css`\n label: TracePageSearchBar;\n `,\n TracePageSearchBarBar: css`\n label: TracePageSearchBarBar;\n max-width: 20rem;\n transition: max-width 0.5s;\n &:focus-within {\n max-width: 100%;\n }\n `,\n TracePageSearchBarCount: css`\n label: TracePageSearchBarCount;\n opacity: 0.6;\n `,\n TracePageSearchBarBtn: css`\n label: TracePageSearchBarBtn;\n border-left: none;\n transition: 0.2s;\n `,\n TracePageSearchBarBtnDisabled: css`\n label: TracePageSearchBarBtnDisabled;\n opacity: 0.5;\n `,\n TracePageSearchBarLocateBtn: css`\n label: TracePageSearchBarLocateBtn;\n padding: 1px 8px 4px;\n `,\n };\n});\n\ntype TracePageSearchBarProps = {\n textFilter: string | TNil;\n prevResult: () => void;\n nextResult: () => void;\n clearSearch: () => void;\n focusUiFindMatches: () => void;\n resultCount: number;\n navigable: boolean;\n searchValue: string;\n onSearchValueChange: (value: string) => void;\n hideSearchButtons?: boolean;\n};\n\nexport default memo(function TracePageSearchBar(props: TracePageSearchBarProps) {\n const {\n clearSearch,\n focusUiFindMatches,\n navigable,\n nextResult,\n prevResult,\n resultCount,\n textFilter,\n onSearchValueChange,\n searchValue,\n hideSearchButtons,\n } = props;\n const styles = getStyles();\n\n const count = textFilter ? {resultCount} : null;\n\n const btnClass = cx(styles.TracePageSearchBarBtn, { [styles.TracePageSearchBarBtnDisabled]: !textFilter });\n const uiFindInputInputProps = {\n 'data-test': markers.IN_TRACE_SEARCH,\n className: cx(styles.TracePageSearchBarBar, ubFlexAuto),\n name: 'search',\n suffix: count,\n };\n\n return (\n
\n {/* style inline because compact overwrites the display */}\n \n \n {!hideSearchButtons && (\n <>\n {navigable && (\n <>\n \n \n \n \n \n \n )}\n \n \n )}\n \n
\n );\n});\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const IN_TRACE_SEARCH = 'in-trace-search';\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\n\nimport { createStyle } from '../Theme';\n\nconst getStyles = createStyle(() => {\n return {\n BreakableText: css`\n label: BreakableText;\n display: inline-block;\n white-space: pre;\n `,\n };\n});\n\nconst WORD_RX = /\\W*\\w+\\W*/g;\n\ntype Props = {\n text: string;\n className?: string;\n wordRegexp?: RegExp;\n};\n\n// TODO typescript doesn't understand text or null as react nodes\n// https://github.com/Microsoft/TypeScript/issues/21699\nexport default function BreakableText(\n props: Props\n): any /* React.ReactNode /* React.ReactElement | React.ReactElement[] \\*\\/ */ {\n const { className, text, wordRegexp = WORD_RX } = props;\n if (!text) {\n return typeof text === 'string' ? text : null;\n }\n const spans = [];\n wordRegexp.exec('');\n // if the given text has no words, set the first match to the entire text\n let match: RegExpExecArray | string[] | null = wordRegexp.exec(text) || [text];\n while (match) {\n spans.push(\n \n {match[0]}\n \n );\n match = wordRegexp.exec(text);\n }\n return spans;\n}\n\nBreakableText.defaultProps = {\n wordRegexp: WORD_RX,\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { css, keyframes } from '@emotion/css';\n\nimport { createStyle } from '../Theme';\nimport { UIIcon } from '../uiElementsContext';\n\nconst getStyles = createStyle(() => {\n const LoadingIndicatorColorAnim = keyframes`\n /*\n rgb(0, 128, 128) == teal\n rgba(0, 128, 128, 0.3) == #bedfdf\n */\n from {\n color: #bedfdf;\n }\n to {\n color: teal;\n }\n `;\n return {\n LoadingIndicator: css`\n label: LoadingIndicator;\n animation: ${LoadingIndicatorColorAnim} 1s infinite alternate;\n font-size: 36px;\n /* outline / stroke the loading indicator */\n text-shadow: -0.5px 0 rgba(0, 128, 128, 0.6), 0 0.5px rgba(0, 128, 128, 0.6), 0.5px 0 rgba(0, 128, 128, 0.6),\n 0 -0.5px rgba(0, 128, 128, 0.6);\n `,\n LoadingIndicatorCentered: css`\n label: LoadingIndicatorCentered;\n display: block;\n margin-left: auto;\n margin-right: auto;\n `,\n LoadingIndicatorSmall: css`\n label: LoadingIndicatorSmall;\n font-size: 0.7em;\n `,\n };\n});\n\ntype LoadingIndicatorProps = {\n centered?: boolean;\n className?: string;\n small?: boolean;\n};\n\nexport default function LoadingIndicator(props: LoadingIndicatorProps) {\n const { centered, className, small, ...rest } = props;\n const styles = getStyles();\n const cls = cx(styles.LoadingIndicator, {\n [styles.LoadingIndicatorCentered]: centered,\n [styles.LoadingIndicatorSmall]: small,\n className,\n });\n return ;\n}\n\nLoadingIndicator.defaultProps = {\n centered: false,\n className: undefined,\n small: false,\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const TOP_NAV_HEIGHT = 46 as 46;\n\nexport const FALLBACK_DAG_MAX_NUM_SERVICES = 100 as 100;\nexport const FALLBACK_TRACE_NAME = '' as '';\n\nexport const FETCH_DONE = 'FETCH_DONE' as 'FETCH_DONE';\nexport const FETCH_ERROR = 'FETCH_ERROR' as 'FETCH_ERROR';\nexport const FETCH_LOADING = 'FETCH_LOADING' as 'FETCH_LOADING';\n\nexport const fetchedState = {\n DONE: FETCH_DONE,\n ERROR: FETCH_ERROR,\n LOADING: FETCH_LOADING,\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport BreakableText from './BreakableText';\nimport LoadingIndicator from './LoadingIndicator';\nimport { fetchedState, FALLBACK_TRACE_NAME } from '../constants';\n\nimport { FetchedState, TNil } from '../types';\nimport { ApiError } from '../types/api-error';\nimport { createStyle, safeSize, Theme, useTheme } from '../Theme';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n TraceName: css`\n label: TraceName;\n font-size: ${safeSize(theme.components?.TraceName?.fontSize, 'unset')};\n `,\n TraceNameError: css`\n label: TraceNameError;\n color: #c00;\n `,\n };\n});\n\ntype Props = {\n className?: string;\n error?: ApiError | TNil;\n state?: FetchedState | TNil;\n traceName?: string | TNil;\n};\n\nexport default function TraceName(props: Props) {\n const { className, error, state, traceName } = props;\n const isErred = state === fetchedState.ERROR;\n let title: string | React.ReactNode = traceName || FALLBACK_TRACE_NAME;\n const styles = getStyles(useTheme());\n let errorCssClass = '';\n if (isErred) {\n errorCssClass = styles.TraceNameError;\n let titleStr = '';\n if (error) {\n titleStr = typeof error === 'string' ? error : error.message || String(error);\n }\n if (!titleStr) {\n titleStr = 'Error: Unknown error';\n }\n title = titleStr;\n title = ;\n } else if (state === fetchedState.LOADING) {\n title = ;\n } else {\n const text = String(traceName || FALLBACK_TRACE_NAME);\n title = ;\n }\n return {title};\n}\n","// Copyright (c) 2020 The Jaeger Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { memoize } from 'lodash';\n\nimport { TraceSpan } from '../types/trace';\n\nexport function _getTraceNameImpl(spans: TraceSpan[]) {\n // Use a span with no references to another span in given array\n // prefering the span with the fewest references\n // using start time as a tie breaker\n let candidateSpan: TraceSpan | undefined;\n const allIDs: Set = new Set(spans.map(({ spanID }) => spanID));\n\n for (let i = 0; i < spans.length; i++) {\n const hasInternalRef =\n spans[i].references &&\n spans[i].references.some(({ traceID, spanID }) => traceID === spans[i].traceID && allIDs.has(spanID));\n if (hasInternalRef) {\n continue;\n }\n\n if (!candidateSpan) {\n candidateSpan = spans[i];\n continue;\n }\n\n const thisRefLength = (spans[i].references && spans[i].references.length) || 0;\n const candidateRefLength = (candidateSpan.references && candidateSpan.references.length) || 0;\n\n if (\n thisRefLength < candidateRefLength ||\n (thisRefLength === candidateRefLength && spans[i].startTime < candidateSpan.startTime)\n ) {\n candidateSpan = spans[i];\n }\n }\n return candidateSpan ? `${candidateSpan.process.serviceName}: ${candidateSpan.operationName}` : '';\n}\n\nexport const getTraceName = memoize(_getTraceNameImpl, (spans: TraceSpan[]) => {\n if (!spans.length) {\n return 0;\n }\n return spans[0].traceID;\n});\n","// \nvar hasOwn = function hasOwn(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n};\n\nfunction deepEquals(equals, deepObjects) {\n function deep(valueA, valueB) {\n if (equals(valueA, valueB)) {\n return true;\n }\n\n if (Array.isArray(valueA)) {\n if (!Array.isArray(valueB) || valueA.length !== valueB.length) {\n return false;\n } // Check deep equality of each value in A against the same indexed value in B\n\n\n if (!valueA.every(function (value, index) {\n return deep(value, valueB[index]);\n })) {\n return false;\n } // could not find unequal items\n\n\n return true;\n }\n\n if (Array.isArray(valueB)) {\n return false;\n }\n\n if (typeof valueA === \"object\") {\n if (typeof valueB !== \"object\") {\n return false;\n }\n\n var isANull = valueA === null;\n var isBNull = valueB === null;\n\n if (isANull || isBNull) {\n return isANull === isBNull;\n }\n\n var aKeys = Object.keys(valueA);\n var bKeys = Object.keys(valueB);\n\n if (aKeys.length !== bKeys.length) {\n return false;\n } // Should we compare with shallow equivalence or deep equivalence?\n\n\n var equalityChecker = deepObjects ? deep : equals; // Check if objects share same keys, and each of those keys are equal\n\n if (!aKeys.every(function (aKey) {\n return hasOwn(valueA, aKey) && hasOwn(valueB, aKey) && equalityChecker(valueA[aKey], valueB[aKey]);\n })) {\n return false;\n } // could not find unequal keys or values\n\n\n return true;\n }\n\n return false;\n }\n\n return deep;\n}\n\n// \nvar findIndex = function findIndex(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n if (fn(arr[i])) {\n return i;\n }\n }\n\n return -1;\n};\n\nfunction lruCache(limit, equals) {\n var entries = [];\n\n function get(key) {\n var cacheIndex = findIndex(entries, function (entry) {\n return equals(key, entry.key);\n }); // We found a cached entry\n\n if (cacheIndex > -1) {\n var entry = entries[cacheIndex]; // Cached entry not at top of cache, move it to the top\n\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n\n return entry.value;\n } // No entry found in cache, return null\n\n\n return undefined;\n }\n\n function put(key, value) {\n if (!get(key)) {\n entries.unshift({\n key: key,\n value: value\n });\n\n if (entries.length > limit) {\n entries.pop();\n }\n }\n }\n\n return {\n get: get,\n put: put\n };\n}\n\n// \nfunction singletonCache(equals) {\n var entry;\n return {\n get: function get(key) {\n if (entry && equals(key, entry.key)) {\n return entry.value;\n }\n },\n put: function put(key, value) {\n entry = {\n key: key,\n value: value\n };\n }\n };\n}\n\n// \n\nfunction createCache(limit, equals) {\n return limit === 1 ? singletonCache(equals) : lruCache(limit, equals);\n}\n\nfunction createEqualsFn(basicEquals, deepObjects) {\n // Choose strategy for basic or deep object equals\n var equals = deepObjects ? deepEquals(basicEquals, deepObjects) : basicEquals;\n return function (valueA, valueB) {\n // The arguments are always the argument array-like objects\n // Different lengths means they are not the same\n if (valueA.length !== valueB.length) {\n return false;\n } // Compare the values\n\n\n for (var index = 0; index < valueA.length; index += 1) {\n if (!equals(valueA[index], valueB[index])) {\n return false;\n }\n } // Found no conflicts\n\n\n return true;\n };\n}\n\nfunction memoize() {\n var limit = 1;\n\n var equals = function equals(valueA, valueB) {\n return valueA === valueB;\n };\n\n var deepObjects = false;\n\n for (var _len = arguments.length, config = new Array(_len), _key = 0; _key < _len; _key++) {\n config[_key] = arguments[_key];\n }\n\n if (typeof config[0] === \"number\") {\n limit = config.shift();\n }\n\n if (typeof config[0] === \"function\") {\n equals = config.shift();\n } else if (typeof config[0] === \"undefined\") {\n // Support passing undefined equal argument;\n config.shift();\n }\n\n if (typeof config[0] === \"boolean\") {\n deepObjects = config[0];\n }\n\n var cache = createCache(limit, createEqualsFn(equals, deepObjects));\n return function (fn) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var value = cache.get(args);\n\n if (value === undefined) {\n value = fn.apply(fn, args);\n cache.put(args, value);\n }\n\n return value;\n };\n };\n}\n\nexport default memoize;\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport deepFreeze from 'deep-freeze';\n\nimport { FALLBACK_DAG_MAX_NUM_SERVICES } from './index';\n\nexport default deepFreeze(\n Object.defineProperty(\n {\n archiveEnabled: false,\n dependencies: {\n dagMaxNumServices: FALLBACK_DAG_MAX_NUM_SERVICES,\n menuEnabled: true,\n },\n linkPatterns: [],\n menu: [\n {\n label: 'About Jaeger',\n items: [\n {\n label: 'GitHub',\n url: 'https://github.com/uber/jaeger',\n },\n {\n label: 'Docs',\n url: 'http://jaeger.readthedocs.io/en/latest/',\n },\n {\n label: 'Twitter',\n url: 'https://twitter.com/JaegerTracing',\n },\n {\n label: 'Discussion Group',\n url: 'https://groups.google.com/forum/#!forum/jaeger-tracing',\n },\n {\n label: 'Gitter.im',\n url: 'https://gitter.im/jaegertracing/Lobby',\n },\n {\n label: 'Blog',\n url: 'https://medium.com/jaegertracing/',\n },\n ],\n },\n ],\n search: {\n maxLookback: {\n label: '2 Days',\n value: '2d',\n },\n maxLimit: 1500,\n },\n tracking: {\n gaID: null,\n trackErrors: true,\n },\n },\n // fields that should be individually merged vs wholesale replaced\n '__mergeFields',\n { value: ['dependencies', 'search', 'tracking'] }\n )\n);\n\nexport const deprecations = [\n {\n formerKey: 'dependenciesMenuEnabled',\n currentKey: 'dependencies.menuEnabled',\n },\n {\n formerKey: 'gaTrackingID',\n currentKey: 'tracking.gaID',\n },\n];\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { get as _get } from 'lodash';\n\nimport defaultConfig from '../../constants/default-config';\n\n/**\n * Merge the embedded config from the query service (if present) with the\n * default config from `../../constants/default-config`.\n */\nexport default function getConfig() {\n return defaultConfig;\n}\n\nexport function getConfigValue(path: string) {\n return _get(getConfig(), path);\n}\n","// Copyright (c) 2017 The Jaeger Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { TraceSpan } from '../types/trace';\n\n/**\n * Searches the span.references to find 'CHILD_OF' reference type or returns null.\n * @param {TraceSpan} span The span whose parent is to be returned.\n * @returns {TraceSpan|null} The parent span if there is one, null otherwise.\n */\nexport function getParent(span: TraceSpan) {\n const parentRef = span.references ? span.references.find((ref) => ref.refType === 'CHILD_OF') : null;\n return parentRef ? parentRef.span : null;\n}\n","// Copyright (c) 2017 The Jaeger Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { uniq as _uniq } from 'lodash';\nimport memoize from 'lru-memoize';\nimport { getConfigValue } from '../utils/config/get-config';\nimport { getParent } from './span';\nimport { TNil } from '../types';\nimport { TraceSpan, TraceLink, TraceKeyValuePair, Trace } from '../types/trace';\n\nconst parameterRegExp = /#\\{([^{}]*)\\}/g;\n\ntype ProcessedTemplate = {\n parameters: string[];\n template: (template: { [key: string]: any }) => string;\n};\n\ntype ProcessedLinkPattern = {\n object: any;\n type: (link: string) => boolean;\n key: (link: string) => boolean;\n value: (value: any) => boolean;\n url: ProcessedTemplate;\n text: ProcessedTemplate;\n parameters: string[];\n};\n\ntype TLinksRV = Array<{ url: string; text: string }>;\n\nfunction getParamNames(str: string) {\n const names = new Set();\n str.replace(parameterRegExp, (match, name) => {\n names.add(name);\n return match;\n });\n return Array.from(names);\n}\n\nfunction stringSupplant(str: string, encodeFn: (unencoded: any) => string, map: Record) {\n return str.replace(parameterRegExp, (_, name) => {\n const value = map[name];\n return value == null ? '' : encodeFn(value);\n });\n}\n\nexport function processTemplate(template: any, encodeFn: (unencoded: any) => string): ProcessedTemplate {\n if (typeof template !== 'string') {\n /*\n\n // kept on ice until #123 is implemented:\n if (template && Array.isArray(template.parameters) && (typeof template.template === 'function')) {\n return template;\n }\n\n */\n throw new Error('Invalid template');\n }\n return {\n parameters: getParamNames(template),\n template: stringSupplant.bind(null, template, encodeFn),\n };\n}\n\nexport function createTestFunction(entry: any) {\n if (typeof entry === 'string') {\n return (arg: any) => arg === entry;\n }\n if (Array.isArray(entry)) {\n return (arg: any) => entry.indexOf(arg) > -1;\n }\n /*\n\n // kept on ice until #123 is implemented:\n if (entry instanceof RegExp) {\n return (arg: any) => entry.test(arg);\n }\n if (typeof entry === 'function') {\n return entry;\n }\n\n */\n if (entry == null) {\n return () => true;\n }\n throw new Error(`Invalid value: ${entry}`);\n}\n\nconst identity = (a: any): typeof a => a;\n\nexport function processLinkPattern(pattern: any): ProcessedLinkPattern | TNil {\n try {\n const url = processTemplate(pattern.url, encodeURIComponent);\n const text = processTemplate(pattern.text, identity);\n return {\n object: pattern,\n type: createTestFunction(pattern.type),\n key: createTestFunction(pattern.key),\n value: createTestFunction(pattern.value),\n url,\n text,\n parameters: _uniq(url.parameters.concat(text.parameters)),\n };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Ignoring invalid link pattern: ${error}`, pattern);\n return null;\n }\n}\n\nexport function getParameterInArray(name: string, array: TraceKeyValuePair[]) {\n if (array) {\n return array.find((entry) => entry.key === name);\n }\n return undefined;\n}\n\nexport function getParameterInAncestor(name: string, span: TraceSpan) {\n let currentSpan: TraceSpan | TNil = span;\n while (currentSpan) {\n const result = getParameterInArray(name, currentSpan.tags) || getParameterInArray(name, currentSpan.process.tags);\n if (result) {\n return result;\n }\n currentSpan = getParent(currentSpan);\n }\n return undefined;\n}\n\nfunction callTemplate(template: ProcessedTemplate, data: any) {\n return template.template(data);\n}\n\nexport function computeTraceLink(linkPatterns: ProcessedLinkPattern[], trace: Trace) {\n const result: TLinksRV = [];\n const validKeys = (Object.keys(trace) as Array).filter(\n (key) => typeof trace[key] === 'string' || trace[key] === 'number'\n );\n\n linkPatterns\n .filter((pattern) => pattern.type('traces'))\n .forEach((pattern) => {\n const parameterValues: Record = {};\n const allParameters = pattern.parameters.every((parameter) => {\n const key = parameter as keyof Trace;\n if (validKeys.includes(key)) {\n // At this point is safe to access to trace object using parameter variable because\n // we validated parameter against validKeys, this implies that parameter a keyof Trace.\n parameterValues[parameter] = trace[key];\n return true;\n }\n return false;\n });\n if (allParameters) {\n result.push({\n url: callTemplate(pattern.url, parameterValues),\n text: callTemplate(pattern.text, parameterValues),\n });\n }\n });\n\n return result;\n}\n\nexport function computeLinks(\n linkPatterns: ProcessedLinkPattern[],\n span: TraceSpan,\n items: TraceKeyValuePair[],\n itemIndex: number\n) {\n const item = items[itemIndex];\n let type = 'logs';\n const processTags = span.process.tags === items;\n if (processTags) {\n type = 'process';\n }\n const spanTags = span.tags === items;\n if (spanTags) {\n type = 'tags';\n }\n const result: Array<{ url: string; text: string }> = [];\n linkPatterns.forEach((pattern) => {\n if (pattern.type(type) && pattern.key(item.key) && pattern.value(item.value)) {\n const parameterValues: Record = {};\n const allParameters = pattern.parameters.every((parameter) => {\n let entry = getParameterInArray(parameter, items);\n if (!entry && !processTags) {\n // do not look in ancestors for process tags because the same object may appear in different places in the hierarchy\n // and the cache in getLinks uses that object as a key\n entry = getParameterInAncestor(parameter, span);\n }\n if (entry) {\n parameterValues[parameter] = entry.value;\n return true;\n }\n // eslint-disable-next-line no-console\n console.warn(\n `Skipping link pattern, missing parameter ${parameter} for key ${item.key} in ${type}.`,\n pattern.object\n );\n return false;\n });\n if (allParameters) {\n result.push({\n url: callTemplate(pattern.url, parameterValues),\n text: callTemplate(pattern.text, parameterValues),\n });\n }\n }\n });\n return result;\n}\n\nexport function createGetLinks(linkPatterns: ProcessedLinkPattern[], cache: WeakMap) {\n return (span: TraceSpan, items: TraceKeyValuePair[], itemIndex: number) => {\n if (linkPatterns.length === 0) {\n return [];\n }\n const item = items[itemIndex];\n let result = cache.get(item);\n if (!result) {\n result = computeLinks(linkPatterns, span, items, itemIndex);\n cache.set(item, result);\n }\n return result;\n };\n}\n\nconst processedLinks: ProcessedLinkPattern[] = (getConfigValue('linkPatterns') || [])\n .map(processLinkPattern)\n .filter(Boolean);\n\nexport const getTraceLinks: (trace: Trace | undefined) => TLinksRV = memoize(10)((trace: Trace | undefined) => {\n const result: TLinksRV = [];\n if (!trace) {\n return result;\n }\n return computeTraceLink(processedLinks, trace);\n});\n\nexport default createGetLinks(processedLinks, new WeakMap());\n","// Copyright (c) 2019 The Jaeger Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { UIDropdown, UIMenu, UIMenuItem } from '..';\nimport NewWindowIcon from './NewWindowIcon';\n\ntype Link = {\n text: string;\n url: string;\n};\n\ntype ExternalLinksProps = {\n links: Link[];\n className?: string;\n};\n\nconst LinkValue = (props: { href: string; title?: string; children?: React.ReactNode; className?: string }) => (\n \n {props.children} \n \n);\n\n// export for testing\nexport const linkValueList = (links: Link[]) => (\n \n {links.map(({ text, url }, index) => (\n // `index` is necessary in the key because url can repeat\n \n {text}\n \n ))}\n \n);\n\nexport default function ExternalLinks(props: ExternalLinksProps) {\n const { links } = props;\n if (links.length === 1) {\n return ;\n }\n return (\n \n \n \n \n \n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport * as React from 'react';\nimport { get as _get, maxBy as _maxBy, values as _values } from 'lodash';\nimport MdKeyboardArrowRight from 'react-icons/lib/md/keyboard-arrow-right';\nimport { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport SpanGraph from './SpanGraph';\nimport TracePageSearchBar from './TracePageSearchBar';\nimport { autoColor, Theme, TUpdateViewRangeTimeFunction, useTheme, ViewRange, ViewRangeTimeUpdate } from '..';\nimport LabeledList from '../common/LabeledList';\nimport TraceName from '../common/TraceName';\nimport { getTraceName } from '../model/trace-viewer';\nimport { TNil } from '../types';\nimport { Trace } from '../types/trace';\nimport { formatDuration } from '../utils/date';\nimport { getTraceLinks } from '../model/link-patterns';\n\nimport ExternalLinks from '../common/ExternalLinks';\nimport { createStyle } from '../Theme';\nimport { uTxMuted } from '../uberUtilityStyles';\nimport { dateTimeFormat, TimeZone } from '@grafana/data';\n\nconst getStyles = createStyle((theme: Theme) => {\n return {\n TracePageHeader: css`\n label: TracePageHeader;\n & > :first-child {\n border-bottom: 1px solid ${autoColor(theme, '#e8e8e8')};\n }\n & > :nth-child(2) {\n background-color: ${autoColor(theme, '#eee')};\n border-bottom: 1px solid ${autoColor(theme, '#e4e4e4')};\n }\n & > :last-child {\n border-bottom: 1px solid ${autoColor(theme, '#ccc')};\n }\n `,\n TracePageHeaderTitleRow: css`\n label: TracePageHeaderTitleRow;\n align-items: center;\n display: flex;\n `,\n TracePageHeaderBack: css`\n label: TracePageHeaderBack;\n align-items: center;\n align-self: stretch;\n background-color: #fafafa;\n border-bottom: 1px solid #ddd;\n border-right: 1px solid #ddd;\n color: inherit;\n display: flex;\n font-size: 1.4rem;\n padding: 0 1rem;\n margin-bottom: -1px;\n &:hover {\n background-color: #f0f0f0;\n border-color: #ccc;\n }\n `,\n TracePageHeaderTitleLink: css`\n label: TracePageHeaderTitleLink;\n align-items: center;\n display: flex;\n flex: 1;\n\n &:hover * {\n text-decoration: underline;\n }\n &:hover > *,\n &:hover small {\n text-decoration: none;\n }\n `,\n TracePageHeaderDetailToggle: css`\n label: TracePageHeaderDetailToggle;\n font-size: 2.5rem;\n transition: transform 0.07s ease-out;\n `,\n TracePageHeaderDetailToggleExpanded: css`\n label: TracePageHeaderDetailToggleExpanded;\n transform: rotate(90deg);\n `,\n TracePageHeaderTitle: css`\n label: TracePageHeaderTitle;\n color: inherit;\n flex: 1;\n font-size: 1.7em;\n line-height: 1em;\n margin: 0 0 0 0.5em;\n padding-bottom: 0.5em;\n `,\n TracePageHeaderTitleCollapsible: css`\n label: TracePageHeaderTitleCollapsible;\n margin-left: 0;\n `,\n TracePageHeaderOverviewItems: css`\n label: TracePageHeaderOverviewItems;\n border-bottom: 1px solid #e4e4e4;\n padding: 0.25rem 0.5rem !important;\n `,\n TracePageHeaderOverviewItemValueDetail: cx(\n css`\n label: TracePageHeaderOverviewItemValueDetail;\n color: #aaa;\n `,\n 'trace-item-value-detail'\n ),\n TracePageHeaderOverviewItemValue: css`\n label: TracePageHeaderOverviewItemValue;\n &:hover > .trace-item-value-detail {\n color: unset;\n }\n `,\n TracePageHeaderArchiveIcon: css`\n label: TracePageHeaderArchiveIcon;\n font-size: 1.78em;\n margin-right: 0.15em;\n `,\n TracePageHeaderTraceId: css`\n label: TracePageHeaderTraceId;\n white-space: nowrap;\n `,\n };\n});\n\ntype TracePageHeaderEmbedProps = {\n canCollapse: boolean;\n clearSearch: () => void;\n focusUiFindMatches: () => void;\n hideMap: boolean;\n hideSummary: boolean;\n nextResult: () => void;\n onSlimViewClicked: () => void;\n onTraceGraphViewClicked: () => void;\n prevResult: () => void;\n resultCount: number;\n slimView: boolean;\n textFilter: string | TNil;\n trace: Trace;\n traceGraphView: boolean;\n updateNextViewRangeTime: (update: ViewRangeTimeUpdate) => void;\n updateViewRangeTime: TUpdateViewRangeTimeFunction;\n viewRange: ViewRange;\n searchValue: string;\n onSearchValueChange: (value: string) => void;\n hideSearchButtons?: boolean;\n timeZone: TimeZone;\n};\n\nexport const HEADER_ITEMS = [\n {\n key: 'timestamp',\n label: 'Trace Start',\n renderer(trace: Trace, timeZone: TimeZone, styles: ReturnType) {\n // Convert date from micro to milli seconds\n const dateStr = dateTimeFormat(trace.startTime / 1000, { timeZone });\n const match = dateStr.match(/^(.+)(:\\d\\d\\.\\d+)$/);\n return match ? (\n \n {match[1]}\n {match[2]}\n \n ) : (\n dateStr\n );\n },\n },\n {\n key: 'duration',\n label: 'Duration',\n renderer: (trace: Trace) => formatDuration(trace.duration),\n },\n {\n key: 'service-count',\n label: 'Services',\n renderer: (trace: Trace) => new Set(_values(trace.processes).map((p) => p.serviceName)).size,\n },\n {\n key: 'depth',\n label: 'Depth',\n renderer: (trace: Trace) => _get(_maxBy(trace.spans, 'depth'), 'depth', 0) + 1,\n },\n {\n key: 'span-count',\n label: 'Total Spans',\n renderer: (trace: Trace) => trace.spans.length,\n },\n];\n\nexport default function TracePageHeader(props: TracePageHeaderEmbedProps) {\n const {\n canCollapse,\n clearSearch,\n focusUiFindMatches,\n hideMap,\n hideSummary,\n nextResult,\n onSlimViewClicked,\n prevResult,\n resultCount,\n slimView,\n textFilter,\n trace,\n traceGraphView,\n updateNextViewRangeTime,\n updateViewRangeTime,\n viewRange,\n searchValue,\n onSearchValueChange,\n hideSearchButtons,\n timeZone,\n } = props;\n\n const styles = getStyles(useTheme());\n const links = React.useMemo(() => {\n if (!trace) {\n return [];\n }\n return getTraceLinks(trace);\n }, [trace]);\n\n if (!trace) {\n return null;\n }\n\n const summaryItems =\n !hideSummary &&\n !slimView &&\n HEADER_ITEMS.map((item) => {\n const { renderer, ...rest } = item;\n return { ...rest, value: renderer(trace, timeZone, styles) };\n });\n\n const title = (\n

\n {' '}\n {trace.traceID}\n

\n );\n\n return (\n
\n
\n {links && links.length > 0 && }\n {canCollapse ? (\n \n \n {title}\n \n ) : (\n title\n )}\n \n
\n {summaryItems && }\n {!hideMap && !slimView && (\n \n )}\n
\n );\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { TraceLog } from '../../types/trace';\n\n/**\n * Which items of a {@link SpanDetail} component are expanded.\n */\nexport default class DetailState {\n isTagsOpen: boolean;\n isProcessOpen: boolean;\n logs: { isOpen: boolean; openedItems: Set };\n isWarningsOpen: boolean;\n isStackTracesOpen: boolean;\n isReferencesOpen: boolean;\n\n constructor(oldState?: DetailState) {\n const {\n isTagsOpen,\n isProcessOpen,\n isReferencesOpen,\n isWarningsOpen,\n isStackTracesOpen,\n logs,\n }: DetailState | Record = oldState || {};\n this.isTagsOpen = Boolean(isTagsOpen);\n this.isProcessOpen = Boolean(isProcessOpen);\n this.isReferencesOpen = Boolean(isReferencesOpen);\n this.isWarningsOpen = Boolean(isWarningsOpen);\n this.isStackTracesOpen = Boolean(isStackTracesOpen);\n this.logs = {\n isOpen: Boolean(logs && logs.isOpen),\n openedItems: logs && logs.openedItems ? new Set(logs.openedItems) : new Set(),\n };\n }\n\n toggleTags() {\n const next = new DetailState(this);\n next.isTagsOpen = !this.isTagsOpen;\n return next;\n }\n\n toggleProcess() {\n const next = new DetailState(this);\n next.isProcessOpen = !this.isProcessOpen;\n return next;\n }\n\n toggleReferences() {\n const next = new DetailState(this);\n next.isReferencesOpen = !this.isReferencesOpen;\n return next;\n }\n\n toggleWarnings() {\n const next = new DetailState(this);\n next.isWarningsOpen = !this.isWarningsOpen;\n return next;\n }\n\n toggleStackTraces() {\n const next = new DetailState(this);\n next.isStackTracesOpen = !this.isStackTracesOpen;\n return next;\n }\n\n toggleLogs() {\n const next = new DetailState(this);\n next.logs.isOpen = !this.logs.isOpen;\n return next;\n }\n\n toggleLogItem(logItem: TraceLog) {\n const next = new DetailState(this);\n if (next.logs.openedItems.has(logItem)) {\n next.logs.openedItems.delete(logItem);\n } else {\n next.logs.openedItems.add(logItem);\n }\n return next;\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const getProcessServiceName = (proc) => proc.serviceName;\nexport const getProcessTags = (proc) => proc.tags;\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createSelector } from 'reselect';\nimport fuzzy from 'fuzzy';\n\nimport { getProcessServiceName } from './process';\n\nexport const getSpanId = (span) => span.spanID;\nexport const getSpanName = (span) => span.operationName;\nexport const getSpanDuration = (span) => span.duration;\nexport const getSpanTimestamp = (span) => span.startTime;\nexport const getSpanProcessId = (span) => span.processID;\nexport const getSpanReferences = (span) => span.references || [];\nexport const getSpanReferenceByType = createSelector(\n createSelector(({ span }) => span, getSpanReferences),\n ({ type }) => type,\n (references, type) => references.find((ref) => ref.refType === type)\n);\nexport const getSpanParentId = createSelector(\n (span) => getSpanReferenceByType({ span, type: 'CHILD_OF' }),\n (childOfRef) => (childOfRef ? childOfRef.spanID : null)\n);\n\nexport const getSpanProcess = (span) => {\n if (!span.process) {\n throw new Error(\n `\n you must hydrate the spans with the processes, perhaps\n using hydrateSpansWithProcesses(), before accessing a span's process\n `\n );\n }\n\n return span.process;\n};\n\nexport const getSpanServiceName = createSelector(getSpanProcess, getProcessServiceName);\n\nexport const filterSpansForTimestamps = createSelector(\n ({ spans }) => spans,\n ({ leftBound }) => leftBound,\n ({ rightBound }) => rightBound,\n (spans, leftBound, rightBound) =>\n spans.filter((span) => getSpanTimestamp(span) >= leftBound && getSpanTimestamp(span) <= rightBound)\n);\n\nexport const filterSpansForText = createSelector(\n ({ spans }) => spans,\n ({ text }) => text,\n (spans, text) =>\n fuzzy\n .filter(text, spans, {\n extract: (span) => `${getSpanServiceName(span)} ${getSpanName(span)}`,\n })\n .map(({ original }) => original)\n);\n\nconst getTextFilterdSpansAsMap = createSelector(filterSpansForText, (matchingSpans) =>\n matchingSpans.reduce(\n (obj, span) => ({\n ...obj,\n [getSpanId(span)]: span,\n }),\n {}\n )\n);\n\nexport const highlightSpansForTextFilter = createSelector(\n ({ spans }) => spans,\n getTextFilterdSpansAsMap,\n (spans, textFilteredSpansMap) =>\n spans.map((span) => ({\n ...span,\n muted: !textFilteredSpansMap[getSpanId(span)],\n }))\n);\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport default class TreeNode {\n static iterFunction(fn, depth = 0) {\n return (node) => fn(node.value, node, depth);\n }\n\n static searchFunction(search) {\n if (typeof search === 'function') {\n return search;\n }\n\n return (value, node) => (search instanceof TreeNode ? node === search : value === search);\n }\n\n constructor(value, children = []) {\n this.value = value;\n this.children = children;\n }\n\n get depth() {\n return this.children.reduce((depth, child) => Math.max(child.depth + 1, depth), 1);\n }\n\n get size() {\n let i = 0;\n this.walk(() => i++);\n return i;\n }\n\n addChild(child) {\n this.children.push(child instanceof TreeNode ? child : new TreeNode(child));\n return this;\n }\n\n find(search) {\n const searchFn = TreeNode.iterFunction(TreeNode.searchFunction(search));\n if (searchFn(this)) {\n return this;\n }\n for (let i = 0; i < this.children.length; i++) {\n const result = this.children[i].find(search);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n getPath(search) {\n const searchFn = TreeNode.iterFunction(TreeNode.searchFunction(search));\n\n const findPath = (currentNode, currentPath) => {\n // skip if we already found the result\n const attempt = currentPath.concat([currentNode]);\n // base case: return the array when there is a match\n if (searchFn(currentNode)) {\n return attempt;\n }\n for (let i = 0; i < currentNode.children.length; i++) {\n const child = currentNode.children[i];\n const match = findPath(child, attempt);\n if (match) {\n return match;\n }\n }\n return null;\n };\n\n return findPath(this, []);\n }\n\n walk(fn, depth = 0) {\n const nodeStack = [];\n let actualDepth = depth;\n nodeStack.push({ node: this, depth: actualDepth });\n while (nodeStack.length) {\n const { node, depth: nodeDepth } = nodeStack.pop();\n fn(node.value, node, nodeDepth);\n actualDepth = nodeDepth + 1;\n let i = node.children.length - 1;\n while (i >= 0) {\n nodeStack.push({ node: node.children[i], depth: actualDepth });\n i--;\n }\n }\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createSelector, createStructuredSelector } from 'reselect';\n\nimport {\n getSpanId,\n getSpanName,\n getSpanServiceName,\n getSpanTimestamp,\n getSpanDuration,\n getSpanProcessId,\n} from './span';\nimport { getProcessServiceName } from './process';\nimport { formatMillisecondTime, formatSecondTime, ONE_SECOND } from '../utils/date';\nimport { numberSortComparator } from '../utils/sort';\nimport TreeNode from '../utils/TreeNode';\n\nexport const getTraceId = (trace) => trace.traceID;\n\nexport const getTraceSpans = (trace) => trace.spans;\n\nconst getTraceProcesses = (trace) => trace.processes;\n\nconst getSpanWithProcess = createSelector(\n (state) => state.span,\n (state) => state.processes,\n (span, processes) => ({\n ...span,\n process: processes[getSpanProcessId(span)],\n })\n);\n\nexport const getTraceSpansAsMap = createSelector(getTraceSpans, (spans) =>\n spans.reduce((map, span) => map.set(getSpanId(span), span), new Map())\n);\n\nexport const TREE_ROOT_ID = '__root__';\n\n/**\n * Build a tree of { value: spanID, children } items derived from the\n * `span.references` information. The tree represents the grouping of parent /\n * child relationships. The root-most node is nominal in that\n * `.value === TREE_ROOT_ID`. This is done because a root span (the main trace\n * span) is not always included with the trace data. Thus, there can be\n * multiple top-level spans, and the root node acts as their common parent.\n *\n * The children are sorted by `span.startTime` after the tree is built.\n *\n * @param {Trace} trace The trace to build the tree of spanIDs.\n * @return {TreeNode} A tree of spanIDs derived from the relationships\n * between spans in the trace.\n */\nexport function getTraceSpanIdsAsTree(trace) {\n const nodesById = new Map(trace.spans.map((span) => [span.spanID, new TreeNode(span.spanID)]));\n const spansById = new Map(trace.spans.map((span) => [span.spanID, span]));\n const root = new TreeNode(TREE_ROOT_ID);\n trace.spans.forEach((span) => {\n const node = nodesById.get(span.spanID);\n if (Array.isArray(span.references) && span.references.length) {\n const { refType, spanID: parentID } = span.references[0];\n if (refType === 'CHILD_OF' || refType === 'FOLLOWS_FROM') {\n const parent = nodesById.get(parentID) || root;\n parent.children.push(node);\n } else {\n throw new Error(`Unrecognized ref type: ${refType}`);\n }\n } else {\n root.children.push(node);\n }\n });\n const comparator = (nodeA, nodeB) => {\n const a = spansById.get(nodeA.value);\n const b = spansById.get(nodeB.value);\n return +(a.startTime > b.startTime) || +(a.startTime === b.startTime) - 1;\n };\n trace.spans.forEach((span) => {\n const node = nodesById.get(span.spanID);\n if (node.children.length > 1) {\n node.children.sort(comparator);\n }\n });\n root.children.sort(comparator);\n return root;\n}\n\n// attach \"process\" as an object to each span.\nexport const hydrateSpansWithProcesses = (trace) => {\n const spans = getTraceSpans(trace);\n const processes = getTraceProcesses(trace);\n\n return {\n ...trace,\n spans: spans.map((span) => getSpanWithProcess({ span, processes })),\n };\n};\n\nexport const getTraceSpanCount = createSelector(getTraceSpans, (spans) => spans.length);\n\nexport const getTraceTimestamp = createSelector(getTraceSpans, (spans) =>\n spans.reduce(\n (prevTimestamp, span) => (prevTimestamp ? Math.min(prevTimestamp, getSpanTimestamp(span)) : getSpanTimestamp(span)),\n null\n )\n);\n\nexport const getTraceDuration = createSelector(getTraceSpans, getTraceTimestamp, (spans, timestamp) =>\n spans.reduce(\n (prevDuration, span) =>\n prevDuration\n ? Math.max(getSpanTimestamp(span) - timestamp + getSpanDuration(span), prevDuration)\n : getSpanDuration(span),\n null\n )\n);\n\nexport const getTraceEndTimestamp = createSelector(\n getTraceTimestamp,\n getTraceDuration,\n (timestamp, duration) => timestamp + duration\n);\n\nexport const getParentSpan = createSelector(\n getTraceSpanIdsAsTree,\n getTraceSpansAsMap,\n (tree, spanMap) =>\n tree.children\n .map((node) => spanMap.get(node.value))\n .sort((spanA, spanB) => numberSortComparator(getSpanTimestamp(spanA), getSpanTimestamp(spanB)))[0]\n);\n\nexport const getTraceDepth = createSelector(getTraceSpanIdsAsTree, (spanTree) => spanTree.depth - 1);\n\nexport const getSpanDepthForTrace = createSelector(\n createSelector((state) => state.trace, getTraceSpanIdsAsTree),\n createSelector((state) => state.span, getSpanId),\n (node, spanID) => node.getPath(spanID).length - 1\n);\n\nexport const getTraceServices = createSelector(getTraceProcesses, (processes) =>\n Object.keys(processes).reduce(\n (services, processID) => services.add(getProcessServiceName(processes[processID])),\n new Set()\n )\n);\n\nexport const getTraceServiceCount = createSelector(getTraceServices, (services) => services.size);\n\n// establish constants to determine how math should be handled\n// for nanosecond-to-millisecond conversions.\nexport const DURATION_FORMATTERS = {\n ms: formatMillisecondTime,\n s: formatSecondTime,\n};\n\nconst getDurationFormatterForTrace = createSelector(getTraceDuration, (totalDuration) =>\n totalDuration >= ONE_SECOND ? DURATION_FORMATTERS.s : DURATION_FORMATTERS.ms\n);\n\nexport const formatDurationForUnit = createSelector(\n ({ duration }) => duration,\n ({ unit }) => DURATION_FORMATTERS[unit],\n (duration, formatter) => formatter(duration)\n);\n\nexport const formatDurationForTrace = createSelector(\n ({ duration }) => duration,\n createSelector(({ trace }) => trace, getDurationFormatterForTrace),\n (duration, formatter) => formatter(duration)\n);\n\nexport const getSortedSpans = createSelector(\n ({ trace }) => trace,\n ({ spans }) => spans,\n ({ sort }) => sort,\n (trace, spans, { dir, comparator, selector }) =>\n [...spans].sort((spanA, spanB) => dir * comparator(selector(spanA, trace), selector(spanB, trace)))\n);\n\nconst getTraceSpansByHierarchyPosition = createSelector(getTraceSpanIdsAsTree, (tree) => {\n const hierarchyPositionMap = new Map();\n let i = 0;\n tree.walk((spanID) => hierarchyPositionMap.set(spanID, i++));\n return hierarchyPositionMap;\n});\n\nexport const getTreeSizeForTraceSpan = createSelector(\n createSelector((state) => state.trace, getTraceSpanIdsAsTree),\n createSelector((state) => state.span, getSpanId),\n (tree, spanID) => {\n const node = tree.find(spanID);\n if (!node) {\n return -1;\n }\n return node.size - 1;\n }\n);\n\nexport const getSpanHierarchySortPositionForTrace = createSelector(\n createSelector(({ trace }) => trace, getTraceSpansByHierarchyPosition),\n ({ span }) => span,\n (hierarchyPositionMap, span) => hierarchyPositionMap.get(getSpanId(span))\n);\n\nexport const getTraceName = createSelector(\n createSelector(\n createSelector(hydrateSpansWithProcesses, getParentSpan),\n createStructuredSelector({\n name: getSpanName,\n serviceName: getSpanServiceName,\n })\n ),\n ({ name, serviceName }) => `${serviceName}: ${name}`\n);\n\nexport const omitCollapsedSpans = createSelector(\n ({ spans }) => spans,\n createSelector(({ trace }) => trace, getTraceSpanIdsAsTree),\n ({ collapsed }) => collapsed,\n (spans, tree, collapse) => {\n const hiddenSpanIds = collapse.reduce((result, collapsedSpanId) => {\n tree.find(collapsedSpanId).walk((id) => id !== collapsedSpanId && result.add(id));\n return result;\n }, new Set());\n\n return hiddenSpanIds.size > 0 ? spans.filter((span) => !hiddenSpanIds.has(getSpanId(span))) : spans;\n }\n);\n\nexport const DEFAULT_TICK_INTERVAL = 4;\nexport const DEFAULT_TICK_WIDTH = 3;\nexport const getTicksForTrace = createSelector(\n ({ trace }) => trace,\n ({ interval = DEFAULT_TICK_INTERVAL }) => interval,\n ({ width = DEFAULT_TICK_WIDTH }) => width,\n (\n trace,\n interval,\n width\n // timestamps will be spaced over the interval, starting from the initial timestamp\n ) =>\n [...Array(interval + 1).keys()].map((num) => ({\n timestamp: getTraceTimestamp(trace) + getTraceDuration(trace) * (num / interval),\n width,\n }))\n);\n\n// TODO: delete this when the backend can ensure uniqueness\n/* istanbul ignore next */\nexport const enforceUniqueSpanIds = createSelector(\n /* istanbul ignore next */ (trace) => trace,\n getTraceSpans,\n /* istanbul ignore next */ (trace, spans) => {\n const map = new Map();\n\n return {\n ...trace,\n spans: spans.reduce((result, span) => {\n const spanID = map.has(getSpanId(span)) ? `${getSpanId(span)}_${map.get(getSpanId(span))}` : getSpanId(span);\n const updatedSpan = { ...span, spanID };\n\n if (spanID !== getSpanId(span)) {\n // eslint-disable-next-line no-console\n console.warn('duplicate spanID in trace replaced', getSpanId(span), 'new:', spanID);\n }\n\n // set the presence of the span in the map or increment the number\n map.set(getSpanId(span), (map.get(getSpanId(span)) || 0) + 1);\n\n return result.concat([updatedSpan]);\n }, []),\n };\n }\n);\n\n// TODO: delete this when the backend can ensure uniqueness\nexport const dropEmptyStartTimeSpans = createSelector(\n /* istanbul ignore next */ (trace) => trace,\n getTraceSpans,\n /* istanbul ignore next */ (trace, spans) => ({\n ...trace,\n spans: spans.filter((span) => !!getSpanTimestamp(span)),\n })\n);\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport function localeStringComparator(itemA, itemB) {\n return itemA.localeCompare(itemB);\n}\n\nexport function numberSortComparator(itemA, itemB) {\n return itemA - itemB;\n}\n\nexport function classNameForSortDir(dir) {\n return `sorted ${dir === 1 ? 'ascending' : 'descending'}`;\n}\n\nexport function getNewSortForClick(prevSort, column) {\n const { defaultDir = 1 } = column;\n\n return {\n key: column.name,\n dir: prevSort.key === column.name ? -1 * prevSort.dir : defaultDir,\n };\n}\n\nexport function createSortClickHandler(column, currentSortKey, currentSortDir, updateSort) {\n return function onClickSortingElement() {\n const { key, dir } = getNewSortForClick({ key: currentSortKey, dir: currentSortDir }, column);\n updateSort(key, dir);\n };\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { isEqual as _isEqual } from 'lodash';\n\n// @ts-ignore\nimport { getTraceSpanIdsAsTree } from '../selectors/trace';\nimport { getConfigValue } from '../utils/config/get-config';\nimport { TraceKeyValuePair, TraceSpan, Trace, TraceResponse } from '../types/trace';\n// @ts-ignore\nimport TreeNode from '../utils/TreeNode';\nimport { getTraceName } from './trace-viewer';\n\n// exported for tests\nexport function deduplicateTags(spanTags: TraceKeyValuePair[]) {\n const warningsHash: Map = new Map();\n const tags: TraceKeyValuePair[] = spanTags.reduce((uniqueTags, tag) => {\n if (!uniqueTags.some((t) => t.key === tag.key && t.value === tag.value)) {\n uniqueTags.push(tag);\n } else {\n warningsHash.set(`${tag.key}:${tag.value}`, `Duplicate tag \"${tag.key}:${tag.value}\"`);\n }\n return uniqueTags;\n }, []);\n const warnings = Array.from(warningsHash.values());\n return { tags, warnings };\n}\n\n// exported for tests\nexport function orderTags(spanTags: TraceKeyValuePair[], topPrefixes?: string[]) {\n const orderedTags: TraceKeyValuePair[] = spanTags.slice();\n const tp = (topPrefixes || []).map((p: string) => p.toLowerCase());\n\n orderedTags.sort((a, b) => {\n const aKey = a.key.toLowerCase();\n const bKey = b.key.toLowerCase();\n\n for (let i = 0; i < tp.length; i++) {\n const p = tp[i];\n if (aKey.startsWith(p) && !bKey.startsWith(p)) {\n return -1;\n }\n if (!aKey.startsWith(p) && bKey.startsWith(p)) {\n return 1;\n }\n }\n\n if (aKey > bKey) {\n return 1;\n }\n if (aKey < bKey) {\n return -1;\n }\n return 0;\n });\n\n return orderedTags;\n}\n\n/**\n * NOTE: Mutates `data` - Transform the HTTP response data into the form the app\n * generally requires.\n */\nexport default function transformTraceData(data: TraceResponse | undefined): Trace | null {\n if (!data?.traceID) {\n return null;\n }\n const traceID = data.traceID.toLowerCase();\n\n let traceEndTime = 0;\n let traceStartTime = Number.MAX_SAFE_INTEGER;\n const spanIdCounts = new Map();\n const spanMap = new Map();\n // filter out spans with empty start times\n // eslint-disable-next-line no-param-reassign\n data.spans = data.spans.filter((span) => Boolean(span.startTime));\n\n const max = data.spans.length;\n for (let i = 0; i < max; i++) {\n const span: TraceSpan = data.spans[i] as TraceSpan;\n const { startTime, duration, processID } = span;\n //\n let spanID = span.spanID;\n // check for start / end time for the trace\n if (startTime < traceStartTime) {\n traceStartTime = startTime;\n }\n if (startTime + duration > traceEndTime) {\n traceEndTime = startTime + duration;\n }\n // make sure span IDs are unique\n const idCount = spanIdCounts.get(spanID);\n if (idCount != null) {\n // eslint-disable-next-line no-console\n console.warn(`Dupe spanID, ${idCount + 1} x ${spanID}`, span, spanMap.get(spanID));\n if (_isEqual(span, spanMap.get(spanID))) {\n // eslint-disable-next-line no-console\n console.warn('\\t two spans with same ID have `isEqual(...) === true`');\n }\n spanIdCounts.set(spanID, idCount + 1);\n spanID = `${spanID}_${idCount}`;\n span.spanID = spanID;\n } else {\n spanIdCounts.set(spanID, 1);\n }\n span.process = data.processes[processID];\n spanMap.set(spanID, span);\n }\n // tree is necessary to sort the spans, so children follow parents, and\n // siblings are sorted by start time\n const tree = getTraceSpanIdsAsTree(data);\n const spans: TraceSpan[] = [];\n const svcCounts: Record = {};\n\n // Eslint complains about number type not needed but then TS complains it is implicitly any.\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n tree.walk((spanID: string, node: TreeNode, depth: number = 0) => {\n if (spanID === '__root__') {\n return;\n }\n const span = spanMap.get(spanID) as TraceSpan;\n if (!span) {\n return;\n }\n const { serviceName } = span.process;\n svcCounts[serviceName] = (svcCounts[serviceName] || 0) + 1;\n span.relativeStartTime = span.startTime - traceStartTime;\n span.depth = depth - 1;\n span.hasChildren = node.children.length > 0;\n span.warnings = span.warnings || [];\n span.tags = span.tags || [];\n span.references = span.references || [];\n const tagsInfo = deduplicateTags(span.tags);\n span.tags = orderTags(tagsInfo.tags, getConfigValue('topTagPrefixes'));\n span.warnings = span.warnings.concat(tagsInfo.warnings);\n span.references.forEach((ref, index) => {\n const refSpan = spanMap.get(ref.spanID) as TraceSpan;\n if (refSpan) {\n // eslint-disable-next-line no-param-reassign\n ref.span = refSpan;\n if (index > 0) {\n // Don't take into account the parent, just other references.\n refSpan.subsidiarilyReferencedBy = refSpan.subsidiarilyReferencedBy || [];\n refSpan.subsidiarilyReferencedBy.push({\n spanID,\n traceID,\n span,\n refType: ref.refType,\n });\n }\n }\n });\n spans.push(span);\n });\n const traceName = getTraceName(spans);\n const services = Object.keys(svcCounts).map((name) => ({ name, numberOfSpans: svcCounts[name] }));\n return {\n services,\n spans,\n traceID,\n traceName,\n // can't use spread operator for intersection types\n // repl: https://goo.gl/4Z23MJ\n // issue: https://github.com/facebook/flow/issues/1511\n processes: data.processes,\n duration: traceEndTime - traceStartTime,\n startTime: traceStartTime,\n endTime: traceEndTime,\n };\n}\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { TraceKeyValuePair, TraceSpan } from '../types/trace';\nimport { TNil } from '../types';\n\nexport default function filterSpans(textFilter: string, spans: TraceSpan[] | TNil) {\n if (!spans) {\n return null;\n }\n\n // if a span field includes at least one filter in includeFilters, the span is a match\n const includeFilters: string[] = [];\n\n // values with keys that include text in any one of the excludeKeys will be ignored\n const excludeKeys: string[] = [];\n\n // split textFilter by whitespace, remove empty strings, and extract includeFilters and excludeKeys\n textFilter\n .split(/\\s+/)\n .filter(Boolean)\n .forEach((w) => {\n if (w[0] === '-') {\n excludeKeys.push(w.substr(1).toLowerCase());\n } else {\n includeFilters.push(w.toLowerCase());\n }\n });\n\n const isTextInFilters = (filters: string[], text: string) =>\n filters.some((filter) => text.toLowerCase().includes(filter));\n\n const isTextInKeyValues = (kvs: TraceKeyValuePair[]) =>\n kvs\n ? kvs.some((kv) => {\n // ignore checking key and value for a match if key is in excludeKeys\n if (isTextInFilters(excludeKeys, kv.key)) {\n return false;\n }\n // match if key or value matches an item in includeFilters\n return isTextInFilters(includeFilters, kv.key) || isTextInFilters(includeFilters, kv.value.toString());\n })\n : false;\n\n const isSpanAMatch = (span: TraceSpan) =>\n isTextInFilters(includeFilters, span.operationName) ||\n isTextInFilters(includeFilters, span.process.serviceName) ||\n isTextInKeyValues(span.tags) ||\n (span.logs !== null && span.logs.some((log) => isTextInKeyValues(log.fields))) ||\n isTextInKeyValues(span.process.tags) ||\n includeFilters.some((filter) => filter === span.spanID);\n\n // declare as const because need to disambiguate the type\n const rv: Set = new Set(spans.filter(isSpanAMatch).map((span: TraceSpan) => span.spanID));\n return rv;\n}\n","import {\n DataFrame,\n DataSourceInstanceSettings,\n FieldType,\n MutableDataFrame,\n TraceLog,\n TraceSpanRow,\n} from '@grafana/data';\nimport { transformTraceData } from '@jaegertracing/jaeger-ui-components';\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: '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): TraceSpanRow {\n return {\n spanID: span.spanID,\n traceID: span.traceID,\n parentSpanID: span.references?.find((r) => r.refType === 'CHILD_OF')?.spanID,\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 serviceName: processes[span.processID].serviceName,\n serviceTags: processes[span.processID].tags,\n };\n}\n\nexport function createTableFrame(data: TraceResponse[], instanceSettings: DataSourceInstanceSettings): DataFrame {\n const frame = new MutableDataFrame({\n fields: [\n {\n name: 'traceID',\n type: FieldType.string,\n config: {\n displayNameFromDS: 'Trace ID',\n links: [\n {\n title: 'Trace: ${__value.raw}',\n url: '',\n internal: {\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings.name,\n query: {\n query: '${__value.raw}',\n },\n },\n },\n ],\n },\n },\n { name: 'traceName', type: FieldType.string, config: { displayNameFromDS: 'Trace name' } },\n { name: 'startTime', type: FieldType.time, config: { displayNameFromDS: 'Start time' } },\n { name: 'duration', type: FieldType.number, config: { displayNameFromDS: 'Duration', unit: 'µs' } },\n ],\n meta: {\n preferredVisualisationType: 'table',\n },\n });\n // Show the most recent traces\n const traceData = data.map(transformToTraceData).sort((a, b) => b?.startTime! - a?.startTime!);\n\n for (const trace of traceData) {\n frame.add(trace);\n }\n\n return frame;\n}\n\nfunction transformToTraceData(data: TraceResponse) {\n const traceData = transformTraceData(data);\n if (!traceData) {\n return;\n }\n\n return {\n traceID: traceData.traceID,\n startTime: traceData.startTime / 1000,\n duration: traceData.duration,\n traceName: traceData.traceName,\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","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createChangeEmitter = exports.createChangeEmitter = function createChangeEmitter() {\n var currentListeners = [];\n var nextListeners = currentListeners;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n function listen(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function () {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n function emit() {\n currentListeners = nextListeners;\n var listeners = currentListeners;\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].apply(listeners, arguments);\n }\n }\n\n return {\n listen: listen,\n emit: emit\n };\n};","/* eslint-env node, browser */\n'use strict'\n\nmodule.exports = function (element, options) {\n var self = this\n var Combokeys = self.constructor\n\n /**\n * an object of passed options\n *\n * @type { storeInstancesGlobally?: true }\n */\n\n self.options = Object.assign({ storeInstancesGlobally: true }, options || {})\n\n /**\n * a list of all the callbacks setup via Combokeys.bind()\n *\n * @type {Object}\n */\n self.callbacks = {}\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self.directMap = {}\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n self.sequenceLevels = {}\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n self.resetTimer = null\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n self.ignoreNextKeyup = false\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n self.ignoreNextKeypress = false\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n self.nextExpectedAction = false\n\n self.element = element\n\n self.addEvents()\n\n if (self.options.storeInstancesGlobally) {\n Combokeys.instances.push(self)\n }\n\n return self\n}\n\nmodule.exports.prototype.bind = require('./prototype/bind')\nmodule.exports.prototype.bindMultiple = require('./prototype/bindMultiple')\nmodule.exports.prototype.unbind = require('./prototype/unbind')\nmodule.exports.prototype.trigger = require('./prototype/trigger')\nmodule.exports.prototype.reset = require('./prototype/reset.js')\nmodule.exports.prototype.stopCallback = require('./prototype/stopCallback')\nmodule.exports.prototype.handleKey = require('./prototype/handleKey')\nmodule.exports.prototype.addEvents = require('./prototype/addEvents')\nmodule.exports.prototype.bindSingle = require('./prototype/bindSingle')\nmodule.exports.prototype.getKeyInfo = require('./prototype/getKeyInfo')\nmodule.exports.prototype.pickBestAction = require('./prototype/pickBestAction')\nmodule.exports.prototype.getReverseMap = require('./prototype/getReverseMap')\nmodule.exports.prototype.getMatches = require('./prototype/getMatches')\nmodule.exports.prototype.resetSequences = require('./prototype/resetSequences')\nmodule.exports.prototype.fireCallback = require('./prototype/fireCallback')\nmodule.exports.prototype.bindSequence = require('./prototype/bindSequence')\nmodule.exports.prototype.resetSequenceTimer = require('./prototype/resetSequenceTimer')\nmodule.exports.prototype.detach = require('./prototype/detach')\n\nmodule.exports.instances = []\nmodule.exports.reset = require('./reset')\n\n/**\n * variable to store the flipped version of MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\nmodule.exports.REVERSE_MAP = null\n","/* eslint-env node, browser */\n'use strict'\nmodule.exports = function () {\n var self = this\n var on = require('./dom-event')\n var element = self.element\n\n self.eventHandler = require('./handleKeyEvent').bind(self)\n\n on(element, 'keypress', self.eventHandler)\n on(element, 'keydown', self.eventHandler)\n on(element, 'keyup', self.eventHandler)\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * binds an event to Combokeys\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - \"keypress\", \"keydown\", or \"keyup\"\n * @returns void\n */\nmodule.exports = function (keys, callback, action) {\n var self = this\n\n keys = keys instanceof Array ? keys : [keys]\n self.bindMultiple(keys, callback, action)\n return self\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\nmodule.exports = function (combinations, callback, action) {\n var self = this\n\n for (var j = 0; j < combinations.length; ++j) {\n self.bindSingle(combinations[j], callback, action)\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\nmodule.exports = function (combo, keys, callback, action) {\n var self = this\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n self.sequenceLevels[combo] = 0\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function increaseSequence (nextAction) {\n return function () {\n self.nextExpectedAction = nextAction\n ++self.sequenceLevels[combo]\n self.resetSequenceTimer()\n }\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function callbackAndReset (e) {\n var characterFromEvent\n self.fireCallback(callback, e, combo)\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n characterFromEvent = require('../../helpers/characterFromEvent')\n self.ignoreNextKeyup = characterFromEvent(e)\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(\n function () {\n self.resetSequences()\n },\n 10\n )\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var j = 0; j < keys.length; ++j) {\n var isFinal = j + 1 === keys.length\n var wrappedCallback = isFinal ? callbackAndReset : increaseSequence(action || self.getKeyInfo(keys[j + 1]).action)\n self.bindSingle(keys[j], wrappedCallback, action, combo, j)\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\nmodule.exports = function (combination, callback, action, sequenceName, level) {\n var self = this\n\n // store a direct mapped reference for use with Combokeys.trigger\n self.directMap[combination + ':' + action] = callback\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ')\n\n var sequence = combination.split(' ')\n var info\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n self.bindSequence(combination, sequence, callback, action)\n return\n }\n\n info = self.getKeyInfo(combination, action)\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self.callbacks[info.key] = self.callbacks[info.key] || []\n\n // remove an existing match if there is one\n self.getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level)\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self.callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n })\n}\n","var off = require('./dom-event').off\nmodule.exports = function () {\n var self = this\n var element = self.element\n\n off(element, 'keypress', self.eventHandler)\n off(element, 'keydown', self.eventHandler)\n off(element, 'keyup', self.eventHandler)\n}\n","module.exports = on\nmodule.exports.on = on\nmodule.exports.off = off\n\nfunction on (element, event, callback, capture) {\n !element.addEventListener && (event = 'on' + event)\n ;(element.addEventListener || element.attachEvent).call(element, event, callback, capture)\n return callback\n}\n\nfunction off (element, event, callback, capture) {\n !element.removeEventListener && (event = 'on' + event)\n ;(element.removeEventListener || element.detachEvent).call(element, event, callback, capture)\n return callback\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (callback, e, combo, sequence) {\n var self = this\n var preventDefault\n var stopPropagation\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return\n }\n\n if (callback(e, combo) === false) {\n preventDefault = require('../../helpers/preventDefault')\n preventDefault(e)\n stopPropagation = require('../../helpers/stopPropagation')\n stopPropagation(e)\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\nmodule.exports = function (combination, action) {\n var self = this\n var keysFromString\n var keys\n var key\n var j\n var modifiers = []\n var SPECIAL_ALIASES\n var SHIFT_MAP\n var isModifier\n\n keysFromString = require('../../helpers/keysFromString')\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = keysFromString(combination)\n\n SPECIAL_ALIASES = require('../../helpers/special-aliases')\n SHIFT_MAP = require('../../helpers/shift-map')\n isModifier = require('../../helpers/isModifier')\n for (j = 0; j < keys.length; ++j) {\n key = keys[j]\n\n // normalize key names\n if (SPECIAL_ALIASES[key]) {\n key = SPECIAL_ALIASES[key]\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action !== 'keypress' && SHIFT_MAP[key]) {\n key = SHIFT_MAP[key]\n modifiers.push('shift')\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (isModifier(key)) {\n modifiers.push(key)\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = self.pickBestAction(key, modifiers, action)\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\nmodule.exports = function (character, modifiers, e, sequenceName, combination, level) {\n var self = this\n var j\n var callback\n var matches = []\n var action = e.type\n var isModifier\n var modifiersMatch\n\n if (\n action === 'keypress' &&\n // Firefox fires keypress for arrows\n !(e.code && e.code.slice(0, 5) === 'Arrow')\n ) {\n // 'any-character' callbacks are only on `keypress`\n var anyCharCallbacks = self.callbacks['any-character'] || []\n anyCharCallbacks.forEach(function (callback) {\n matches.push(callback)\n })\n }\n\n if (!self.callbacks[character]) { return matches }\n\n isModifier = require('../../helpers/isModifier')\n // if a modifier key is coming up on its own we should allow it\n if (action === 'keyup' && isModifier(character)) {\n modifiers = [character]\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (j = 0; j < self.callbacks[character].length; ++j) {\n callback = self.callbacks[character][j]\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && self.sequenceLevels[callback.seq] !== callback.level) {\n continue\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action !== callback.action) {\n continue\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n modifiersMatch = require('./modifiersMatch')\n if ((action === 'keypress' && !e.metaKey && !e.ctrlKey) || modifiersMatch(modifiers, callback.modifiers)) {\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo === combination\n var deleteSequence = sequenceName && callback.seq === sequenceName && callback.level === level\n if (deleteCombo || deleteSequence) {\n self.callbacks[character].splice(j, 1)\n }\n\n matches.push(callback)\n }\n }\n\n return matches\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\nmodule.exports = function () {\n var self = this\n var constructor = self.constructor\n var SPECIAL_KEYS_MAP\n\n if (!constructor.REVERSE_MAP) {\n constructor.REVERSE_MAP = {}\n SPECIAL_KEYS_MAP = require('../../helpers/special-keys-map')\n for (var key in SPECIAL_KEYS_MAP) {\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue\n }\n\n if (SPECIAL_KEYS_MAP.hasOwnProperty(key)) {\n constructor.REVERSE_MAP[SPECIAL_KEYS_MAP[key]] = key\n }\n }\n }\n return constructor.REVERSE_MAP\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (character, modifiers, e) {\n var self = this\n var callbacks\n var j\n var doNotReset = {}\n var maxLevel = 0\n var processedSequenceCallback = false\n var isModifier\n var ignoreThisKeypress\n\n callbacks = self.getMatches(character, modifiers, e)\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (j = 0; j < callbacks.length; ++j) {\n if (callbacks[j].seq) {\n maxLevel = Math.max(maxLevel, callbacks[j].level)\n }\n }\n\n // loop through matching callbacks for this key event\n for (j = 0; j < callbacks.length; ++j) {\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[j].seq) {\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the resetSequences call\n if (callbacks[j].level !== maxLevel) {\n continue\n }\n\n processedSequenceCallback = true\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[j].seq] = 1\n self.fireCallback(callbacks[j].callback, e, callbacks[j].combo, callbacks[j].seq)\n continue\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n self.fireCallback(callbacks[j].callback, e, callbacks[j].combo)\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n ignoreThisKeypress = e.type === 'keypress' && self.ignoreNextKeypress\n isModifier = require('../../helpers/isModifier')\n if (e.type === self.nextExpectedAction && !isModifier(character) && !ignoreThisKeypress) {\n self.resetSequences(doNotReset)\n }\n\n self.ignoreNextKeypress = processedSequenceCallback && e.type === 'keydown'\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (e) {\n var self = this\n var characterFromEvent\n var eventModifiers\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode\n }\n characterFromEvent = require('../../helpers/characterFromEvent')\n var character = characterFromEvent(e)\n\n // no character found then stop\n if (character === undefined) {\n return\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type === 'keyup' && self.ignoreNextKeyup === character) {\n self.ignoreNextKeyup = false\n return\n }\n\n eventModifiers = require('../../helpers/eventModifiers')\n self.handleKey(character, eventModifiers(e), e)\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\nmodule.exports = function (modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',')\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\nmodule.exports = function (key, modifiers, action) {\n var self = this\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = self.getReverseMap()[key] ? 'keydown' : 'keypress'\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action === 'keypress' && modifiers.length) {\n action = 'keydown'\n }\n\n return action\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * resets the library back to its initial state. This is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\nmodule.exports = function () {\n var self = this\n self.callbacks = {}\n self.directMap = {}\n return this\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\nmodule.exports = function () {\n var self = this\n\n clearTimeout(self.resetTimer)\n self.resetTimer = setTimeout(\n function () {\n self.resetSequences()\n },\n 1000\n )\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\nmodule.exports = function (doNotReset) {\n var self = this\n\n doNotReset = doNotReset || {}\n\n var activeSequences = false\n var key\n\n for (key in self.sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true\n continue\n }\n self.sequenceLevels[key] = 0\n }\n\n if (!activeSequences) {\n self.nextExpectedAction = false\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n* should we stop this event before firing off callbacks\n*\n* @param {Event} e\n* @param {Element} element\n* @return {boolean}\n*/\nmodule.exports = function (e, element) {\n // if the element has the class \"combokeys\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' combokeys ') > -1) {\n return false\n }\n\n var tagName = element.tagName.toLowerCase()\n\n // stop for input, select, and textarea\n return tagName === 'input' || tagName === 'select' || tagName === 'textarea' || element.isContentEditable\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\nmodule.exports = function (keys, action) {\n var self = this\n if (self.directMap[keys + ':' + action]) {\n self.directMap[keys + ':' + action]({}, keys)\n }\n return this\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * unbinds an event to Combokeys\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * directMap dict.\n *\n * TODO: actually remove this from the callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\nmodule.exports = function (keys, action) {\n var self = this\n\n return self.bind(keys, function () {}, action)\n}\n","/* eslint-env node, browser */\n'use strict'\n\nmodule.exports = function () {\n var self = this\n\n self.instances.forEach(function (combokeys) {\n combokeys.reset()\n })\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\nmodule.exports = function (e) {\n var SPECIAL_KEYS_MAP,\n SPECIAL_CHARACTERS_MAP\n SPECIAL_KEYS_MAP = require('./special-keys-map')\n SPECIAL_CHARACTERS_MAP = require('./special-characters-map')\n\n // for keypress events we should return the character as is\n if (e.type === 'keypress') {\n var character = String.fromCharCode(e.which)\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase()\n }\n\n return character\n }\n\n // for non keypress events the special maps are needed\n if (SPECIAL_KEYS_MAP[e.which] !== undefined) {\n return SPECIAL_KEYS_MAP[e.which]\n }\n\n if (SPECIAL_CHARACTERS_MAP[e.which] !== undefined) {\n return SPECIAL_CHARACTERS_MAP[e.which]\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase()\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\nmodule.exports = function (e) {\n var modifiers = []\n\n if (e.shiftKey) {\n modifiers.push('shift')\n }\n\n if (e.altKey) {\n modifiers.push('alt')\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl')\n }\n\n if (e.metaKey) {\n modifiers.push('meta')\n }\n\n return modifiers\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\nmodule.exports = function (key) {\n return key === 'shift' || key === 'ctrl' || key === 'alt' || key === 'meta'\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\nmodule.exports = function (combination) {\n if (combination === '+') {\n return ['+']\n }\n\n return combination.split('+')\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (e) {\n if (e.preventDefault) {\n e.preventDefault()\n return\n }\n\n e.returnValue = false\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\nmodule.exports = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\"': \"'\",\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\nmodule.exports = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\nmodule.exports = {\n 106: '*',\n 107: 'plus',\n 109: 'minus',\n 110: '.',\n 111: '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\"\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\nmodule.exports = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 173: 'minus',\n 187: 'plus',\n 189: 'minus',\n 224: 'meta'\n}\n\n/**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\nfor (var i = 1; i < 20; ++i) {\n module.exports[111 + i] = 'f' + i\n}\n\n/**\n * loop through to map numbers on the numeric keypad\n */\nfor (i = 0; i <= 9; ++i) {\n module.exports[i + 96] = i\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (e) {\n if (e.stopPropagation) {\n e.stopPropagation()\n return\n }\n\n e.cancelBubble = true\n}\n","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","module.exports = function deepFreeze (o) {\n Object.freeze(o);\n\n Object.getOwnPropertyNames(o).forEach(function (prop) {\n if (o.hasOwnProperty(prop)\n && o[prop] !== null\n && (typeof o[prop] === \"object\" || typeof o[prop] === \"function\")\n && !Object.isFrozen(o[prop])) {\n deepFreeze(o[prop]);\n }\n });\n \n return o;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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 * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;","/*\n * Fuzzy\n * https://github.com/myork/fuzzy\n *\n * Copyright (c) 2012 Matt York\n * Licensed under the MIT license.\n */\n\n(function() {\n\nvar root = this;\n\nvar fuzzy = {};\n\n// Use in node or in browser\nif (typeof exports !== 'undefined') {\n module.exports = fuzzy;\n} else {\n root.fuzzy = fuzzy;\n}\n\n// Return all elements of `array` that have a fuzzy\n// match against `pattern`.\nfuzzy.simpleFilter = function(pattern, array) {\n return array.filter(function(str) {\n return fuzzy.test(pattern, str);\n });\n};\n\n// Does `pattern` fuzzy match `str`?\nfuzzy.test = function(pattern, str) {\n return fuzzy.match(pattern, str) !== null;\n};\n\n// If `pattern` matches `str`, wrap each matching character\n// in `opts.pre` and `opts.post`. If no match, return null\nfuzzy.match = function(pattern, str, opts) {\n opts = opts || {};\n var patternIdx = 0\n , result = []\n , len = str.length\n , totalScore = 0\n , currScore = 0\n // prefix\n , pre = opts.pre || ''\n // suffix\n , post = opts.post || ''\n // String to compare against. This might be a lowercase version of the\n // raw string\n , compareString = opts.caseSensitive && str || str.toLowerCase()\n , ch;\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n // For each character in the string, either add it to the result\n // or wrap in template if it's the next string in the pattern\n for(var idx = 0; idx < len; idx++) {\n ch = str[idx];\n if(compareString[idx] === pattern[patternIdx]) {\n ch = pre + ch + post;\n patternIdx += 1;\n\n // consecutive characters should increase the score more than linearly\n currScore += 1 + currScore;\n } else {\n currScore = 0;\n }\n totalScore += currScore;\n result[result.length] = ch;\n }\n\n // return rendered string if we have a match for every char\n if(patternIdx === pattern.length) {\n // if the string is an exact match with pattern, totalScore should be maxed\n totalScore = (compareString === pattern) ? Infinity : totalScore;\n return {rendered: result.join(''), score: totalScore};\n }\n\n return null;\n};\n\n// The normal entry point. Filters `arr` for matches against `pattern`.\n// It returns an array with matching values of the type:\n//\n// [{\n// string: 'lah' // The rendered string\n// , index: 2 // The index of the element in `arr`\n// , original: 'blah' // The original element in `arr`\n// }]\n//\n// `opts` is an optional argument bag. Details:\n//\n// opts = {\n// // string to put before a matching character\n// pre: ''\n//\n// // string to put after matching character\n// , post: ''\n//\n// // Optional function. Input is an entry in the given arr`,\n// // output should be the string to test `pattern` against.\n// // In this example, if `arr = [{crying: 'koala'}]` we would return\n// // 'koala'.\n// , extract: function(arg) { return arg.crying; }\n// }\nfuzzy.filter = function(pattern, arr, opts) {\n if(!arr || arr.length === 0) {\n return [];\n }\n if (typeof pattern !== 'string') {\n return arr;\n }\n opts = opts || {};\n return arr\n .reduce(function(prev, element, idx, arr) {\n var str = element;\n if(opts.extract) {\n str = opts.extract(element);\n }\n var rendered = fuzzy.match(pattern, str, opts);\n if(rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered\n , score: rendered.score\n , index: idx\n , original: element\n };\n }\n return prev;\n }, [])\n\n // Sort by score. Browsers are inconsistent wrt stable/unstable\n // sorting, so force stable by using the index in the case of tie.\n // See http://ofb.net/~sethml/is-sort-stable.html\n .sort(function(a,b) {\n var compare = b.score - a.score;\n if(compare) return compare;\n return a.index - b.index;\n });\n};\n\n\n}());\n\n","'use strict'\n\nvar INDENT = ' '\n\nfunction inlineRule (objRule) {\n var str = ''\n objRule && Object.keys(objRule).forEach(function (rule) {\n str += rule + ':' + objRule[rule] + ';'\n })\n return str\n}\n\nfunction Stylize (styleFile) {\n function styleClass (cssClass) {\n return 'class=\"' + cssClass + '\"'\n }\n\n function styleInline (cssClass) {\n return 'style=\"' + inlineRule(styleFile['.' + cssClass]) + '\"'\n }\n\n if (!styleFile) return styleClass\n return styleInline\n}\n\nfunction type (doc) {\n if (doc === null) return 'null'\n if (Array.isArray(doc)) return 'array'\n if (typeof doc === 'string' && /^https?:/.test(doc)) return 'link'\n if (typeof doc === 'object' && typeof doc.toISOString === 'function') return 'date'\n\n return typeof doc\n}\n\nfunction escape (str) {\n return str.replace(//g, '>')\n}\n\nmodule.exports = function (doc, styleFile) {\n var indent = ''\n var style = Stylize(styleFile)\n\n var forEach = function (list, start, end, fn) {\n if (!list.length) return start + ' ' + end\n\n var out = start + '\\n'\n\n indent += INDENT\n list.forEach(function (key, i) {\n out += indent + fn(key) + (i < list.length - 1 ? ',' : '') + '\\n'\n })\n indent = indent.slice(0, -INDENT.length)\n\n return out + indent + end\n }\n\n function visit (obj) {\n if (obj === undefined) return ''\n\n switch (type(obj)) {\n case 'boolean':\n return '' + obj + ''\n\n case 'number':\n return '' + obj + ''\n\n case 'date':\n return '\"' + escape(obj.toISOString()) + '\"'\n\n case 'null':\n return 'null'\n\n case 'string':\n return '\"' + escape(obj.replace(/\\n/g, '\\n' + indent)) + '\"'\n\n case 'link':\n return '\"' + escape(obj) + '\"'\n\n case 'array':\n return forEach(obj, '[', ']', visit)\n\n case 'object':\n var keys = Object.keys(obj).filter(function (key) {\n return obj[key] !== undefined\n })\n\n return forEach(keys, '{', '}', function (key) {\n return '\"' + key + '\": ' + visit(obj[key])\n })\n }\n\n return ''\n }\n\n return '
' + visit(doc) + '
'\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar IconBase = function IconBase(_ref, _ref2) {\n var children = _ref.children;\n var color = _ref.color;\n var size = _ref.size;\n var style = _ref.style;\n var width = _ref.width;\n var height = _ref.height;\n\n var props = _objectWithoutProperties(_ref, ['children', 'color', 'size', 'style', 'width', 'height']);\n\n var _ref2$reactIconBase = _ref2.reactIconBase;\n var reactIconBase = _ref2$reactIconBase === undefined ? {} : _ref2$reactIconBase;\n\n var computedSize = size || reactIconBase.size || '1em';\n return _react2.default.createElement('svg', _extends({\n children: children,\n fill: 'currentColor',\n preserveAspectRatio: 'xMidYMid meet',\n height: height || computedSize,\n width: width || computedSize\n }, reactIconBase, props, {\n style: _extends({\n verticalAlign: 'middle',\n color: color || reactIconBase.color\n }, reactIconBase.style || {}, style)\n }));\n};\n\nIconBase.propTypes = {\n color: _propTypes2.default.string,\n size: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n height: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n style: _propTypes2.default.object\n};\n\nIconBase.contextTypes = {\n reactIconBase: _propTypes2.default.shape(IconBase.propTypes)\n};\n\nexports.default = IconBase;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoAlert = function IoAlert(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm25 37.5h-10v-7.5h10v7.5z m-1.2-12.5h-7.5l-1.3-22.5h10z' })\n )\n );\n};\n\nexports.default = IoAlert;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoAndroidLocate = function IoAndroidLocate(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm17.5 13.8c3.4 0 6.3 2.8 6.3 6.2s-2.9 6.3-6.3 6.3-6.2-2.9-6.2-6.3 2.8-6.2 6.2-6.2z m14.9 4.6h2.6v3.2h-2.6c-0.8 7-6.3 12.5-13.3 13.3v2.6h-3.2v-2.6c-7-0.8-12.5-6.3-13.3-13.3h-2.6v-3.2h2.6c0.8-7 6.3-12.5 13.3-13.3v-2.6h3.2v2.6c7 0.8 12.5 6.3 13.3 13.3z m-14.9 13.2c6.4 0 11.6-5.2 11.6-11.6s-5.2-11.6-11.6-11.6-11.6 5.2-11.6 11.6 5.2 11.6 11.6 11.6z' })\n )\n );\n};\n\nexports.default = IoAndroidLocate;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoAndroidOpen = function IoAndroidOpen(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm31.6 31.6v-10.3h3.4v10.3c0 1.8-1.6 3.4-3.4 3.4h-23.2c-1.8 0-3.4-1.6-3.4-3.4v-23.2c0-1.8 1.6-3.4 3.4-3.4h10.4v3.4h-10.4v23.2h23.2z m-9.1-26.6h12.5v12.5h-3.4v-6.8l-16.8 16.8-2.3-2.3 16.8-16.8h-6.8v-3.4z' })\n )\n );\n};\n\nexports.default = IoAndroidOpen;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoArrowRightA = function IoArrowRightA(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm35 20l-15 15v-8.7h-15v-12.5h15v-8.8z' })\n )\n );\n};\n\nexports.default = IoArrowRightA;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoChevronRight = function IoChevronRight(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm23.3 20l-13.1-13.6c-0.3-0.3-0.3-0.9 0-1.2l2.4-2.4c0.3-0.3 0.9-0.4 1.2-0.1l16 16.7c0.1 0.1 0.2 0.4 0.2 0.6s-0.1 0.5-0.2 0.6l-16 16.7c-0.3 0.3-0.9 0.3-1.2 0l-2.4-2.5c-0.3-0.3-0.3-0.9 0-1.2z' })\n )\n );\n};\n\nexports.default = IoChevronRight;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoIosArrowDown = function IoIosArrowDown(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm31 12.5l1.5 1.6-12.5 13.4-12.5-13.4 1.5-1.6 11 11.7z' })\n )\n );\n};\n\nexports.default = IoIosArrowDown;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoIosArrowRight = function IoIosArrowRight(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm12.5 9l1.6-1.5 13.4 12.5-13.4 12.5-1.6-1.5 11.7-11z' })\n )\n );\n};\n\nexports.default = IoIosArrowRight;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IoNetwork = function IoNetwork(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm35 7.5c0 1.9-1 3.4-2.5 4.3v7.3l-10 5v4.1c1.5 0.9 2.5 2.4 2.5 4.3 0 2.7-2.3 5-5 5s-5-2.3-5-5c0-1.9 1-3.4 2.5-4.3v-4.1l-10-5v-7.3c-1.5-0.9-2.5-2.4-2.5-4.3 0-2.7 2.3-5 5-5s5 2.3 5 5c0 1.9-1 3.4-2.5 4.3v4.1l7.5 3.8 7.5-3.8v-4.1c-1.5-0.9-2.5-2.4-2.5-4.3 0-2.7 2.3-5 5-5s5 2.3 5 5z m-25-2.5c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5 2.5-1.1 2.5-2.5-1.1-2.5-2.5-2.5z m10 30c1.4 0 2.5-1.1 2.5-2.5s-1.1-2.5-2.5-2.5-2.5 1.1-2.5 2.5 1.1 2.5 2.5 2.5z m10-25c1.4 0 2.5-1.1 2.5-2.5s-1.1-2.5-2.5-2.5-2.5 1.1-2.5 2.5 1.1 2.5 2.5 2.5z' })\n )\n );\n};\n\nexports.default = IoNetwork;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MdFileUpload = function MdFileUpload(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm8.4 30h23.2v3.4h-23.2v-3.4z m6.6-3.4v-10h-6.6l11.6-11.6 11.6 11.6h-6.6v10h-10z' })\n )\n );\n};\n\nexports.default = MdFileUpload;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIconBase = require('react-icon-base');\n\nvar _reactIconBase2 = _interopRequireDefault(_reactIconBase);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MdKeyboardArrowRight = function MdKeyboardArrowRight(props) {\n return _react2.default.createElement(\n _reactIconBase2.default,\n _extends({ viewBox: '0 0 40 40' }, props),\n _react2.default.createElement(\n 'g',\n null,\n _react2.default.createElement('path', { d: 'm14.3 27.3l7.7-7.7-7.7-7.7 2.3-2.3 10 10-10 10z' })\n )\n );\n};\n\nexports.default = MdKeyboardArrowRight;\nmodule.exports = exports['default'];","'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\n\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try { // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n\n return targetComponent;\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.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\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n"],"names":["COLORS_HEX_DARK","ThemeType","defaultTheme","type","Light","borderStyle","servicesColorPalette","isLight","theme","ThemeContext","React","undefined","displayName","ThemeProvider","Provider","ThemeConsumer","props","Consumer","value","memoizedThemeMerge","children","memoizeOne","darkOverrides","withTheme","Component","WithTheme","hoistNonReactStatics","wrapped","useTheme","useContext","createStyle","fn","autoColor","hex","base","color","tinycolor","clone","lighten","darken","includeFallbackColors","toHex8String","toHsl","l","newColor","getStyles","TimelineCollapser","css","onExpandAll","onExpandOne","onCollapseAll","onCollapseOne","styles","className","IconButton","tooltip","size","tooltipPlacement","name","onClick","EUpdateTypes","DraggableManager","constructor","getBounds","tag","resetBoundsOnResize","rest","this","_bounds","event","button","clientX","eventType","_isDragging","handler","_onMouseEnter","_onMouseLeave","Error","_onMouseMove","x","_getPosition","manager","window","addEventListener","_handleDragEvent","style","_get","document","userSelect","_onDragStart","_onDragMove","_stopDragging","_onDragEnd","handleMouseDown","handleMouseEnter","_handleMinorMouseEvent","handleMouseMove","handleMouseLeave","_resetBoundsOnResize","Boolean","resetBounds","onMouseEnter","onMouseLeave","onMouseMove","onDragStart","onDragMove","onDragEnd","_getBounds","clientXLeft","maxValue","minValue","width","removeEventListener","isDragging","dispose","TimelineColumnResizer","wrapper","dragger","draggerDragging","draggerDraggingLeft","draggerDraggingRight","gripIcon","gripIconDragging","super","elm","_rootElm","left","getBoundingClientRect","min","max","setState","dragPosition","onChange","_dragManager","_getDraggingBounds","_handleDragEnd","_handleDragUpdate","state","componentWillUnmount","render","draggerStyle","position","columnResizeHandleHeight","gripStyle","isDraggingLeft","isDraggingRight","Math","right","height","ref","_setRootElm","cx","onMouseDown","TimelineViewingLayer","TimelineViewingLayerCursorGuide","TimelineViewingLayerDragged","TimelineViewingLayerDraggedDraggingLeft","TimelineViewingLayerDraggedDraggingRight","TimelineViewingLayerDraggedShiftDrag","TimelineViewingLayerDraggedReframeDrag","TimelineViewingLayerFullOverlay","mapFromViewSubRange","viewStart","viewEnd","mapToViewSubRange","getMarkers","from","to","isShift","layout","start","isOutOfView","getNextViewLayout","Reflect","has","cls","_root","viewRangeTime","current","cursor","updateNextViewRangeTime","reframe","shift","update","anchor","end","updateViewRangeTime","_draggerReframe","_handleReframeDragEnd","_handleReframeDragUpdate","_handleReframeMouseLeave","_handleReframeMouseMove","UNSAFE_componentWillReceiveProps","nextProps","boundsInvalidator","shiftEnd","shiftStart","cusrorPosition","_setRoot","ONE_MILLISECOND","ONE_SECOND","ONE_MINUTE","ONE_HOUR","DEFAULT_MS_PRECISION","log10","UNIT_STEPS","unit","microseconds","ofPrevious","quantizeDuration","duration","floatPrecision","conversionFactor","number","precision","targetPrecision","floor","abs","trunc","Number","toPrecision","toFloatPrecision","formatDuration","primaryUnit","secondaryUnit","_dropWhile","index","length","_round","primaryUnitString","secondaryValue","round","secondaryUnitString","spanHasTag","key","span","Array","isArray","tags","some","isClientSpan","bind","isServerSpan","isErrorBool","isErrorStr","isErrorSpan","Ticks","TicksTick","TicksTickLabel","TicksTickLabelEndAnchor","endTime","numTicks","showLabels","startTime","labels","viewingDuration","i","durationAtTick","push","ticks","portion","defaultProps","ubRelative","ubMb1","ubMy1","ubM0","ubPx2","ubPb2","ubFlex","ubItemsCenter","ubFlexAuto","ubTxRightAlign","ubInlineBlock","uAlignIcon","uTxEllipsis","uWidth100","uTxMuted","ubJustifyEnd","flexRow","TimelineRow","TimelineRowCell","widthPercent","mergedStyle","flexBasis","maxWidth","Cell","TimelineHeaderRow","TimelineHeaderRowTitle","TimelineHeaderWrapper","nameColumnWidth","onColummWidthChange","Positions","bufferLen","ys","heights","dataLen","lastI","profileData","dataLength","calcHeights","heightGetter","forcedLastI","_max","h","calcYs","yValue","confirmHeight","_i","chg","findFloorIndex","imin","imax","getRowPosition","y","getEstimatedHeight","known","DEFAULT_INITIAL_DRAW","ListView","_viewHeight","bottomY","_scrollTop","_yPositions","_getHeight","_isScrolledOrResized","requestAnimationFrame","_positionList","_wrapperElm","_calcViewIndexes","maxStart","viewBufferMin","_startIndex","minEnd","_endIndex","_startIndexDrawn","_endIndexDrawn","forceUpdate","windowScroller","clientHeight","_itemHolderElm","_scanItemHeights","getIndexFromKey","lowDirtyKey","highDirtyKey","isDirty","nodes","childNodes","node","itemKey","getAttribute","console","warn","observed","firstElementChild","_knownHeights","get","set","getKeyFromIndex","itemHeightGetter","Map","_htmlTopOffset","_windowScrollListenerAdded","_htmlElm","documentElement","componentDidMount","top","scrollTop","_onScroll","scrollElement","componentDidUpdate","_isViewChanged","useRoot","innerHeight","scrollY","yStart","yEnd","initialDraw","itemRenderer","viewBuffer","items","attrs","wrapperProps","_initWrapper","onScroll","overflowY","scrollerStyle","margin","padding","itemsWrapperClassName","_initItemHolder","NewWindowIconLarge","NewWindowIcon","isLarge","UIPopover","GetElementsContext","elements","Popover","UITooltip","Tooltip","UIIcon","Icon","UIDropdown","Dropdown","UIMenu","Menu","UIMenuItem","MenuItem","UIButton","Button","UIDivider","Divider","UIInput","Input","UIInputGroup","InputGroup","UIElementsContext","ExternalLinkContext","ReferenceLink","reference","focusSpan","otherProps","role","spanID","createLinkToExternalSpan","href","traceID","target","rel","MultiParent","TraceRefLink","ReferencesButton","references","map","process","serviceName","operationName","tooltipText","tooltipProps","arrowPointAtCenter","mouseLeaveDelay","placement","title","overlayClassName","overlay","referencesList","trigger","getFirstAncestor","_find","refType","SpanTreeOffset","SpanTreeOffsetParent","indentGuide","indentGuideActive","iconWrapper","UnthemedSpanTreeOffset","ancestorId","relatedTarget","HTMLSpanElement","removeHoverIndentGuideId","addHoverIndentGuideId","ancestorIds","ancestorIDs","spanAncestorIds","reverse","childrenVisible","showChildrenIcon","hasChildren","icon","hoverIndentGuideIds","classCallCheck","instance","Constructor","TypeError","_extends","Object","assign","arguments","source","prototype","hasOwnProperty","call","inherits","subClass","superClass","create","enumerable","writable","configurable","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","createEagerElementUtil","hasKey","isReferentiallyTransparent","Component$$1","isClassComponent","isReferentiallyTransparentFunctionComponent","contextTypes","createFactory","p","c","mapProps","propsMapper","BaseComponent","factory","pick","obj","keys","result","shouldUpdate","_Component","Nothing","apply","test","ShouldUpdate","shouldComponentUpdate","onlyUpdateForKeys","propKeys","config$$1","_config","fromESObservable","toESObservable","config","observable","stream","CopyIcon","hasCopied","copy","copyText","visible","onVisibleChange","handleTooltipVisibilityChange","tooltipTitle","htmlType","handleClick","copyIconClassName","KeyValueTable","body","row","keyColumn","copyColumn","linkIcon","jsonObjectOrArrayStartRegex","parseIfComplexJson","JSON","parse","_","LinkValue","linkValueList","links","text","url","KeyValuesTable","data","linksGetter","markup","__html","jsonMarkup","jsonTable","dangerouslySetInnerHTML","valueMarkup","stringify","header","headerEmpty","headerHighContrast","emptyIcon","summary","summaryItem","summaryLabel","summaryDelim","KeyValuesSummary","item","String","AccordianKeyValues","highContrast","interactive","isOpen","label","onToggle","isEmpty","iconCls","arrow","headerProps","AccordianLogs","AccordianLogsHeader","AccordianLogsContent","AccordianLogsFooter","logs","openedItems","onItemToggle","timestamp","HeaderComponent","_sortBy","log","fields","bar","rpc","logMarker","toPercent","toFixed","_len","funcs","_key","arg","reduce","a","b","compose","stateName","stateUpdaterName","initialState","shortLabel","WithState","_temp","_this","args","concat","stateValue","updateStateValue","updateFn","callback","_ref","_babelHelpers$extends","input","setLabel","longLabel","setLongLabel","setShortLabel","getViewedBounds","traceStartTime","labelClassName","logGroups","_groupBy","posPercent","onMouseOver","background","positionKey","content","spanBarClassName","spanBarLabelClassName","nameWrapperClassName","viewClassName","nameColumnClassName","nameWrapper","nameWrapperMatchingFilter","nameColumn","endpointName","view","viewExpanded","viewExpandedAndMatchingFilter","rowClippingLeft","rowClippingRight","rowExpanded","rowMatchingFilter","rowExpandedAndMatchingFilter","nameDetailExpanded","svcName","svcNameChildrenCollapsed","errorIcon","rpcColorMarker","labelRight","labelLeft","UnthemedSpanBarRow","onDetailToggled","onChildrenToggled","columnDivision","isChildrenExpanded","isDetailExpanded","isMatchingFilter","noInstrumentedServer","showErrorIcon","clippingLeft","clippingRight","createSpanLink","isParent","viewBounds","labelDetail","hintClassName","_childrenToggle","_detailToggle","borderColor","tabIndex","backgroundColor","errorIconColor","link","marginRight","ctrlKey","metaKey","shiftKey","preventDefault","subsidiarilyReferencedBy","TextList","List","DefaultTextComponent","AccordianText","headerClassName","TextComponent","accordianKeyValuesStyles","getAccordianKeyValuesStyles","LabeledList","LabeledListItem","LabeledListLabel","dividerClassName","divider","ReferencesList","list","itemContent","debugInfo","debugLabel","References","AccordianReferences","dividerVertical","debugValue","AccordianWarnings","AccordianWarningsHeader","AccordianWarningsHeaderOpen","AccordianWarningsLabel","Textarea","SpanDetail","detailState","logItemToggle","logsToggle","processToggle","tagsToggle","warningsToggle","stackTracesToggle","referencesToggle","isTagsOpen","isProcessOpen","logsState","isWarningsOpen","isReferencesOpen","isStackTracesOpen","relativeStartTime","warnings","stackTraces","overviewItems","deepLinkCopyText","location","origin","pathname","DataLinkButton","buttonProps","logItem","textComponentProps","stackTrace","join","TextArea","readOnly","cols","rows","expandedAccent","infoWrapper","UnthemedSpanDetailRow","itemIndex","overflow","borderTopColor","_linksGetter","strToRgb","s","r","slice","g","parseInt","ColorGenerator","colorsHex","colorsRgb","cache","currentIdx","_getColorIndex","getColorByKey","getRgbColorByKey","clear","getGenerator","colors","rowsWrapper","DEFAULT_HEIGHTS","memoizedGenerateRowStates","trace","childrenHiddenIDs","detailStates","spans","collapseDepth","rowStates","depth","hidden","isDetail","spanIndex","generateRowStates","memoizedViewBoundsFunc","viewRange","viewMin","viewWindow","isEqual","memoizedGetClipping","currentViewRange","zoomStart","zoomEnd","UnthemedVirtualizedTraceView","currentViewRangeTime","findMatchesIDs","getRowStates","listView","isChanged","registerAccessors","getAccessors","parts","split","_spanID","_isDetail","renderSpanDetailRow","renderSpanBarRow","setTrace","uiFind","nextPropKeys","prevProps","shouldScrollToFirstUiFindMatch","clearShouldScrollToFirstUiFindMatch","scrollToFirstVisibleSpan","nextRegisterAccessors","nextTrace","getClipping","lv","getViewRange","getSearchedSpanIDs","getCollapsedChildren","getViewHeight","getBottomRowIndexVisible","getBottomVisibleIndex","getTopRowIndexVisible","getTopVisibleIndex","mapRowIndexToSpanIndex","mapSpanIndexToRowIndex","childrenToggle","detailToggle","spanNameColumnWidth","isCollapsed","parentSpanIndex","spanContainsErredSpan","rpcSpan","spanChildDepth","findServerChildSpan","rpcViewBounds","peerServiceKV","find","kv","isKindClient","SpanBarRow","detailLogItemToggle","detailLogsToggle","detailProcessToggle","detailReferencesToggle","detailWarningsToggle","detailStackTracesToggle","detailTagsToggle","zIndex","SpanDetailRow","setListView","getRowHeight","renderRow","scrollPageDown","binding","scrollPageUp","scrollToNextVisibleSpan","scrollToPrevVisibleSpan","panLeft","panLeftFast","panRight","panRightFast","zoomIn","zoomInFast","zoomOut","zoomOutFast","collapseAll","expandAll","collapseOne","expandOne","searchSpans","clearSearch","getInstance","local","Combokeys","TraceTimelineViewer","UnthemedTraceTimelineViewer","callbacks","inst","forEach","keysHandler","keyboardMappings","mergeShortcuts","setSpanNameColumnWidth","traceTimeline","time","VirtualizedTraceView","CanvasSpanGraph","UnthemedCanvasSpanGraph","_canvasElm","_draw","valueWidth","totalValueWidth","canvas","getFillColor","bgColor","fillCache","cHeight","cWidth","innerWidth","itemHeight","itemYChange","ctx","getContext","alpha","fillStyle","fillRect","valueOffset","renderIntoCanvas","getColor","_setCanvasRef","TickLabels","TickLabelsLabel","GraphTick","GraphTicks","x1","y1","x2","y2","ScrubberHandleExpansion","ScrubberHandle","ScrubberLine","ScrubberDragging","ScrubberHandles","Scrubber","xPercent","transform","ViewingLayerResetZoomHoverClassName","ViewingLayerResetZoom","ViewingLayer","ViewingLayerGraph","ViewingLayerInactive","ViewingLayerCursorGuide","ViewingLayerDraggedShift","ViewingLayerDrag","ViewingLayerFullOverlay","dragTypes","UnthemedViewingLayer","preventCursorLine","stopPropagation","_draggerStart","_handleScrubberDragEnd","_handleScrubberDragUpdate","_handleScrubberEnterLeave","_draggerEnd","_getMarkers","leadingX","haveNextTimeRange","leftInactive","cursorPosition","rightInactive","_resetTimeZoomClickHandler","strokeWidth","getItem","memoizedGetitems","SpanGraph","UiFindInput","allowClear","inputProps","suffix","clearUiFind","autosize","placeholder","e","trackFindFunction","TracePageSearchBar","TracePageSearchBarBar","TracePageSearchBarCount","TracePageSearchBarBtn","TracePageSearchBarBtnDisabled","TracePageSearchBarLocateBtn","memo","focusUiFindMatches","navigable","nextResult","prevResult","resultCount","textFilter","onSearchValueChange","searchValue","hideSearchButtons","count","btnClass","uiFindInputInputProps","compact","display","disabled","BreakableText","WORD_RX","wordRegexp","exec","match","LoadingIndicatorColorAnim","keyframes","LoadingIndicator","LoadingIndicatorCentered","LoadingIndicatorSmall","centered","small","FALLBACK_TRACE_NAME","fetchedState","fallback","TraceName","components","fontSize","TraceNameError","error","traceName","isErred","errorCssClass","titleStr","message","getTraceName","memoize","candidateSpan","allIDs","Set","thisRefLength","candidateRefLength","hasOwn","object","createCache","limit","equals","entry","put","singletonCache","entries","cacheIndex","arr","findIndex","splice","unshift","pop","lruCache","createEqualsFn","basicEquals","deepObjects","deep","valueA","valueB","every","isANull","isBNull","aKeys","bKeys","equalityChecker","aKey","deepEquals","_len2","_key2","deepFreeze","defineProperty","archiveEnabled","dependencies","dagMaxNumServices","menuEnabled","linkPatterns","menu","search","maxLookback","maxLimit","tracking","gaID","trackErrors","getConfigValue","path","defaultConfig","getParent","parentRef","parameterRegExp","getParamNames","str","names","replace","add","stringSupplant","encodeFn","processTemplate","template","parameters","createTestFunction","indexOf","identity","getParameterInArray","array","callTemplate","computeLinks","processTags","pattern","parameterValues","parameter","currentSpan","getParameterInAncestor","processedLinks","encodeURIComponent","_uniq","filter","getTraceLinks","validKeys","includes","computeTraceLink","WeakMap","ExternalLinks","TracePageHeader","TracePageHeaderTitleRow","TracePageHeaderBack","TracePageHeaderTitleLink","TracePageHeaderDetailToggle","TracePageHeaderDetailToggleExpanded","TracePageHeaderTitle","TracePageHeaderTitleCollapsible","TracePageHeaderOverviewItems","TracePageHeaderOverviewItemValueDetail","TracePageHeaderOverviewItemValue","TracePageHeaderArchiveIcon","TracePageHeaderTraceId","HEADER_ITEMS","renderer","timeZone","dateStr","dateTimeFormat","_values","processes","_maxBy","canCollapse","hideMap","hideSummary","onSlimViewClicked","slimView","traceGraphView","summaryItems","DetailState","oldState","toggleTags","next","toggleProcess","toggleReferences","toggleWarnings","toggleStackTraces","toggleLogs","toggleLogItem","delete","getProcessServiceName","proc","getSpanId","getSpanName","getSpanDuration","getSpanTimestamp","getSpanProcessId","processID","getSpanReferenceByType","getSpanServiceName","childOfRef","filterSpansForText","leftBound","rightBound","extract","original","getTextFilterdSpansAsMap","matchingSpans","textFilteredSpansMap","muted","TreeNode","child","walk","addChild","iterFunction","searchFunction","searchFn","getPath","findPath","currentNode","currentPath","attempt","nodeStack","actualDepth","nodeDepth","getTraceSpans","getTraceProcesses","getSpanWithProcess","getTraceSpansAsMap","getTraceSpanIdsAsTree","nodesById","spansById","root","parentID","comparator","nodeA","nodeB","sort","getTraceTimestamp","prevTimestamp","getTraceDuration","prevDuration","getParentSpan","tree","spanMap","spanA","spanB","numberSortComparator","itemA","itemB","getTraceServices","spanTree","services","DURATION_FORMATTERS","ms","targetDuration","moment","asMilliseconds","asSeconds","getDurationFormatterForTrace","totalDuration","getTraceSpansByHierarchyPosition","formatter","dir","selector","hierarchyPositionMap","collapsed","collapse","hiddenSpanIds","collapsedSpanId","id","interval","num","updatedSpan","transformTraceData","toLowerCase","traceEndTime","MAX_SAFE_INTEGER","spanIdCounts","idCount","_isEqual","svcCounts","tagsInfo","spanTags","warningsHash","uniqueTags","t","values","deduplicateTags","topPrefixes","orderedTags","tp","bKey","startsWith","orderTags","refSpan","numberOfSpans","filterSpans","includeFilters","excludeKeys","w","substr","isTextInFilters","filters","isTextInKeyValues","kvs","toString","createTraceFrame","toSpanRow","parentSpanID","serviceTags","frame","MutableDataFrame","FieldType","meta","preferredVisualisationType","custom","traceFormat","createTableFrame","instanceSettings","displayNameFromDS","internal","datasourceUid","uid","datasourceName","query","traceData","transformToTraceData","transformToJaeger","traceResponse","flags","total","offset","errors","exports","currentListeners","nextListeners","ensureCanMutateNextListeners","listen","listener","isSubscribed","emit","listeners","module","element","options","storeInstancesGlobally","directMap","sequenceLevels","resetTimer","ignoreNextKeyup","ignoreNextKeypress","nextExpectedAction","addEvents","instances","bindMultiple","unbind","reset","stopCallback","handleKey","bindSingle","getKeyInfo","pickBestAction","getReverseMap","getMatches","resetSequences","fireCallback","bindSequence","resetSequenceTimer","detach","REVERSE_MAP","on","eventHandler","action","combinations","j","combo","increaseSequence","nextAction","callbackAndReset","characterFromEvent","setTimeout","wrappedCallback","combination","sequenceName","level","info","sequence","modifiers","seq","off","capture","attachEvent","detachEvent","srcElement","SPECIAL_ALIASES","SHIFT_MAP","isModifier","keysFromString","character","modifiersMatch","matches","code","deleteCombo","deleteSequence","SPECIAL_KEYS_MAP","ignoreThisKeypress","doNotReset","maxLevel","processedSequenceCallback","eventModifiers","which","keyCode","modifiers1","modifiers2","clearTimeout","activeSequences","tagName","isContentEditable","combokeys","SPECIAL_CHARACTERS_MAP","fromCharCode","altKey","returnValue","navigator","platform","cancelBubble","deselectCurrent","clipboardToIE11Formatting","debug","reselectPrevious","range","selection","mark","success","createRange","getSelection","createElement","textContent","all","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","format","clipboardData","clearData","setData","onCopy","appendChild","selectNodeContents","addRange","execCommand","err","copyKey","userAgent","prompt","removeRange","removeAllRanges","removeChild","o","freeze","getOwnPropertyNames","prop","isFrozen","is","objA","objB","keysA","keysB","fuzzy","simpleFilter","opts","ch","patternIdx","len","totalScore","currScore","pre","post","compareString","caseSensitive","idx","Infinity","rendered","score","prev","string","compare","INDENT","Stylize","styleFile","cssClass","objRule","rule","escape","doc","indent","out","visit","toISOString","_react2","_interopRequireDefault","_propTypes2","__esModule","default","IconBase","_ref2","_objectWithoutProperties","_ref2$reactIconBase","reactIconBase","computedSize","fill","preserveAspectRatio","verticalAlign","propTypes","oneOfType","shape","_reactIconBase2","viewBox","d","REACT_STATICS","childContextTypes","getDefaultProps","getDerivedStateFromProps","mixins","KNOWN_STATICS","caller","callee","arity","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","targetComponent","sourceComponent","blacklist","inheritedComponent","descriptor","rangeCount","active","activeElement","ranges","getRangeAt","toUpperCase","blur","focus","classNames","classes","argType","inner","reactIs","contextType","getDerivedStateFromError","MEMO_STATICS","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","Memo","targetStatics","sourceStatics","Symbol","for","f","k","m","n","q","v","z","u","$$typeof","A","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf"],"sourceRoot":""}