Compare commits

...

3 Commits

Author SHA1 Message Date
Ryan McKinley 4083cf78d4 default sort 2026-01-08 09:31:50 +03:00
grafana-pr-automation[bot] 97af86efb2 I18n: Download translations from Crowdin (#115968)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-01-08 00:43:13 +00:00
Paul Marbach f58ab2a6a1 Gauge: Fix endpoint rendering for non-gradient cases (#115910)
* Gauge: Fix endpoint rendering for non-gradient cases

* break out the endpoint markers to its own component with tests
2026-01-07 17:17:35 -05:00
23 changed files with 558 additions and 139 deletions
@@ -1,8 +1,9 @@
import { useId, memo, HTMLAttributes, ReactNode, SVGProps } from 'react';
import { useId, memo, HTMLAttributes, SVGProps } from 'react';
import { FieldDisplay } from '@grafana/data';
import { getBarEndcapColors, getGradientCss, getEndpointMarkerColors } from './colors';
import { RadialArcPathEndpointMarks } from './RadialArcPathEndpointMarks';
import { getBarEndcapColors, getGradientCss } from './colors';
import { RadialShape, RadialGaugeDimensions, GradientStop } from './types';
import { drawRadialArcPath, toRad } from './utils';
@@ -29,11 +30,6 @@ interface RadialArcPathPropsWithGradient extends RadialArcPathPropsBase {
type RadialArcPathProps = RadialArcPathPropsWithColor | RadialArcPathPropsWithGradient;
const ENDPOINT_MARKER_MIN_ANGLE = 10;
const DOT_OPACITY = 0.5;
const DOT_RADIUS_FACTOR = 0.4;
const MAX_DOT_RADIUS = 8;
export const RadialArcPath = memo(
({
arcLengthDeg,
@@ -68,67 +64,25 @@ export const RadialArcPath = memo(
const xEnd = centerX + radius * Math.cos(endRadians);
const yEnd = centerY + radius * Math.sin(endRadians);
const dotRadius =
endpointMarker === 'point' ? Math.min((barWidth / 2) * DOT_RADIUS_FACTOR, MAX_DOT_RADIUS) : barWidth / 2;
const bgDivStyle: HTMLAttributes<HTMLDivElement>['style'] = { width: boxSize, height: vizHeight, marginLeft: boxX };
const pathProps: SVGProps<SVGPathElement> = {};
let barEndcapColors: [string, string] | undefined;
let endpointMarks: ReactNode = null;
if (isGradient) {
bgDivStyle.backgroundImage = getGradientCss(rest.gradient, shape);
if (endpointMarker && (rest.gradient?.length ?? 0) > 0) {
switch (endpointMarker) {
case 'point':
const [pointColorStart, pointColorEnd] = getEndpointMarkerColors(
rest.gradient!,
fieldDisplay.display.percent
);
endpointMarks = (
<>
{arcLengthDeg > ENDPOINT_MARKER_MIN_ANGLE && (
<circle cx={xStart} cy={yStart} r={dotRadius} fill={pointColorStart} opacity={DOT_OPACITY} />
)}
<circle cx={xEnd} cy={yEnd} r={dotRadius} fill={pointColorEnd} opacity={DOT_OPACITY} />
</>
);
break;
case 'glow':
const offsetAngle = toRad(ENDPOINT_MARKER_MIN_ANGLE);
const xStartMark = centerX + radius * Math.cos(endRadians + offsetAngle);
const yStartMark = centerY + radius * Math.sin(endRadians + offsetAngle);
endpointMarks =
arcLengthDeg > ENDPOINT_MARKER_MIN_ANGLE ? (
<path
d={['M', xStartMark, yStartMark, 'A', radius, radius, 0, 0, 1, xEnd, yEnd].join(' ')}
fill="none"
strokeWidth={barWidth}
stroke={endpointMarkerGlowFilter}
strokeLinecap={roundedBars ? 'round' : 'butt'}
filter={glowFilter}
/>
) : null;
break;
default:
break;
}
}
if (barEndcaps) {
barEndcapColors = getBarEndcapColors(rest.gradient, fieldDisplay.display.percent);
}
pathProps.fill = 'none';
pathProps.stroke = 'white';
} else {
bgDivStyle.backgroundColor = rest.color;
pathProps.fill = 'none';
pathProps.stroke = rest.color;
}
let barEndcapColors: [string, string] | undefined;
if (barEndcaps) {
barEndcapColors = isGradient
? getBarEndcapColors(rest.gradient, fieldDisplay.display.percent)
: [rest.color, rest.color];
}
const pathEl = (
<path d={path} strokeWidth={barWidth} strokeLinecap={roundedBars ? 'round' : 'butt'} {...pathProps} />
);
@@ -158,7 +112,23 @@ export const RadialArcPath = memo(
)}
</g>
{endpointMarks}
{endpointMarker && (
<RadialArcPathEndpointMarks
startAngle={angle}
arcLengthDeg={arcLengthDeg}
dimensions={dimensions}
endpointMarker={endpointMarker}
fieldDisplay={fieldDisplay}
xStart={xStart}
xEnd={xEnd}
yStart={yStart}
yEnd={yEnd}
roundedBars={roundedBars}
endpointMarkerGlowFilter={endpointMarkerGlowFilter}
glowFilter={glowFilter}
{...rest}
/>
)}
</>
);
}
@@ -0,0 +1,143 @@
import { render, RenderResult } from '@testing-library/react';
import { FieldDisplay } from '@grafana/data';
import { RadialArcPathEndpointMarks, RadialArcPathEndpointMarksProps } from './RadialArcPathEndpointMarks';
import { RadialGaugeDimensions } from './types';
const ser = new XMLSerializer();
const expectHTML = (result: RenderResult, expected: string) => {
let actual = ser.serializeToString(result.asFragment()).replace(/xmlns=".*?" /g, '');
expect(actual).toEqual(expected.replace(/^\s*|\n/gm, ''));
};
describe('RadialArcPathEndpointMarks', () => {
const defaultDimensions = Object.freeze({
centerX: 100,
centerY: 100,
radius: 80,
barWidth: 20,
vizWidth: 200,
vizHeight: 200,
margin: 10,
barIndex: 0,
thresholdsBarRadius: 0,
thresholdsBarWidth: 0,
thresholdsBarSpacing: 0,
scaleLabelsFontSize: 0,
scaleLabelsSpacing: 0,
scaleLabelsRadius: 0,
gaugeBottomY: 0,
}) satisfies RadialGaugeDimensions;
const defaultFieldDisplay = Object.freeze({
name: 'Test',
field: {},
display: { text: '50', numeric: 50, color: '#FF0000' },
hasLinks: false,
}) satisfies FieldDisplay;
const defaultProps = Object.freeze({
arcLengthDeg: 90,
dimensions: defaultDimensions,
fieldDisplay: defaultFieldDisplay,
startAngle: 0,
xStart: 100,
xEnd: 150,
yStart: 100,
yEnd: 50,
}) satisfies Omit<RadialArcPathEndpointMarksProps, 'color' | 'gradient' | 'endpointMarker'>;
it('renders the expected marks when endpointMarker is "point" w/ a static color', () => {
expectHTML(
render(
<svg role="img">
<RadialArcPathEndpointMarks {...defaultProps} endpointMarker="point" color="#FF0000" />
</svg>
),
'<svg role=\"img\"><circle cx=\"100\" cy=\"100\" r=\"4\" fill=\"#111217\" opacity=\"0.5\"/><circle cx=\"150\" cy=\"50\" r=\"4\" fill=\"#111217\" opacity=\"0.5\"/></svg>'
);
});
it('renders the expected marks when endpointMarker is "point" w/ a gradient color', () => {
expectHTML(
render(
<svg role="img">
<RadialArcPathEndpointMarks
{...defaultProps}
endpointMarker="point"
gradient={[
{ color: '#00FF00', percent: 0 },
{ color: '#0000FF', percent: 1 },
]}
/>
</svg>
),
'<svg role=\"img\"><circle cx=\"100\" cy=\"100\" r=\"4\" fill=\"#111217\" opacity=\"0.5\"/><circle cx=\"150\" cy=\"50\" r=\"4\" fill=\"#fbfbfb\" opacity=\"0.5\"/></svg>'
);
});
it('renders the expected marks when endpointMarker is "glow" w/ a static color', () => {
expectHTML(
render(
<svg role="img">
<RadialArcPathEndpointMarks {...defaultProps} endpointMarker="glow" color="#FF0000" />
</svg>
),
'<svg role=\"img\"><path d=\"M 113.89185421335443 21.215379759023364 A 80 80 0 0 1 150 50\" fill=\"none\" stroke-width=\"20\" stroke-linecap=\"butt\"/></svg>'
);
});
it('renders the expected marks when endpointMarker is "glow" w/ a gradient color', () => {
expectHTML(
render(
<svg role="img">
<RadialArcPathEndpointMarks
{...defaultProps}
endpointMarker="glow"
gradient={[
{ color: '#00FF00', percent: 0 },
{ color: '#0000FF', percent: 1 },
]}
/>
</svg>
),
'<svg role=\"img\"><path d=\"M 113.89185421335443 21.215379759023364 A 80 80 0 0 1 150 50\" fill=\"none\" stroke-width=\"20\" stroke-linecap=\"butt\"/></svg>'
);
});
it('does not render the start mark when arcLengthDeg is less than the minimum angle for "point" endpointMarker', () => {
expectHTML(
render(
<svg role="img">
<RadialArcPathEndpointMarks {...defaultProps} arcLengthDeg={5} endpointMarker="point" color="#FF0000" />
</svg>
),
'<svg role=\"img\"><circle cx=\"150\" cy=\"50\" r=\"4\" fill=\"#111217\" opacity=\"0.5\"/></svg>'
);
});
it('does not render anything when arcLengthDeg is less than the minimum angle for "glow" endpointMarker', () => {
expectHTML(
render(
<svg role="img">
<RadialArcPathEndpointMarks {...defaultProps} arcLengthDeg={5} endpointMarker="glow" color="#FF0000" />
</svg>
),
'<svg role=\"img\"/>'
);
});
it('does not render anything if endpointMarker is some other value', () => {
expectHTML(
render(
<svg role="img">
{/* @ts-ignore: confirming the component doesn't throw */}
<RadialArcPathEndpointMarks {...defaultProps} endpointMarker="foo" />
</svg>
),
'<svg role=\"img\"/>'
);
});
});
@@ -0,0 +1,98 @@
import { FieldDisplay } from '@grafana/data';
import { getEndpointMarkerColors, getGuideDotColor } from './colors';
import { GradientStop, RadialGaugeDimensions } from './types';
import { toRad } from './utils';
interface RadialArcPathEndpointMarksPropsBase {
arcLengthDeg: number;
dimensions: RadialGaugeDimensions;
fieldDisplay: FieldDisplay;
endpointMarker: 'point' | 'glow';
roundedBars?: boolean;
startAngle: number;
glowFilter?: string;
endpointMarkerGlowFilter?: string;
xStart: number;
xEnd: number;
yStart: number;
yEnd: number;
}
interface RadialArcPathEndpointMarksPropsWithColor extends RadialArcPathEndpointMarksPropsBase {
color: string;
}
interface RadialArcPathEndpointMarksPropsWithGradient extends RadialArcPathEndpointMarksPropsBase {
gradient: GradientStop[];
}
export type RadialArcPathEndpointMarksProps =
| RadialArcPathEndpointMarksPropsWithColor
| RadialArcPathEndpointMarksPropsWithGradient;
const ENDPOINT_MARKER_MIN_ANGLE = 10;
const DOT_OPACITY = 0.5;
const DOT_RADIUS_FACTOR = 0.4;
const MAX_DOT_RADIUS = 8;
export function RadialArcPathEndpointMarks({
startAngle: angle,
arcLengthDeg,
dimensions,
endpointMarker,
fieldDisplay,
xStart,
xEnd,
yStart,
yEnd,
roundedBars,
endpointMarkerGlowFilter,
glowFilter,
...rest
}: RadialArcPathEndpointMarksProps) {
const isGradient = 'gradient' in rest;
const { radius, centerX, centerY, barWidth } = dimensions;
const endRadians = toRad(angle + arcLengthDeg);
switch (endpointMarker) {
case 'point': {
const [pointColorStart, pointColorEnd] = isGradient
? getEndpointMarkerColors(rest.gradient, fieldDisplay.display.percent)
: [getGuideDotColor(rest.color), getGuideDotColor(rest.color)];
const dotRadius =
endpointMarker === 'point' ? Math.min((barWidth / 2) * DOT_RADIUS_FACTOR, MAX_DOT_RADIUS) : barWidth / 2;
return (
<>
{arcLengthDeg > ENDPOINT_MARKER_MIN_ANGLE && (
<circle cx={xStart} cy={yStart} r={dotRadius} fill={pointColorStart} opacity={DOT_OPACITY} />
)}
<circle cx={xEnd} cy={yEnd} r={dotRadius} fill={pointColorEnd} opacity={DOT_OPACITY} />
</>
);
}
case 'glow':
const offsetAngle = toRad(ENDPOINT_MARKER_MIN_ANGLE);
const xStartMark = centerX + radius * Math.cos(endRadians + offsetAngle);
const yStartMark = centerY + radius * Math.sin(endRadians + offsetAngle);
if (arcLengthDeg <= ENDPOINT_MARKER_MIN_ANGLE) {
break;
}
return (
<path
d={['M', xStartMark, yStartMark, 'A', radius, radius, 0, 0, 1, xEnd, yEnd].join(' ')}
fill="none"
strokeWidth={barWidth}
stroke={endpointMarkerGlowFilter}
strokeLinecap={roundedBars ? 'round' : 'butt'}
filter={glowFilter}
/>
);
default:
break;
}
return null;
}
@@ -175,7 +175,7 @@ export function getGradientCss(gradientStops: GradientStop[], shape: RadialShape
const GRAY_05 = '#111217';
const GRAY_90 = '#fbfbfb';
const CONTRAST_THRESHOLD_MAX = 4.5;
const getGuideDotColor = (color: string): string => {
export const getGuideDotColor = (color: string): string => {
const darkColor = GRAY_05;
const lightColor = GRAY_90;
return colorManipulator.getContrastRatio(darkColor, color) >= CONTRAST_THRESHOLD_MAX ? darkColor : lightColor;
+18 -9
View File
@@ -8,7 +8,6 @@ import (
"net/http"
"net/url"
"slices"
"sort"
"strconv"
"strings"
@@ -316,6 +315,12 @@ func (s *SearchHandler) DoSearch(w http.ResponseWriter, r *http.Request) {
return
}
// sort.Slice(parsedResults.Hits, func(i, j int) bool {
// // Just sorting by resource for now. The rest should be sorted by search score already
// return parsedResults.Hits[i].Resource > parsedResults.Hits[j].Resource
// })
// }
result, err := s.client.Search(ctx, searchRequest)
if err != nil {
errhttp.Write(ctx, err, w)
@@ -332,14 +337,6 @@ func (s *SearchHandler) DoSearch(w http.ResponseWriter, r *http.Request) {
return
}
if len(searchRequest.SortBy) == 0 {
// default sort by resource descending ( folders then dashboards ) then title
sort.Slice(parsedResults.Hits, func(i, j int) bool {
// Just sorting by resource for now. The rest should be sorted by search score already
return parsedResults.Hits[i].Resource > parsedResults.Hits[j].Resource
})
}
s.write(w, parsedResults)
}
@@ -428,6 +425,18 @@ func convertHttpSearchRequestToResourceSearchRequest(queryParams url.Values, use
}
searchRequest.SortBy = append(searchRequest.SortBy, s)
}
} else if searchRequest.Query == "" {
// When no query exists, return the results in a predictable order
searchRequest.SortBy = []*resourcepb.ResourceSearchRequest_Sort{
{
Field: resource.SEARCH_FIELD_GROUP_RESOURCE, // folders then dashboards
Desc: true,
},
{
Field: resource.SEARCH_FIELD_TITLE, // then title
Desc: false,
},
}
}
// The facet term fields
+17 -4
View File
@@ -3791,7 +3791,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4454,6 +4453,7 @@
},
"no-properties-changed": "Žádné relevantní vlastnosti se nezměnily",
"table": {
"notes": "",
"updated": "Datum",
"updatedBy": "Aktualizoval uživatel",
"version": "Verze"
@@ -4912,7 +4912,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Hodnoty oddělené čárkou"
},
"datasource-options": {
"name-filter": "Filtr názvu",
@@ -6010,6 +6011,9 @@
},
"custom-variable-form": {
"custom-options": "Vlastní možnosti",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Hodnoty oddělené čárkou",
"selection-options": "Možnosti výběru"
},
@@ -6601,6 +6605,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Nástěnka byla uložena"
},
@@ -6624,6 +6633,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6683,8 +6693,11 @@
"tooltip-show-usages": "Zobrazit použití"
},
"variable-values-preview": {
"preview-of-values": "Náhled hodnot",
"show-more": "Zobrazit více"
"show-more": "Zobrazit více",
"preview-of-values_one": "",
"preview-of-values_few": "",
"preview-of-values_many": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Keine relevanten Eigenschaften geändert",
"table": {
"notes": "",
"updated": "Datum",
"updatedBy": "Aktualisiert von",
"version": "Version"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Werte werden durch Komma getrennt"
},
"datasource-options": {
"name-filter": "Namensfilter",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Benutzerdefinierte Optionen",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Werte werden durch Komma getrennt",
"selection-options": "Auswahloptionen"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Dashboard gespeichert"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Nutzungen anzeigen"
},
"variable-values-preview": {
"preview-of-values": "Vorschau der Werte",
"show-more": "Mehr anzeigen"
"show-more": "Mehr anzeigen",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "No se ha cambiado ninguna propiedad relevante",
"table": {
"notes": "",
"updated": "Fecha",
"updatedBy": "Actualizada por",
"version": "Versión"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Valores separados por coma"
},
"datasource-options": {
"name-filter": "Nombrar filtro",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Opciones personalizadas",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Valores separados por comas",
"selection-options": "Opciones de selección"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Dashboard guardado"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Mostrar usos"
},
"variable-values-preview": {
"preview-of-values": "Vista previa de los valores",
"show-more": "Mostrar más"
"show-more": "Mostrar más",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Aucune propriété pertinente na été modifiée",
"table": {
"notes": "",
"updated": "Date",
"updatedBy": "Mis à jour par",
"version": "Version"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Valeurs séparées par une virgule"
},
"datasource-options": {
"name-filter": "Nom du filtre",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Personnaliser les options",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Valeurs séparées par des virgules",
"selection-options": "Options de sélection"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Tableau de bord enregistré"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Afficher les usages"
},
"variable-values-preview": {
"preview-of-values": "Aperçu des valeurs",
"show-more": "Afficher plus"
"show-more": "Afficher plus",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Nem változtak meg a releváns tulajdonságok",
"table": {
"notes": "",
"updated": "Dátum",
"updatedBy": "Frissítette:",
"version": "Verzió"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Értékek vesszővel elválasztva"
},
"datasource-options": {
"name-filter": "Névszűrő",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Egyéni opciók",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Értékek vesszővel elválasztva",
"selection-options": "Kijelölés beállításai"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Irányítópult elmentve"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Használatok megjelenítése"
},
"variable-values-preview": {
"preview-of-values": "Értékek előnézete",
"show-more": "Több megjelenítése"
"show-more": "Több megjelenítése",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+14 -4
View File
@@ -3743,7 +3743,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4397,6 +4396,7 @@
},
"no-properties-changed": "Tidak ada properti yang relevan yang diubah",
"table": {
"notes": "",
"updated": "Tanggal",
"updatedBy": "Diperbarui Oleh",
"version": "Versi"
@@ -4855,7 +4855,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Nilai dipisahkan dengan koma"
},
"datasource-options": {
"name-filter": "Filter nama",
@@ -5947,6 +5948,9 @@
},
"custom-variable-form": {
"custom-options": "Opsi kustom",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Nilai dipisahkan dengan koma",
"selection-options": "Opsi pemilihan"
},
@@ -6532,6 +6536,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Dasbor disimpan"
},
@@ -6555,6 +6564,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6614,8 +6624,8 @@
"tooltip-show-usages": "Tampilkan penggunaan"
},
"variable-values-preview": {
"preview-of-values": "Pratinjau nilai",
"show-more": "Tampilkan lebih banyak"
"show-more": "Tampilkan lebih banyak",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Nessuna proprietà rilevante modificata",
"table": {
"notes": "",
"updated": "Data",
"updatedBy": "Aggiornato da",
"version": "Versione"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Valori separati da virgola"
},
"datasource-options": {
"name-filter": "Filtro nome",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Opzioni personalizzate",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Valori separati da virgola",
"selection-options": "Seleziona opzioni"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Dashboard salvata"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Mostra utilizzi"
},
"variable-values-preview": {
"preview-of-values": "Anteprima dei valori",
"show-more": "Mostra di più"
"show-more": "Mostra di più",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+14 -4
View File
@@ -3743,7 +3743,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4397,6 +4396,7 @@
},
"no-properties-changed": "関連するプロパティは変更されていません",
"table": {
"notes": "",
"updated": "日付",
"updatedBy": "更新者",
"version": "バージョン"
@@ -4855,7 +4855,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "カンマで区切った値"
},
"datasource-options": {
"name-filter": "名前フィルター",
@@ -5947,6 +5948,9 @@
},
"custom-variable-form": {
"custom-options": "カスタムオプション",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "カンマ区切りの値",
"selection-options": "選択オプション"
},
@@ -6532,6 +6536,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "ダッシュボードが保存されました"
},
@@ -6555,6 +6564,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6614,8 +6624,8 @@
"tooltip-show-usages": "使用状況を表示"
},
"variable-values-preview": {
"preview-of-values": "値のプレビュー",
"show-more": "さらに表示"
"show-more": "さらに表示",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+14 -4
View File
@@ -3743,7 +3743,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4397,6 +4396,7 @@
},
"no-properties-changed": "변경된 관련 속성 없음",
"table": {
"notes": "",
"updated": "날짜",
"updatedBy": "업데이트한 사용자",
"version": "버전"
@@ -4855,7 +4855,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "쉼표로 구분된 값"
},
"datasource-options": {
"name-filter": "이름 필터",
@@ -5947,6 +5948,9 @@
},
"custom-variable-form": {
"custom-options": "사용자 지정 옵션",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "쉼표로 구분된 값",
"selection-options": "선택 옵션"
},
@@ -6532,6 +6536,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "대시보드가 저장되었습니다"
},
@@ -6555,6 +6564,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6614,8 +6624,8 @@
"tooltip-show-usages": "사용처 표시"
},
"variable-values-preview": {
"preview-of-values": "값 미리 보기",
"show-more": "더 보기"
"show-more": " 보기",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Geen relevante eigenschappen gewijzigd",
"table": {
"notes": "",
"updated": "Datum",
"updatedBy": "Bijgewerkt door",
"version": "Versie"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Waarden gescheiden door komma"
},
"datasource-options": {
"name-filter": "Filter een naam geven",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Aangepaste opties",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Waarden gescheiden door komma",
"selection-options": "Selectiemogelijkheden"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Dashboard opgeslagen"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Gebruik weergeven"
},
"variable-values-preview": {
"preview-of-values": "Voorbeeldweergave van waarden",
"show-more": "Meer weergeven"
"show-more": "Meer weergeven",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+17 -4
View File
@@ -3791,7 +3791,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4454,6 +4453,7 @@
},
"no-properties-changed": "Nie zmieniono istotnych właściwości",
"table": {
"notes": "",
"updated": "Data",
"updatedBy": "Zaktualizowane przez",
"version": "Wersja"
@@ -4912,7 +4912,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Wartości rozdzielone przecinkami"
},
"datasource-options": {
"name-filter": "Filtr nazwy",
@@ -6010,6 +6011,9 @@
},
"custom-variable-form": {
"custom-options": "Opcje niestandardowe",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Wartości rozdzielone przecinkami",
"selection-options": "Opcje wyboru"
},
@@ -6601,6 +6605,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Pulpit został zapisany"
},
@@ -6624,6 +6633,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6683,8 +6693,11 @@
"tooltip-show-usages": "Wyświetl użycie"
},
"variable-values-preview": {
"preview-of-values": "Podgląd wartości",
"show-more": "Pokaż więcej"
"show-more": "Pokaż więcej",
"preview-of-values_one": "",
"preview-of-values_few": "",
"preview-of-values_many": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Nenhuma propriedade relevante alterada",
"table": {
"notes": "",
"updated": "Data",
"updatedBy": "Atualizada por",
"version": "Versão"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Valores separados por vírgula"
},
"datasource-options": {
"name-filter": "Filtro de nome",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Opções personalizadas",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Valores separados por vírgula",
"selection-options": "Opções de seleção"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Painel de controle salvo"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Exibir usos"
},
"variable-values-preview": {
"preview-of-values": "Pré-visualização de valores",
"show-more": "Exibir mais"
"show-more": "Exibir mais",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Nenhuma propriedade relevante alterada",
"table": {
"notes": "",
"updated": "Data",
"updatedBy": "Atualizado por",
"version": "Versão"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Valores separados por vírgulas"
},
"datasource-options": {
"name-filter": "Filtro de nome",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Opções personalizadas",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Valores separados por vírgulas",
"selection-options": "Opções de seleção"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Painel de controlo guardado"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Mostrar utilizações"
},
"variable-values-preview": {
"preview-of-values": "Pré-visualização de valores",
"show-more": "Mostrar mais"
"show-more": "Mostrar mais",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+17 -4
View File
@@ -3791,7 +3791,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4454,6 +4453,7 @@
},
"no-properties-changed": "Нет изменений соответствующих свойств",
"table": {
"notes": "",
"updated": "Дата",
"updatedBy": "Обновлено",
"version": "Версия"
@@ -4912,7 +4912,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Значения, разделенные запятыми"
},
"datasource-options": {
"name-filter": "Фильтр по названию",
@@ -6010,6 +6011,9 @@
},
"custom-variable-form": {
"custom-options": "Пользовательские параметры",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Значения, разделенные запятыми",
"selection-options": "Параметры выбора"
},
@@ -6601,6 +6605,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Дашборд сохранен"
},
@@ -6624,6 +6633,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6683,8 +6693,11 @@
"tooltip-show-usages": "Показать варианты использования"
},
"variable-values-preview": {
"preview-of-values": "Просмотр значений",
"show-more": "Показать еще"
"show-more": "Показать еще",
"preview-of-values_one": "",
"preview-of-values_few": "",
"preview-of-values_many": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "Inga relevanta egenskaper har ändrats",
"table": {
"notes": "",
"updated": "Datum",
"updatedBy": "Uppdaterad per",
"version": "Version"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Värden åtskilda med kommatecken"
},
"datasource-options": {
"name-filter": "Namnfilter",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Anpassade alternativ",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Värden åtskilda med kommatecken",
"selection-options": "Urvalsalternativ"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Kontrollpanelen sparades"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Visa användningar"
},
"variable-values-preview": {
"preview-of-values": "Förhandsgranska värden",
"show-more": "Visa mer"
"show-more": "Visa mer",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+15 -4
View File
@@ -3759,7 +3759,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4416,6 +4415,7 @@
},
"no-properties-changed": "İlgili hiçbir özellik değiştirilmedi",
"table": {
"notes": "",
"updated": "Tarih",
"updatedBy": "Güncelleyen:",
"version": "Sürüm"
@@ -4874,7 +4874,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "Virgülle ayrılmış değerler"
},
"datasource-options": {
"name-filter": "Ad filtresi",
@@ -5968,6 +5969,9 @@
},
"custom-variable-form": {
"custom-options": "Özel seçenekler",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "Virgülle ayrılmış değerler",
"selection-options": "Seçim ayarları"
},
@@ -6555,6 +6559,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "Pano kaydedildi"
},
@@ -6578,6 +6587,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6637,8 +6647,9 @@
"tooltip-show-usages": "Kullanımları göster"
},
"variable-values-preview": {
"preview-of-values": "Değerlerin ön izlemesi",
"show-more": "Daha fazla göster"
"show-more": "Daha fazla göster",
"preview-of-values_one": "",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+14 -4
View File
@@ -3743,7 +3743,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4397,6 +4396,7 @@
},
"no-properties-changed": "没有相关属性更改",
"table": {
"notes": "",
"updated": "日期",
"updatedBy": "更新者",
"version": "版本"
@@ -4855,7 +4855,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "以逗号分隔的值"
},
"datasource-options": {
"name-filter": "名称筛选器",
@@ -5947,6 +5948,9 @@
},
"custom-variable-form": {
"custom-options": "自定义选项",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "以逗号分隔的值",
"selection-options": "选择内容选项"
},
@@ -6532,6 +6536,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "数据面板已保存"
},
@@ -6555,6 +6564,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6614,8 +6624,8 @@
"tooltip-show-usages": "显示使用情况"
},
"variable-values-preview": {
"preview-of-values": "值预览",
"show-more": "显示更多"
"show-more": "显示更多",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {
+14 -4
View File
@@ -3743,7 +3743,6 @@
},
"recently-viewed": {
"clear": "",
"empty": "",
"error": "",
"retry": "",
"title": ""
@@ -4397,6 +4396,7 @@
},
"no-properties-changed": "沒有相關的屬性變更",
"table": {
"notes": "",
"updated": "日期",
"updatedBy": "更新者",
"version": "版本"
@@ -4855,7 +4855,8 @@
"apply": "",
"change-value": "",
"discard": "",
"modal-title": ""
"modal-title": "",
"values": "以逗號分隔的值"
},
"datasource-options": {
"name-filter": "名稱篩選",
@@ -5947,6 +5948,9 @@
},
"custom-variable-form": {
"custom-options": "自訂選項",
"json-values-tooltip": "",
"name-csv-values": "",
"name-json-values": "",
"name-values-separated-comma": "以逗號分隔的值",
"selection-options": "選擇選項"
},
@@ -6532,6 +6536,11 @@
}
}
},
"use-modal-editor": {
"description": {
"change-variable-query": ""
}
},
"use-save-dashboard": {
"message-dashboard-saved": "儀表板已儲存"
},
@@ -6555,6 +6564,7 @@
"label": ""
},
"hidden": {
"description": "",
"label": ""
},
"hidden-label": {
@@ -6614,8 +6624,8 @@
"tooltip-show-usages": "顯示使用情況"
},
"variable-values-preview": {
"preview-of-values": "數值預覽",
"show-more": "顯示更多"
"show-more": "顯示更多",
"preview-of-values_other": ""
},
"version-history": {
"comparison": {