@gooddata/sdk-ui-metric-component 11.65.0-alpha.8 → 11.65.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/NOTICE +622 -2311
- package/esm/MaqlEditor/maql/formatter.d.ts.map +1 -1
- package/esm/MaqlEditor/maql/formatter.js +1 -1
- package/esm/MaqlEditor/maql/hooks/useAutocomplete.d.ts.map +1 -1
- package/esm/MaqlEditor/maql/hooks/useAutocomplete.js +1 -1
- package/esm/MaqlEditor/maql/hooks/useDecoration.d.ts.map +1 -1
- package/esm/MaqlEditor/maql/hooks/useDecoration.js +1 -1
- package/esm/MaqlEditor/maql/hooks/useHover.d.ts.map +1 -1
- package/esm/MaqlEditor/maql/hooks/useHover.js +1 -1
- package/esm/MaqlEditor/maql/hooks/useValidation.d.ts.map +1 -1
- package/esm/MaqlEditor/maql/hooks/useValidation.js +1 -1
- package/esm/MaqlEditor/maql/monacoConverter.d.ts +80 -0
- package/esm/MaqlEditor/maql/monacoConverter.d.ts.map +1 -0
- package/esm/MaqlEditor/maql/monacoConverter.js +528 -0
- package/esm/MaqlEditor/monaco/monacoWorkers.d.ts +41 -0
- package/esm/MaqlEditor/monaco/monacoWorkers.d.ts.map +1 -1
- package/esm/MaqlEditor/monaco/monacoWorkers.js +143 -30
- package/esm/translations/es-ES.json +7 -7
- package/esm/translations/fr-FR.json +30 -30
- package/package.json +23 -21
- package/worker/monaco-editor-worker.js +30 -0
- package/worker/monaco-editor-worker.source.js +1 -0
|
@@ -6,39 +6,152 @@
|
|
|
6
6
|
//
|
|
7
7
|
// new URL("../../common/services/editorWebWorkerMain.js", import.meta.url)
|
|
8
8
|
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// `data:` URI instead of emitting a bundled worker chunk. The worker then fails on its own first
|
|
13
|
-
// relative import, because a `data:` URL is not a hierarchical base to resolve against:
|
|
9
|
+
// Bundlers read a bare `new URL(..., import.meta.url)` (not wrapped in `new Worker(...)`) as a plain
|
|
10
|
+
// *asset* reference, so they copy or inline the untouched 544 B entry instead of bundling it. The
|
|
11
|
+
// worker then fails on its own first relative import:
|
|
14
12
|
//
|
|
15
13
|
// Failed to load worker script for label: editorWorkerService.
|
|
16
14
|
// TypeError: Failed to resolve module specifier "../../../base/common/worker/webWorkerBootstrap.js".
|
|
17
15
|
//
|
|
18
|
-
// The
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
16
|
+
// The fix is to hand Monaco a properly bundled worker. The build of this package bundles the entry
|
|
17
|
+
// with its whole dependency graph into the self-contained `worker/monaco-editor-worker.js` and wraps
|
|
18
|
+
// the same code into a string module (see the `build-worker` script). sdk-ui-geo ships its MapLibre
|
|
19
|
+
// worker the same way. Nothing here depends on a bundler feature, so the package works in any bundler
|
|
20
|
+
// and in the Vite dev server, which pre-bundles it from node_modules.
|
|
21
|
+
/**
|
|
22
|
+
* URL of the self-contained editor worker file that this package ships, relative to this module.
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* The relative path is the same from `src/MaqlEditor/monaco/` and from `esm/MaqlEditor/monaco/`, so
|
|
26
|
+
* it also holds when a dev server serves this package from its sources. webpack and Vite recognise
|
|
27
|
+
* the `new URL("...", import.meta.url)` pattern and emit the file as an asset. A pre-bundled
|
|
28
|
+
* dependency, other bundlers and a Module Federation remote on another origin leave a URL that does
|
|
29
|
+
* not exist or that the page cannot start a worker from. The URL must therefore be checked before
|
|
30
|
+
* the worker starts, see {@link resolveEditorWorkerUrl}.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export function getBundledEditorWorkerUrl() {
|
|
35
|
+
return new URL("../../../worker/monaco-editor-worker.js", import.meta.url).href;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* How long the check of the bundled worker file may take before the inline worker is used instead.
|
|
39
|
+
*/
|
|
40
|
+
const WORKER_FILE_CHECK_TIMEOUT_MS = 5000;
|
|
41
|
+
/**
|
|
42
|
+
* Tells whether the worker can start from the URL directly: the URL is a same-origin `http(s)` URL
|
|
43
|
+
* and the server has the file as JavaScript.
|
|
44
|
+
*
|
|
45
|
+
* @remarks
|
|
46
|
+
* A cross-origin URL is not used even when the file exists: the browser does not start a worker from
|
|
47
|
+
* another origin, which is the case of this editor loaded from a Module Federation remote. The same
|
|
48
|
+
* holds for a same-origin URL that redirects to another origin.
|
|
49
|
+
*
|
|
50
|
+
* The MIME type is checked because single-page application servers often answer a missing file with
|
|
51
|
+
* `index.html` and status 200, and browsers do not start a module worker from HTML.
|
|
52
|
+
*/
|
|
53
|
+
async function isReachableSameOriginScript(url) {
|
|
54
|
+
const pageOrigin = typeof location === "undefined" ? undefined : location.origin;
|
|
55
|
+
if (!pageOrigin) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
let parsed;
|
|
59
|
+
try {
|
|
60
|
+
parsed = new URL(url);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (!/^https?:$/.test(parsed.protocol) || parsed.origin !== pageOrigin) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const response = await fetch(url, {
|
|
70
|
+
method: "HEAD",
|
|
71
|
+
signal: AbortSignal.timeout(WORKER_FILE_CHECK_TIMEOUT_MS),
|
|
72
|
+
});
|
|
73
|
+
return (response.ok &&
|
|
74
|
+
(!response.url || new URL(response.url).origin === pageOrigin) &&
|
|
75
|
+
/^(text|application)\/(javascript|ecmascript)\b/.test(response.headers.get("content-type") ?? ""));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Makes a worker URL from the worker code this package ships inline. The Blob URL carries the origin
|
|
83
|
+
* of the page, so the worker starts from it on any page. The URL is never revoked: Monaco creates its
|
|
84
|
+
* worker lazily and the one Blob lives as long as the page.
|
|
85
|
+
*/
|
|
86
|
+
async function createInlineWorkerUrl() {
|
|
87
|
+
const { default: source } = await import("../../../worker/monaco-editor-worker.source.js");
|
|
88
|
+
return URL.createObjectURL(new Blob([source], { type: "text/javascript" }));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolves the URL the editor worker starts from: the bundled worker file when the bundler emitted
|
|
92
|
+
* it next to the page, the inline worker otherwise.
|
|
93
|
+
*
|
|
94
|
+
* @param assetUrl - URL of the bundled worker file, defaults to {@link getBundledEditorWorkerUrl}
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
export async function resolveEditorWorkerUrl(assetUrl = getBundledEditorWorkerUrl()) {
|
|
98
|
+
return (await isReachableSameOriginScript(assetUrl)) ? assetUrl : createInlineWorkerUrl();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Name of the Trusted Types policy that turns the worker URL into a `TrustedScriptURL`. A page whose
|
|
102
|
+
* content security policy lists the allowed policy names must allow this one.
|
|
103
|
+
*
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
export const EDITOR_WORKER_TRUSTED_TYPES_POLICY = "gdMetricEditorWorker";
|
|
107
|
+
/**
|
|
108
|
+
* Creates the Trusted Types policy for the worker URL the way Monaco creates its own: through the
|
|
109
|
+
* host's `MonacoEnvironment.createTrustedTypesPolicy` when it has one, through the browser otherwise.
|
|
110
|
+
* Without the policy, a page that enforces Trusted Types does not start a worker from a plain string.
|
|
111
|
+
* Monaco itself already uses the name `defaultWorkerFactory`, and a page that enforces Trusted Types
|
|
112
|
+
* may not allow a second policy of the same name.
|
|
113
|
+
*/
|
|
114
|
+
function createWorkerUrlPolicy() {
|
|
115
|
+
const options = { createScriptURL: (url) => url };
|
|
116
|
+
const environment = globalThis.MonacoEnvironment;
|
|
117
|
+
// The DOM typings of TypeScript do not declare Trusted Types; the browser API has the same shape.
|
|
118
|
+
const { trustedTypes } = globalThis;
|
|
119
|
+
try {
|
|
120
|
+
return environment?.createTrustedTypesPolicy
|
|
121
|
+
? environment.createTrustedTypesPolicy(EDITOR_WORKER_TRUSTED_TYPES_POLICY, options)
|
|
122
|
+
: trustedTypes?.createPolicy(EDITOR_WORKER_TRUSTED_TYPES_POLICY, options);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error("The Trusted Types policy of the metric editor worker cannot be created.", error);
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Creates the `MonacoEnvironment.getWorker` that starts the bundled editor worker.
|
|
131
|
+
*
|
|
132
|
+
* @remarks
|
|
133
|
+
* The worker URL and the Trusted Types policy are created once and shared by all workers, which is why
|
|
134
|
+
* the cache lives in the created function: tests create their own, the runtime uses one. A failed
|
|
135
|
+
* resolution is not cached, so the next worker tries again.
|
|
136
|
+
*
|
|
137
|
+
* @param resolveWorkerUrl - resolves the URL of the worker this package ships
|
|
138
|
+
* @internal
|
|
139
|
+
*/
|
|
140
|
+
export function createEditorWorkerFactory(resolveWorkerUrl = resolveEditorWorkerUrl) {
|
|
141
|
+
let resolvedWorkerUrl;
|
|
142
|
+
let workerUrlPolicy;
|
|
143
|
+
return async (_workerId, label) => {
|
|
144
|
+
resolvedWorkerUrl ??= resolveWorkerUrl().catch((error) => {
|
|
145
|
+
resolvedWorkerUrl = undefined;
|
|
146
|
+
throw error;
|
|
147
|
+
});
|
|
148
|
+
const workerUrl = await resolvedWorkerUrl;
|
|
149
|
+
workerUrlPolicy ??= { value: createWorkerUrlPolicy() };
|
|
150
|
+
const scriptUrl = workerUrlPolicy.value?.createScriptURL?.(workerUrl) ?? workerUrl;
|
|
151
|
+
return new Worker(scriptUrl, { type: "module", name: label });
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const getEditorWorker = createEditorWorkerFactory();
|
|
42
155
|
/**
|
|
43
156
|
* Point Monaco at the bundled `editorWorkerService` worker.
|
|
44
157
|
*
|
|
@@ -55,7 +168,7 @@ export function setupMonacoWorkers() {
|
|
|
55
168
|
}
|
|
56
169
|
globalThis.MonacoEnvironment = {
|
|
57
170
|
...globalThis.MonacoEnvironment,
|
|
58
|
-
|
|
171
|
+
getWorker: getEditorWorker,
|
|
59
172
|
};
|
|
60
173
|
}
|
|
61
174
|
// Run on import, so the environment is in place before any Monaco module can ask for the worker —
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"metricComponent.editMetric.runBubble.disabled": "La definición de la métrica está incompleta o no es válida.",
|
|
19
19
|
"metricComponent.editMetric.decoratorsShow": "Mostrar nombres",
|
|
20
20
|
"metricComponent.editMetric.decoratorsHide": "Ocultar nombres",
|
|
21
|
-
"metricComponent.editMetric.descriptionPlaceholder": "Añada una descripción aqu
|
|
22
|
-
"metricComponent.editMetric.placeholder": "Comience a escribir <placeholder>SELECT</placeholder> o abra el código completo (CTRL+space or CTRL+I)
|
|
23
|
-
"metricComponent.editMetric.placeholderMac": "Comience a escribir <placeholder>SELECT</placeholder> o abra el código completo (⌃+space or ⌘+I)
|
|
21
|
+
"metricComponent.editMetric.descriptionPlaceholder": "Añada una descripción aquí…",
|
|
22
|
+
"metricComponent.editMetric.placeholder": "Comience a escribir <placeholder>SELECT</placeholder> o abra el código completo (CTRL+space or CTRL+I)…",
|
|
23
|
+
"metricComponent.editMetric.placeholderMac": "Comience a escribir <placeholder>SELECT</placeholder> o abra el código completo (⌃+space or ⌘+I)…",
|
|
24
24
|
"metricComponent.editMetric.placeholder.readOnly": "Esta expresión MAQL está vacía",
|
|
25
25
|
"metricComponent.editMetric.helpText": "¿Cómo crear métricas?",
|
|
26
26
|
"metricComponent.editMetric.cancel": "Cancelar",
|
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
"metricComponent.editMetric.metric.result.context.displayTop": "Arriba",
|
|
56
56
|
"metricComponent.editMetric.metric.result.context.displayBottom": "Abajo",
|
|
57
57
|
"metricComponent.editMetric.metric.result": "Resultado",
|
|
58
|
-
"metricComponent.editMetric.metric.result.tooltip": "La métrica devuelve un número y puede reutilizarse cuando se combina con atributos y filtros para crear un informe. Añada
|
|
59
|
-
"metricComponent.editMetric.metric.result.computing": "Calculando
|
|
58
|
+
"metricComponent.editMetric.metric.result.tooltip": "La métrica devuelve un número y puede reutilizarse cuando se combina con atributos y filtros para crear un informe. Añada «Ver por» para crear un informe de vista previa.",
|
|
59
|
+
"metricComponent.editMetric.metric.result.computing": "Calculando…",
|
|
60
60
|
"metricComponent.editMetric.metric.result.error.title": "No se ha podido calcular el resultado",
|
|
61
61
|
"metricComponent.editMetric.metric.result.error": "No se puede calcular el resultado porque la definición de la métrica está incompleta o no es válida.",
|
|
62
|
-
"metricComponent.editMetric.metric.context.search": "Buscar
|
|
62
|
+
"metricComponent.editMetric.metric.context.search": "Buscar…",
|
|
63
63
|
"metricComponent.editMetric.metric.context.cancel": "Cancelar",
|
|
64
64
|
"metricComponent.editMetric.metric.context.apply": "Aplicar",
|
|
65
65
|
"metricComponent.editMetric.metric.sql": "SQL",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"metricComponent.objectUsage.usedIn.titleTooltip": "Esta lista solo incluye los objetos del espacio de trabajo actual que utiliza la métrica.",
|
|
84
84
|
"metricComponent.editMetricForm.idInvalid": "Este ID no es válido.",
|
|
85
85
|
"metricComponent.editMetricForm.idExists": "Este ID ya existe.",
|
|
86
|
-
"metricComponent.editMetricForm.idMatchParentPrefixName": "Este ID comienza con algún prefijo de espacio de trabajo principal
|
|
86
|
+
"metricComponent.editMetricForm.idMatchParentPrefixName": "Este ID comienza con algún prefijo de espacio de trabajo principal «{conflict}» y no se puede utilizar.",
|
|
87
87
|
"metricComponent.editMetricForm.titleEmpty": "Nombre obligatorio.",
|
|
88
88
|
"metricComponent.editMetricForm.titleExists": "Este nombre ya existe.",
|
|
89
89
|
"metricComponent.editMetricForm.expressionEmpty": "La expresión MAQL está vacía.",
|
|
@@ -2,27 +2,27 @@
|
|
|
2
2
|
"metricEditor.status.lotsOfItemsInSuggestionResults": "Seules les 100 premières valeurs correspondantes sont affichées",
|
|
3
3
|
"metricComponent.deleteMetricConfirmDialog.cancel": "Annuler",
|
|
4
4
|
"metricComponent.deleteMetricConfirmDialog.delete": "Supprimer",
|
|
5
|
-
"metricComponent.deleteMetricConfirmDialog.headline": "Supprimer la métrique
|
|
5
|
+
"metricComponent.deleteMetricConfirmDialog.headline": "Supprimer la métrique ?",
|
|
6
6
|
"metricComponent.deleteMetricConfirmDialog.content.line1": "La métrique sera retirée de la liste.",
|
|
7
7
|
"metricComponent.deleteMetricConfirmDialog.content.line2": "Les tableaux de bord, les visualisations et les autres métriques qui utilisent cette métrique deviendront inaccessibles.",
|
|
8
8
|
"metricComponent.createMetric.title": "Créer une métrique",
|
|
9
9
|
"metricComponent.editMetric.autoFormat": "Format automatique",
|
|
10
|
-
"metricComponent.editMetric.autoFormatBubble": "Formater l
|
|
11
|
-
"metricComponent.editMetric.autoFormatBubbleMac": "Formater l
|
|
10
|
+
"metricComponent.editMetric.autoFormatBubble": "Formater l’expression métrique (Maj+CTRL+I)",
|
|
11
|
+
"metricComponent.editMetric.autoFormatBubbleMac": "Formater l’expression métrique (⇧+⌥+F)",
|
|
12
12
|
"metricComponent.editMetric.sql": "Afficher SQL",
|
|
13
13
|
"metricComponent.editMetric.sql.disabled": "La définition de la métrique est incomplète ou non valide.",
|
|
14
14
|
"metricComponent.editMetric.run": "Exécuter",
|
|
15
|
-
"metricComponent.editMetric.run.success": "Le calcul du résultat est en cours. En cas d
|
|
16
|
-
"metricComponent.editMetric.runBubble": "Exécuter l
|
|
17
|
-
"metricComponent.editMetric.runBubbleMac": "Exécuter l
|
|
15
|
+
"metricComponent.editMetric.run.success": "Le calcul du résultat est en cours. En cas d’absence de modification, le résultat sera le même.",
|
|
16
|
+
"metricComponent.editMetric.runBubble": "Exécuter l’aperçu de la métrique (CTRL+R)",
|
|
17
|
+
"metricComponent.editMetric.runBubbleMac": "Exécuter l’aperçu de la métrique (⌥+R)",
|
|
18
18
|
"metricComponent.editMetric.runBubble.disabled": "La définition de la métrique est incomplète ou non valide.",
|
|
19
19
|
"metricComponent.editMetric.decoratorsShow": "Afficher les noms",
|
|
20
20
|
"metricComponent.editMetric.decoratorsHide": "Masquer les noms",
|
|
21
|
-
"metricComponent.editMetric.descriptionPlaceholder": "Ajoutez une description ici
|
|
22
|
-
"metricComponent.editMetric.placeholder": "Commencez par saisir <placeholder>SELECT</placeholder> ou ouvrez la complétion de code (CTRL+espace ou CTRL+I)
|
|
21
|
+
"metricComponent.editMetric.descriptionPlaceholder": "Ajoutez une description ici…",
|
|
22
|
+
"metricComponent.editMetric.placeholder": "Commencez par saisir <placeholder>SELECT</placeholder> ou ouvrez la complétion de code (CTRL+espace ou CTRL+I)…",
|
|
23
23
|
"metricComponent.editMetric.placeholderMac": "Commencez par saisir <placeholder>SELECT</placeholder> ou ouvrez la complétion de code (⌃+espace ou ⌘+I)…",
|
|
24
24
|
"metricComponent.editMetric.placeholder.readOnly": "Cette expression MAQL est vide",
|
|
25
|
-
"metricComponent.editMetric.helpText": "Comment créer des métriques
|
|
25
|
+
"metricComponent.editMetric.helpText": "Comment créer des métriques ?",
|
|
26
26
|
"metricComponent.editMetric.cancel": "Annuler",
|
|
27
27
|
"metricComponent.editMetric.close": "Fermer",
|
|
28
28
|
"metricComponent.editMetric.delete": "Supprimer",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"metricComponent.editMetric.id.ariaLabel": "ID de métrique",
|
|
42
42
|
"metricComponent.editMetric.saveAsNew": "Enregistrer sous un nouveau nom",
|
|
43
43
|
"loading": "Chargement en cours…",
|
|
44
|
-
"metricComponent.editMetric.protectedMetric": "Vous ne pouvez pas modifier ou supprimer cette métrique car elle a été créée dans l
|
|
44
|
+
"metricComponent.editMetric.protectedMetric": "Vous ne pouvez pas modifier ou supprimer cette métrique car elle a été créée dans l’espace de travail parent. Pour modifier ou supprimer cette métrique, faites-le dans l’espace de travail parent.",
|
|
45
45
|
"metricComponent.editMetric.hover.more": "Plus",
|
|
46
46
|
"metricComponent.editMetric.hover.less": "Moins",
|
|
47
47
|
"metricComponent.editMetric.metric.definition": "Définition de métrique",
|
|
@@ -51,59 +51,59 @@
|
|
|
51
51
|
"metricComponent.editMetric.metric.result.context.displayTitle": "Afficher",
|
|
52
52
|
"metricComponent.editMetric.metric.result.context.display": "{ranking} {limit} lignes",
|
|
53
53
|
"metricComponent.editMetric.metric.result.context.displayRows": "lignes",
|
|
54
|
-
"metricComponent.editMetric.metric.result.context.display.explain": "d
|
|
54
|
+
"metricComponent.editMetric.metric.result.context.display.explain": "d’après cette valeur de métrique",
|
|
55
55
|
"metricComponent.editMetric.metric.result.context.displayTop": "Haut",
|
|
56
56
|
"metricComponent.editMetric.metric.result.context.displayBottom": "Bas",
|
|
57
57
|
"metricComponent.editMetric.metric.result": "Résultat",
|
|
58
|
-
"metricComponent.editMetric.metric.result.tooltip": "Une métrique renvoie un nombre et peut être réutilisée en étant combinée à des attributs et filtres pour créer un rapport. Ajoutez «
|
|
59
|
-
"metricComponent.editMetric.metric.result.computing": "Calcul en cours
|
|
58
|
+
"metricComponent.editMetric.metric.result.tooltip": "Une métrique renvoie un nombre et peut être réutilisée en étant combinée à des attributs et filtres pour créer un rapport. Ajoutez « Afficher par » pour créer un rapport d’aperçu.",
|
|
59
|
+
"metricComponent.editMetric.metric.result.computing": "Calcul en cours…",
|
|
60
60
|
"metricComponent.editMetric.metric.result.error.title": "Calcul du résultat impossible",
|
|
61
61
|
"metricComponent.editMetric.metric.result.error": "Impossible de calculer le résultat, car la définition de la métrique est incomplète ou non valide.",
|
|
62
|
-
"metricComponent.editMetric.metric.context.search": "Recherche
|
|
62
|
+
"metricComponent.editMetric.metric.context.search": "Recherche…",
|
|
63
63
|
"metricComponent.editMetric.metric.context.cancel": "Annuler",
|
|
64
64
|
"metricComponent.editMetric.metric.context.apply": "Appliquer",
|
|
65
65
|
"metricComponent.editMetric.metric.sql": "SQL",
|
|
66
|
-
"metricComponent.editMetric.metric.sql.tooltip": "La définition de la métrique est transformée en SQL avant l
|
|
66
|
+
"metricComponent.editMetric.metric.sql.tooltip": "La définition de la métrique est transformée en SQL avant l’exécution.",
|
|
67
67
|
"metricComponent.editMetric.metric.sql.close": "Fermer",
|
|
68
68
|
"metricComponent.editMetric.metric.sql.copy_to_clipboard": "Copier dans le presse-papiers",
|
|
69
69
|
"metricComponent.editMetric.metric.sql.copy_to_clipboard.ok": "SQL copié dans le presse-papiers du système.",
|
|
70
70
|
"metricComponent.editMetric.metric.sql.copy_to_clipboard.error": "Échec de la copie du SQL dans le presse-papiers du système. Effectuez une copie manuelle.",
|
|
71
|
-
"metricComponent.editMetric.metric.sql.error": "Impossible de créer l
|
|
71
|
+
"metricComponent.editMetric.metric.sql.error": "Impossible de créer l’instruction SQL, car la définition de la métrique est incomplète ou non valide.",
|
|
72
72
|
"metricComponent.numberFormat.label": "Format numérique",
|
|
73
73
|
"metricComponent.metricType.label": "Type",
|
|
74
74
|
"metricComponent.tags.label": "Balises",
|
|
75
75
|
"metricComponent.metricType.unspecified": "Non spécifié",
|
|
76
76
|
"metricComponent.metricType.currency": "Devise",
|
|
77
|
-
"metricComponent.objectUsage.usedIn": "utilisée dans
|
|
77
|
+
"metricComponent.objectUsage.usedIn": "utilisée dans :",
|
|
78
78
|
"metricComponent.objectUsage.metricsCount": "{count, plural, one {# métrique} other {# métriques}}",
|
|
79
79
|
"metricComponent.objectUsage.metrics": "Métriques",
|
|
80
80
|
"metricComponent.objectUsage.insightsCount": "{count, plural, one {# visualisation} other {# visualisations}}",
|
|
81
81
|
"metricComponent.objectUsage.insights": "Visualisations",
|
|
82
82
|
"metricComponent.objectUsage.usedIn.title": "Métrique utilisée dans",
|
|
83
|
-
"metricComponent.objectUsage.usedIn.titleTooltip": "Cette liste comporte uniquement des objets de l
|
|
84
|
-
"metricComponent.editMetricForm.idInvalid": "Cet ID n
|
|
83
|
+
"metricComponent.objectUsage.usedIn.titleTooltip": "Cette liste comporte uniquement des objets de l’espace de travail actuel qui utilisent la métrique.",
|
|
84
|
+
"metricComponent.editMetricForm.idInvalid": "Cet ID n’est pas valide.",
|
|
85
85
|
"metricComponent.editMetricForm.idExists": "Cet ID existe déjà.",
|
|
86
|
-
"metricComponent.editMetricForm.idMatchParentPrefixName": "Cet ID commence par un préfixe d
|
|
86
|
+
"metricComponent.editMetricForm.idMatchParentPrefixName": "Cet ID commence par un préfixe d’espace de travail parent « {conflict} » et ne peut pas être utilisé.",
|
|
87
87
|
"metricComponent.editMetricForm.titleEmpty": "Le nom est obligatoire.",
|
|
88
88
|
"metricComponent.editMetricForm.titleExists": "Ce nom existe déjà.",
|
|
89
|
-
"metricComponent.editMetricForm.expressionEmpty": "L
|
|
90
|
-
"metricComponent.editMetricForm.expressionInvalid": "L
|
|
89
|
+
"metricComponent.editMetricForm.expressionEmpty": "L’expression MAQL est vide.",
|
|
90
|
+
"metricComponent.editMetricForm.expressionInvalid": "L’expression MAQL n’est pas valide.",
|
|
91
91
|
"metricComponent.editMetricForm.formatNotCurrency": "Le format doit être un format de devise lorsque le type de métrique est Devise.",
|
|
92
|
-
"metricComponent.editMetricForm.metricTypeNotCurrency": "Le type de métrique doit être Devise lors de l
|
|
92
|
+
"metricComponent.editMetricForm.metricTypeNotCurrency": "Le type de métrique doit être Devise lors de l’utilisation d’un format de devise.",
|
|
93
93
|
"metricComponent.editMetricForm.formatRequiredForCurrency": "Le format est requis pour le type de métrique Devise. Un format vide ne peut pas être utilisé pour les métriques en devise.",
|
|
94
94
|
"metricComponent.editMetricForm.namePlaceholder": "Métrique sans titre",
|
|
95
95
|
"metricComponent.editMetricForm.errorsOnSave.start": "Impossible d'{save} car la métrique contient",
|
|
96
96
|
"metricComponent.editMetricForm.errorsOnSave.count": "{count, plural, one {# erreur} other {# erreurs}}",
|
|
97
97
|
"metricComponent.editMetricForm.errorsOnSave.empty": "Impossible d'{save} une métrique vide.",
|
|
98
|
-
"metricComponent.idChangeConfirmDialog.headline": "Changer l
|
|
99
|
-
"metricComponent.idChangeConfirmDialog.headlineOverwrite": "Remplacer la métrique dans un espace de travail enfant
|
|
100
|
-
"metricComponent.idChangeConfirmDialog.changeTitle": "D
|
|
101
|
-
"metricComponent.idChangeConfirmDialog.change": "Si vous enregistrez cette métrique sous un nouvel ID, les autres métriques, visualisations, et tableaux de bord qui référencent cette métrique avec l
|
|
102
|
-
"metricComponent.idChangeConfirmDialog.conflictsTitle": "La métrique de l
|
|
98
|
+
"metricComponent.idChangeConfirmDialog.headline": "Changer l’ID de métrique ?",
|
|
99
|
+
"metricComponent.idChangeConfirmDialog.headlineOverwrite": "Remplacer la métrique dans un espace de travail enfant ?",
|
|
100
|
+
"metricComponent.idChangeConfirmDialog.changeTitle": "D’autres objets analytiques vont devenir inaccessibles",
|
|
101
|
+
"metricComponent.idChangeConfirmDialog.change": "Si vous enregistrez cette métrique sous un nouvel ID, les autres métriques, visualisations, et tableaux de bord qui référencent cette métrique avec l’ID original <b>{metricId}</b> deviendront inaccessibles.",
|
|
102
|
+
"metricComponent.idChangeConfirmDialog.conflictsTitle": "La métrique de l’espace de travail enfant va être remplacée",
|
|
103
103
|
"metricComponent.idChangeConfirmDialog.conflicts": "Si vous enregistrez cette métrique, une autre métrique avec le même ID <b>{metricId}</b> dans un espace de travail enfant sera remplacée. Les métriques remplacées ne peuvent pas être restaurées.",
|
|
104
104
|
"metricComponent.idChangeConfirmDialog.conflicts.footer": "Créez un autre ID de métrique pour éviter les remplacements.",
|
|
105
105
|
"metricComponent.idChangeConfirmDialog.generated": "Créer un autre ID et enregistrer",
|
|
106
|
-
"metricComponent.idChangeConfirmDialog.keep": "Conserver l
|
|
106
|
+
"metricComponent.idChangeConfirmDialog.keep": "Conserver l’ID d’origine et enregistrer",
|
|
107
107
|
"metricComponent.idChangeConfirmDialog.submitChange": "Changer et enregistrer",
|
|
108
108
|
"metricComponent.idChangeConfirmDialog.submitOverwrite": "Remplacer et enregistrer",
|
|
109
109
|
"metricComponent.unsavedChangesConfirmDialog.metric.headline": "Les modifications de la métrique ne sont pas enregistrées",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"metricComponent.unsavedChangesConfirmDialog.submit": "Enregistrer",
|
|
115
115
|
"metricComponent.unsavedChangesConfirmDialog.submitAsNew": "Enregistrer sous un nouveau nom",
|
|
116
116
|
"metricComponent.unsavedChangesConfirmDialog.submitAll": "Tout enregistrer",
|
|
117
|
-
"metricComponent.minimize.editing": "Modification
|
|
117
|
+
"metricComponent.minimize.editing": "Modification :",
|
|
118
118
|
"metricComponent.minimize.viewing": "Visualisation",
|
|
119
119
|
"metricComponent.minimize.metrics": "{edited, plural, one {# métrique} other {# métriques}}",
|
|
120
120
|
"metricComponent.tags.manager.label.more": "Plus de balises",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-metric-component",
|
|
3
|
-
"version": "11.65.0
|
|
3
|
+
"version": "11.65.0",
|
|
4
4
|
"license": "LicenseRef-LICENSE",
|
|
5
5
|
"author": "GoodData Corporation",
|
|
6
6
|
"repository": {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"esm",
|
|
13
|
+
"worker/*.js",
|
|
13
14
|
"NOTICE"
|
|
14
15
|
],
|
|
15
16
|
"type": "module",
|
|
@@ -23,8 +24,8 @@
|
|
|
23
24
|
"dependencies": {
|
|
24
25
|
"@emotion/react": "11.14.0",
|
|
25
26
|
"classnames": "2.5.1",
|
|
27
|
+
"lodash-es": "^4.17.23",
|
|
26
28
|
"monaco-editor": "0.56.0",
|
|
27
|
-
"monaco-languageclient": "2.1.0",
|
|
28
29
|
"react-intl": "10.1.25",
|
|
29
30
|
"sql-formatter": "12.2.4",
|
|
30
31
|
"tss-react": "4.9.19",
|
|
@@ -32,17 +33,17 @@
|
|
|
32
33
|
"vscode-languageserver-textdocument": "1.0.12",
|
|
33
34
|
"vscode-languageserver-types": "3.17.5",
|
|
34
35
|
"yup": "0.32.11",
|
|
35
|
-
"@gooddata/api-client-tiger": "11.65.0
|
|
36
|
-
"@gooddata/sdk-backend-
|
|
37
|
-
"@gooddata/sdk-backend-
|
|
38
|
-
"@gooddata/sdk-
|
|
39
|
-
"@gooddata/sdk-
|
|
40
|
-
"@gooddata/sdk-ui": "11.65.0
|
|
41
|
-
"@gooddata/sdk-ui-
|
|
42
|
-
"@gooddata/sdk-ui-
|
|
43
|
-
"@gooddata/sdk-ui-kit": "11.65.0
|
|
44
|
-
"@gooddata/util": "11.65.0
|
|
45
|
-
"@gooddata/sdk-ui-
|
|
36
|
+
"@gooddata/api-client-tiger": "11.65.0",
|
|
37
|
+
"@gooddata/sdk-backend-spi": "11.65.0",
|
|
38
|
+
"@gooddata/sdk-backend-tiger": "11.65.0",
|
|
39
|
+
"@gooddata/sdk-maql-language-server": "11.65.0",
|
|
40
|
+
"@gooddata/sdk-model": "11.65.0",
|
|
41
|
+
"@gooddata/sdk-ui": "11.65.0",
|
|
42
|
+
"@gooddata/sdk-ui-charts": "11.65.0",
|
|
43
|
+
"@gooddata/sdk-ui-ext": "11.65.0",
|
|
44
|
+
"@gooddata/sdk-ui-kit": "11.65.0",
|
|
45
|
+
"@gooddata/util": "11.65.0",
|
|
46
|
+
"@gooddata/sdk-ui-pivot": "11.65.0"
|
|
46
47
|
},
|
|
47
48
|
"devDependencies": {
|
|
48
49
|
"@microsoft/api-documenter": "7.30.16",
|
|
@@ -67,7 +68,6 @@
|
|
|
67
68
|
"eslint-plugin-tsdoc": "0.2.14",
|
|
68
69
|
"happy-dom": "20.12.0",
|
|
69
70
|
"jiti": "2.6.1",
|
|
70
|
-
"lodash-es": "^4.17.23",
|
|
71
71
|
"npm-run-all": "4.1.5",
|
|
72
72
|
"oxfmt": "0.68.0",
|
|
73
73
|
"oxlint": "1.83.0",
|
|
@@ -75,13 +75,14 @@
|
|
|
75
75
|
"oxlint-tsgolint": "7.0.2001",
|
|
76
76
|
"react": "19.1.1",
|
|
77
77
|
"react-dom": "19.1.1",
|
|
78
|
+
"rolldown": "1.0.3",
|
|
78
79
|
"typescript": "7.0.2",
|
|
79
80
|
"vitest": "5.0.4",
|
|
80
|
-
"@gooddata/eslint-config": "11.65.0
|
|
81
|
-
"@gooddata/i18n-toolkit": "11.65.0
|
|
82
|
-
"@gooddata/oxlint-config": "11.65.0
|
|
83
|
-
"@gooddata/sdk-
|
|
84
|
-
"@gooddata/sdk-
|
|
81
|
+
"@gooddata/eslint-config": "11.65.0",
|
|
82
|
+
"@gooddata/i18n-toolkit": "11.65.0",
|
|
83
|
+
"@gooddata/oxlint-config": "11.65.0",
|
|
84
|
+
"@gooddata/sdk-ui-theme-provider": "11.65.0",
|
|
85
|
+
"@gooddata/sdk-backend-base": "11.65.0"
|
|
85
86
|
},
|
|
86
87
|
"peerDependencies": {
|
|
87
88
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -92,10 +93,11 @@
|
|
|
92
93
|
"_phase:test": "npm run test-once",
|
|
93
94
|
"_phase:validate": "npm run validate",
|
|
94
95
|
"api-extractor": "mkdir -p api && [ -z \"${CI}\" ] && (api-extractor run -l) || (api-extractor run)",
|
|
95
|
-
"build": "npm-run-all -p build-check build-ts && npm run api-extractor",
|
|
96
|
+
"build": "npm run build-worker && npm-run-all -p build-check build-ts && npm run api-extractor",
|
|
96
97
|
"build-check": "tsc",
|
|
97
98
|
"build-ts": "tsc -p tsconfig.build.json",
|
|
98
|
-
"
|
|
99
|
+
"build-worker": "rolldown node_modules/monaco-editor/esm/vs/editor/common/services/editorWebWorkerMain.js --format esm --platform browser --minify --file worker/monaco-editor-worker.js && node scripts/buildWorkerSource.js worker/monaco-editor-worker.js worker/monaco-editor-worker.source.js",
|
|
100
|
+
"clean": "../../common/scripts/clean-command-state.sh && rm -rf dist worker *.log",
|
|
99
101
|
"format-check": "oxfmt --check .",
|
|
100
102
|
"format-write": "oxfmt .",
|
|
101
103
|
"lint": "oxlint . --quiet && eslint .",
|