@gooddata/sdk-ui-gen-ai 11.43.0-alpha.2 → 11.43.0-alpha.4
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 +4826 -13873
- package/esm/components/ConfigContext.d.ts +5 -5
- package/esm/components/ConfigContext.d.ts.map +1 -1
- package/esm/components/ConfigContext.js +17 -8
- package/esm/components/GenAIChat.d.ts +1 -1
- package/esm/components/GenAIChat.d.ts.map +1 -1
- package/esm/components/GenAIChat.js +5 -4
- package/esm/components/GenAIChatDialog.d.ts +2 -2
- package/esm/components/GenAIChatDialog.d.ts.map +1 -1
- package/esm/components/GenAIChatDialog.js +4 -4
- package/esm/components/GenAiConversations.d.ts.map +1 -1
- package/esm/components/GenAiConversations.js +2 -2
- package/esm/components/GenAiStore.d.ts +9 -0
- package/esm/components/GenAiStore.d.ts.map +1 -1
- package/esm/components/GenAiStore.js +7 -4
- package/esm/components/hooks/useEndpointCheck.d.ts +1 -1
- package/esm/components/hooks/useEndpointCheck.d.ts.map +1 -1
- package/esm/components/messages/AssistantItem.d.ts +1 -1
- package/esm/components/messages/AssistantItem.d.ts.map +1 -1
- package/esm/components/messages/AssistantItem.js +8 -0
- package/esm/components/messages/AssistantItemFeedback.d.ts.map +1 -1
- package/esm/components/messages/AssistantItemFeedback.js +3 -0
- package/esm/components/messages/ItemsGroup.js +8 -10
- package/esm/components/messages/ToolItem.d.ts +1 -1
- package/esm/components/messages/ToolItem.d.ts.map +1 -1
- package/esm/components/messages/ToolItem.js +28 -14
- package/esm/components/messages/components/SemanticSearchTreeView.d.ts.map +1 -1
- package/esm/components/messages/components/SemanticSearchTreeView.js +2 -0
- package/esm/components/messages/contents/VisualizationContents.d.ts.map +1 -1
- package/esm/components/messages/contents/VisualizationContents.js +18 -3
- package/esm/components/messages/conversationContents/ConversationReasoningContent.d.ts.map +1 -1
- package/esm/components/messages/conversationContents/ConversationReasoningContent.js +1 -3
- package/esm/components/messages/conversationContents/ConversationVisualizationContent.d.ts.map +1 -1
- package/esm/components/messages/conversationContents/ConversationVisualizationContent.js +20 -5
- package/esm/hooks/useGenAIStore.d.ts +3 -0
- package/esm/hooks/useGenAIStore.d.ts.map +1 -1
- package/esm/hooks/useGenAIStore.js +4 -1
- package/esm/localization/bundles/de-DE.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/de-DE.localization-bundle.js +23 -11
- package/esm/localization/bundles/en-AU.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-AU.localization-bundle.js +23 -11
- package/esm/localization/bundles/en-GB.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-GB.localization-bundle.js +23 -11
- package/esm/localization/bundles/en-US.localization-bundle.d.ts +0 -16
- package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-US.localization-bundle.js +0 -16
- package/esm/localization/bundles/es-419.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/es-419.localization-bundle.js +23 -11
- package/esm/localization/bundles/es-ES.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/es-ES.localization-bundle.js +23 -11
- package/esm/localization/bundles/fi-FI.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/fi-FI.localization-bundle.js +23 -11
- package/esm/localization/bundles/fr-CA.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/fr-CA.localization-bundle.js +23 -11
- package/esm/localization/bundles/fr-FR.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/fr-FR.localization-bundle.js +23 -11
- package/esm/localization/bundles/id-ID.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/id-ID.localization-bundle.js +23 -11
- package/esm/localization/bundles/it-IT.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/it-IT.localization-bundle.js +23 -11
- package/esm/localization/bundles/ja-JP.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/ja-JP.localization-bundle.js +23 -11
- package/esm/localization/bundles/ko-KR.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/ko-KR.localization-bundle.js +23 -11
- package/esm/localization/bundles/nl-NL.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/nl-NL.localization-bundle.js +24 -12
- package/esm/localization/bundles/pl-PL.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/pl-PL.localization-bundle.js +23 -11
- package/esm/localization/bundles/pt-BR.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/pt-BR.localization-bundle.js +23 -11
- package/esm/localization/bundles/pt-PT.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/pt-PT.localization-bundle.js +23 -11
- package/esm/localization/bundles/ru-RU.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/ru-RU.localization-bundle.js +23 -11
- package/esm/localization/bundles/sl-SI.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/sl-SI.localization-bundle.js +23 -11
- package/esm/localization/bundles/th-TH.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/th-TH.localization-bundle.js +23 -11
- package/esm/localization/bundles/tr-TR.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/tr-TR.localization-bundle.js +23 -11
- package/esm/localization/bundles/uk-UA.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/uk-UA.localization-bundle.js +23 -11
- package/esm/localization/bundles/vi-VN.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/vi-VN.localization-bundle.js +23 -11
- package/esm/localization/bundles/zh-HK.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/zh-HK.localization-bundle.js +23 -11
- package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/zh-Hans.localization-bundle.js +23 -11
- package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts +23 -11
- package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/zh-Hant.localization-bundle.js +23 -11
- package/esm/sdk-ui-gen-ai.d.ts +9 -1
- package/esm/store/messages/messagesSlice.d.ts +3 -1
- package/esm/store/messages/messagesSlice.d.ts.map +1 -1
- package/esm/store/messages/messagesSlice.js +37 -1
- package/esm/store/options.d.ts +8 -0
- package/esm/store/options.d.ts.map +1 -1
- package/esm/store/options.js +12 -0
- package/esm/store/sideEffects/onThreadLoad.d.ts +8 -3
- package/esm/store/sideEffects/onThreadLoad.d.ts.map +1 -1
- package/esm/store/sideEffects/onThreadLoad.js +24 -1
- package/esm/store/sideEffects/onVisualizationSuccessSave.d.ts +2 -1
- package/esm/store/sideEffects/onVisualizationSuccessSave.d.ts.map +1 -1
- package/esm/store/sideEffects/onVisualizationSuccessSave.js +29 -2
- package/package.json +20 -20
- package/styles/css/main.css +18 -0
- package/styles/css/main.css.map +1 -1
- package/styles/css/messages.css +18 -0
- package/styles/css/messages.css.map +1 -1
- package/styles/scss/messages.scss +23 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { type PropsWithChildren } from "react";
|
|
2
2
|
import { type CatalogItem, type GenAIObjectType } from "@gooddata/sdk-model";
|
|
3
3
|
export type ConfigContext = {
|
|
4
|
-
allowNativeLinks
|
|
5
|
-
canManage
|
|
6
|
-
canAnalyze
|
|
7
|
-
canFullControl
|
|
8
|
-
linkHandler?: (linkClickEvent: LinkHandlerEvent) =>
|
|
4
|
+
allowNativeLinks?: boolean;
|
|
5
|
+
canManage?: boolean;
|
|
6
|
+
canAnalyze?: boolean;
|
|
7
|
+
canFullControl?: boolean;
|
|
8
|
+
linkHandler?: (linkClickEvent: LinkHandlerEvent) => string | undefined;
|
|
9
9
|
catalogItems?: CatalogItem[];
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigContext.d.ts","sourceRoot":"","sources":["../../src/components/ConfigContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAsC,MAAM,OAAO,CAAC;AAEnF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE7E,MAAM,MAAM,aAAa,GAAG;IACxB,gBAAgB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigContext.d.ts","sourceRoot":"","sources":["../../src/components/ConfigContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAsC,MAAM,OAAO,CAAC;AAEnF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE7E,MAAM,MAAM,aAAa,GAAG;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,SAAS,GAAG,eAAe,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC;CAClB,CAAC;AAIF,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACjB,EAAE,iBAAiB,CAAC,aAAa,CAAC,2CA6BlC;AAED,eAAO,MAAM,SAAS,qBAErB,CAAC"}
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
// (C) 2024-
|
|
2
|
+
// (C) 2024-2026 GoodData Corporation
|
|
3
3
|
import { createContext, useContext, useMemo } from "react";
|
|
4
|
-
const configContext = createContext({
|
|
5
|
-
allowNativeLinks: false,
|
|
6
|
-
canManage: false,
|
|
7
|
-
canAnalyze: false,
|
|
8
|
-
canFullControl: false,
|
|
9
|
-
});
|
|
4
|
+
const configContext = createContext({});
|
|
10
5
|
export function ConfigProvider({ children, allowNativeLinks, linkHandler, catalogItems, canManage, canAnalyze, canFullControl, }) {
|
|
6
|
+
const parentConfig = useConfig();
|
|
11
7
|
const value = useMemo(() => ({
|
|
8
|
+
allowNativeLinks: allowNativeLinks ?? parentConfig.allowNativeLinks,
|
|
9
|
+
linkHandler: linkHandler ?? parentConfig.linkHandler,
|
|
10
|
+
catalogItems: catalogItems ?? parentConfig.catalogItems,
|
|
11
|
+
canManage: canManage ?? parentConfig.canManage,
|
|
12
|
+
canAnalyze: canAnalyze ?? parentConfig.canAnalyze,
|
|
13
|
+
canFullControl: canFullControl ?? parentConfig.canFullControl,
|
|
14
|
+
}), [
|
|
12
15
|
allowNativeLinks,
|
|
16
|
+
parentConfig.allowNativeLinks,
|
|
17
|
+
parentConfig.linkHandler,
|
|
18
|
+
parentConfig.catalogItems,
|
|
19
|
+
parentConfig.canManage,
|
|
20
|
+
parentConfig.canAnalyze,
|
|
21
|
+
parentConfig.canFullControl,
|
|
13
22
|
linkHandler,
|
|
14
23
|
catalogItems,
|
|
15
24
|
canManage,
|
|
16
25
|
canAnalyze,
|
|
17
26
|
canFullControl,
|
|
18
|
-
|
|
27
|
+
]);
|
|
19
28
|
return _jsx(configContext.Provider, { value: value, children: children });
|
|
20
29
|
}
|
|
21
30
|
export const useConfig = () => {
|
|
@@ -14,7 +14,7 @@ export type GenAIAssistantProps = Omit<GenAiStoreProps, "children"> & {
|
|
|
14
14
|
* When provided, references to the metadata objects will be rendered as clickable links.
|
|
15
15
|
* Otherwise, the metadata objects will be rendered as plain text (using object title).
|
|
16
16
|
*/
|
|
17
|
-
onLinkClick?: (linkClickEvent: LinkHandlerEvent) =>
|
|
17
|
+
onLinkClick?: (linkClickEvent: LinkHandlerEvent) => string | undefined;
|
|
18
18
|
/**
|
|
19
19
|
* When true, allows the chat to render links that open in a new tab or window. This
|
|
20
20
|
* is handy only when embedding the chat in same environment where GD platform is running because
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAkB,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAkB,KAAK,gBAAgB,EAAa,MAAM,oBAAoB,CAAC;AAGtF,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IAClE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IAEvE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;IAErD;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAiDxD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,uBAAiB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { BackendProvider, WorkspaceProvider, useBackendStrict, useWorkspaceStric
|
|
|
3
3
|
import { IntlWrapper } from "../localization/IntlWrapper.js";
|
|
4
4
|
import { PermissionsProvider } from "../permissions/PermissionsContext.js";
|
|
5
5
|
import { usePermissions } from "../permissions/usePermissions.js";
|
|
6
|
-
import { ConfigProvider } from "./ConfigContext.js";
|
|
6
|
+
import { ConfigProvider, useConfig } from "./ConfigContext.js";
|
|
7
7
|
import { CustomizationProvider } from "./CustomizationProvider.js";
|
|
8
8
|
import { GenAIChatWrapper } from "./GenAIChatWrapper.js";
|
|
9
9
|
import { GenAiStore } from "./GenAiStore.js";
|
|
@@ -12,10 +12,10 @@ import { GenAiStore } from "./GenAiStore.js";
|
|
|
12
12
|
* @public
|
|
13
13
|
*/
|
|
14
14
|
export function GenAIAssistant(props) {
|
|
15
|
-
const { backend, workspace, locale, colorPalette, eventHandlers, settings, objectTypes, catalogItems, includeTags, excludeTags, isPreview, providedStore, onDispatcher, } = props;
|
|
15
|
+
const { backend, workspace, locale, colorPalette, eventHandlers, settings, objectTypes, catalogItems, includeTags, excludeTags, isPreview, providedStore, onDispatcher, onLinkClick, allowNativeLinks, } = props;
|
|
16
16
|
const effectiveBackend = useBackendStrict(backend);
|
|
17
17
|
const effectiveWorkspace = useWorkspaceStrict(workspace);
|
|
18
|
-
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, colorPalette: colorPalette, eventHandlers: eventHandlers, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, isPreview: isPreview, providedStore: providedStore, children: _jsx(BackendProvider, { backend: effectiveBackend, children: _jsx(WorkspaceProvider, { workspace: effectiveWorkspace, children: _jsx(PermissionsProvider, { children: _jsx(GenAIContent, { ...props }) }) }) }) }) }));
|
|
18
|
+
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, colorPalette: colorPalette, eventHandlers: eventHandlers, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, isPreview: isPreview, providedStore: providedStore, children: _jsx(BackendProvider, { backend: effectiveBackend, children: _jsx(WorkspaceProvider, { workspace: effectiveWorkspace, children: _jsx(PermissionsProvider, { children: _jsx(GenAIContent, { ...props }) }) }) }) }) }));
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* UI component that renders the Gen AI chat.
|
|
@@ -26,5 +26,6 @@ export const GenAIChat = GenAIAssistant;
|
|
|
26
26
|
function GenAIContent(props) {
|
|
27
27
|
const { onLinkClick, catalogItems, LandingScreenComponentProvider, DisclaimerComponentProvider, className, } = props;
|
|
28
28
|
const { permissions, loading } = usePermissions();
|
|
29
|
-
|
|
29
|
+
const { allowNativeLinks } = useConfig();
|
|
30
|
+
return (_jsx(ConfigProvider, { linkHandler: onLinkClick, catalogItems: catalogItems, allowNativeLinks: allowNativeLinks ?? props.allowNativeLinks, canFullControl: props.disableFullControl ? false : (permissions.canManageProject ?? false), canManage: props.disableManage ? false : (permissions.canManageProject ?? false), canAnalyze: props.disableAnalyze ? false : (permissions.canCreateVisualization ?? false), children: _jsx(CustomizationProvider, { landingScreenComponentProvider: LandingScreenComponentProvider, disclaimerComponentProvider: DisclaimerComponentProvider, children: _jsx(GenAIChatWrapper, { initializing: loading, className: className }) }) }));
|
|
30
31
|
}
|
|
@@ -12,8 +12,8 @@ export type GenAIChatDialogProps = Omit<GenAiStoreProps, "children"> & {
|
|
|
12
12
|
onOpen: () => void;
|
|
13
13
|
onClose: () => void;
|
|
14
14
|
returnFocusTo?: RefObject<HTMLElement | null> | string;
|
|
15
|
-
onLinkClick?: (linkClickEvent: LinkHandlerEvent) =>
|
|
15
|
+
onLinkClick?: (linkClickEvent: LinkHandlerEvent) => string | undefined;
|
|
16
16
|
LandingScreenComponentProvider?: () => ComponentType;
|
|
17
17
|
};
|
|
18
|
-
export declare function GenAIChatDialog({ backend, workspace, locale, isOpen, onOpen, onClose, settings, className, dialogPosition, returnFocusTo, objectTypes, includeTags, excludeTags, canManage, canAnalyze, canFullControl, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, LandingScreenComponentProvider }: GenAIChatDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare function GenAIChatDialog({ backend, workspace, locale, isOpen, onOpen, onClose, settings, className, dialogPosition, allowNativeLinks, returnFocusTo, objectTypes, includeTags, excludeTags, canManage, canAnalyze, canFullControl, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, LandingScreenComponentProvider }: GenAIChatDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
19
19
|
//# sourceMappingURL=GenAIChatDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAIChatDialog.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAA2C,MAAM,OAAO,CAAC;AAcpG,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IACnE,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,
|
|
1
|
+
{"version":3,"file":"GenAIChatDialog.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAA2C,MAAM,OAAO,CAAC;AAcpG,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IACnE,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;CACxD,CAAC;AAOF,wBAAgB,eAAe,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,gBAAuB,EACvB,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAiB,EACjB,UAAkB,EAClB,cAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,8BAA8B,EACjC,EAAE,oBAAoB,2CA2CtB"}
|
|
@@ -15,12 +15,12 @@ import { GenAiStore } from "./GenAiStore.js";
|
|
|
15
15
|
// - High enough to be over other dialogs
|
|
16
16
|
// - Below chart tooltips
|
|
17
17
|
const DEFAULT_CHAT_Z_INDEX = 3000;
|
|
18
|
-
export function GenAIChatDialog({ backend, workspace, locale, isOpen, onOpen, onClose, settings, className, dialogPosition, returnFocusTo, objectTypes, includeTags, excludeTags, canManage = false, canAnalyze = false, canFullControl = false, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, LandingScreenComponentProvider, }) {
|
|
18
|
+
export function GenAIChatDialog({ backend, workspace, locale, isOpen, onOpen, onClose, settings, className, dialogPosition, allowNativeLinks = true, returnFocusTo, objectTypes, includeTags, excludeTags, canManage = false, canAnalyze = false, canFullControl = false, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, LandingScreenComponentProvider, }) {
|
|
19
19
|
const effectiveBackend = useBackendStrict(backend);
|
|
20
20
|
const effectiveWorkspace = useWorkspaceStrict(workspace);
|
|
21
|
-
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, eventHandlers: eventHandlers, colorPalette: colorPalette, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, children: (genAIStore) => (_jsx(GenAIChatDialogContent, { genAIStore: genAIStore, backend: effectiveBackend, workspace: effectiveWorkspace, className: className, dialogPosition: dialogPosition, isOpen: isOpen, onOpen: onOpen, onClose: onClose, returnFocusTo: returnFocusTo, onLinkClick: onLinkClick, catalogItems: catalogItems, canManage: canManage, canAnalyze: canAnalyze, canFullControl: canFullControl, LandingScreenComponentProvider: LandingScreenComponentProvider })) }) }));
|
|
21
|
+
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, eventHandlers: eventHandlers, colorPalette: colorPalette, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, children: (genAIStore) => (_jsx(GenAIChatDialogContent, { genAIStore: genAIStore, backend: effectiveBackend, workspace: effectiveWorkspace, className: className, dialogPosition: dialogPosition, isOpen: isOpen, onOpen: onOpen, onClose: onClose, returnFocusTo: returnFocusTo, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, catalogItems: catalogItems, canManage: canManage, canAnalyze: canAnalyze, canFullControl: canFullControl, LandingScreenComponentProvider: LandingScreenComponentProvider })) }) }));
|
|
22
22
|
}
|
|
23
|
-
function GenAIChatDialogContent({ genAIStore, backend, workspace, className, dialogPosition, isOpen, onOpen, onClose, returnFocusTo, onLinkClick, catalogItems, canManage, canAnalyze, canFullControl, LandingScreenComponentProvider, }) {
|
|
23
|
+
function GenAIChatDialogContent({ genAIStore, backend, workspace, className, dialogPosition, isOpen, onOpen, onClose, returnFocusTo, onLinkClick, allowNativeLinks, catalogItems, canManage, canAnalyze, canFullControl, LandingScreenComponentProvider, }) {
|
|
24
24
|
const open = useRef(onOpen);
|
|
25
25
|
open.current = onOpen;
|
|
26
26
|
const close = useRef(onClose);
|
|
@@ -58,5 +58,5 @@ function GenAIChatDialogContent({ genAIStore, backend, workspace, className, dia
|
|
|
58
58
|
const chatOverlayController = useMemo(() => parentOverlayController ?? OverlayController.getInstance(DEFAULT_CHAT_Z_INDEX), [parentOverlayController]);
|
|
59
59
|
if (!isOpen)
|
|
60
60
|
return null;
|
|
61
|
-
return (_jsx(BackendProvider, { backend: backend, children: _jsx(WorkspaceProvider, { workspace: workspace, children: _jsx(OverlayControllerProvider, { overlayController: chatOverlayController, children: _jsx(ConfigProvider, { allowNativeLinks:
|
|
61
|
+
return (_jsx(BackendProvider, { backend: backend, children: _jsx(WorkspaceProvider, { workspace: workspace, children: _jsx(OverlayControllerProvider, { overlayController: chatOverlayController, children: _jsx(ConfigProvider, { allowNativeLinks: allowNativeLinks, linkHandler: onLinkClick, catalogItems: catalogItems, canManage: canManage, canAnalyze: canAnalyze, canFullControl: canFullControl, children: _jsx(CustomizationProvider, { landingScreenComponentProvider: LandingScreenComponentProvider, children: _jsx(GenAIChatOverlay, { className: className, dialogPosition: dialogPosition, returnFocusTo: returnFocusTo, onClose: onCloseHandler }) }) }) }) }) }));
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAiConversations.d.ts","sourceRoot":"","sources":["../../src/components/GenAiConversations.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAc1D,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGnE;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IACtE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"GenAiConversations.d.ts","sourceRoot":"","sources":["../../src/components/GenAiConversations.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAc1D,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGnE;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IACtE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAiDhE"}
|
|
@@ -20,10 +20,10 @@ import { useThreadLoading } from "./hooks/useThreadLoading.js";
|
|
|
20
20
|
* @public
|
|
21
21
|
*/
|
|
22
22
|
export function GenAIConversations(props) {
|
|
23
|
-
const { backend, workspace, locale, eventHandlers, settings, catalogItems, onDispatcher, isPreview, objectTypes, includeTags, excludeTags, colorPalette, providedStore, } = props;
|
|
23
|
+
const { backend, workspace, locale, eventHandlers, settings, catalogItems, onDispatcher, isPreview, objectTypes, includeTags, excludeTags, colorPalette, providedStore, allowNativeLinks, onLinkClick, } = props;
|
|
24
24
|
const effectiveBackend = useBackendStrict(backend);
|
|
25
25
|
const effectiveWorkspace = useWorkspaceStrict(workspace);
|
|
26
|
-
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { providedStore: providedStore, backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, eventHandlers: eventHandlers, settings: settings, catalogItems: catalogItems, isPreview: isPreview, excludeTags: excludeTags, includeTags: includeTags, colorPalette: colorPalette, objectTypes: objectTypes, children: _jsx(BackendProvider, { backend: effectiveBackend, children: _jsx(WorkspaceProvider, { workspace: effectiveWorkspace, children: _jsx(PermissionsProvider, { children: _jsx(GenAIConversationsContent, { ...props }) }) }) }) }) }));
|
|
26
|
+
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { providedStore: providedStore, backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, eventHandlers: eventHandlers, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, settings: settings, catalogItems: catalogItems, isPreview: isPreview, excludeTags: excludeTags, includeTags: includeTags, colorPalette: colorPalette, objectTypes: objectTypes, children: _jsx(BackendProvider, { backend: effectiveBackend, children: _jsx(WorkspaceProvider, { workspace: effectiveWorkspace, children: _jsx(PermissionsProvider, { children: _jsx(GenAIConversationsContent, { ...props }) }) }) }) }) }));
|
|
27
27
|
}
|
|
28
28
|
const mapDispatchToProps = {
|
|
29
29
|
loadConversation: setCurrentConversationAction,
|
|
@@ -3,6 +3,7 @@ import { type EnhancedStore, type Store } from "@reduxjs/toolkit";
|
|
|
3
3
|
import { type IAnalyticalBackend, type IUserWorkspaceSettings } from "@gooddata/sdk-backend-spi";
|
|
4
4
|
import { type CatalogItem, type GenAIObjectType, type IColorPalette } from "@gooddata/sdk-model";
|
|
5
5
|
import { type ChatEventHandler } from "../store/events.js";
|
|
6
|
+
import { type LinkHandlerEvent } from "./ConfigContext.js";
|
|
6
7
|
/**
|
|
7
8
|
* Props for the GenAiStore component.
|
|
8
9
|
* @public
|
|
@@ -28,6 +29,14 @@ export type GenAiStoreProps = {
|
|
|
28
29
|
* User settings to use for the chat UI.
|
|
29
30
|
*/
|
|
30
31
|
settings?: IUserWorkspaceSettings;
|
|
32
|
+
/**
|
|
33
|
+
* Callback to handle link clicks.
|
|
34
|
+
*/
|
|
35
|
+
onLinkClick?: (linkClickEvent: LinkHandlerEvent) => string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Whether to allow native links to be opened in a new tab.
|
|
38
|
+
*/
|
|
39
|
+
allowNativeLinks?: boolean;
|
|
31
40
|
/**
|
|
32
41
|
* Event handlers to subscribe to chat events.
|
|
33
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAiStore.d.ts","sourceRoot":"","sources":["../../src/components/GenAiStore.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKjG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"GenAiStore.d.ts","sourceRoot":"","sources":["../../src/components/GenAiStore.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKjG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC7D;;OAEG;IACH,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC;IAEjE;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kDAmDhD"}
|
|
@@ -6,6 +6,7 @@ import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
|
|
|
6
6
|
import { useGenAIStore } from "../hooks/useGenAIStore.js";
|
|
7
7
|
import { chatWindowSliceName } from "../store/chatWindow/chatWindowSlice.js";
|
|
8
8
|
import { messagesSliceName } from "../store/messages/messagesSlice.js";
|
|
9
|
+
import { ConfigProvider } from "./ConfigContext.js";
|
|
9
10
|
/**
|
|
10
11
|
* Provides the Gen AI store to the application.
|
|
11
12
|
* @public
|
|
@@ -37,12 +38,12 @@ export function GenAiStore(props) {
|
|
|
37
38
|
return null;
|
|
38
39
|
}
|
|
39
40
|
if (externalStore) {
|
|
40
|
-
return (_jsx(ExternalStore, { ...props, currentStore: externalStore, children: children }));
|
|
41
|
+
return (_jsx(ConfigProvider, { allowNativeLinks: props.allowNativeLinks, linkHandler: props.onLinkClick, children: _jsx(ExternalStore, { ...props, currentStore: externalStore, children: children }) }));
|
|
41
42
|
}
|
|
42
43
|
if (injectedStore) {
|
|
43
|
-
return (_jsx(InjectedStore, { ...props, currentStore: injectedStore, children: children }));
|
|
44
|
+
return (_jsx(ConfigProvider, { allowNativeLinks: props.allowNativeLinks, linkHandler: props.onLinkClick, children: _jsx(InjectedStore, { ...props, currentStore: injectedStore, children: children }) }));
|
|
44
45
|
}
|
|
45
|
-
return _jsx(InternalStore, { ...props, children: children });
|
|
46
|
+
return (_jsx(ConfigProvider, { allowNativeLinks: props.allowNativeLinks, linkHandler: props.onLinkClick, children: _jsx(InternalStore, { ...props, children: children }) }));
|
|
46
47
|
}
|
|
47
48
|
function ExternalStore({ onDispatcher, children, currentStore, }) {
|
|
48
49
|
useEffect(() => {
|
|
@@ -58,7 +59,7 @@ function InjectedStore({ onDispatcher, children, currentStore, }) {
|
|
|
58
59
|
const content = typeof children === "function" ? children(currentStore) : children;
|
|
59
60
|
return _jsx(StoreProvider, { store: currentStore, children: content });
|
|
60
61
|
}
|
|
61
|
-
function InternalStore({ backend, workspace, onDispatcher, children, eventHandlers, settings, catalogItems, includeTags, excludeTags, objectTypes, isPreview, colorPalette, }) {
|
|
62
|
+
function InternalStore({ backend, workspace, onDispatcher, children, eventHandlers, settings, catalogItems, includeTags, excludeTags, objectTypes, allowNativeLinks, onLinkClick, isPreview, colorPalette, }) {
|
|
62
63
|
const effectiveBackend = useBackendStrict(backend);
|
|
63
64
|
const effectiveWorkspace = useWorkspaceStrict(workspace);
|
|
64
65
|
const genAIStore = useGenAIStore(effectiveBackend, effectiveWorkspace, {
|
|
@@ -70,6 +71,8 @@ function InternalStore({ backend, workspace, onDispatcher, children, eventHandle
|
|
|
70
71
|
excludeTags,
|
|
71
72
|
catalogItems,
|
|
72
73
|
isPreview,
|
|
74
|
+
allowNativeLinks,
|
|
75
|
+
onLinkClick,
|
|
73
76
|
});
|
|
74
77
|
useEffect(() => {
|
|
75
78
|
onDispatcher?.(genAIStore.dispatch);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IUserWorkspaceSettings } from "@gooddata/sdk-backend-spi";
|
|
2
|
-
export declare function useEndpointCheck(settings: IUserWorkspaceSettings | undefined, canFullControl
|
|
2
|
+
export declare function useEndpointCheck(settings: IUserWorkspaceSettings | undefined, canFullControl?: boolean): {
|
|
3
3
|
checking: boolean;
|
|
4
4
|
count: number;
|
|
5
5
|
evaluated: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEndpointCheck.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useEndpointCheck.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKjG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,EAAE,cAAc,EAAE,OAAO;;;;;;
|
|
1
|
+
{"version":3,"file":"useEndpointCheck.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useEndpointCheck.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKjG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,EAAE,cAAc,CAAC,EAAE,OAAO;;;;;;EAgCtG"}
|
|
@@ -5,6 +5,6 @@ type AssistantItemProps = {
|
|
|
5
5
|
message: IChatConversationLocalItem;
|
|
6
6
|
isLast?: boolean;
|
|
7
7
|
};
|
|
8
|
-
export declare function AssistantItemComponent({ message, groups, isLast }: AssistantItemProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function AssistantItemComponent({ message, groups, isLast }: AssistantItemProps): import("react/jsx-runtime").JSX.Element | null;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=AssistantItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantItem.d.ts","sourceRoot":"","sources":["../../../src/components/messages/AssistantItem.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAQnE,KAAK,kBAAkB,GAAG;IACtB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,EAAE,0BAA0B,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"AssistantItem.d.ts","sourceRoot":"","sources":["../../../src/components/messages/AssistantItem.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAQnE,KAAK,kBAAkB,GAAG;IACtB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,EAAE,0BAA0B,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,kBAAkB,kDAmDrF"}
|
|
@@ -14,6 +14,14 @@ export function AssistantItemComponent({ message, groups, isLast }) {
|
|
|
14
14
|
const messageState = getItemState(message);
|
|
15
15
|
const references = useToolsReferences(groups);
|
|
16
16
|
const classNames = cx("gd-gen-ai-chat__messages__conversation", "gd-gen-ai-chat__messages__conversation--assistant", `gd-gen-ai-chat__messages__conversation--${message.content.type}`, messageState === "cancelled" && "gd-gen-ai-chat__messages__conversation--cancelled", isLast && "gd-gen-ai-chat__messages__conversation--isLast");
|
|
17
|
+
//NOTE: For now we want to hide all tool calls
|
|
18
|
+
if (message.content.type === "toolCall" || message.content.type === "toolResult") {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
//NOTE: For now we want to hide all reasoning messages without summary
|
|
22
|
+
if (message.content.type === "reasoning" && !message.content.summary) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
17
25
|
return (_jsxs("div", { className: classNames, "data-state": messageState, "data-testid": "gen-ai-conversation-assistant-message", children: [
|
|
18
26
|
_jsx("span", { className: "gd-gen-ai-chat__visually__hidden", children: intl.formatMessage({ id: "gd.gen-ai.message.label.assistant" }) }), _jsx(ReasoningIcon, { content: message.content }), _jsx(ConversationItemContents, { role: "assistant", message: message, references: references, isLoading: messageState === "loading", isLast: isLast }), _jsx(AssistantItemSuggestions, { type: "followUp", content: message.content, showSuggestions: true, references: references }), _jsx(AssistantItemFeedback, { group: group, message: message, isLast: isLast }), _jsx(AssistantItemSuggestions, { type: "actions", content: message.content, showSuggestions: isLast })
|
|
19
27
|
] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantItemFeedback.d.ts","sourceRoot":"","sources":["../../../src/components/messages/AssistantItemFeedback.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKnE,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,0BAA0B,CAAC;IACpC,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"AssistantItemFeedback.d.ts","sourceRoot":"","sources":["../../../src/components/messages/AssistantItemFeedback.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKnE,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,0BAA0B,CAAC;IACpC,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AA8ED,eAAO,MAAM,qBAAqB,EAAE,GAAkE,CAAC"}
|
|
@@ -13,6 +13,9 @@ function AssistantItemFeedbackCore({ message, group, isLast, setUserFeedback })
|
|
|
13
13
|
if (group.type !== "assistant" || !message.complete) {
|
|
14
14
|
return null;
|
|
15
15
|
}
|
|
16
|
+
if (message.content.type === "reasoning") {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
16
19
|
const thumbsUpLabel = intl.formatMessage({ id: "gd.gen-ai.feedback.like" });
|
|
17
20
|
const thumbsDownLabel = intl.formatMessage({ id: "gd.gen-ai.feedback.dislike" });
|
|
18
21
|
const type = message.feedback?.feedback;
|
|
@@ -3,7 +3,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
import { useMemo, useState } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { defineMessages, useIntl } from "react-intl";
|
|
6
|
-
import { UiButton } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
import { LoadingSpinner, UiButton } from "@gooddata/sdk-ui-kit";
|
|
7
7
|
import { removeMarkdown } from "../utils/markdownUtils.js";
|
|
8
8
|
export function ItemsGroup({ group, previousGroup, children }) {
|
|
9
9
|
const classNames = cx("gd-gen-ai-chat__messages__conversation-group", {
|
|
@@ -26,7 +26,7 @@ function ReasoningItemsGroup({ classNames, group, previousGroup, children }) {
|
|
|
26
26
|
_jsxs("div", { className: cx("gd-gen-ai-chat__messages__conversation-group--header", {
|
|
27
27
|
"gd-gen-ai-chat__messages__conversation-group--header--completed": isCompleted,
|
|
28
28
|
}), children: [
|
|
29
|
-
_jsx("span", { className: "gd-gen-ai-chat__visually__hidden", "aria-live": "polite", "aria-atomic": "true", children: lastMessage }), isCompleted && isEmpty ? (_jsx(UiButton, { isDisabled: true, label: lastMessage, dataTestId: "reasoning", accessibilityConfig: { ariaExpanded: false }, iconBefore: "brain", iconBeforeSize: 12, variant: "tertiary" })) : (_jsx(UiButton, { label: lastMessage, dataTestId: "reasoning", onClick: () => setIsExpanded(!isExpanded), accessibilityConfig: { ariaExpanded: isExpanded }, iconBefore: isExpanded ? "navigateDown" : "navigateRight", iconBeforeSize: 12, variant: "tertiary" })), isCompleted && duration ? (_jsx("div", { className: "gd-gen-ai-chat__messages__conversation-group--header--duration", children: duration })) : null] }), isExpanded ? (
|
|
29
|
+
_jsx("span", { className: "gd-gen-ai-chat__visually__hidden", "aria-live": "polite", "aria-atomic": "true", children: lastMessage }), isCompleted && isEmpty ? (_jsx(UiButton, { isDisabled: true, label: lastMessage, dataTestId: "reasoning", accessibilityConfig: { ariaExpanded: false }, iconBefore: "brain", iconBeforeSize: 12, variant: "tertiary" })) : (_jsx(UiButton, { label: lastMessage, dataTestId: "reasoning", onClick: () => setIsExpanded(!isExpanded), accessibilityConfig: { ariaExpanded: isExpanded }, iconBefore: isExpanded ? "navigateDown" : "navigateRight", iconBeforeSize: 12, variant: "tertiary" })), isCompleted && duration ? (_jsx("div", { className: "gd-gen-ai-chat__messages__conversation-group--header--duration", children: duration })) : null] }), isExpanded ? (_jsxs("div", { className: "gd-gen-ai-chat__messages__conversation-group--content", "data-testid": "gen-ai-reasoning-group-content", children: [children, isCompleted ? null : (_jsx("div", { className: "gd-gen-ai-chat__messages__conversation-group--content--loading", children: _jsx(LoadingSpinner, { className: "gd-gen-ai-chat__messages__conversation-group--content--loading--spinner" }) }))] })) : null] }));
|
|
30
30
|
}
|
|
31
31
|
function useReasoningGroup(previousGroup, group) {
|
|
32
32
|
const intl = useIntl();
|
|
@@ -47,22 +47,20 @@ function useReasoningGroup(previousGroup, group) {
|
|
|
47
47
|
}));
|
|
48
48
|
}, [group.messages]);
|
|
49
49
|
const messages = useMemo(() => {
|
|
50
|
+
let last = "";
|
|
50
51
|
return group.messages.map((m) => {
|
|
51
|
-
if (m.complete) {
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
52
|
switch (m.content.type) {
|
|
55
53
|
case "reasoning":
|
|
56
|
-
|
|
54
|
+
last = m.content.summary
|
|
57
55
|
? removeMarkdown(m.content.summary.slice(0, 40))
|
|
58
56
|
: intl.formatMessage({ id: "gd.gen-ai.state.thinking" });
|
|
57
|
+
break;
|
|
59
58
|
case "toolCall":
|
|
60
|
-
return intl.formatMessage({ id: "gd.gen-ai.message.reasoning.tool-call.plain" }, { name: m.content.name });
|
|
61
59
|
case "toolResult":
|
|
62
|
-
return intl.formatMessage({ id: "gd.gen-ai.message.reasoning.tool-result.plain" });
|
|
63
60
|
default:
|
|
64
|
-
|
|
61
|
+
break;
|
|
65
62
|
}
|
|
63
|
+
return last;
|
|
66
64
|
});
|
|
67
65
|
}, [group.messages, intl]);
|
|
68
66
|
const lastMessage = useMemo(() => {
|
|
@@ -70,7 +68,7 @@ function useReasoningGroup(previousGroup, group) {
|
|
|
70
68
|
return intl.formatMessage({ id: "gd.gen-ai.routing.thinking-process" });
|
|
71
69
|
}
|
|
72
70
|
const lastMessageContent = messages[messages.length - 1];
|
|
73
|
-
return `${lastMessageContent
|
|
71
|
+
return `${lastMessageContent || intl.formatMessage({ id: "gd.gen-ai.state.thinking" })}...`;
|
|
74
72
|
}, [intl, isCompleted, messages]);
|
|
75
73
|
const duration = useMemo(() => {
|
|
76
74
|
if (!previousGroup) {
|
|
@@ -5,6 +5,6 @@ type ToolItemProps = {
|
|
|
5
5
|
groups: IChatMessagesGroup[];
|
|
6
6
|
isLast?: boolean;
|
|
7
7
|
};
|
|
8
|
-
export declare function ToolItemComponent(
|
|
8
|
+
export declare function ToolItemComponent(_: ToolItemProps): null;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=ToolItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolItem.d.ts","sourceRoot":"","sources":["../../../src/components/messages/ToolItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ToolItem.d.ts","sourceRoot":"","sources":["../../../src/components/messages/ToolItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,0BAA0B,CAAC;IACpC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,QA6BjD"}
|
|
@@ -1,16 +1,30 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
// (C) 2024-2026 GoodData Corporation
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
export function ToolItemComponent(_) {
|
|
3
|
+
return null;
|
|
4
|
+
//NOTE: For now we want to hide all tool calls but keep content for future use
|
|
5
|
+
// const intl = useIntl();
|
|
6
|
+
//
|
|
7
|
+
// const messageState = getItemState(message);
|
|
8
|
+
// const references = useToolsReferences(groups);
|
|
9
|
+
//
|
|
10
|
+
// const classNames = cx(
|
|
11
|
+
// "gd-gen-ai-chat__messages__conversation",
|
|
12
|
+
// "gd-gen-ai-chat__messages__conversation--tool",
|
|
13
|
+
// messageState === "cancelled" && "gd-gen-ai-chat__messages__conversation--cancelled",
|
|
14
|
+
// );
|
|
15
|
+
//
|
|
16
|
+
// return (
|
|
17
|
+
// <div className={classNames} data-state={messageState}>
|
|
18
|
+
// <span className="gd-gen-ai-chat__visually__hidden">
|
|
19
|
+
// {intl.formatMessage({ id: "gd.gen-ai.message.label.tool" })}
|
|
20
|
+
// </span>
|
|
21
|
+
// <ConversationItemContents
|
|
22
|
+
// role="tool"
|
|
23
|
+
// isLast={isLast}
|
|
24
|
+
// message={message}
|
|
25
|
+
// references={references}
|
|
26
|
+
// isLoading={messageState === "loading"}
|
|
27
|
+
// />
|
|
28
|
+
// </div>
|
|
29
|
+
// );
|
|
16
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SemanticSearchTreeView.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/components/SemanticSearchTreeView.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAIhE,KAAK,2BAA2B,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CAQxE;AAED,wBAAgB,0BAA0B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"file":"SemanticSearchTreeView.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/components/SemanticSearchTreeView.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAIhE,KAAK,2BAA2B,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CAQxE;AAED,wBAAgB,0BAA0B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,2BAA2B,kDA0ExG"}
|
|
@@ -18,6 +18,7 @@ export function SemanticSearchTreeViewImpl({ workspace, content, maxHeight }) {
|
|
|
18
18
|
const canEdit = canFullControl || canManage || canAnalyze;
|
|
19
19
|
const useHostMetricEditor = Boolean(settings?.enableShellApplication_metricEditor);
|
|
20
20
|
const useHostAnalyticalDesigner = Boolean(settings?.enableShellApplication_analyticalDesigner);
|
|
21
|
+
const useHostLdmModeler = Boolean(settings?.enableShellApplication_ldmModeler);
|
|
21
22
|
const useHostDashboards = Boolean(settings?.enableShellApplication_dashboards);
|
|
22
23
|
const items = buildSemanticSearchTreeViewItems({
|
|
23
24
|
intl,
|
|
@@ -29,6 +30,7 @@ export function SemanticSearchTreeViewImpl({ workspace, content, maxHeight }) {
|
|
|
29
30
|
uiPathOptions: {
|
|
30
31
|
useHostedMetricEditor: useHostMetricEditor,
|
|
31
32
|
useHostedAnalyticalDesigner: useHostAnalyticalDesigner,
|
|
33
|
+
useHostedLdmModeler: useHostLdmModeler,
|
|
32
34
|
useHostedDashboards: useHostDashboards,
|
|
33
35
|
},
|
|
34
36
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualizationContents.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/VisualizationContents.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAEH,KAAK,aAAa,EAYrB,MAAM,qBAAqB,CAAC;AAgD7B,OAAO,EAAE,KAAK,qBAAqB,EAAqC,MAAM,mBAAmB,CAAC;AAMlG,OAAO,EAEH,0BAA0B,EAC7B,MAAM,8CAA8C,CAAC;AA+BtD,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxD,oBAAoB,CAAC,EAAE,OAAO,0BAA0B,CAAC;CAC5D,CAAC;AAEF,iBAAS,kCAAkC,CAAC,EACxC,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACZ,mBAA0B,EAC1B,4BAAoC,EACpC,oBAA4B,EAC5B,oBAA4B,EAC5B,WAAW,EACX,eAAe,EACf,eAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACvB,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"VisualizationContents.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/VisualizationContents.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAEH,KAAK,aAAa,EAYrB,MAAM,qBAAqB,CAAC;AAgD7B,OAAO,EAAE,KAAK,qBAAqB,EAAqC,MAAM,mBAAmB,CAAC;AAMlG,OAAO,EAEH,0BAA0B,EAC7B,MAAM,8CAA8C,CAAC;AA+BtD,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxD,oBAAoB,CAAC,EAAE,OAAO,0BAA0B,CAAC;CAC5D,CAAC;AAEF,iBAAS,kCAAkC,CAAC,EACxC,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACZ,mBAA0B,EAC1B,4BAAoC,EACpC,oBAA4B,EAC5B,oBAA4B,EAC5B,WAAW,EACX,eAAe,EACf,eAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACvB,EAAE,0BAA0B,2CAksB5B;AA2XD,eAAO,MAAM,8BAA8B;;;;;;;EAGN,CAAC"}
|
|
@@ -161,9 +161,24 @@ function VisualizationContentsComponentCore({ content, messageId, useMarkdown, c
|
|
|
161
161
|
break;
|
|
162
162
|
case "button-copy":
|
|
163
163
|
if (visualization?.savedVisualizationId) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
let link = undefined;
|
|
165
|
+
if (config.allowNativeLinks) {
|
|
166
|
+
link = getAbsoluteVisualizationHref(workspaceId, visualization.savedVisualizationId, useHostedAnalyticalDesigner);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
link = config.linkHandler?.({
|
|
170
|
+
id: visualization.savedVisualizationId,
|
|
171
|
+
type: "visualization",
|
|
172
|
+
workspaceId,
|
|
173
|
+
newTab: e.metaKey,
|
|
174
|
+
preventDefault: e.preventDefault.bind(e),
|
|
175
|
+
itemUrl: getAbsoluteVisualizationHref(workspaceId, visualization.savedVisualizationId, useHostedAnalyticalDesigner),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (link) {
|
|
179
|
+
copy(link);
|
|
180
|
+
onCopyToClipboard?.({ content: link });
|
|
181
|
+
}
|
|
167
182
|
}
|
|
168
183
|
setMenuButtonOpen(false);
|
|
169
184
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationReasoningContent.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/ConversationReasoningContent.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConversationReasoningContent.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/ConversationReasoningContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,MAAM,MAAM,iCAAiC,GAAG;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,EACzC,OAAO,EACP,SAAS,EACT,WAAW,EACd,EAAE,iCAAiC,2CAenC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2024-2026 GoodData Corporation
|
|
3
3
|
import cx from "classnames";
|
|
4
|
-
import { useIntl } from "react-intl";
|
|
5
4
|
import { MarkdownComponent } from "../contents/Markdown.js";
|
|
6
5
|
export function ConversationReasoningContent({ summary, className, useMarkdown, }) {
|
|
7
|
-
const intl = useIntl();
|
|
8
6
|
const classNames = cx("gd-gen-ai-chat__conversation__item__content", "gd-gen-ai-chat__conversation__item__content--reasoning", {
|
|
9
7
|
"gd-gen-ai-chat__summary__empty": !summary,
|
|
10
8
|
}, className);
|
|
11
|
-
return (_jsx("div", { className: classNames, children: _jsx(MarkdownComponent, { allowMarkdown: useMarkdown, children: summary
|
|
9
|
+
return (_jsx("div", { className: classNames, children: _jsx(MarkdownComponent, { allowMarkdown: useMarkdown, children: summary }) }));
|
|
12
10
|
}
|
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;
|
|
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;AAymBD,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;EAGN,CAAC"}
|
|
@@ -302,14 +302,29 @@ function useHandlers({ visualization, setSaveDialogOpen, onCopyToClipboard }) {
|
|
|
302
302
|
setSaveDialogOpen("explore");
|
|
303
303
|
}
|
|
304
304
|
}, [config, setSaveDialogOpen, visualization, workspaceId, useHostedAnalyticalDesigner]);
|
|
305
|
-
const onCopy = useCallback(() => {
|
|
305
|
+
const onCopy = useCallback((e) => {
|
|
306
306
|
if (!visualization) {
|
|
307
307
|
return;
|
|
308
308
|
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
309
|
+
let link = undefined;
|
|
310
|
+
if (config.allowNativeLinks) {
|
|
311
|
+
link = getAbsoluteVisualizationHref(workspaceId, visualization.insight.identifier, useHostedAnalyticalDesigner);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
link = config.linkHandler?.({
|
|
315
|
+
id: visualization.insight.identifier,
|
|
316
|
+
type: "visualization",
|
|
317
|
+
workspaceId,
|
|
318
|
+
newTab: e.metaKey,
|
|
319
|
+
preventDefault: e.preventDefault.bind(e),
|
|
320
|
+
itemUrl: getAbsoluteVisualizationHref(workspaceId, visualization.insight.identifier, useHostedAnalyticalDesigner),
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
if (link) {
|
|
324
|
+
copy(link);
|
|
325
|
+
onCopyToClipboard?.({ content: link });
|
|
326
|
+
}
|
|
327
|
+
}, [visualization, config, workspaceId, useHostedAnalyticalDesigner, onCopyToClipboard]);
|
|
313
328
|
return {
|
|
314
329
|
onSave,
|
|
315
330
|
onOpen,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type IAnalyticalBackend, type IUserWorkspaceSettings } from "@gooddata/sdk-backend-spi";
|
|
2
2
|
import { type CatalogItem, type GenAIObjectType, type IColorPalette } from "@gooddata/sdk-model";
|
|
3
|
+
import type { LinkHandlerEvent } from "../components/ConfigContext.js";
|
|
3
4
|
import { type ChatEventHandler } from "../store/events.js";
|
|
4
5
|
export declare const useGenAIStore: (backend: IAnalyticalBackend, workspace: string, opts: {
|
|
5
6
|
eventHandlers?: ChatEventHandler[] | undefined;
|
|
@@ -10,5 +11,7 @@ export declare const useGenAIStore: (backend: IAnalyticalBackend, workspace: str
|
|
|
10
11
|
excludeTags?: string[] | undefined;
|
|
11
12
|
catalogItems?: CatalogItem[] | undefined;
|
|
12
13
|
isPreview?: boolean | undefined;
|
|
14
|
+
onLinkClick?: ((linkClickEvent: LinkHandlerEvent) => string | undefined) | undefined;
|
|
15
|
+
allowNativeLinks?: boolean | undefined;
|
|
13
16
|
}) => import("redux").Store<any, import("redux").UnknownAction, unknown>;
|
|
14
17
|
//# sourceMappingURL=useGenAIStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGenAIStore.d.ts","sourceRoot":"","sources":["../../src/hooks/useGenAIStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"useGenAIStore.d.ts","sourceRoot":"","sources":["../../src/hooks/useGenAIStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AASvE,OAAO,EAAE,KAAK,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AAI5E,eAAO,MAAM,aAAa;;;;;;;;;;;wEA8GzB,CAAC"}
|