@gooddata/sdk-ui-gen-ai 11.48.0-alpha.2 → 11.48.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/GenAIChatContextIndicator.d.ts.map +1 -1
- package/esm/components/GenAIChatContextIndicator.js +11 -11
- package/esm/components/GenAIChatDialogConnected.d.ts +3 -1
- package/esm/components/GenAIChatDialogConnected.d.ts.map +1 -1
- package/esm/components/GenAIChatDialogConnected.js +25 -11
- package/esm/components/GenAiChatContextChooser.d.ts +1 -1
- package/esm/components/GenAiChatContextChooser.d.ts.map +1 -1
- package/esm/components/GenAiChatContextChooser.js +8 -8
- package/esm/components/hooks/useContextItems.d.ts +2 -2
- package/esm/components/hooks/useContextItems.d.ts.map +1 -1
- package/esm/components/hooks/useContextItems.js +5 -5
- package/esm/components/utils/icons.d.ts +2 -2
- package/esm/components/utils/icons.d.ts.map +1 -1
- package/esm/components/utils/icons.js +1 -0
- package/esm/context/addContextReference.d.ts +3 -2
- package/esm/context/addContextReference.d.ts.map +1 -1
- package/esm/context/addContextReference.js +62 -7
- package/esm/context/build.d.ts +2 -2
- package/esm/context/build.d.ts.map +1 -1
- package/esm/context/build.js +35 -4
- package/esm/context/collectContextReferences.d.ts +4 -10
- package/esm/context/collectContextReferences.d.ts.map +1 -1
- package/esm/context/collectContextReferences.js +96 -8
- package/esm/context/dashboard.d.ts.map +1 -1
- package/esm/context/dashboard.js +10 -4
- package/esm/context/removeContextReference.d.ts +2 -1
- package/esm/context/removeContextReference.d.ts.map +1 -1
- package/esm/context/removeContextReference.js +31 -2
- package/esm/store/chatWindow/chatWindowSelectors.d.ts +1 -8
- package/esm/store/chatWindow/chatWindowSelectors.d.ts.map +1 -1
- package/esm/store/chatWindow/chatWindowSelectors.js +1 -13
- package/esm/store/chatWindow/chatWindowSlice.d.ts +5 -3
- package/esm/store/chatWindow/chatWindowSlice.d.ts.map +1 -1
- package/esm/store/chatWindow/chatWindowSlice.js +15 -17
- package/esm/store/sideEffects/onUserMessage.d.ts.map +1 -1
- package/esm/store/sideEffects/onUserMessage.js +3 -12
- package/esm/types.d.ts +15 -10
- package/esm/types.d.ts.map +1 -1
- package/esm/utils.d.ts +4 -1
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +28 -0
- package/package.json +20 -20
- package/styles/css/main.css +31 -9
- package/styles/css/main.css.map +1 -1
- package/styles/scss/main.scss +1 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { areObjRefsEqual, } from "@gooddata/sdk-model";
|
|
2
3
|
export function removeContextReference(context, reference) {
|
|
3
4
|
if (!context) {
|
|
4
5
|
return undefined;
|
|
@@ -8,15 +9,31 @@ export function removeContextReference(context, reference) {
|
|
|
8
9
|
}
|
|
9
10
|
const newContext = { ...context };
|
|
10
11
|
// remove dashboard reference
|
|
11
|
-
if (reference.where === "view.dashboard" &&
|
|
12
|
+
if (reference.where === "view.dashboard" &&
|
|
13
|
+
areObjRefsEqual(newContext.view?.dashboard?.ref, reference.ref)) {
|
|
12
14
|
newContext.view = { ...newContext.view };
|
|
13
15
|
delete newContext.view.dashboard;
|
|
14
16
|
}
|
|
17
|
+
// remove reference
|
|
18
|
+
if (reference.where === "referencedObjects") {
|
|
19
|
+
newContext.referencedObjects = newContext.referencedObjects
|
|
20
|
+
?.map((obj) => {
|
|
21
|
+
const clone = {
|
|
22
|
+
...obj,
|
|
23
|
+
objects: obj.objects.filter((item) => !areObjRefsEqual(item.ref, reference.ref)),
|
|
24
|
+
};
|
|
25
|
+
if (clone.objects.length === 0) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return clone;
|
|
29
|
+
})
|
|
30
|
+
.filter(Boolean);
|
|
31
|
+
}
|
|
15
32
|
// make clean context
|
|
16
33
|
if (newContext.view && Object.keys(newContext.view).length === 0) {
|
|
17
34
|
delete newContext.view;
|
|
18
35
|
}
|
|
19
|
-
if (newContext.referencedObjects
|
|
36
|
+
if (!newContext.referencedObjects || newContext.referencedObjects.length === 0) {
|
|
20
37
|
delete newContext.referencedObjects;
|
|
21
38
|
}
|
|
22
39
|
if (Object.keys(newContext).length === 0) {
|
|
@@ -24,3 +41,15 @@ export function removeContextReference(context, reference) {
|
|
|
24
41
|
}
|
|
25
42
|
return newContext;
|
|
26
43
|
}
|
|
44
|
+
export function removeUserContextReferences(context) {
|
|
45
|
+
if (!context) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const newContext = { ...context };
|
|
49
|
+
delete newContext.referencedObjects;
|
|
50
|
+
delete newContext.activeObject;
|
|
51
|
+
if (Object.keys(newContext).length === 0) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return newContext;
|
|
55
|
+
}
|
|
@@ -19,13 +19,6 @@ export declare const tagsSelector: (state: RootState) => {
|
|
|
19
19
|
export declare const catalogItemsSelector: (state: RootState) => CatalogItem[];
|
|
20
20
|
export declare const keyDriverAnalysisSelector: (state: RootState) => IKdaDefinition | undefined;
|
|
21
21
|
export declare const keyDriverAnalysisMinimizedSelector: (state: RootState) => boolean | undefined;
|
|
22
|
+
export declare const userContextSelector: (state: RootState) => IGenAIUserContext | undefined;
|
|
22
23
|
export declare const ambientContextSelector: (state: RootState) => IGenAIUserContext | undefined;
|
|
23
|
-
/**
|
|
24
|
-
* Context to attach to the next message: an explicit one-shot context (e.g. Summarize)
|
|
25
|
-
* wins over the ambient context kept in sync by the host.
|
|
26
|
-
*/
|
|
27
|
-
export declare const effectiveContextSelector: (state: RootState) => {
|
|
28
|
-
user: IGenAIUserContext | undefined;
|
|
29
|
-
ambient: IGenAIUserContext | undefined;
|
|
30
|
-
};
|
|
31
24
|
//# sourceMappingURL=chatWindowSelectors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatWindowSelectors.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSelectors.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"chatWindowSelectors.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSelectors.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,eAAO,MAAM,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGxD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,aAAa,GAAG,SAGxE,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,sBAAsB,GAAG,SAG7E,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGrD,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGjE,CAAC;AAKF,eAAO,MAAM,4BAA4B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAIhE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,eAAe,EAAE,GAAG,SAG3E,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,wBAAwB,EAAE,GAAG,SACZ,CAAC;AAEvF,eAAO,MAAM,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK;IAC7C,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAMpC,CAAC;AAEH,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,WAAW,EAKnE,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,cAAc,GAAG,SAG9E,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,GAAG,SAGhF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,iBAAiB,GAAG,SAG3E,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,iBAAiB,GAAG,SAG9E,CAAC"}
|
|
@@ -26,17 +26,5 @@ export const catalogItemsSelector = createSelector(chatWindowSliceSelector, (sta
|
|
|
26
26
|
});
|
|
27
27
|
export const keyDriverAnalysisSelector = createSelector(chatWindowSliceSelector, (state) => state.keyDriverAnalysis);
|
|
28
28
|
export const keyDriverAnalysisMinimizedSelector = createSelector(chatWindowSliceSelector, (state) => state.keyDriverAnalysisMinimized);
|
|
29
|
-
const userContextSelector = createSelector(chatWindowSliceSelector, (state) => state.context.
|
|
29
|
+
export const userContextSelector = createSelector(chatWindowSliceSelector, (state) => state.context.active);
|
|
30
30
|
export const ambientContextSelector = createSelector(chatWindowSliceSelector, (state) => state.context.ambient);
|
|
31
|
-
const contextModeSelector = createSelector(chatWindowSliceSelector, (state) => state.context.ambientMode);
|
|
32
|
-
/**
|
|
33
|
-
* Context to attach to the next message: an explicit one-shot context (e.g. Summarize)
|
|
34
|
-
* wins over the ambient context kept in sync by the host.
|
|
35
|
-
*/
|
|
36
|
-
export const effectiveContextSelector = createSelector(userContextSelector, ambientContextSelector, contextModeSelector, (userContext, ambientUserContext, mode) => {
|
|
37
|
-
const suppressed = mode === "suppressed";
|
|
38
|
-
return {
|
|
39
|
-
user: userContext,
|
|
40
|
-
ambient: suppressed ? undefined : ambientUserContext,
|
|
41
|
-
};
|
|
42
|
-
});
|
|
@@ -2,8 +2,7 @@ import { type Reducer } from "@reduxjs/toolkit";
|
|
|
2
2
|
import { type IUserWorkspaceSettings } from "@gooddata/sdk-backend-spi";
|
|
3
3
|
import { type CatalogItem, type GenAIObjectType, type IAllowedRelationshipType, type IColorPalette, type IGenAIUserContext } from "@gooddata/sdk-model";
|
|
4
4
|
import type { IKdaDefinition } from "@gooddata/sdk-ui-dashboard";
|
|
5
|
-
import { type IGenAIContextObject } from "../../
|
|
6
|
-
import { type StoreContext } from "../../types.js";
|
|
5
|
+
import { type IGenAIContextObject, type StoreContext } from "../../types.js";
|
|
7
6
|
type ChatWindowSliceState = {
|
|
8
7
|
/**
|
|
9
8
|
* Defines if the chat window is open.
|
|
@@ -93,7 +92,9 @@ export declare const setOpenAction: import("@reduxjs/toolkit").ActionCreatorWith
|
|
|
93
92
|
allowedRelationshipTypes?: IAllowedRelationshipType[] | undefined;
|
|
94
93
|
}, "chatWindow/setAllowedRelationshipTypesAction">, addContextReferenceAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
95
94
|
object: IGenAIContextObject;
|
|
96
|
-
}, "chatWindow/addContextReferenceAction">,
|
|
95
|
+
}, "chatWindow/addContextReferenceAction">, removeContextReferenceAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
96
|
+
object: IGenAIContextObject;
|
|
97
|
+
}, "chatWindow/removeContextReferenceAction">, setIsPreviewAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
97
98
|
isPreview?: boolean | undefined;
|
|
98
99
|
}, "chatWindow/setIsPreviewAction">,
|
|
99
100
|
/**
|
|
@@ -107,6 +108,7 @@ setAmbientUserContextAction: import("@reduxjs/toolkit").ActionCreatorWithPayload
|
|
|
107
108
|
*/
|
|
108
109
|
setUserContextAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
109
110
|
userContext?: IGenAIUserContext | undefined;
|
|
111
|
+
replaceUserContext?: boolean | undefined;
|
|
110
112
|
}, "chatWindow/setUserContextAction">;
|
|
111
113
|
export {};
|
|
112
114
|
//# sourceMappingURL=chatWindowSlice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatWindowSlice.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSlice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,OAAO,EAAe,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"chatWindowSlice.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSlice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,OAAO,EAAe,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7E,KAAK,oBAAoB,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAmBhD,eAAO,MAAM,yBAAyB;;0BAOpC,CAAC;AAkHH,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC,oBAAoB,CAA2B,CAAC;AAC7F,eAAO,MACH,aAAa;;gCACb,mBAAmB;;sCACnB,gBAAgB;;mCAChB,qBAAqB;;wCACrB,iBAAiB;;oCACjB,qBAAqB;;wCACrB,0BAA0B;;6CAC1B,mCAAmC;;sDACnC,oBAAoB;;uCACpB,aAAa;;;gCACb,sBAAsB,+HACtB,iCAAiC;;oDACjC,yBAAyB;;4CACzB,4BAA4B;;+CAC5B,kBAAkB;;;AAClB;;GAEG;AACH,2BAA2B;;;AAC3B;;GAEG;AACH,oBAAoB;;;qCACG,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// (C) 2024-2026 GoodData Corporation
|
|
2
2
|
import { createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
import { addContextReference } from "../../context/addContextReference.js";
|
|
4
|
-
import {
|
|
3
|
+
import { addAmbientContextReferences, addContextReference } from "../../context/addContextReference.js";
|
|
4
|
+
import { mergeContexts } from "../../context/build.js";
|
|
5
|
+
import { removeContextReference, removeUserContextReferences } from "../../context/removeContextReference.js";
|
|
5
6
|
export const chatWindowSliceName = "chatWindow";
|
|
6
7
|
const initialState = {
|
|
7
8
|
isOpen: false,
|
|
@@ -14,9 +15,8 @@ const initialState = {
|
|
|
14
15
|
excludeTags: undefined,
|
|
15
16
|
allowedRelationshipTypes: undefined,
|
|
16
17
|
context: {
|
|
17
|
-
ambientMode: "enabled",
|
|
18
18
|
ambient: undefined,
|
|
19
|
-
|
|
19
|
+
active: undefined,
|
|
20
20
|
},
|
|
21
21
|
isPreview: undefined,
|
|
22
22
|
};
|
|
@@ -65,27 +65,25 @@ const chatWindowSlice = createSlice({
|
|
|
65
65
|
setAllowedRelationshipTypesAction: (state, { payload: { allowedRelationshipTypes }, }) => {
|
|
66
66
|
state.allowedRelationshipTypes = allowedRelationshipTypes;
|
|
67
67
|
},
|
|
68
|
-
setUserContextAction: (state, { payload: { userContext } }) => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
setUserContextAction: (state, { payload: { userContext, replaceUserContext }, }) => {
|
|
69
|
+
if (replaceUserContext) {
|
|
70
|
+
state.context.active = mergeContexts(removeUserContextReferences(state.context.active), userContext);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
state.context.active = mergeContexts(state.context.active, userContext);
|
|
74
|
+
}
|
|
73
75
|
},
|
|
74
76
|
setAmbientUserContextAction: (state, { payload: { userContext } }) => {
|
|
75
77
|
if (!state.settings?.enableAiContextSetup) {
|
|
76
78
|
return;
|
|
77
79
|
}
|
|
78
|
-
|
|
79
|
-
isReferenceChanged(state.context.ambient, userContext)) {
|
|
80
|
-
state.context.ambientMode = "enabled";
|
|
81
|
-
}
|
|
82
|
-
state.context.ambient = userContext;
|
|
80
|
+
state.context = addAmbientContextReferences(state.context, userContext);
|
|
83
81
|
},
|
|
84
82
|
addContextReferenceAction: (state, { payload: { object } }) => {
|
|
85
83
|
state.context = addContextReference(state.context, object);
|
|
86
84
|
},
|
|
87
|
-
|
|
88
|
-
state.context.
|
|
85
|
+
removeContextReferenceAction: (state, { payload: { object } }) => {
|
|
86
|
+
state.context.active = removeContextReference(state.context.active, object);
|
|
89
87
|
},
|
|
90
88
|
setIsPreviewAction: (state, { payload: { isPreview } }) => {
|
|
91
89
|
state.isPreview = isPreview;
|
|
@@ -94,7 +92,7 @@ const chatWindowSlice = createSlice({
|
|
|
94
92
|
},
|
|
95
93
|
});
|
|
96
94
|
export const chatWindowSliceReducer = chatWindowSlice.reducer;
|
|
97
|
-
export const { setOpenAction, setFullscreenAction, setHistoryAction, setColorPaletteAction, setSettingsAction, copyToClipboardAction, setKeyDriverAnalysisAction, setKeyDriverAnalysisMinimizedAction, setObjectTypesAction, setTagsAction, setCatalogItemsActions, setAllowedRelationshipTypesAction, addContextReferenceAction,
|
|
95
|
+
export const { setOpenAction, setFullscreenAction, setHistoryAction, setColorPaletteAction, setSettingsAction, copyToClipboardAction, setKeyDriverAnalysisAction, setKeyDriverAnalysisMinimizedAction, setObjectTypesAction, setTagsAction, setCatalogItemsActions, setAllowedRelationshipTypesAction, addContextReferenceAction, removeContextReferenceAction, setIsPreviewAction,
|
|
98
96
|
/**
|
|
99
97
|
* @public
|
|
100
98
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onUserMessage.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onUserMessage.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,KAAK,iBAAiB,EASzB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAOlC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"onUserMessage.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onUserMessage.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,KAAK,iBAAiB,EASzB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAOlC,MAAM,gBAAgB,CAAC;AAiBxB,OAAO,EAOH,KAAK,gBAAgB,EAGxB,MAAM,8BAA8B,CAAC;AAMtC;;;GAGG;AACH,wBAAiB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oJAmB9E"}
|
|
@@ -3,8 +3,7 @@ import { call, cancel, cancelled, getContext, put, select } from "redux-saga/eff
|
|
|
3
3
|
import { isChatConversationError, isChatConversationItem, } from "@gooddata/sdk-backend-spi";
|
|
4
4
|
import { isChatConversationLocalItem, isTextContents, isUserMessage, makeAssistantItem, makeAssistantMessage, } from "../../model.js";
|
|
5
5
|
import { generateTitleFromQuestion } from "../../utils.js";
|
|
6
|
-
import { agentSwitchingActiveSelector, allowedRelationshipTypesSelector,
|
|
7
|
-
import { clearUserContextAction } from "../chatWindow/chatWindowSlice.js";
|
|
6
|
+
import { agentSwitchingActiveSelector, allowedRelationshipTypesSelector, objectTypesSelector, settingsSelector, tagsSelector, userContextSelector, } from "../chatWindow/chatWindowSelectors.js";
|
|
8
7
|
import { conversationMessagesByIdSelector, conversationSelector, messagesSelector, pendingAgentSwitchSelector, selectedAgentIdSelector, } from "../messages/messagesSelectors.js";
|
|
9
8
|
import { applyPendingAgentSwitchAction, evaluateMessageAction, evaluateMessageCompleteAction, evaluateMessageErrorAction, evaluateMessageStreamingAction, evaluateMessageUpdateAction, revertAgentSwitchAction, setCurrentConversationAction, } from "../messages/messagesSlice.js";
|
|
10
9
|
import { processContents } from "./converters/interactionsToMessages.js";
|
|
@@ -93,9 +92,7 @@ function* evaluateUserMessage(message, preparedChatThread) {
|
|
|
93
92
|
const settings = yield select(settingsSelector);
|
|
94
93
|
const objectTypes = yield select(objectTypesSelector);
|
|
95
94
|
const allowedRelationshipTypes = yield select(allowedRelationshipTypesSelector);
|
|
96
|
-
const
|
|
97
|
-
// Clear user context immediately — it is a one-shot value
|
|
98
|
-
yield put(clearUserContextAction());
|
|
95
|
+
const context = yield select(userContextSelector);
|
|
99
96
|
const showReasoning = Boolean(settings?.enableGenAIReasoningVisibility);
|
|
100
97
|
// Track interaction ID to assistant message mapping
|
|
101
98
|
let currentAssistantMessage = message;
|
|
@@ -106,7 +103,6 @@ function* evaluateUserMessage(message, preparedChatThread) {
|
|
|
106
103
|
if (allowedRelationshipTypes?.length) {
|
|
107
104
|
queryBuilder = queryBuilder.withAllowedRelationshipTypes(allowedRelationshipTypes);
|
|
108
105
|
}
|
|
109
|
-
const context = user ?? ambient;
|
|
110
106
|
if (context) {
|
|
111
107
|
queryBuilder = queryBuilder.withUserContext(context);
|
|
112
108
|
}
|
|
@@ -324,11 +320,7 @@ function* evaluateUserConversationMessage(conversation, userMessage, assistantMe
|
|
|
324
320
|
const objectTypes = yield select(objectTypesSelector);
|
|
325
321
|
const { includeTags, excludeTags } = yield select(tagsSelector);
|
|
326
322
|
const allowedRelationshipTypes = yield select(allowedRelationshipTypesSelector);
|
|
327
|
-
|
|
328
|
-
// the ambient part persists and rides on every message.
|
|
329
|
-
const { user, ambient } = yield select(effectiveContextSelector);
|
|
330
|
-
// Clear the one-shot user context immediately — it is a one-shot value
|
|
331
|
-
yield put(clearUserContextAction());
|
|
323
|
+
const context = yield select(userContextSelector);
|
|
332
324
|
// Track interaction ID to assistant message mapping
|
|
333
325
|
let currentUserMessage = userMessage;
|
|
334
326
|
let currentAssistantMessage = assistantMessage;
|
|
@@ -345,7 +337,6 @@ function* evaluateUserConversationMessage(conversation, userMessage, assistantMe
|
|
|
345
337
|
if (allowedRelationshipTypes?.length) {
|
|
346
338
|
queryBuilder = queryBuilder.withAllowedRelationshipTypes(allowedRelationshipTypes);
|
|
347
339
|
}
|
|
348
|
-
const context = user ?? ambient;
|
|
349
340
|
if (context) {
|
|
350
341
|
queryBuilder = queryBuilder.withUserContext(context);
|
|
351
342
|
}
|
package/esm/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IChatConversationVisualisationContent } from "@gooddata/sdk-backend-spi";
|
|
2
|
-
import { type IGenAIUserContext, type IGenAIVisualization } from "@gooddata/sdk-model";
|
|
2
|
+
import { type GenAIObjectType, type IGenAIObjectReference, type IGenAIUserContext, type IGenAIVisualization, type ObjRef } from "@gooddata/sdk-model";
|
|
3
3
|
import { type IChatConversationLocalItem } from "./model.js";
|
|
4
4
|
export type Config = IGenAIVisualization["config"] | NonNullable<IChatConversationVisualisationContent["visualization"]>["insight"]["properties"]["controls"];
|
|
5
5
|
export type StoredConversation = {
|
|
@@ -36,11 +36,6 @@ export type StoredConversation = {
|
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
38
|
export type StoreContext = {
|
|
39
|
-
/**
|
|
40
|
-
* One-shot user context for the next message (e.g. active visualization).
|
|
41
|
-
* Cleared after being consumed by the saga.
|
|
42
|
-
*/
|
|
43
|
-
user?: IGenAIUserContext;
|
|
44
39
|
/**
|
|
45
40
|
* Ambient user context kept in sync by the host (e.g. the open dashboard and its
|
|
46
41
|
* live filter state). Unlike the one-shot userContext it persists across messages
|
|
@@ -48,10 +43,20 @@ export type StoreContext = {
|
|
|
48
43
|
*/
|
|
49
44
|
ambient?: IGenAIUserContext;
|
|
50
45
|
/**
|
|
51
|
-
*
|
|
52
|
-
* "suppressed" - ambient context is not used, but automatically change to auto if id is changed
|
|
53
|
-
* "enabled" - ambient context is used if available and updated in real-time
|
|
46
|
+
* Active context
|
|
54
47
|
*/
|
|
55
|
-
|
|
48
|
+
active?: IGenAIUserContext;
|
|
56
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
export interface IGenAIContextObject {
|
|
54
|
+
id: string;
|
|
55
|
+
ref: ObjRef;
|
|
56
|
+
title: string;
|
|
57
|
+
nesting: number;
|
|
58
|
+
type: GenAIObjectType | "widget";
|
|
59
|
+
where: "view.dashboard" | "referencedObjects";
|
|
60
|
+
context?: IGenAIObjectReference;
|
|
61
|
+
}
|
|
57
62
|
//# sourceMappingURL=types.d.ts.map
|
package/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,MAAM,GACZ,mBAAmB,CAAC,QAAQ,CAAC,GAC7B,WAAW,CACP,qCAAqC,CAAC,eAAe,CAAC,CACzD,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;AAE7C,MAAM,MAAM,kBAAkB,GAAG;IAC7B;;;;;;;OAOG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAClD;;;OAGG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;IACnE;;;OAGG;IACH,kBAAkB,CAAC,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;KACvC,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,eAAe,GAAG,QAAQ,CAAC;IACjC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,CAAC;IAC9C,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACnC"}
|
package/esm/utils.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type IntlShape } from "react-intl";
|
|
2
|
-
import { type IAttributeOrMeasure } from "@gooddata/sdk-model";
|
|
2
|
+
import { type GenAIObjectReferenceType, type IAttributeOrMeasure } from "@gooddata/sdk-model";
|
|
3
3
|
import { type IChatConversationLocal } from "./model.js";
|
|
4
|
+
import { type IGenAIContextObject } from "./types.js";
|
|
4
5
|
export declare function getVisualizationHref(wsId: string, visId: string, useHostedAnalyticalDesigner?: boolean): string;
|
|
5
6
|
export declare function getAbsoluteVisualizationHref(wsId: string, visId: string, useHostedAnalyticalDesigner?: boolean): string;
|
|
6
7
|
export declare function getSettingHref(section: string, action?: string): string;
|
|
@@ -18,4 +19,6 @@ export declare function getHeadlineComparison(metrics: IAttributeOrMeasure[]): {
|
|
|
18
19
|
};
|
|
19
20
|
export declare function generateTemporaryTitle(intl: IntlShape, data: IChatConversationLocal): string;
|
|
20
21
|
export declare function generateTitleFromQuestion(text: string): string;
|
|
22
|
+
export declare function convertReferenceTypeToGenAiType(type: GenAIObjectReferenceType): IGenAIContextObject["type"];
|
|
23
|
+
export declare function convertGenAiTypeToReferenceType(type: IGenAIContextObject["type"]): GenAIObjectReferenceType;
|
|
21
24
|
//# sourceMappingURL=utils.d.ts.map
|
package/esm/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG9F,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,CAAC,EAAE,OAAO,UAItG;AAED,wBAAgB,4BAA4B,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,2BAA2B,CAAC,EAAE,OAAO,UAGxC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAK9D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAEtE;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAK5F;AAED,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAEpG;AAOD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAKzE;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAEjF;AAED,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAKpG;AAED,wBAAgB,uCAAuC,CACnD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,UAGlB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAE;;;;EAMnE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAS5F;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgC9D;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,wBAAwB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAa3G;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,wBAAwB,CAa3G"}
|
package/esm/utils.js
CHANGED
|
@@ -90,3 +90,31 @@ export function generateTitleFromQuestion(text) {
|
|
|
90
90
|
}
|
|
91
91
|
return `${sanitizedText.slice(0, sliceEnd).trim()}...`;
|
|
92
92
|
}
|
|
93
|
+
export function convertReferenceTypeToGenAiType(type) {
|
|
94
|
+
switch (type) {
|
|
95
|
+
case "METRIC":
|
|
96
|
+
return "metric";
|
|
97
|
+
case "WIDGET":
|
|
98
|
+
return "widget";
|
|
99
|
+
case "ATTRIBUTE":
|
|
100
|
+
return "attribute";
|
|
101
|
+
case "DASHBOARD":
|
|
102
|
+
return "dashboard";
|
|
103
|
+
default:
|
|
104
|
+
return "dashboard";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export function convertGenAiTypeToReferenceType(type) {
|
|
108
|
+
switch (type) {
|
|
109
|
+
case "metric":
|
|
110
|
+
return "METRIC";
|
|
111
|
+
case "widget":
|
|
112
|
+
return "WIDGET";
|
|
113
|
+
case "attribute":
|
|
114
|
+
return "ATTRIBUTE";
|
|
115
|
+
case "dashboard":
|
|
116
|
+
return "DASHBOARD";
|
|
117
|
+
default:
|
|
118
|
+
return "DASHBOARD";
|
|
119
|
+
}
|
|
120
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-gen-ai",
|
|
3
|
-
"version": "11.48.0-alpha.
|
|
3
|
+
"version": "11.48.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.48.0-alpha.
|
|
61
|
-
"@gooddata/sdk-backend-spi": "11.48.0-alpha.
|
|
62
|
-
"@gooddata/sdk-model": "11.48.0-alpha.
|
|
63
|
-
"@gooddata/sdk-ui": "11.48.0-alpha.
|
|
64
|
-
"@gooddata/sdk-ui-charts": "11.48.0-alpha.
|
|
65
|
-
"@gooddata/sdk-ui-dashboard": "11.48.0-alpha.
|
|
66
|
-
"@gooddata/sdk-ui-filters": "11.48.0-alpha.
|
|
67
|
-
"@gooddata/sdk-ui-
|
|
68
|
-
"@gooddata/sdk-ui-
|
|
69
|
-
"@gooddata/sdk-ui-
|
|
70
|
-
"@gooddata/
|
|
71
|
-
"@gooddata/
|
|
60
|
+
"@gooddata/api-client-tiger": "11.48.0-alpha.3",
|
|
61
|
+
"@gooddata/sdk-backend-spi": "11.48.0-alpha.3",
|
|
62
|
+
"@gooddata/sdk-model": "11.48.0-alpha.3",
|
|
63
|
+
"@gooddata/sdk-ui": "11.48.0-alpha.3",
|
|
64
|
+
"@gooddata/sdk-ui-charts": "11.48.0-alpha.3",
|
|
65
|
+
"@gooddata/sdk-ui-dashboard": "11.48.0-alpha.3",
|
|
66
|
+
"@gooddata/sdk-ui-filters": "11.48.0-alpha.3",
|
|
67
|
+
"@gooddata/sdk-ui-kit": "11.48.0-alpha.3",
|
|
68
|
+
"@gooddata/sdk-ui-pivot": "11.48.0-alpha.3",
|
|
69
|
+
"@gooddata/sdk-ui-semantic-search": "11.48.0-alpha.3",
|
|
70
|
+
"@gooddata/sdk-ui-theme-provider": "11.48.0-alpha.3",
|
|
71
|
+
"@gooddata/util": "11.48.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.48.0-alpha.
|
|
115
|
-
"@gooddata/
|
|
116
|
-
"@gooddata/
|
|
117
|
-
"@gooddata/
|
|
118
|
-
"@gooddata/
|
|
119
|
-
"@gooddata/
|
|
120
|
-
"@gooddata/
|
|
114
|
+
"@gooddata/eslint-config": "11.48.0-alpha.3",
|
|
115
|
+
"@gooddata/reference-workspace": "11.48.0-alpha.3",
|
|
116
|
+
"@gooddata/sdk-backend-mockingbird": "11.48.0-alpha.3",
|
|
117
|
+
"@gooddata/sdk-ui-theme-provider": "11.48.0-alpha.3",
|
|
118
|
+
"@gooddata/stylelint-config": "11.48.0-alpha.3",
|
|
119
|
+
"@gooddata/oxlint-config": "11.48.0-alpha.3",
|
|
120
|
+
"@gooddata/i18n-toolkit": "11.48.0-alpha.3"
|
|
121
121
|
},
|
|
122
122
|
"peerDependencies": {
|
|
123
123
|
"react": "^18.0.0 || ^19.0.0",
|
package/styles/css/main.css
CHANGED
|
@@ -11739,15 +11739,6 @@ button.gd-list-item {
|
|
|
11739
11739
|
margin-top: 6px;
|
|
11740
11740
|
}
|
|
11741
11741
|
|
|
11742
|
-
.gd-list-item span.gd-kda-attributes-dropdown__key_drivers {
|
|
11743
|
-
flex: 0 0 auto;
|
|
11744
|
-
font-weight: bold;
|
|
11745
|
-
color: var(--gd-palette-complementary-7);
|
|
11746
|
-
margin-left: 5px;
|
|
11747
|
-
min-width: 35px;
|
|
11748
|
-
text-align: right;
|
|
11749
|
-
}
|
|
11750
|
-
|
|
11751
11742
|
.gd-kda-attributes-dropdown__subheader {
|
|
11752
11743
|
display: flex;
|
|
11753
11744
|
justify-content: flex-start;
|
|
@@ -11767,6 +11758,36 @@ button.gd-list-item {
|
|
|
11767
11758
|
flex: 0 0 auto;
|
|
11768
11759
|
}
|
|
11769
11760
|
|
|
11761
|
+
.gd-kda-attributes-dropdown__body {
|
|
11762
|
+
display: flex;
|
|
11763
|
+
flex-direction: column;
|
|
11764
|
+
box-sizing: border-box;
|
|
11765
|
+
width: 260px;
|
|
11766
|
+
}
|
|
11767
|
+
|
|
11768
|
+
.gd-kda-attributes-dropdown__actions-buttons {
|
|
11769
|
+
display: flex;
|
|
11770
|
+
justify-content: flex-end;
|
|
11771
|
+
gap: 10px;
|
|
11772
|
+
padding: 10px;
|
|
11773
|
+
}
|
|
11774
|
+
|
|
11775
|
+
.gd-kda-attributes-select-item__right {
|
|
11776
|
+
flex: 0 0 auto;
|
|
11777
|
+
min-width: 35px;
|
|
11778
|
+
margin-left: 5px;
|
|
11779
|
+
text-align: right;
|
|
11780
|
+
}
|
|
11781
|
+
|
|
11782
|
+
.gd-kda-attributes-dropdown__key_drivers {
|
|
11783
|
+
font-weight: bold;
|
|
11784
|
+
color: var(--gd-palette-complementary-7);
|
|
11785
|
+
}
|
|
11786
|
+
|
|
11787
|
+
.gd-kda-attributes-select .gd-ui-kit-paged-virtual-list__scroll-container {
|
|
11788
|
+
padding-right: 7px;
|
|
11789
|
+
}
|
|
11790
|
+
|
|
11770
11791
|
.gd-kda-trend-item {
|
|
11771
11792
|
display: flex;
|
|
11772
11793
|
flex-direction: row;
|
|
@@ -14202,6 +14223,7 @@ body.gd-kda-dialog-opened .highcharts-tooltip-container {
|
|
|
14202
14223
|
}
|
|
14203
14224
|
.gd-gen-ai-chat__context-indicator {
|
|
14204
14225
|
display: flex;
|
|
14226
|
+
flex-wrap: wrap;
|
|
14205
14227
|
align-items: baseline;
|
|
14206
14228
|
gap: 5px;
|
|
14207
14229
|
min-width: 0;
|