@grafana/scenes 6.21.0--canary.1146.15674574987.0 → 6.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -1
- package/dist/esm/components/NestedScene.js +3 -2
- package/dist/esm/components/NestedScene.js.map +1 -1
- package/dist/esm/components/SceneApp/SceneAppPage.js +4 -3
- package/dist/esm/components/SceneApp/SceneAppPage.js.map +1 -1
- package/dist/esm/components/SceneCanvasText.js +3 -2
- package/dist/esm/components/SceneCanvasText.js.map +1 -1
- package/dist/esm/components/SceneDebugger/SceneDebugger.js +10 -1
- package/dist/esm/components/SceneDebugger/SceneDebugger.js.map +1 -1
- package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
- package/dist/esm/components/SceneTimeRangeCompare.js +6 -2
- package/dist/esm/components/SceneTimeRangeCompare.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanel.js +2 -1
- package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanelExploreButton.js +2 -1
- package/dist/esm/components/VizPanel/VizPanelExploreButton.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanelRenderer.js +3 -2
- package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +19 -2
- package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridRow.js +2 -1
- package/dist/esm/components/layout/grid/SceneGridRow.js.map +1 -1
- package/dist/esm/components/layout/split/Splitter.js +2 -1
- package/dist/esm/components/layout/split/Splitter.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/locales/en-US/grafana-scenes.json.js +151 -0
- package/dist/esm/locales/en-US/grafana-scenes.json.js.map +1 -0
- package/dist/esm/utils/ControlsLabel.js +11 -1
- package/dist/esm/utils/ControlsLabel.js.map +1 -1
- package/dist/esm/utils/LoadingIndicator.js +2 -1
- package/dist/esm/utils/LoadingIndicator.js.map +1 -1
- package/dist/esm/utils/loadResources.js +23 -0
- package/dist/esm/utils/loadResources.js.map +1 -0
- package/dist/esm/variables/adhoc/AdHocFilterBuilder.js +3 -2
- package/dist/esm/variables/adhoc/AdHocFilterBuilder.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +20 -5
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +25 -3
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +11 -2
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +5 -4
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +8 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js.map +1 -1
- package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js +3 -1
- package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js.map +1 -1
- package/dist/esm/variables/components/VariableValueInput.js +2 -1
- package/dist/esm/variables/components/VariableValueInput.js.map +1 -1
- package/dist/esm/variables/components/VariableValueSelect.js +2 -1
- package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
- package/dist/esm/variables/groupby/DefaultGroupByCustomIndicatorContainer.js +10 -3
- package/dist/esm/variables/groupby/DefaultGroupByCustomIndicatorContainer.js.map +1 -1
- package/dist/esm/variables/groupby/GroupByVariable.js +17 -4
- package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
- package/dist/esm/variables/interpolation/formatRegistry.js +49 -12
- package/dist/esm/variables/interpolation/formatRegistry.js.map +1 -1
- package/dist/esm/variables/variants/DataSourceVariable.js +5 -1
- package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
- package/dist/esm/variables/variants/IntervalVariable.js +2 -1
- package/dist/esm/variables/variants/IntervalVariable.js.map +1 -1
- package/dist/esm/variables/variants/TestVariable.js +2 -1
- package/dist/esm/variables/variants/TestVariable.js.map +1 -1
- package/dist/grafana-scenes-DCHONTnD.js +153 -0
- package/dist/grafana-scenes-DCHONTnD.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.js +228 -62
- package/dist/index.js.map +1 -1
- package/package.json +22 -13
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Splitter.js","sources":["../../../../../src/components/layout/split/Splitter.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { clamp, throttle } from 'lodash';\nimport React, { useCallback, useLayoutEffect, useRef } from 'react';\nimport { useUniqueId } from '../LazyLoader';\n\ninterface Props {\n handleSize?: number;\n initialSize?: number | 'auto';\n direction?: 'row' | 'column';\n primary?: 'first' | 'second';\n collapsedDefault?: boolean;\n primaryPaneStyles?: React.CSSProperties;\n secondaryPaneStyles?: React.CSSProperties;\n onDragFinished?: (size: number) => void;\n children: [React.ReactNode, React.ReactNode];\n}\n\nconst PIXELS_PER_MS = 0.3 as const;\nconst VERTICAL_KEYS = new Set(['ArrowUp', 'ArrowDown']);\nconst HORIZONTAL_KEYS = new Set(['ArrowLeft', 'ArrowRight']);\n\nconst propsForDirection = {\n row: {\n dim: 'width',\n axis: 'clientX',\n min: 'minWidth',\n max: 'maxWidth',\n },\n column: {\n dim: 'height',\n axis: 'clientY',\n min: 'minHeight',\n max: 'maxHeight',\n },\n} as const;\n\nexport function Splitter({\n direction = 'row',\n handleSize = 32,\n initialSize = 'auto',\n primaryPaneStyles,\n secondaryPaneStyles,\n onDragFinished,\n children,\n}: Props) {\n const kids = React.Children.toArray(children);\n\n const splitterRef = useRef<HTMLDivElement | null>(null);\n const firstPaneRef = useRef<HTMLDivElement | null>(null);\n const secondPaneRef = useRef<HTMLDivElement | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const containerSize = useRef<number | null>(null);\n const primarySizeRef = useRef<'1fr' | number>('1fr');\n\n const firstPaneMeasurements = useRef<ReturnType<typeof measureElement>>(undefined);\n const savedPos = useRef<string | undefined>(undefined);\n\n const measurementProp = propsForDirection[direction].dim;\n const clientAxis = propsForDirection[direction].axis;\n const minDimProp = propsForDirection[direction].min;\n const maxDimProp = propsForDirection[direction].max;\n\n // Using a resize observer here, as with content or screen based width/height the ratio between panes might\n // change after a window resize, so ariaValueNow needs to be updated accordingly\n useResizeObserver(\n containerRef.current!,\n (entries) => {\n for (const entry of entries) {\n if (!entry.target.isSameNode(containerRef.current)) {\n return;\n }\n\n const curSize = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n const newDims = measureElement(firstPaneRef.current!);\n splitterRef.current!.ariaValueNow = `${clamp(\n ((curSize - newDims[minDimProp]) / (newDims[maxDimProp] - newDims[minDimProp])) * 100,\n 0,\n 100\n )}`;\n }\n },\n 500,\n [maxDimProp, minDimProp, direction, measurementProp]\n );\n\n const dragStart = useRef<number | null>(null);\n const onPointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n // measure left-side width\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n\n // set position at start of drag\n dragStart.current = e[clientAxis];\n splitterRef.current!.setPointerCapture(e.pointerId);\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n\n savedPos.current = undefined;\n },\n [measurementProp, clientAxis]\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (dragStart.current !== null && primarySizeRef.current !== '1fr') {\n const diff = e[clientAxis] - dragStart.current;\n const dims = firstPaneMeasurements.current!;\n const newSize = clamp(primarySizeRef.current + diff, dims[minDimProp], dims[maxDimProp]);\n const newFlex = newSize / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n const ariaValueNow = clamp(\n ((newSize - dims[minDimProp]) / (dims[maxDimProp] - dims[minDimProp])) * 100,\n 0,\n 100\n );\n\n splitterRef.current!.ariaValueNow = `${ariaValueNow}`;\n }\n },\n [handleSize, clientAxis, minDimProp, maxDimProp]\n );\n\n const onPointerUp = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n splitterRef.current!.releasePointerCapture(e.pointerId);\n dragStart.current = null;\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n },\n [onDragFinished]\n );\n\n const pressedKeys = useRef(new Set<string>());\n const keysLastHandledAt = useRef<number | null>(null);\n const handlePressedKeys = useCallback(\n (time: number) => {\n const nothingPressed = pressedKeys.current.size === 0;\n if (nothingPressed) {\n keysLastHandledAt.current = null;\n return;\n } else if (primarySizeRef.current === '1fr') {\n return;\n }\n\n const dt = time - (keysLastHandledAt.current ?? time);\n const dx = dt * PIXELS_PER_MS;\n let sizeChange = 0;\n\n if (direction === 'row') {\n if (pressedKeys.current.has('ArrowLeft')) {\n sizeChange -= dx;\n }\n if (pressedKeys.current.has('ArrowRight')) {\n sizeChange += dx;\n }\n } else {\n if (pressedKeys.current.has('ArrowUp')) {\n sizeChange -= dx;\n }\n if (pressedKeys.current.has('ArrowDown')) {\n sizeChange += dx;\n }\n }\n\n const firstPaneDims = firstPaneMeasurements.current!;\n const curSize = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n const newSize = clamp(curSize + sizeChange, firstPaneDims[minDimProp], firstPaneDims[maxDimProp]);\n\n const newFlex = newSize / (containerSize.current! - handleSize);\n\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n const ariaValueNow =\n ((newSize - firstPaneDims[minDimProp]) / (firstPaneDims[maxDimProp] - firstPaneDims[minDimProp])) * 100;\n splitterRef.current!.ariaValueNow = `${clamp(ariaValueNow, 0, 100)}`;\n\n keysLastHandledAt.current = time;\n window.requestAnimationFrame(handlePressedKeys);\n },\n [direction, handleSize, minDimProp, maxDimProp, measurementProp]\n );\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter') {\n if (savedPos.current === undefined) {\n savedPos.current = firstPaneRef.current!.style.flexGrow;\n firstPaneRef.current!.style.flexGrow = '0';\n secondPaneRef.current!.style.flexGrow = '1';\n } else {\n firstPaneRef.current!.style.flexGrow = savedPos.current;\n secondPaneRef.current!.style.flexGrow = `${1 - parseFloat(savedPos.current)}`;\n savedPos.current = undefined;\n }\n return;\n } else if (e.key === 'Home') {\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n const newFlex = firstPaneMeasurements.current[minDimProp] / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n splitterRef.current!.ariaValueNow = '0';\n return;\n } else if (e.key === 'End') {\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n const newFlex = firstPaneMeasurements.current[maxDimProp] / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n splitterRef.current!.ariaValueNow = '100';\n return;\n }\n\n if (\n !(\n (direction === 'column' && VERTICAL_KEYS.has(e.key)) ||\n (direction === 'row' && HORIZONTAL_KEYS.has(e.key))\n ) ||\n pressedKeys.current.has(e.key)\n ) {\n return;\n }\n\n savedPos.current = undefined;\n e.preventDefault();\n e.stopPropagation();\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n const newKey = !pressedKeys.current.has(e.key);\n\n if (newKey) {\n const initiateAnimationLoop = pressedKeys.current.size === 0;\n pressedKeys.current.add(e.key);\n\n if (initiateAnimationLoop) {\n window.requestAnimationFrame(handlePressedKeys);\n }\n }\n },\n [direction, handlePressedKeys, handleSize, maxDimProp, measurementProp, minDimProp]\n );\n\n const onKeyUp = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n (direction === 'row' && !HORIZONTAL_KEYS.has(e.key)) ||\n (direction === 'column' && !VERTICAL_KEYS.has(e.key))\n ) {\n return;\n }\n\n pressedKeys.current.delete(e.key);\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n },\n [direction, onDragFinished]\n );\n\n const onDoubleClick = useCallback(() => {\n firstPaneRef.current!.style.flexGrow = '0.5';\n secondPaneRef.current!.style.flexGrow = '0.5';\n const dim = measureElement(firstPaneRef.current!);\n firstPaneMeasurements.current = dim;\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n splitterRef.current!.ariaValueNow = `${\n ((primarySizeRef.current - dim[minDimProp]) / (dim[maxDimProp] - dim[minDimProp])) * 100\n }`;\n }, [maxDimProp, measurementProp, minDimProp]);\n\n const onBlur = useCallback(() => {\n // If focus is lost while keys are held, stop changing panel sizes\n if (pressedKeys.current.size > 0) {\n pressedKeys.current.clear();\n dragStart.current = null;\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n }\n }, [onDragFinished]);\n\n const styles = useStyles2(getStyles);\n const id = useUniqueId();\n\n const secondAvailable = kids.length === 2;\n const visibilitySecond = secondAvailable ? 'visible' : 'hidden';\n\n return (\n <div\n ref={containerRef}\n className={styles.container}\n style={{\n flexDirection: direction,\n }}\n >\n <div\n ref={firstPaneRef}\n className={styles.panel}\n style={{\n flexGrow: initialSize === 'auto' ? 0.5 : clamp(initialSize, 0, 1),\n [minDimProp]: 'min-content',\n ...primaryPaneStyles,\n }}\n id={`start-panel-${id}`}\n >\n {kids[0]}\n </div>\n\n {kids[1] && (\n <>\n <div\n ref={splitterRef}\n style={{ [measurementProp]: `${handleSize}px` }}\n className={cx(styles.handle, { [styles.handleHorizontal]: direction === 'column' })}\n onPointerUp={onPointerUp}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onDoubleClick={onDoubleClick}\n onBlur={onBlur}\n role=\"separator\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={50}\n aria-controls={`start-panel-${id}`}\n aria-label=\"Pane resize widget\"\n tabIndex={0}\n ></div>\n\n <div\n ref={secondPaneRef}\n className={styles.panel}\n style={{\n flexGrow: initialSize === 'auto' ? 0.5 : clamp(1 - initialSize, 0, 1),\n [minDimProp]: 'min-content',\n visibility: `${visibilitySecond}`,\n ...secondaryPaneStyles,\n }}\n id={`end-panel-${id}`}\n >\n {kids[1]}\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n handle: css({\n cursor: 'col-resize',\n position: 'relative',\n flexShrink: 0,\n userSelect: 'none',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n backgroundColor: theme.colors.primary.main,\n left: '50%',\n transform: 'translate(-50%)',\n top: 0,\n height: '100%',\n width: '1px',\n opacity: 0,\n transition: 'opacity ease-in-out 0.2s',\n },\n\n '&::after': {\n content: '\"\"',\n width: '4px',\n borderRadius: '4px',\n backgroundColor: theme.colors.border.weak,\n transition: 'background-color ease-in-out 0.2s',\n height: '50%',\n top: 'calc(50% - (50%) / 2)',\n transform: 'translateX(-50%)',\n position: 'absolute',\n left: '50%',\n },\n\n '&:hover, &:focus-visible': {\n outline: 'none',\n '&::before': {\n opacity: 1,\n },\n\n '&::after': {\n backgroundColor: theme.colors.primary.main,\n },\n },\n }),\n handleHorizontal: css({\n cursor: 'row-resize',\n\n '&::before': {\n left: 'inherit',\n transform: 'translateY(-50%)',\n top: '50%',\n height: '1px',\n width: '100%',\n },\n\n '&::after': {\n width: '50%',\n height: '4px',\n top: '50%',\n transform: 'translateY(-50%)',\n left: 'calc(50% - (50%) / 2)',\n },\n }),\n container: css({\n display: 'flex',\n width: '100%',\n flexGrow: 1,\n overflow: 'hidden',\n }),\n panel: css({ display: 'flex', position: 'relative', flexBasis: 0 }),\n };\n}\n\ntype MeasureR<T> = T extends HTMLElement\n ? { minWidth: number; maxWidth: number; minHeight: number; maxHeight: number }\n : T extends null\n ? undefined\n : never;\ntype HTMLElementOrNull = HTMLElement | null;\n\nfunction measureElement<T extends HTMLElementOrNull>(ref: T): MeasureR<T> {\n if (ref === null) {\n return undefined as MeasureR<T>;\n }\n\n const savedBodyOverflow = document.body.style.overflow;\n const savedWidth = ref.style.width;\n const savedHeight = ref.style.height;\n const savedFlex = ref.style.flexGrow;\n document.body.style.overflow = 'hidden';\n ref.style.flexGrow = '0';\n const { width: minWidth, height: minHeight } = ref.getBoundingClientRect();\n\n ref.style.flexGrow = '100';\n const { width: maxWidth, height: maxHeight } = ref.getBoundingClientRect();\n\n document.body.style.overflow = savedBodyOverflow;\n ref.style.width = savedWidth;\n ref.style.height = savedHeight;\n ref.style.flexGrow = savedFlex;\n\n return { minWidth, maxWidth, minHeight, maxHeight } as MeasureR<T>;\n}\n\nfunction useResizeObserver(\n target: Element,\n cb: (entries: ResizeObserverEntry[]) => void,\n throttleWait = 0,\n deps?: React.DependencyList\n) {\n const throttledCallback = throttle(cb, throttleWait);\n\n useLayoutEffect(() => {\n if (!target) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(throttledCallback);\n\n resizeObserver.observe(target, { box: 'device-pixel-content-box' });\n return () => resizeObserver.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Splitter.js","sources":["../../../../../src/components/layout/split/Splitter.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { clamp, throttle } from 'lodash';\nimport React, { useCallback, useLayoutEffect, useRef } from 'react';\nimport { useUniqueId } from '../LazyLoader';\n\ninterface Props {\n handleSize?: number;\n initialSize?: number | 'auto';\n direction?: 'row' | 'column';\n primary?: 'first' | 'second';\n collapsedDefault?: boolean;\n primaryPaneStyles?: React.CSSProperties;\n secondaryPaneStyles?: React.CSSProperties;\n onDragFinished?: (size: number) => void;\n children: [React.ReactNode, React.ReactNode];\n}\n\nconst PIXELS_PER_MS = 0.3 as const;\nconst VERTICAL_KEYS = new Set(['ArrowUp', 'ArrowDown']);\nconst HORIZONTAL_KEYS = new Set(['ArrowLeft', 'ArrowRight']);\n\nconst propsForDirection = {\n row: {\n dim: 'width',\n axis: 'clientX',\n min: 'minWidth',\n max: 'maxWidth',\n },\n column: {\n dim: 'height',\n axis: 'clientY',\n min: 'minHeight',\n max: 'maxHeight',\n },\n} as const;\n\nexport function Splitter({\n direction = 'row',\n handleSize = 32,\n initialSize = 'auto',\n primaryPaneStyles,\n secondaryPaneStyles,\n onDragFinished,\n children,\n}: Props) {\n const kids = React.Children.toArray(children);\n\n const splitterRef = useRef<HTMLDivElement | null>(null);\n const firstPaneRef = useRef<HTMLDivElement | null>(null);\n const secondPaneRef = useRef<HTMLDivElement | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const containerSize = useRef<number | null>(null);\n const primarySizeRef = useRef<'1fr' | number>('1fr');\n\n const firstPaneMeasurements = useRef<ReturnType<typeof measureElement>>(undefined);\n const savedPos = useRef<string | undefined>(undefined);\n\n const measurementProp = propsForDirection[direction].dim;\n const clientAxis = propsForDirection[direction].axis;\n const minDimProp = propsForDirection[direction].min;\n const maxDimProp = propsForDirection[direction].max;\n\n // Using a resize observer here, as with content or screen based width/height the ratio between panes might\n // change after a window resize, so ariaValueNow needs to be updated accordingly\n useResizeObserver(\n containerRef.current!,\n (entries) => {\n for (const entry of entries) {\n if (!entry.target.isSameNode(containerRef.current)) {\n return;\n }\n\n const curSize = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n const newDims = measureElement(firstPaneRef.current!);\n splitterRef.current!.ariaValueNow = `${clamp(\n ((curSize - newDims[minDimProp]) / (newDims[maxDimProp] - newDims[minDimProp])) * 100,\n 0,\n 100\n )}`;\n }\n },\n 500,\n [maxDimProp, minDimProp, direction, measurementProp]\n );\n\n const dragStart = useRef<number | null>(null);\n const onPointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n // measure left-side width\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n\n // set position at start of drag\n dragStart.current = e[clientAxis];\n splitterRef.current!.setPointerCapture(e.pointerId);\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n\n savedPos.current = undefined;\n },\n [measurementProp, clientAxis]\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (dragStart.current !== null && primarySizeRef.current !== '1fr') {\n const diff = e[clientAxis] - dragStart.current;\n const dims = firstPaneMeasurements.current!;\n const newSize = clamp(primarySizeRef.current + diff, dims[minDimProp], dims[maxDimProp]);\n const newFlex = newSize / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n const ariaValueNow = clamp(\n ((newSize - dims[minDimProp]) / (dims[maxDimProp] - dims[minDimProp])) * 100,\n 0,\n 100\n );\n\n splitterRef.current!.ariaValueNow = `${ariaValueNow}`;\n }\n },\n [handleSize, clientAxis, minDimProp, maxDimProp]\n );\n\n const onPointerUp = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n splitterRef.current!.releasePointerCapture(e.pointerId);\n dragStart.current = null;\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n },\n [onDragFinished]\n );\n\n const pressedKeys = useRef(new Set<string>());\n const keysLastHandledAt = useRef<number | null>(null);\n const handlePressedKeys = useCallback(\n (time: number) => {\n const nothingPressed = pressedKeys.current.size === 0;\n if (nothingPressed) {\n keysLastHandledAt.current = null;\n return;\n } else if (primarySizeRef.current === '1fr') {\n return;\n }\n\n const dt = time - (keysLastHandledAt.current ?? time);\n const dx = dt * PIXELS_PER_MS;\n let sizeChange = 0;\n\n if (direction === 'row') {\n if (pressedKeys.current.has('ArrowLeft')) {\n sizeChange -= dx;\n }\n if (pressedKeys.current.has('ArrowRight')) {\n sizeChange += dx;\n }\n } else {\n if (pressedKeys.current.has('ArrowUp')) {\n sizeChange -= dx;\n }\n if (pressedKeys.current.has('ArrowDown')) {\n sizeChange += dx;\n }\n }\n\n const firstPaneDims = firstPaneMeasurements.current!;\n const curSize = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n const newSize = clamp(curSize + sizeChange, firstPaneDims[minDimProp], firstPaneDims[maxDimProp]);\n\n const newFlex = newSize / (containerSize.current! - handleSize);\n\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n const ariaValueNow =\n ((newSize - firstPaneDims[minDimProp]) / (firstPaneDims[maxDimProp] - firstPaneDims[minDimProp])) * 100;\n splitterRef.current!.ariaValueNow = `${clamp(ariaValueNow, 0, 100)}`;\n\n keysLastHandledAt.current = time;\n window.requestAnimationFrame(handlePressedKeys);\n },\n [direction, handleSize, minDimProp, maxDimProp, measurementProp]\n );\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter') {\n if (savedPos.current === undefined) {\n savedPos.current = firstPaneRef.current!.style.flexGrow;\n firstPaneRef.current!.style.flexGrow = '0';\n secondPaneRef.current!.style.flexGrow = '1';\n } else {\n firstPaneRef.current!.style.flexGrow = savedPos.current;\n secondPaneRef.current!.style.flexGrow = `${1 - parseFloat(savedPos.current)}`;\n savedPos.current = undefined;\n }\n return;\n } else if (e.key === 'Home') {\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n const newFlex = firstPaneMeasurements.current[minDimProp] / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n splitterRef.current!.ariaValueNow = '0';\n return;\n } else if (e.key === 'End') {\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n const newFlex = firstPaneMeasurements.current[maxDimProp] / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n splitterRef.current!.ariaValueNow = '100';\n return;\n }\n\n if (\n !(\n (direction === 'column' && VERTICAL_KEYS.has(e.key)) ||\n (direction === 'row' && HORIZONTAL_KEYS.has(e.key))\n ) ||\n pressedKeys.current.has(e.key)\n ) {\n return;\n }\n\n savedPos.current = undefined;\n e.preventDefault();\n e.stopPropagation();\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n const newKey = !pressedKeys.current.has(e.key);\n\n if (newKey) {\n const initiateAnimationLoop = pressedKeys.current.size === 0;\n pressedKeys.current.add(e.key);\n\n if (initiateAnimationLoop) {\n window.requestAnimationFrame(handlePressedKeys);\n }\n }\n },\n [direction, handlePressedKeys, handleSize, maxDimProp, measurementProp, minDimProp]\n );\n\n const onKeyUp = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n (direction === 'row' && !HORIZONTAL_KEYS.has(e.key)) ||\n (direction === 'column' && !VERTICAL_KEYS.has(e.key))\n ) {\n return;\n }\n\n pressedKeys.current.delete(e.key);\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n },\n [direction, onDragFinished]\n );\n\n const onDoubleClick = useCallback(() => {\n firstPaneRef.current!.style.flexGrow = '0.5';\n secondPaneRef.current!.style.flexGrow = '0.5';\n const dim = measureElement(firstPaneRef.current!);\n firstPaneMeasurements.current = dim;\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n splitterRef.current!.ariaValueNow = `${\n ((primarySizeRef.current - dim[minDimProp]) / (dim[maxDimProp] - dim[minDimProp])) * 100\n }`;\n }, [maxDimProp, measurementProp, minDimProp]);\n\n const onBlur = useCallback(() => {\n // If focus is lost while keys are held, stop changing panel sizes\n if (pressedKeys.current.size > 0) {\n pressedKeys.current.clear();\n dragStart.current = null;\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n }\n }, [onDragFinished]);\n\n const styles = useStyles2(getStyles);\n const id = useUniqueId();\n\n const secondAvailable = kids.length === 2;\n const visibilitySecond = secondAvailable ? 'visible' : 'hidden';\n\n return (\n <div\n ref={containerRef}\n className={styles.container}\n style={{\n flexDirection: direction,\n }}\n >\n <div\n ref={firstPaneRef}\n className={styles.panel}\n style={{\n flexGrow: initialSize === 'auto' ? 0.5 : clamp(initialSize, 0, 1),\n [minDimProp]: 'min-content',\n ...primaryPaneStyles,\n }}\n id={`start-panel-${id}`}\n >\n {kids[0]}\n </div>\n\n {kids[1] && (\n <>\n <div\n ref={splitterRef}\n style={{ [measurementProp]: `${handleSize}px` }}\n className={cx(styles.handle, { [styles.handleHorizontal]: direction === 'column' })}\n onPointerUp={onPointerUp}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onDoubleClick={onDoubleClick}\n onBlur={onBlur}\n role=\"separator\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={50}\n aria-controls={`start-panel-${id}`}\n aria-label={t('grafana-scenes.components.splitter.aria-label-pane-resize-widget', 'Pane resize widget')}\n tabIndex={0}\n ></div>\n\n <div\n ref={secondPaneRef}\n className={styles.panel}\n style={{\n flexGrow: initialSize === 'auto' ? 0.5 : clamp(1 - initialSize, 0, 1),\n [minDimProp]: 'min-content',\n visibility: `${visibilitySecond}`,\n ...secondaryPaneStyles,\n }}\n id={`end-panel-${id}`}\n >\n {kids[1]}\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n handle: css({\n cursor: 'col-resize',\n position: 'relative',\n flexShrink: 0,\n userSelect: 'none',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n backgroundColor: theme.colors.primary.main,\n left: '50%',\n transform: 'translate(-50%)',\n top: 0,\n height: '100%',\n width: '1px',\n opacity: 0,\n transition: 'opacity ease-in-out 0.2s',\n },\n\n '&::after': {\n content: '\"\"',\n width: '4px',\n borderRadius: '4px',\n backgroundColor: theme.colors.border.weak,\n transition: 'background-color ease-in-out 0.2s',\n height: '50%',\n top: 'calc(50% - (50%) / 2)',\n transform: 'translateX(-50%)',\n position: 'absolute',\n left: '50%',\n },\n\n '&:hover, &:focus-visible': {\n outline: 'none',\n '&::before': {\n opacity: 1,\n },\n\n '&::after': {\n backgroundColor: theme.colors.primary.main,\n },\n },\n }),\n handleHorizontal: css({\n cursor: 'row-resize',\n\n '&::before': {\n left: 'inherit',\n transform: 'translateY(-50%)',\n top: '50%',\n height: '1px',\n width: '100%',\n },\n\n '&::after': {\n width: '50%',\n height: '4px',\n top: '50%',\n transform: 'translateY(-50%)',\n left: 'calc(50% - (50%) / 2)',\n },\n }),\n container: css({\n display: 'flex',\n width: '100%',\n flexGrow: 1,\n overflow: 'hidden',\n }),\n panel: css({ display: 'flex', position: 'relative', flexBasis: 0 }),\n };\n}\n\ntype MeasureR<T> = T extends HTMLElement\n ? { minWidth: number; maxWidth: number; minHeight: number; maxHeight: number }\n : T extends null\n ? undefined\n : never;\ntype HTMLElementOrNull = HTMLElement | null;\n\nfunction measureElement<T extends HTMLElementOrNull>(ref: T): MeasureR<T> {\n if (ref === null) {\n return undefined as MeasureR<T>;\n }\n\n const savedBodyOverflow = document.body.style.overflow;\n const savedWidth = ref.style.width;\n const savedHeight = ref.style.height;\n const savedFlex = ref.style.flexGrow;\n document.body.style.overflow = 'hidden';\n ref.style.flexGrow = '0';\n const { width: minWidth, height: minHeight } = ref.getBoundingClientRect();\n\n ref.style.flexGrow = '100';\n const { width: maxWidth, height: maxHeight } = ref.getBoundingClientRect();\n\n document.body.style.overflow = savedBodyOverflow;\n ref.style.width = savedWidth;\n ref.style.height = savedHeight;\n ref.style.flexGrow = savedFlex;\n\n return { minWidth, maxWidth, minHeight, maxHeight } as MeasureR<T>;\n}\n\nfunction useResizeObserver(\n target: Element,\n cb: (entries: ResizeObserverEntry[]) => void,\n throttleWait = 0,\n deps?: React.DependencyList\n) {\n const throttledCallback = throttle(cb, throttleWait);\n\n useLayoutEffect(() => {\n if (!target) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(throttledCallback);\n\n resizeObserver.observe(target, { box: 'device-pixel-content-box' });\n return () => resizeObserver.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
@@ -83,6 +83,7 @@ export { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder.js';
|
|
83
83
|
export { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders.js';
|
84
84
|
export { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject.js';
|
85
85
|
export { getExploreURL } from './utils/explore.js';
|
86
|
+
export { loadResources } from './utils/loadResources.js';
|
86
87
|
export { PanelOptionsBuilders } from './core/PanelBuilders/PanelOptionsBuilders.js';
|
87
88
|
export { FieldConfigBuilders } from './core/PanelBuilders/FieldConfigBuilders.js';
|
88
89
|
export { FieldConfigOverridesBuilder } from './core/PanelBuilders/FieldConfigOverridesBuilder.js';
|
package/dist/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n SceneInteractionProfileEvent,\n} from './behaviors/types';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport { AdHocFiltersVariable } from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\n\nexport { type UrlSyncManagerLike, UrlSyncManager, NewSceneObjectAddedEvent } from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\n"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n SceneInteractionProfileEvent,\n} from './behaviors/types';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport { AdHocFiltersVariable } from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\n\nexport { type UrlSyncManagerLike, UrlSyncManager, NewSceneObjectAddedEvent } from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { loadResources } from './utils/loadResources';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4IO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;;;;"}
|
@@ -0,0 +1,151 @@
|
|
1
|
+
var grafanaScenes = {
|
2
|
+
"grafana-scenes": {
|
3
|
+
components: {
|
4
|
+
"adhoc-filter-pill": {
|
5
|
+
"edit-filter-with-key": "Edit filter with key {{keyLabel}}",
|
6
|
+
"managed-filter": "{{origin}} managed filter",
|
7
|
+
"remove-filter-with-key": "Remove filter with key {{keyLabel}}"
|
8
|
+
},
|
9
|
+
"adhoc-filters-combobox": {
|
10
|
+
"remove-filter-value": "Remove filter value - {{itemLabel}}",
|
11
|
+
"use-custom-value": "Use custom value: {{itemLabel}}"
|
12
|
+
},
|
13
|
+
"fallback-page": {
|
14
|
+
content: "If you found your way here using a link then there might be a bug in this application.",
|
15
|
+
subTitle: "The url did not match any page",
|
16
|
+
title: "Not found"
|
17
|
+
},
|
18
|
+
"nested-scene-renderer": {
|
19
|
+
"collapse-button-label": "Collapse scene",
|
20
|
+
"expand-button-label": "Expand scene",
|
21
|
+
"remove-button-label": "Remove scene"
|
22
|
+
},
|
23
|
+
"scene-debugger": {
|
24
|
+
"object-details": "Object details",
|
25
|
+
"scene-graph": "Scene graph",
|
26
|
+
"title-scene-debugger": "Scene debugger"
|
27
|
+
},
|
28
|
+
"scene-grid-row": {
|
29
|
+
"collapse-row": "Collapse row",
|
30
|
+
"expand-row": "Expand row"
|
31
|
+
},
|
32
|
+
"scene-time-range-compare-renderer": {
|
33
|
+
"button-label": "Comparison",
|
34
|
+
"button-tooltip": "Enable time frame comparison"
|
35
|
+
},
|
36
|
+
splitter: {
|
37
|
+
"aria-label-pane-resize-widget": "Pane resize widget"
|
38
|
+
},
|
39
|
+
"viz-panel": {
|
40
|
+
title: {
|
41
|
+
title: "Title"
|
42
|
+
}
|
43
|
+
},
|
44
|
+
"viz-panel-explore-button": {
|
45
|
+
explore: "Explore"
|
46
|
+
},
|
47
|
+
"viz-panel-renderer": {
|
48
|
+
"loading-plugin-panel": "Loading plugin panel...",
|
49
|
+
"panel-plugin-has-no-panel-component": "Panel plugin has no panel component"
|
50
|
+
},
|
51
|
+
"viz-panel-series-limit": {
|
52
|
+
"content-rendering-series-single-panel-impact-performance": "Rendering too many series in a single panel may impact performance and make data harder to read.",
|
53
|
+
"warning-message": "Showing only {{seriesLimit}} series"
|
54
|
+
}
|
55
|
+
},
|
56
|
+
utils: {
|
57
|
+
"controls-label": {
|
58
|
+
"tooltip-remove": "Remove"
|
59
|
+
},
|
60
|
+
"loading-indicator": {
|
61
|
+
"content-cancel-query": "Cancel query"
|
62
|
+
}
|
63
|
+
},
|
64
|
+
variables: {
|
65
|
+
"ad-hoc-combobox": {
|
66
|
+
"aria-label-edit-filter-operator": "Edit filter operator"
|
67
|
+
},
|
68
|
+
"ad-hoc-filter-builder": {
|
69
|
+
"aria-label-add-filter": "Add filter",
|
70
|
+
"title-add-filter": "Add filter"
|
71
|
+
},
|
72
|
+
"ad-hoc-filter-renderer": {
|
73
|
+
"aria-label-remove-filter": "Remove filter",
|
74
|
+
"key-select": {
|
75
|
+
"placeholder-select-label": "Select label"
|
76
|
+
},
|
77
|
+
"label-select-label": "Select label",
|
78
|
+
"title-remove-filter": "Remove filter",
|
79
|
+
"value-select": {
|
80
|
+
"placeholder-select-value": "Select value"
|
81
|
+
}
|
82
|
+
},
|
83
|
+
"data-source-variable": {
|
84
|
+
label: {
|
85
|
+
"default": "default"
|
86
|
+
}
|
87
|
+
},
|
88
|
+
"default-group-by-custom-indicator-container": {
|
89
|
+
"aria-label-clear": "clear",
|
90
|
+
tooltip: "Applied by default in this dashboard. If edited, it carries over to other dashboards.",
|
91
|
+
"tooltip-restore-groupby-set-by-this-dashboard": "Restore groupby set by this dashboard."
|
92
|
+
},
|
93
|
+
"format-registry": {
|
94
|
+
formats: {
|
95
|
+
description: {
|
96
|
+
"commaseparated-values": "Comma-separated values",
|
97
|
+
"double-quoted-values": "Double quoted values",
|
98
|
+
"format-date-in-different-ways": "Format date in different ways",
|
99
|
+
"format-multivalued-variables-using-syntax-example": "Format multi-valued variables using glob syntax, example {value1,value2}",
|
100
|
+
"html-escaping-of-values": "HTML escaping of values",
|
101
|
+
"json-stringify-value": "JSON stringify value",
|
102
|
+
"keep-value-as-is": "Keep value as is",
|
103
|
+
"multiple-values-are-formatted-like-variablevalue": "Multiple values are formatted like variable=value",
|
104
|
+
"single-quoted-values": "Single quoted values",
|
105
|
+
"useful-escaping-values-taking-syntax-characters": "Useful for URL escaping values, taking into URI syntax characters",
|
106
|
+
"useful-for-url-escaping-values": "Useful for URL escaping values",
|
107
|
+
"values-are-separated-by-character": "Values are separated by | character"
|
108
|
+
}
|
109
|
+
}
|
110
|
+
},
|
111
|
+
"group-by-variable-renderer": {
|
112
|
+
"aria-label-group-by-selector": "Group by selector",
|
113
|
+
"placeholder-group-by-label": "Group by label"
|
114
|
+
},
|
115
|
+
"interval-variable": {
|
116
|
+
"placeholder-select-value": "Select value"
|
117
|
+
},
|
118
|
+
"loading-options-placeholder": {
|
119
|
+
"loading-options": "Loading options..."
|
120
|
+
},
|
121
|
+
"multi-value-apply-button": {
|
122
|
+
apply: "Apply"
|
123
|
+
},
|
124
|
+
"no-options-placeholder": {
|
125
|
+
"no-options-found": "No options found"
|
126
|
+
},
|
127
|
+
"options-error-placeholder": {
|
128
|
+
"error-occurred-fetching-labels-click-retry": "An error has occurred fetching labels. Click to retry"
|
129
|
+
},
|
130
|
+
"test-object-with-variable-dependency": {
|
131
|
+
title: {
|
132
|
+
hello: "Hello"
|
133
|
+
}
|
134
|
+
},
|
135
|
+
"test-variable": {
|
136
|
+
text: {
|
137
|
+
text: "Text"
|
138
|
+
}
|
139
|
+
},
|
140
|
+
"variable-value-input": {
|
141
|
+
"placeholder-enter-value": "Enter value"
|
142
|
+
},
|
143
|
+
"variable-value-select": {
|
144
|
+
"placeholder-select-value": "Select value"
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}
|
148
|
+
};
|
149
|
+
|
150
|
+
export { grafanaScenes as default };
|
151
|
+
//# sourceMappingURL=grafana-scenes.json.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"grafana-scenes.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { t } from '@grafana/i18n';
|
1
2
|
import React from 'react';
|
2
3
|
import { useStyles2, useTheme2, Tooltip, Icon, IconButton } from '@grafana/ui';
|
3
4
|
import { selectors } from '@grafana/e2e-selectors';
|
@@ -37,7 +38,16 @@ function ControlsLabel(props) {
|
|
37
38
|
const testId = typeof props.label === "string" ? selectors.pages.Dashboard.SubMenu.submenuItemLabels(props.label) : "";
|
38
39
|
let labelElement;
|
39
40
|
if (isVertical) {
|
40
|
-
labelElement = /* @__PURE__ */ React.createElement("label", { className: cx(styles.verticalLabel, props.className), "data-testid": testId, htmlFor: props.htmlFor }, props.prefix, props.label, descriptionIndicator, errorIndicator, props.icon && /* @__PURE__ */ React.createElement(Icon, { name: props.icon, className: styles.normalIcon }), loadingIndicator, props.onRemove && /* @__PURE__ */ React.createElement(
|
41
|
+
labelElement = /* @__PURE__ */ React.createElement("label", { className: cx(styles.verticalLabel, props.className), "data-testid": testId, htmlFor: props.htmlFor }, props.prefix, props.label, descriptionIndicator, errorIndicator, props.icon && /* @__PURE__ */ React.createElement(Icon, { name: props.icon, className: styles.normalIcon }), loadingIndicator, props.onRemove && /* @__PURE__ */ React.createElement(
|
42
|
+
IconButton,
|
43
|
+
{
|
44
|
+
variant: "secondary",
|
45
|
+
size: "xs",
|
46
|
+
name: "times",
|
47
|
+
onClick: props.onRemove,
|
48
|
+
tooltip: t("grafana-scenes.utils.controls-label.tooltip-remove", "Remove")
|
49
|
+
}
|
50
|
+
), props.suffix);
|
41
51
|
} else {
|
42
52
|
labelElement = /* @__PURE__ */ React.createElement("label", { className: cx(styles.horizontalLabel, props.className), "data-testid": testId, htmlFor: props.htmlFor }, props.prefix, errorIndicator, props.icon && /* @__PURE__ */ React.createElement(Icon, { name: props.icon, className: styles.normalIcon }), props.label, descriptionIndicator, loadingIndicator, props.suffix);
|
43
53
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ControlsLabel.js","sources":["../../../src/utils/ControlsLabel.tsx"],"sourcesContent":["import React from 'react';\nimport { Icon, IconButton, Tooltip, useStyles2, useTheme2 } from '@grafana/ui';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { GrafanaTheme2, IconName } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { LoadingIndicator } from './LoadingIndicator';\nimport { ControlsLayout } from '../core/types';\n\ninterface ControlsLabelProps {\n label: string;\n htmlFor?: string;\n description?: string;\n isLoading?: boolean;\n error?: string;\n icon?: IconName;\n layout?: ControlsLayout;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n className?: string;\n onCancel?: () => void;\n onRemove?: () => void;\n}\n\nexport function ControlsLabel(props: ControlsLabelProps) {\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n const isVertical = props.layout === 'vertical';\n\n const loadingIndicator = Boolean(props.isLoading) ? (\n <div\n style={{ marginLeft: theme.spacing(1), marginTop: '-1px' }}\n aria-label={selectors.components.LoadingIndicator.icon}\n >\n <LoadingIndicator\n onCancel={(e) => {\n e.preventDefault();\n e.stopPropagation();\n props.onCancel?.();\n }}\n />\n </div>\n ) : null;\n\n let errorIndicator = null;\n if (props.error) {\n errorIndicator = (\n <Tooltip content={props.error} placement={'bottom'}>\n <Icon className={styles.errorIcon} name=\"exclamation-triangle\" />\n </Tooltip>\n );\n }\n\n let descriptionIndicator = null;\n if (props.description) {\n descriptionIndicator = (\n <Tooltip content={props.description} placement={isVertical ? 'top' : 'bottom'}>\n <Icon className={styles.normalIcon} name=\"info-circle\" />\n </Tooltip>\n );\n }\n\n const testId =\n typeof props.label === 'string' ? selectors.pages.Dashboard.SubMenu.submenuItemLabels(props.label) : '';\n let labelElement: JSX.Element;\n\n // The vertical layout has different css class and order of elements (label always first)\n\n if (isVertical) {\n labelElement = (\n <label className={cx(styles.verticalLabel, props.className)} data-testid={testId} htmlFor={props.htmlFor}>\n {props.prefix}\n {props.label}\n {descriptionIndicator}\n {errorIndicator}\n {props.icon && <Icon name={props.icon} className={styles.normalIcon} />}\n {loadingIndicator}\n {props.onRemove && (\n <IconButton
|
1
|
+
{"version":3,"file":"ControlsLabel.js","sources":["../../../src/utils/ControlsLabel.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React from 'react';\nimport { Icon, IconButton, Tooltip, useStyles2, useTheme2 } from '@grafana/ui';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { GrafanaTheme2, IconName } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { LoadingIndicator } from './LoadingIndicator';\nimport { ControlsLayout } from '../core/types';\n\ninterface ControlsLabelProps {\n label: string;\n htmlFor?: string;\n description?: string;\n isLoading?: boolean;\n error?: string;\n icon?: IconName;\n layout?: ControlsLayout;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n className?: string;\n onCancel?: () => void;\n onRemove?: () => void;\n}\n\nexport function ControlsLabel(props: ControlsLabelProps) {\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n const isVertical = props.layout === 'vertical';\n\n const loadingIndicator = Boolean(props.isLoading) ? (\n <div\n style={{ marginLeft: theme.spacing(1), marginTop: '-1px' }}\n aria-label={selectors.components.LoadingIndicator.icon}\n >\n <LoadingIndicator\n onCancel={(e) => {\n e.preventDefault();\n e.stopPropagation();\n props.onCancel?.();\n }}\n />\n </div>\n ) : null;\n\n let errorIndicator = null;\n if (props.error) {\n errorIndicator = (\n <Tooltip content={props.error} placement={'bottom'}>\n <Icon className={styles.errorIcon} name=\"exclamation-triangle\" />\n </Tooltip>\n );\n }\n\n let descriptionIndicator = null;\n if (props.description) {\n descriptionIndicator = (\n <Tooltip content={props.description} placement={isVertical ? 'top' : 'bottom'}>\n <Icon className={styles.normalIcon} name=\"info-circle\" />\n </Tooltip>\n );\n }\n\n const testId =\n typeof props.label === 'string' ? selectors.pages.Dashboard.SubMenu.submenuItemLabels(props.label) : '';\n let labelElement: JSX.Element;\n\n // The vertical layout has different css class and order of elements (label always first)\n\n if (isVertical) {\n labelElement = (\n <label className={cx(styles.verticalLabel, props.className)} data-testid={testId} htmlFor={props.htmlFor}>\n {props.prefix}\n {props.label}\n {descriptionIndicator}\n {errorIndicator}\n {props.icon && <Icon name={props.icon} className={styles.normalIcon} />}\n {loadingIndicator}\n {props.onRemove && (\n <IconButton\n variant=\"secondary\"\n size=\"xs\"\n name=\"times\"\n onClick={props.onRemove}\n tooltip={t('grafana-scenes.utils.controls-label.tooltip-remove', 'Remove')}\n />\n )}\n {props.suffix}\n </label>\n );\n } else {\n labelElement = (\n <label className={cx(styles.horizontalLabel, props.className)} data-testid={testId} htmlFor={props.htmlFor}>\n {props.prefix}\n {errorIndicator}\n {props.icon && <Icon name={props.icon} className={styles.normalIcon} />}\n {props.label}\n {descriptionIndicator}\n {loadingIndicator}\n {props.suffix}\n </label>\n );\n }\n\n return labelElement;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n horizontalLabel: css({\n background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,\n display: `flex`,\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.bodySmall.fontSize,\n height: theme.spacing(theme.components.height.md),\n lineHeight: theme.spacing(theme.components.height.md),\n borderRadius: `${theme.shape.radius.default} 0 0 ${theme.shape.radius.default}`,\n border: `1px solid ${theme.components.input.borderColor}`,\n position: 'relative',\n // To make the border line up with the input border\n right: -1,\n whiteSpace: 'nowrap',\n gap: theme.spacing(0.5),\n }),\n verticalLabel: css({\n display: `flex`,\n alignItems: 'center',\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.bodySmall.fontSize,\n lineHeight: theme.typography.bodySmall.lineHeight,\n whiteSpace: 'nowrap',\n marginBottom: theme.spacing(0.5),\n gap: theme.spacing(1),\n }),\n errorIcon: css({\n color: theme.colors.error.text,\n }),\n normalIcon: css({\n color: theme.colors.text.secondary,\n }),\n});\n"],"names":[],"mappings":"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"}
|
@@ -1,8 +1,9 @@
|
|
1
|
+
import { t } from '@grafana/i18n';
|
1
2
|
import { Tooltip, Icon } from '@grafana/ui';
|
2
3
|
import React from 'react';
|
3
4
|
|
4
5
|
function LoadingIndicator(props) {
|
5
|
-
return /* @__PURE__ */ React.createElement(Tooltip, { content: "Cancel query" }, /* @__PURE__ */ React.createElement(
|
6
|
+
return /* @__PURE__ */ React.createElement(Tooltip, { content: t("grafana-scenes.utils.loading-indicator.content-cancel-query", "Cancel query") }, /* @__PURE__ */ React.createElement(
|
6
7
|
Icon,
|
7
8
|
{
|
8
9
|
className: "spin-clockwise",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LoadingIndicator.js","sources":["../../../src/utils/LoadingIndicator.tsx"],"sourcesContent":["import { Icon, Tooltip } from '@grafana/ui';\nimport React, { useCallback } from 'react';\nimport { LoadingIndicatorProps as SelectLoadingIndicatorProps } from 'react-select';\n\nexport const SelectLoadingIndicator = ({\n innerProps,\n ...props\n}: SelectLoadingIndicatorProps & { selectProps: { onCancel: () => void } }) => {\n const { onCancel } = props.selectProps;\n const onMouseDown = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onCancel();\n },\n [onCancel]\n );\n\n return <LoadingIndicator onCancel={onMouseDown} />;\n};\n\ninterface LoadingIndicatorProps {\n onCancel: (event: React.MouseEvent) => void;\n}\n\nexport function LoadingIndicator(props: LoadingIndicatorProps) {\n return (\n <Tooltip content
|
1
|
+
{"version":3,"file":"LoadingIndicator.js","sources":["../../../src/utils/LoadingIndicator.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport { Icon, Tooltip } from '@grafana/ui';\nimport React, { useCallback } from 'react';\nimport { LoadingIndicatorProps as SelectLoadingIndicatorProps } from 'react-select';\n\nexport const SelectLoadingIndicator = ({\n innerProps,\n ...props\n}: SelectLoadingIndicatorProps & { selectProps: { onCancel: () => void } }) => {\n const { onCancel } = props.selectProps;\n const onMouseDown = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onCancel();\n },\n [onCancel]\n );\n\n return <LoadingIndicator onCancel={onMouseDown} />;\n};\n\ninterface LoadingIndicatorProps {\n onCancel: (event: React.MouseEvent) => void;\n}\n\nexport function LoadingIndicator(props: LoadingIndicatorProps) {\n return (\n <Tooltip content={t('grafana-scenes.utils.loading-indicator.content-cancel-query', 'Cancel query')}>\n <Icon\n className=\"spin-clockwise\"\n name=\"sync\"\n size=\"xs\"\n role=\"button\"\n onMouseDown={(e) => {\n props.onCancel(e);\n }}\n />\n </Tooltip>\n );\n}\n"],"names":[],"mappings":";;;;AA0BO,SAAS,iBAAiB,KAA8B,EAAA;AAC7D,EAAA,2CACG,OAAQ,EAAA,EAAA,OAAA,EAAS,CAAE,CAAA,6DAAA,EAA+D,cAAc,CAC/F,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,gBAAA;AAAA,MACV,IAAK,EAAA,MAAA;AAAA,MACL,IAAK,EAAA,IAAA;AAAA,MACL,IAAK,EAAA,QAAA;AAAA,MACL,WAAA,EAAa,CAAC,CAAM,KAAA;AAClB,QAAA,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA;AAClB;AAAA,GAEJ,CAAA;AAEJ;;;;"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { LANGUAGES } from '@grafana/i18n';
|
2
|
+
|
3
|
+
function __variableDynamicImportRuntime0__(path) {
|
4
|
+
switch (path) {
|
5
|
+
case '../locales/en-US/grafana-scenes.json': return import('../locales/en-US/grafana-scenes.json.js');
|
6
|
+
default: return new Promise(function(resolve, reject) {
|
7
|
+
(typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(
|
8
|
+
reject.bind(null, new Error("Unknown variable dynamic import: " + path))
|
9
|
+
);
|
10
|
+
})
|
11
|
+
}
|
12
|
+
}
|
13
|
+
const resources = LANGUAGES.reduce((acc, lang) => {
|
14
|
+
acc[lang.code] = async () => await __variableDynamicImportRuntime0__(`../locales/${lang.code}/grafana-scenes.json`);
|
15
|
+
return acc;
|
16
|
+
}, {});
|
17
|
+
const loadResources = async (resolvedLanguage) => {
|
18
|
+
const translation = await resources[resolvedLanguage]();
|
19
|
+
return translation.default;
|
20
|
+
};
|
21
|
+
|
22
|
+
export { loadResources };
|
23
|
+
//# sourceMappingURL=loadResources.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"loadResources.js","sources":["../../../src/utils/loadResources.ts"],"sourcesContent":["import { LANGUAGES, ResourceLoader, Resources } from '@grafana/i18n';\n\nconst resources = LANGUAGES.reduce<Record<string, () => Promise<{ default: Resources }>>>((acc, lang) => {\n acc[lang.code] = async () => await import(`../locales/${lang.code}/grafana-scenes.json`);\n return acc;\n}, {});\n\n/**\n * Loads the translation resources for the given language and returns them.\n */\nexport const loadResources: ResourceLoader = async (resolvedLanguage: string) => {\n const translation = await resources[resolvedLanguage]();\n return translation.default;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAEA,MAAM,SAAY,GAAA,SAAA,CAAU,MAA8D,CAAA,CAAC,KAAK,IAAS,KAAA;AACvG,EAAI,GAAA,CAAA,IAAA,CAAK,IAAI,CAAI,GAAA,YAAY,MAAM,iCAAO,CAAA,CAAA,WAAA,EAAc,KAAK,IAAI,CAAA,oBAAA,CAAA,CAAA;AACjE,EAAO,OAAA,GAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAKQ,MAAA,aAAA,GAAgC,OAAO,gBAA6B,KAAA;AAC/E,EAAA,MAAM,WAAc,GAAA,MAAM,SAAU,CAAA,gBAAgB,CAAE,EAAA;AACtD,EAAA,OAAO,WAAY,CAAA,OAAA;AACrB;;;;"}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { t } from '@grafana/i18n';
|
1
2
|
import React from 'react';
|
2
3
|
import { AdHocFilterRenderer } from './AdHocFilterRenderer.js';
|
3
4
|
import { Button } from '@grafana/ui';
|
@@ -10,8 +11,8 @@ function AdHocFilterBuilder({ model, addFilterButtonText }) {
|
|
10
11
|
{
|
11
12
|
variant: "secondary",
|
12
13
|
icon: "plus",
|
13
|
-
title: "Add filter",
|
14
|
-
"aria-label": "Add filter",
|
14
|
+
title: t("grafana-scenes.variables.ad-hoc-filter-builder.title-add-filter", "Add filter"),
|
15
|
+
"aria-label": t("grafana-scenes.variables.ad-hoc-filter-builder.aria-label-add-filter", "Add filter"),
|
15
16
|
"data-testid": `AdHocFilter-add`,
|
16
17
|
onClick: () => model._addWip()
|
17
18
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AdHocFilterBuilder.js","sources":["../../../../src/variables/adhoc/AdHocFilterBuilder.tsx"],"sourcesContent":["import React from 'react';\n\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { AdHocFiltersVariable } from './AdHocFiltersVariable';\nimport { Button } from '@grafana/ui';\n\ninterface Props {\n model: AdHocFiltersVariable;\n addFilterButtonText?: string;\n}\n\nexport function AdHocFilterBuilder({ model, addFilterButtonText }: Props) {\n const { _wip } = model.useState();\n\n if (!_wip) {\n return (\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n title={'Add filter'}\n aria-label
|
1
|
+
{"version":3,"file":"AdHocFilterBuilder.js","sources":["../../../../src/variables/adhoc/AdHocFilterBuilder.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React from 'react';\n\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer';\nimport { AdHocFiltersVariable } from './AdHocFiltersVariable';\nimport { Button } from '@grafana/ui';\n\ninterface Props {\n model: AdHocFiltersVariable;\n addFilterButtonText?: string;\n}\n\nexport function AdHocFilterBuilder({ model, addFilterButtonText }: Props) {\n const { _wip } = model.useState();\n\n if (!_wip) {\n return (\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n title={t('grafana-scenes.variables.ad-hoc-filter-builder.title-add-filter', 'Add filter')}\n aria-label={t('grafana-scenes.variables.ad-hoc-filter-builder.aria-label-add-filter', 'Add filter')}\n data-testid={`AdHocFilter-add`}\n onClick={() => model._addWip()}\n >\n {addFilterButtonText}\n </Button>\n );\n }\n\n return <AdHocFilterRenderer filter={_wip} model={model} />;\n}\n"],"names":[],"mappings":";;;;;AAYO,SAAS,kBAAmB,CAAA,EAAE,KAAO,EAAA,mBAAA,EAA8B,EAAA;AACxE,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,KAAA,CAAM,QAAS,EAAA;AAEhC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IACE,uBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,WAAA;AAAA,QACR,IAAK,EAAA,MAAA;AAAA,QACL,KAAA,EAAO,CAAE,CAAA,iEAAA,EAAmE,YAAY,CAAA;AAAA,QACxF,YAAA,EAAY,CAAE,CAAA,sEAAA,EAAwE,YAAY,CAAA;AAAA,QAClG,aAAa,EAAA,CAAA,eAAA,CAAA;AAAA,QACb,OAAA,EAAS,MAAM,KAAA,CAAM,OAAQ;AAAA,OAAA;AAAA,MAE5B;AAAA,KACH;AAAA;AAIJ,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,EAAoB,MAAQ,EAAA,IAAA,EAAM,KAAc,EAAA,CAAA;AAC1D;;;;"}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { t } from '@grafana/i18n';
|
1
2
|
import React, { useState, useMemo } from 'react';
|
2
3
|
import { isMultiValueOperator } from './AdHocFiltersVariable.js';
|
3
4
|
import { useStyles2, Select, Field, Button } from '@grafana/ui';
|
@@ -106,7 +107,10 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
106
107
|
width: "auto",
|
107
108
|
value: valueValue,
|
108
109
|
filterOption: filterNoOp,
|
109
|
-
placeholder:
|
110
|
+
placeholder: t(
|
111
|
+
"grafana-scenes.variables.ad-hoc-filter-renderer.value-select.placeholder-select-value",
|
112
|
+
"Select value"
|
113
|
+
),
|
110
114
|
options: filteredValueOptions,
|
111
115
|
inputValue: valueInputValue,
|
112
116
|
onInputChange: onValueInputChange,
|
@@ -153,7 +157,10 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
153
157
|
width: "auto",
|
154
158
|
allowCustomValue: (_c = model.state.allowCustomValue) != null ? _c : true,
|
155
159
|
value: keyValue,
|
156
|
-
placeholder:
|
160
|
+
placeholder: t(
|
161
|
+
"grafana-scenes.variables.ad-hoc-filter-renderer.key-select.placeholder-select-label",
|
162
|
+
"Select label"
|
163
|
+
),
|
157
164
|
options: handleOptionGroups(keys),
|
158
165
|
onChange: (v) => {
|
159
166
|
model._updateFilter(filter, {
|
@@ -210,15 +217,23 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
210
217
|
const label = /* @__PURE__ */ React.createElement(ControlsLabel, { layout: "vertical", label: (_d = filter.key) != null ? _d : "", onRemove: () => model._removeFilter(filter) });
|
211
218
|
return /* @__PURE__ */ React.createElement(Field, { label, "data-testid": `AdHocFilter-${filter.key}`, className: styles.field }, /* @__PURE__ */ React.createElement("div", { className: styles.wrapper }, operatorSelect, valueSelect));
|
212
219
|
} else {
|
213
|
-
return /* @__PURE__ */ React.createElement(
|
220
|
+
return /* @__PURE__ */ React.createElement(
|
221
|
+
Field,
|
222
|
+
{
|
223
|
+
label: t("grafana-scenes.variables.ad-hoc-filter-renderer.label-select-label", "Select label"),
|
224
|
+
"data-testid": `AdHocFilter-${filter.key}`,
|
225
|
+
className: styles.field
|
226
|
+
},
|
227
|
+
keySelect
|
228
|
+
);
|
214
229
|
}
|
215
230
|
}
|
216
231
|
return /* @__PURE__ */ React.createElement("div", { className: styles.wrapper, "data-testid": `AdHocFilter-${filter.key}` }, keySelect, operatorSelect, valueSelect, /* @__PURE__ */ React.createElement(
|
217
232
|
Button,
|
218
233
|
{
|
219
234
|
variant: "secondary",
|
220
|
-
"aria-label": "Remove filter",
|
221
|
-
title: "Remove filter",
|
235
|
+
"aria-label": t("grafana-scenes.variables.ad-hoc-filter-renderer.aria-label-remove-filter", "Remove filter"),
|
236
|
+
title: t("grafana-scenes.variables.ad-hoc-filter-renderer.title-remove-filter", "Remove filter"),
|
222
237
|
className: styles.removeButton,
|
223
238
|
icon: "times",
|
224
239
|
"data-testid": `AdHocFilter-remove-${(_e = filter.key) != null ? _e : ""}`,
|