@gooddata/sdk-ui-gen-ai 11.50.0-alpha.2 → 11.50.0-alpha.3
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/esm/components/completion/plugins/reference-placeholder.d.ts +21 -0
- package/esm/components/completion/plugins/reference-placeholder.d.ts.map +1 -0
- package/esm/components/completion/plugins/reference-placeholder.js +33 -0
- package/esm/components/completion/plugins/rehype-references.d.ts +5 -1
- package/esm/components/completion/plugins/rehype-references.d.ts.map +1 -1
- package/esm/components/completion/plugins/rehype-references.js +40 -18
- package/esm/components/completion/plugins/remark-references.d.ts.map +1 -1
- package/esm/components/completion/plugins/remark-references.js +2 -5
- package/esm/components/completion/utils.d.ts +1 -1
- package/esm/components/completion/utils.d.ts.map +1 -1
- package/esm/components/completion/utils.js +1 -4
- package/esm/components/customized/LandingScreen.js +1 -1
- package/esm/components/messages/contents/Markdown.d.ts.map +1 -1
- package/esm/components/messages/contents/Markdown.js +4 -1
- package/esm/components/messages/conversationContents/ConversationVisualizationContent.d.ts +0 -1
- package/esm/components/messages/conversationContents/ConversationVisualizationContent.d.ts.map +1 -1
- package/esm/components/messages/conversationContents/SaveVisualizationDialog.d.ts +0 -1
- package/esm/components/messages/conversationContents/SaveVisualizationDialog.d.ts.map +1 -1
- package/esm/store/sideEffects/onChatOpenSync.d.ts.map +1 -1
- package/esm/store/sideEffects/onChatOpenSync.js +14 -4
- package/esm/store/sideEffects/onVisualizationSave.d.ts +0 -1
- package/esm/store/sideEffects/onVisualizationSave.d.ts.map +1 -1
- package/package.json +20 -20
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const PLACEHOLDER_START = "\uE000";
|
|
2
|
+
export interface IExtractedReferences {
|
|
3
|
+
/** Original text with every `{type/id}` token replaced by a placeholder. */
|
|
4
|
+
text: string;
|
|
5
|
+
/** Original `{type/id}` tokens, indexed by the number embedded in their placeholder. */
|
|
6
|
+
tokens: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* `split`'s capture group wraps the whole placeholder, for use with `String.split`
|
|
10
|
+
* so the placeholder survives as its own array entry. The default form's capture
|
|
11
|
+
* group is just the numeric index, for an `exec()` loop that resolves it against
|
|
12
|
+
* `tokens`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getPlaceholderRegex(split?: boolean): RegExp;
|
|
15
|
+
/**
|
|
16
|
+
* Replaces `{type/id}` reference tokens with placeholders before Markdown parsing.
|
|
17
|
+
* CommonMark's emphasis rule treats `_word_`-shaped substrings inside an id as
|
|
18
|
+
* legal italic markup and strips the underscores — extracting first avoids that.
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractReferences(text: string): IExtractedReferences;
|
|
21
|
+
//# sourceMappingURL=reference-placeholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-placeholder.d.ts","sourceRoot":"","sources":["../../../../src/components/completion/plugins/reference-placeholder.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAG1C,MAAM,WAAW,oBAAoB;IACjC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAK3D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAQpE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { getReferenceRegex } from "../utils.js";
|
|
3
|
+
// Private-use-area sentinels: never produced by normal chat text, and contain
|
|
4
|
+
// none of the characters (`_`, `*`, backtick, ...) CommonMark treats as inline
|
|
5
|
+
// syntax, so a placeholder can never be mis-tokenized as Markdown.
|
|
6
|
+
export const PLACEHOLDER_START = "\ue000";
|
|
7
|
+
const PLACEHOLDER_END = "\ue001";
|
|
8
|
+
/**
|
|
9
|
+
* `split`'s capture group wraps the whole placeholder, for use with `String.split`
|
|
10
|
+
* so the placeholder survives as its own array entry. The default form's capture
|
|
11
|
+
* group is just the numeric index, for an `exec()` loop that resolves it against
|
|
12
|
+
* `tokens`.
|
|
13
|
+
*/
|
|
14
|
+
export function getPlaceholderRegex(split) {
|
|
15
|
+
if (split) {
|
|
16
|
+
return new RegExp(`(${PLACEHOLDER_START}\\d+${PLACEHOLDER_END})`, "g");
|
|
17
|
+
}
|
|
18
|
+
return new RegExp(`${PLACEHOLDER_START}(\\d+)${PLACEHOLDER_END}`, "g");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Replaces `{type/id}` reference tokens with placeholders before Markdown parsing.
|
|
22
|
+
* CommonMark's emphasis rule treats `_word_`-shaped substrings inside an id as
|
|
23
|
+
* legal italic markup and strips the underscores — extracting first avoids that.
|
|
24
|
+
*/
|
|
25
|
+
export function extractReferences(text) {
|
|
26
|
+
const tokens = [];
|
|
27
|
+
const replacedText = text.replace(getReferenceRegex(), (match) => {
|
|
28
|
+
const index = tokens.length;
|
|
29
|
+
tokens.push(match);
|
|
30
|
+
return `${PLACEHOLDER_START}${index}${PLACEHOLDER_END}`;
|
|
31
|
+
});
|
|
32
|
+
return { text: replacedText, tokens };
|
|
33
|
+
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { type Root } from "mdast";
|
|
2
2
|
import { type TextContentObject } from "../../../model.js";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* `tokens` must be the `tokens` array `extractReferences()` returned for the same
|
|
5
|
+
* Markdown text — placeholders are resolved by looking up their embedded index in it.
|
|
6
|
+
*/
|
|
7
|
+
export declare function rehypeReferences(references: TextContentObject[], tokens: string[]): () => (tree: Root) => Root;
|
|
4
8
|
//# sourceMappingURL=rehype-references.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehype-references.d.ts","sourceRoot":"","sources":["../../../../src/components/completion/plugins/rehype-references.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK3D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"rehype-references.d.ts","sourceRoot":"","sources":["../../../../src/components/completion/plugins/rehype-references.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK3D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,8BAyCjF"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
// (C) 2022-2026 GoodData Corporation
|
|
2
2
|
import cx from "classnames";
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { PLACEHOLDER_START, getPlaceholderRegex } from "./reference-placeholder.js";
|
|
4
|
+
/**
|
|
5
|
+
* `tokens` must be the `tokens` array `extractReferences()` returned for the same
|
|
6
|
+
* Markdown text — placeholders are resolved by looking up their embedded index in it.
|
|
7
|
+
*/
|
|
8
|
+
export function rehypeReferences(references, tokens) {
|
|
5
9
|
return function () {
|
|
6
10
|
return function (tree) {
|
|
7
|
-
iterateTree(tree, references, {
|
|
11
|
+
iterateTree(tree, references, tokens, {
|
|
8
12
|
onTextNodeReference: (text, obj) => {
|
|
9
13
|
return [
|
|
10
14
|
{
|
|
@@ -43,35 +47,53 @@ export function rehypeReferences(references) {
|
|
|
43
47
|
};
|
|
44
48
|
};
|
|
45
49
|
}
|
|
46
|
-
function iterateTree(node, references, callbacks) {
|
|
47
|
-
//Text type
|
|
50
|
+
function iterateTree(node, references, tokens, callbacks) {
|
|
48
51
|
if (node.type === "text") {
|
|
49
|
-
const
|
|
52
|
+
const value = node.value;
|
|
53
|
+
if (!value.includes(PLACEHOLDER_START)) {
|
|
54
|
+
return [node];
|
|
55
|
+
}
|
|
56
|
+
const res = iterateReferenceMatch(value, references, tokens, (ref) => {
|
|
50
57
|
return callbacks.onTextNodeReference(node, ref);
|
|
51
58
|
});
|
|
52
|
-
|
|
59
|
+
if (res.length) {
|
|
60
|
+
return res;
|
|
61
|
+
}
|
|
62
|
+
node.value = restoreUnresolvedPlaceholders(value, tokens);
|
|
63
|
+
return [node];
|
|
53
64
|
}
|
|
54
65
|
if (node.children) {
|
|
55
|
-
// has children
|
|
56
66
|
node.children = node.children.reduce((acc, child) => {
|
|
57
|
-
return [...acc, ...iterateTree(child, references, callbacks)];
|
|
67
|
+
return [...acc, ...iterateTree(child, references, tokens, callbacks)];
|
|
58
68
|
}, []);
|
|
59
69
|
return [node];
|
|
60
70
|
}
|
|
61
|
-
// no children
|
|
62
71
|
return [node];
|
|
63
72
|
}
|
|
64
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Replaces any placeholder occurrences left in a text node (i.e. ones that did not
|
|
75
|
+
* resolve to a reference chip) with their original `{type/id}` token text, so the
|
|
76
|
+
* output never leaks a raw placeholder sentinel (an invisible PUA-wrapped digit)
|
|
77
|
+
* as visible text.
|
|
78
|
+
*/
|
|
79
|
+
function restoreUnresolvedPlaceholders(value, tokens) {
|
|
80
|
+
return value.replace(getPlaceholderRegex(), (match, indexStr) => {
|
|
81
|
+
const originalToken = tokens[Number(indexStr)];
|
|
82
|
+
return originalToken ?? match;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function iterateReferenceMatch(value, references, tokens, onMatch) {
|
|
65
86
|
const items = [];
|
|
66
|
-
const regex =
|
|
87
|
+
const regex = getPlaceholderRegex();
|
|
67
88
|
let match = regex.exec(value);
|
|
68
89
|
while (match) {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
90
|
+
const originalToken = tokens[Number(match[1])];
|
|
91
|
+
if (originalToken) {
|
|
92
|
+
const [type, id] = originalToken.slice(1, -1).split("/");
|
|
93
|
+
const ref = references.find((ref) => ref.id === id && ref.type === type);
|
|
94
|
+
if (ref) {
|
|
95
|
+
items.push(...onMatch(ref));
|
|
96
|
+
}
|
|
75
97
|
}
|
|
76
98
|
match = regex.exec(value);
|
|
77
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remark-references.d.ts","sourceRoot":"","sources":["../../../../src/components/completion/plugins/remark-references.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,MAAM,EAAc,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"remark-references.d.ts","sourceRoot":"","sources":["../../../../src/components/completion/plugins/remark-references.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,MAAM,EAAc,MAAM,OAAO,CAAC;AAK3D,wBAAgB,gBAAgB,mCAiC/B"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// (C) 2022-2026 GoodData Corporation
|
|
2
|
-
import {
|
|
2
|
+
import { getPlaceholderRegex } from "./reference-placeholder.js";
|
|
3
3
|
export function remarkReferences() {
|
|
4
4
|
return function () {
|
|
5
5
|
return function (tree) {
|
|
6
6
|
iterateTree(tree, {
|
|
7
7
|
onText: (text) => {
|
|
8
8
|
const nodes = [];
|
|
9
|
-
const parts = text.value.split(
|
|
9
|
+
const parts = text.value.split(getPlaceholderRegex(true));
|
|
10
10
|
let start = text.position?.start ?? { line: 0, column: 0, offset: 0 };
|
|
11
11
|
parts.forEach((part) => {
|
|
12
12
|
const end = {
|
|
@@ -32,17 +32,14 @@ export function remarkReferences() {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
function iterateTree(node, callbacks) {
|
|
35
|
-
//Text type
|
|
36
35
|
if (node.type === "text") {
|
|
37
36
|
return callbacks.onText(node);
|
|
38
37
|
}
|
|
39
|
-
// has children
|
|
40
38
|
if (node.children) {
|
|
41
39
|
node.children = node.children.reduce((acc, child) => {
|
|
42
40
|
return [...acc, ...iterateTree(child, callbacks)];
|
|
43
41
|
}, []);
|
|
44
42
|
return [node];
|
|
45
43
|
}
|
|
46
|
-
// no children
|
|
47
44
|
return [node];
|
|
48
45
|
}
|
|
@@ -16,7 +16,7 @@ export declare function getOptions(intl: IntlShape, { items, search, canManage,
|
|
|
16
16
|
excludeTags?: string[];
|
|
17
17
|
}): ICompletionItem[];
|
|
18
18
|
declare const SupportedReferenceTypes: readonly ["fact", "metric", "date", "attribute", "label", "dashboard", "visualization"];
|
|
19
|
-
export declare function getReferenceRegex(
|
|
19
|
+
export declare function getReferenceRegex(): RegExp;
|
|
20
20
|
export declare function getItems(intl: IntlShape, item: CatalogItem, { canManage, canAnalyze, onCompletionSelected }: {
|
|
21
21
|
canManage?: boolean;
|
|
22
22
|
canAnalyze?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/completion/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,mCAAmC,EACxC,KAAK,qBAAqB,EAC1B,KAAK,MAAM,EAQd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,MAAM,WAAW,eAAgB,SAAQ,UAAU;IAC/C,IAAI,EAAE,WAAW,GAAG,qBAAqB,CAAC;CAC7C;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,iBAW7C;AAGD,wBAAgB,UAAU,CACtB,IAAI,EAAE,SAAS,EACf,EACI,KAAK,EACL,MAAM,EACN,SAAS,EACT,UAAU,EACV,oBAA+B,EAC/B,WAAW,EACX,WAAW,EACd,EAAE;IACC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GACF,eAAe,EAAE,CAcnB;AAED,QAAA,MAAM,uBAAuB,yFAQnB,CAAC;AAGX,wBAAgB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/completion/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,mCAAmC,EACxC,KAAK,qBAAqB,EAC1B,KAAK,MAAM,EAQd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,MAAM,WAAW,eAAgB,SAAQ,UAAU;IAC/C,IAAI,EAAE,WAAW,GAAG,qBAAqB,CAAC;CAC7C;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,iBAW7C;AAGD,wBAAgB,UAAU,CACtB,IAAI,EAAE,SAAS,EACf,EACI,KAAK,EACL,MAAM,EACN,SAAS,EACT,UAAU,EACV,oBAA+B,EAC/B,WAAW,EACX,WAAW,EACd,EAAE;IACC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GACF,eAAe,EAAE,CAcnB;AAED,QAAA,MAAM,uBAAuB,yFAQnB,CAAC;AAGX,wBAAgB,iBAAiB,WAEhC;AAGD,wBAAgB,QAAQ,CACpB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,WAAW,EACjB,EACI,SAAS,EACT,UAAU,EACV,oBAAoB,EACvB,EAAE;IACC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CAChE,GACF,eAAe,EAAE,CAqGnB;AAUD,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACtC,iBAAiB,GAAG,IAAI,CAgB1B;AAGD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,iBAExD;AAGD,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,WAAW,GAAG,qBAAqB,GAAG,mCAAmC,GAChF,MAAM,GAAG,IAAI,CAoBf;AAGD,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,WAAW,GAAG,qBAAqB,GAAG,mCAAmC,UAqBlF;AAGD,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,WAAW,GAAG,qBAAqB,GAAG,mCAAmC,GAChF,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAoBjD;AAsBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WA0B1F"}
|
|
@@ -39,10 +39,7 @@ const SupportedReferenceTypes = [
|
|
|
39
39
|
"visualization",
|
|
40
40
|
];
|
|
41
41
|
// Utility: Get regex for references
|
|
42
|
-
export function getReferenceRegex(
|
|
43
|
-
if (split) {
|
|
44
|
-
return new RegExp(`(\\{(?:${SupportedReferenceTypes.join("|")})\\/[.A-Za-z0-9_-]{1,255}\\})`, "g");
|
|
45
|
-
}
|
|
42
|
+
export function getReferenceRegex() {
|
|
46
43
|
return new RegExp(`\\{((?:${SupportedReferenceTypes.join("|")})\\/(?!\\.)[.A-Za-z0-9_-]{1,255})\\}`, "g");
|
|
47
44
|
}
|
|
48
45
|
// Utility: Get item for completion
|
|
@@ -26,7 +26,7 @@ const quickOptions = [
|
|
|
26
26
|
];
|
|
27
27
|
function LandingScreenComponent({ LandingScreen, isBigScreen, isSmallScreen, isFullscreen, }) {
|
|
28
28
|
const intl = useIntl();
|
|
29
|
-
return (_jsx("div", { className: "gd-gen-ai-chat__messages__empty", children: LandingScreen ? (_jsx(LandingScreen, {})) : (_jsxs(DefaultLandingContainer, { isFullscreen: isFullscreen, isBigScreen: isBigScreen, isSmallScreen: isSmallScreen, children: [
|
|
29
|
+
return (_jsx("div", { className: "gd-gen-ai-chat__messages__empty", "data-testid": "gen-ai-chat-landing-screen", children: LandingScreen ? (_jsx(LandingScreen, {})) : (_jsxs(DefaultLandingContainer, { isFullscreen: isFullscreen, isBigScreen: isBigScreen, isSmallScreen: isSmallScreen, children: [
|
|
30
30
|
_jsxs(DefaultLandingTitle, { children: [
|
|
31
31
|
_jsx(DefaultLandingTitleAscent, { children: _jsx(FormattedMessage, { id: "gd.gen-ai.welcome.line-1" }) }), _jsx("br", {}), _jsx(FormattedMessage, { id: "gd.gen-ai.welcome.line-2" })
|
|
32
32
|
] }), _jsx(DefaultLandingQuestions, { isFullscreen: isFullscreen, isBigScreen: isBigScreen, isSmallScreen: isSmallScreen, children: quickOptions.map((option) => (_jsx(DefaultLandingQuestion, { icon: option.icon, title: intl.formatMessage(option.title), question: intl.formatMessage(option.question), answer: intl.formatMessage(option.answer) }, option.title.id))) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/Markdown.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/Markdown.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAuB3D,KAAK,sBAAsB,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAqB,EAAE,EAAE,sBAAsB,2CAiBxG"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2024-2026 GoodData Corporation
|
|
3
|
+
import { useMemo } from "react";
|
|
3
4
|
import Markdown from "react-markdown";
|
|
4
5
|
import remarkEmoji from "remark-emoji";
|
|
5
6
|
import remarkGfm from "remark-gfm";
|
|
6
7
|
import { Typography } from "@gooddata/sdk-ui-kit";
|
|
8
|
+
import { extractReferences } from "../../completion/plugins/reference-placeholder.js";
|
|
7
9
|
import { rehypeReferences } from "../../completion/plugins/rehype-references.js";
|
|
8
10
|
import { remarkReferences } from "../../completion/plugins/remark-references.js";
|
|
9
11
|
import { CustomHyperlink } from "./CustomHyperlink.js";
|
|
@@ -22,8 +24,9 @@ const customUrlTransform = (url) => {
|
|
|
22
24
|
return /^http|https|mailto|tel|gooddata:/i.test(url) ? url : "";
|
|
23
25
|
};
|
|
24
26
|
export function MarkdownComponent({ children, references, allowMarkdown = false }) {
|
|
27
|
+
const { text, tokens } = useMemo(() => extractReferences(children), [children]);
|
|
25
28
|
if (allowMarkdown) {
|
|
26
|
-
return (_jsx(Markdown, { remarkPlugins: [remarkEmoji, remarkGfm, remarkReferences()], rehypePlugins: [rehypeReferences(references ?? [])], components: componentMap, urlTransform: customUrlTransform, children:
|
|
29
|
+
return (_jsx(Markdown, { remarkPlugins: [remarkEmoji, remarkGfm, remarkReferences()], rehypePlugins: [rehypeReferences(references ?? [], tokens)], components: componentMap, urlTransform: customUrlTransform, children: text }));
|
|
27
30
|
}
|
|
28
31
|
return _jsx(Typography, { tagName: "p", children: children });
|
|
29
32
|
}
|
|
@@ -32,7 +32,6 @@ export declare const ConversationVisualizationContent: import("react-redux").Con
|
|
|
32
32
|
uri: string;
|
|
33
33
|
ref: import("@gooddata/sdk-model").ObjRef;
|
|
34
34
|
isLocked?: boolean | undefined;
|
|
35
|
-
isHidden?: boolean | undefined;
|
|
36
35
|
certification?: import("@gooddata/sdk-model").IObjectCertification | undefined;
|
|
37
36
|
};
|
|
38
37
|
};
|
package/esm/components/messages/conversationContents/ConversationVisualizationContent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationVisualizationContent.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/ConversationVisualizationContent.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,KAAK,aAAa,EAAgD,MAAM,qBAAqB,CAAC;AAwBvG,OAAO,EAAE,KAAK,0BAA0B,EAAE,KAAK,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAM9G,OAAO,EAEH,0BAA0B,EAC7B,MAAM,8CAA8C,CAAC;AAGtD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAwBlF,MAAM,MAAM,qCAAqC,GAAG;IAChD,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,mCAAmC,CAAC;IAC1C,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,aAAa,EAAE,WAAW,CAAC,qCAAqC,CAAC,eAAe,CAAC,CAAC,CAAC;IACnF,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxD,oBAAoB,CAAC,EAAE,OAAO,0BAA0B,CAAC;IACzD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4BAA4B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF,iBAAS,oCAAoC,CAAC,EAC1C,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,EAC/B,EAAE,qCAAqC,2CAmGvC;AAmnBD,eAAO,MAAM,gCAAgC
|
|
1
|
+
{"version":3,"file":"ConversationVisualizationContent.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/ConversationVisualizationContent.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,KAAK,aAAa,EAAgD,MAAM,qBAAqB,CAAC;AAwBvG,OAAO,EAAE,KAAK,0BAA0B,EAAE,KAAK,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAM9G,OAAO,EAEH,0BAA0B,EAC7B,MAAM,8CAA8C,CAAC;AAGtD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAwBlF,MAAM,MAAM,qCAAqC,GAAG;IAChD,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,mCAAmC,CAAC;IAC1C,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,aAAa,EAAE,WAAW,CAAC,qCAAqC,CAAC,eAAe,CAAC,CAAC,CAAC;IACnF,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxD,oBAAoB,CAAC,EAAE,OAAO,0BAA0B,CAAC;IACzD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4BAA4B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF,iBAAS,oCAAoC,CAAC,EAC1C,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,EAC/B,EAAE,qCAAqC,2CAmGvC;AAmnBD,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;EAGN,CAAC"}
|
|
@@ -24,7 +24,6 @@ export declare const SaveVisualizationDialog: import("react-redux").ConnectedCom
|
|
|
24
24
|
uri: string;
|
|
25
25
|
ref: import("@gooddata/sdk-model").ObjRef;
|
|
26
26
|
isLocked?: boolean | undefined;
|
|
27
|
-
isHidden?: boolean | undefined;
|
|
28
27
|
certification?: import("@gooddata/sdk-model").IObjectCertification | undefined;
|
|
29
28
|
};
|
|
30
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SaveVisualizationDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/SaveVisualizationDialog.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AAGvF,OAAO,EAAE,KAAK,0BAA0B,EAAE,KAAK,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAE7G,MAAM,MAAM,4BAA4B,GAAG;IACvC,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,mCAAmC,CAAC;IAC1C,aAAa,EAAE,WAAW,CAAC,qCAAqC,CAAC,eAAe,CAAC,CAAC,CAAC;IACnF,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IAC/C,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,wBAAwB,EAAE,OAAO,wBAAwB,CAAC;CAC7D,CAAC;AAEF,iBAAS,2BAA2B,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,aAAa,EACb,OAAO,EACP,uBAAuB,EACvB,wBAAwB,EAC3B,EAAE,4BAA4B,GAAG,oCAAoC,2CAkDrE;AA8DD,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"SaveVisualizationDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/SaveVisualizationDialog.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AAGvF,OAAO,EAAE,KAAK,0BAA0B,EAAE,KAAK,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAE7G,MAAM,MAAM,4BAA4B,GAAG;IACvC,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,mCAAmC,CAAC;IAC1C,aAAa,EAAE,WAAW,CAAC,qCAAqC,CAAC,eAAe,CAAC,CAAC,CAAC;IACnF,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IAC/C,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,wBAAwB,EAAE,OAAO,wBAAwB,CAAC;CAC7D,CAAC;AAEF,iBAAS,2BAA2B,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,aAAa,EACb,OAAO,EACP,uBAAuB,EACvB,wBAAwB,EAC3B,EAAE,4BAA4B,GAAG,oCAAoC,2CAkDrE;AA8DD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;EAAiE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onChatOpenSync.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onChatOpenSync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtD,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAElC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"onChatOpenSync.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onChatOpenSync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtD,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAElC,MAAM,gBAAgB,CAAC;AAiBxB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAiB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;;;;;;;;;;;6DAyG1F"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { call, getContext, put, select } from "redux-saga/effects";
|
|
3
3
|
import { makeConversationItem, } from "../../model.js";
|
|
4
4
|
import { settingsSelector } from "../chatWindow/chatWindowSelectors.js";
|
|
5
|
-
import { asyncProcessSelector, conversationSelector, conversationsLoadedSelector, } from "../messages/messagesSelectors.js";
|
|
5
|
+
import { asyncProcessSelector, conversationMessagesSelector, conversationSelector, conversationsLoadedSelector, } from "../messages/messagesSelectors.js";
|
|
6
6
|
import { loadConversationsSuccessAction, setCurrentConversationAction, setMessagesAction, } from "../messages/messagesSlice.js";
|
|
7
7
|
import { convertToLocalContent } from "./converters/toLocalContent.js";
|
|
8
8
|
import { notifyDefinitionReceived } from "./onDefinitionReceivedTrigger.js";
|
|
@@ -52,6 +52,7 @@ export function* onChatOpenSync({ payload: { isOpen } }) {
|
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
54
|
const current = yield select(conversationSelector);
|
|
55
|
+
const currentItems = yield select(conversationMessagesSelector);
|
|
55
56
|
// Keep a brand-new, not-yet-persisted draft conversation as-is.
|
|
56
57
|
if (current && !current.id) {
|
|
57
58
|
return;
|
|
@@ -98,11 +99,20 @@ export function* onChatOpenSync({ payload: { isOpen } }) {
|
|
|
98
99
|
// writes into whatever currentConversation points at, so the switch must come first - and
|
|
99
100
|
// both puts are dispatched synchronously (no yield between them) so the UI never observes the
|
|
100
101
|
// intermediate empty/unloaded state.
|
|
101
|
-
|
|
102
|
+
const isDifferentConversation = latest.id !== currentNow?.id;
|
|
103
|
+
if (isDifferentConversation) {
|
|
102
104
|
yield put(setCurrentConversationAction({ conversation: latest }));
|
|
103
105
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
// Check if new items are different from the current ones. If so, replace the whole list.
|
|
107
|
+
// If the conversation was just switched above, we always replace because the currentItems
|
|
108
|
+
// we have in hand belong to the previous conversation.
|
|
109
|
+
const sameItems = !isDifferentConversation &&
|
|
110
|
+
items.length === currentItems.length &&
|
|
111
|
+
items.every((item, i) => item.id === currentItems[i]?.id);
|
|
112
|
+
if (!sameItems) {
|
|
113
|
+
yield put(setMessagesAction({ items }));
|
|
114
|
+
yield call(notifyDefinitionReceived, items, latest.localId);
|
|
115
|
+
}
|
|
106
116
|
}
|
|
107
117
|
catch {
|
|
108
118
|
// Fail silently - keep showing whatever is currently loaded.
|
|
@@ -37,7 +37,6 @@ export declare function onVisualizationSave({ payload }: PayloadAction<{
|
|
|
37
37
|
uri: string;
|
|
38
38
|
ref: import("@gooddata/sdk-model").ObjRef;
|
|
39
39
|
isLocked?: boolean | undefined;
|
|
40
|
-
isHidden?: boolean | undefined;
|
|
41
40
|
certification?: import("@gooddata/sdk-model").IObjectCertification | undefined;
|
|
42
41
|
};
|
|
43
42
|
} & Message[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onVisualizationSave.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onVisualizationSave.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAGH,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EAG1B,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAEH,KAAK,0BAA0B,EAE/B,KAAK,OAAO,EAEf,MAAM,gBAAgB,CAAC;AASxB,wBAAiB,mBAAmB,CAAC,EACjC,OAAO,EACV,EAAE,aAAa,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC
|
|
1
|
+
{"version":3,"file":"onVisualizationSave.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onVisualizationSave.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAGH,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EAG1B,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAEH,KAAK,0BAA0B,EAE/B,KAAK,OAAO,EAEf,MAAM,gBAAgB,CAAC;AASxB,wBAAiB,mBAAmB,CAAC,EACjC,OAAO,EACV,EAAE,aAAa,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAgHD;AAoGD,eAAO,MAAM,cAAc,+FA0C1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,+FAoC5B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-gen-ai",
|
|
3
|
-
"version": "11.50.0-alpha.
|
|
3
|
+
"version": "11.50.0-alpha.3",
|
|
4
4
|
"description": "GoodData GenAI SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -57,18 +57,18 @@
|
|
|
57
57
|
"reselect": "5.1.1",
|
|
58
58
|
"tslib": "2.8.1",
|
|
59
59
|
"uuid": "11.1.1",
|
|
60
|
-
"@gooddata/api-client-tiger": "11.50.0-alpha.
|
|
61
|
-
"@gooddata/sdk-backend-spi": "11.50.0-alpha.
|
|
62
|
-
"@gooddata/sdk-
|
|
63
|
-
"@gooddata/sdk-
|
|
64
|
-
"@gooddata/sdk-ui
|
|
65
|
-
"@gooddata/sdk-ui-
|
|
66
|
-
"@gooddata/sdk-ui-
|
|
67
|
-
"@gooddata/sdk-ui-
|
|
68
|
-
"@gooddata/sdk-ui-pivot": "11.50.0-alpha.
|
|
69
|
-
"@gooddata/sdk-ui-semantic-search": "11.50.0-alpha.
|
|
70
|
-
"@gooddata/
|
|
71
|
-
"@gooddata/
|
|
60
|
+
"@gooddata/api-client-tiger": "11.50.0-alpha.3",
|
|
61
|
+
"@gooddata/sdk-backend-spi": "11.50.0-alpha.3",
|
|
62
|
+
"@gooddata/sdk-model": "11.50.0-alpha.3",
|
|
63
|
+
"@gooddata/sdk-ui-charts": "11.50.0-alpha.3",
|
|
64
|
+
"@gooddata/sdk-ui": "11.50.0-alpha.3",
|
|
65
|
+
"@gooddata/sdk-ui-kit": "11.50.0-alpha.3",
|
|
66
|
+
"@gooddata/sdk-ui-filters": "11.50.0-alpha.3",
|
|
67
|
+
"@gooddata/sdk-ui-dashboard": "11.50.0-alpha.3",
|
|
68
|
+
"@gooddata/sdk-ui-pivot": "11.50.0-alpha.3",
|
|
69
|
+
"@gooddata/sdk-ui-semantic-search": "11.50.0-alpha.3",
|
|
70
|
+
"@gooddata/util": "11.50.0-alpha.3",
|
|
71
|
+
"@gooddata/sdk-ui-theme-provider": "11.50.0-alpha.3"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@microsoft/api-documenter": "^7.17.0",
|
|
@@ -111,13 +111,13 @@
|
|
|
111
111
|
"typescript": "5.9.3",
|
|
112
112
|
"vitest": "4.1.8",
|
|
113
113
|
"vitest-dom": "0.1.1",
|
|
114
|
-
"@gooddata/eslint-config": "11.50.0-alpha.
|
|
115
|
-
"@gooddata/
|
|
116
|
-
"@gooddata/
|
|
117
|
-
"@gooddata/oxlint-config": "11.50.0-alpha.
|
|
118
|
-
"@gooddata/sdk-ui-theme-provider": "11.50.0-alpha.
|
|
119
|
-
"@gooddata/stylelint-config": "11.50.0-alpha.
|
|
120
|
-
"@gooddata/sdk-backend-mockingbird": "11.50.0-alpha.
|
|
114
|
+
"@gooddata/eslint-config": "11.50.0-alpha.3",
|
|
115
|
+
"@gooddata/i18n-toolkit": "11.50.0-alpha.3",
|
|
116
|
+
"@gooddata/reference-workspace": "11.50.0-alpha.3",
|
|
117
|
+
"@gooddata/oxlint-config": "11.50.0-alpha.3",
|
|
118
|
+
"@gooddata/sdk-ui-theme-provider": "11.50.0-alpha.3",
|
|
119
|
+
"@gooddata/stylelint-config": "11.50.0-alpha.3",
|
|
120
|
+
"@gooddata/sdk-backend-mockingbird": "11.50.0-alpha.3"
|
|
121
121
|
},
|
|
122
122
|
"peerDependencies": {
|
|
123
123
|
"react": "^18.0.0 || ^19.0.0",
|