@gooddata/sdk-ui-gen-ai 11.55.0-alpha.2 → 11.55.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.
Files changed (156) hide show
  1. package/NOTICE +9 -9
  2. package/esm/components/ConfigContext.d.ts +1 -0
  3. package/esm/components/ConfigContext.d.ts.map +1 -1
  4. package/esm/components/CustomizationContext.d.ts +36 -0
  5. package/esm/components/CustomizationContext.d.ts.map +1 -0
  6. package/esm/components/CustomizationContext.js +18 -0
  7. package/esm/components/CustomizationProvider.d.ts +3 -12
  8. package/esm/components/CustomizationProvider.d.ts.map +1 -1
  9. package/esm/components/CustomizationProvider.js +109 -13
  10. package/esm/components/GenAIChatAgentDropdown.d.ts +2 -2
  11. package/esm/components/GenAIChatAgentDropdown.d.ts.map +1 -1
  12. package/esm/components/GenAIChatAgentDropdown.js +11 -7
  13. package/esm/components/GenAIChatContextIndicator.d.ts +2 -2
  14. package/esm/components/GenAIChatContextIndicator.d.ts.map +1 -1
  15. package/esm/components/GenAIChatContextIndicator.js +81 -13
  16. package/esm/components/GenAIChatWrapper.js +1 -1
  17. package/esm/components/GenAIStandaloneInput.d.ts +5 -0
  18. package/esm/components/GenAIStandaloneInput.d.ts.map +1 -1
  19. package/esm/components/GenAIStandaloneInput.js +3 -2
  20. package/esm/components/GenAiChatAgentSwitching.d.ts.map +1 -1
  21. package/esm/components/GenAiChatAgentSwitching.js +9 -3
  22. package/esm/components/GenAiChatContextChooser.d.ts.map +1 -1
  23. package/esm/components/GenAiChatContextChooser.js +4 -3
  24. package/esm/components/GenAiChatContextChooserBody.d.ts +3 -1
  25. package/esm/components/GenAiChatContextChooserBody.d.ts.map +1 -1
  26. package/esm/components/GenAiChatContextChooserBody.js +7 -4
  27. package/esm/components/GenAiConversations.d.ts +5 -0
  28. package/esm/components/GenAiConversations.d.ts.map +1 -1
  29. package/esm/components/GenAiConversations.js +2 -2
  30. package/esm/components/Input.js +1 -1
  31. package/esm/components/Messages.d.ts.map +1 -1
  32. package/esm/components/Messages.js +4 -5
  33. package/esm/components/customized/AgentChooser.d.ts +8 -0
  34. package/esm/components/customized/AgentChooser.d.ts.map +1 -0
  35. package/esm/components/customized/AgentChooser.js +11 -0
  36. package/esm/components/customized/AgentItem.d.ts +1 -1
  37. package/esm/components/customized/AgentItem.js +1 -1
  38. package/esm/components/customized/AssistantMessage.d.ts +8 -0
  39. package/esm/components/customized/AssistantMessage.d.ts.map +1 -0
  40. package/esm/components/customized/AssistantMessage.js +11 -0
  41. package/esm/components/customized/Disclaimer.d.ts +3 -1
  42. package/esm/components/customized/Disclaimer.d.ts.map +1 -1
  43. package/esm/components/customized/Disclaimer.js +3 -1
  44. package/esm/components/customized/Feedback.d.ts +8 -0
  45. package/esm/components/customized/Feedback.d.ts.map +1 -0
  46. package/esm/components/customized/Feedback.js +11 -0
  47. package/esm/components/customized/FollowUpButtons.d.ts +8 -0
  48. package/esm/components/customized/FollowUpButtons.d.ts.map +1 -0
  49. package/esm/components/customized/FollowUpButtons.js +11 -0
  50. package/esm/components/customized/FollowUpQuestion.d.ts +8 -0
  51. package/esm/components/customized/FollowUpQuestion.d.ts.map +1 -0
  52. package/esm/components/customized/FollowUpQuestion.js +11 -0
  53. package/esm/components/customized/LandingContainer.d.ts +6 -2
  54. package/esm/components/customized/LandingContainer.d.ts.map +1 -1
  55. package/esm/components/customized/LandingContainer.js +6 -2
  56. package/esm/components/customized/LandingQuestion.d.ts +6 -2
  57. package/esm/components/customized/LandingQuestion.d.ts.map +1 -1
  58. package/esm/components/customized/LandingQuestion.js +3 -1
  59. package/esm/components/customized/LandingScreen.d.ts +4 -2
  60. package/esm/components/customized/LandingScreen.d.ts.map +1 -1
  61. package/esm/components/customized/LandingScreen.js +3 -1
  62. package/esm/components/customized/LandingTitle.d.ts +7 -3
  63. package/esm/components/customized/LandingTitle.d.ts.map +1 -1
  64. package/esm/components/customized/LandingTitle.js +6 -2
  65. package/esm/components/customized/MessageErrorContent.d.ts +8 -0
  66. package/esm/components/customized/MessageErrorContent.d.ts.map +1 -0
  67. package/esm/components/customized/MessageErrorContent.js +11 -0
  68. package/esm/components/customized/MessageMultipartContent.d.ts +8 -0
  69. package/esm/components/customized/MessageMultipartContent.d.ts.map +1 -0
  70. package/esm/components/customized/MessageMultipartContent.js +11 -0
  71. package/esm/components/customized/MessageReasoningContent.d.ts +8 -0
  72. package/esm/components/customized/MessageReasoningContent.d.ts.map +1 -0
  73. package/esm/components/customized/MessageReasoningContent.js +11 -0
  74. package/esm/components/customized/MessageTextContent.d.ts +8 -0
  75. package/esm/components/customized/MessageTextContent.d.ts.map +1 -0
  76. package/esm/components/customized/MessageTextContent.js +11 -0
  77. package/esm/components/customized/UserMessage.d.ts +8 -0
  78. package/esm/components/customized/UserMessage.d.ts.map +1 -0
  79. package/esm/components/customized/UserMessage.js +11 -0
  80. package/esm/components/customized/types.d.ts +260 -1
  81. package/esm/components/customized/types.d.ts.map +1 -1
  82. package/esm/components/hooks/useContextChangeAnnouncement.d.ts +2 -2
  83. package/esm/components/hooks/useContextChangeAnnouncement.d.ts.map +1 -1
  84. package/esm/components/hooks/useContextChangeAnnouncement.js +9 -4
  85. package/esm/components/hooks/useContextItems.d.ts +9 -3
  86. package/esm/components/hooks/useContextItems.d.ts.map +1 -1
  87. package/esm/components/hooks/useContextItems.js +51 -8
  88. package/esm/components/hooks/useSettingsClick.d.ts.map +1 -1
  89. package/esm/components/hooks/useSettingsClick.js +2 -0
  90. package/esm/components/messages/AssistantItem.d.ts.map +1 -1
  91. package/esm/components/messages/AssistantItem.js +3 -3
  92. package/esm/components/messages/AssistantItemFeedback.d.ts +3 -6
  93. package/esm/components/messages/AssistantItemFeedback.d.ts.map +1 -1
  94. package/esm/components/messages/AssistantItemFeedback.js +3 -9
  95. package/esm/components/messages/AssistantItemFollowUpButtons.d.ts +14 -0
  96. package/esm/components/messages/AssistantItemFollowUpButtons.d.ts.map +1 -0
  97. package/esm/components/messages/AssistantItemFollowUpButtons.js +23 -0
  98. package/esm/components/messages/AssistantItemFollowUpQuestion.d.ts +14 -0
  99. package/esm/components/messages/AssistantItemFollowUpQuestion.d.ts.map +1 -0
  100. package/esm/components/messages/AssistantItemFollowUpQuestion.js +8 -0
  101. package/esm/components/messages/AssistantItemSuggestions.d.ts +3 -3
  102. package/esm/components/messages/AssistantItemSuggestions.d.ts.map +1 -1
  103. package/esm/components/messages/AssistantItemSuggestions.js +7 -15
  104. package/esm/components/messages/ConversationItemContents.d.ts.map +1 -1
  105. package/esm/components/messages/ConversationItemContents.js +7 -43
  106. package/esm/components/messages/components/SemanticSearchTreeView.d.ts.map +1 -1
  107. package/esm/components/messages/components/SemanticSearchTreeView.js +2 -0
  108. package/esm/components/messages/contents/CustomHyperlink.d.ts.map +1 -1
  109. package/esm/components/messages/contents/CustomHyperlink.js +1 -0
  110. package/esm/components/messages/contents/VisualizationContents.d.ts.map +1 -1
  111. package/esm/components/messages/contents/VisualizationContents.js +2 -0
  112. package/esm/components/messages/conversationContents/ConversationDashboardContent.d.ts.map +1 -1
  113. package/esm/components/messages/conversationContents/ConversationDashboardContent.js +1 -0
  114. package/esm/components/messages/conversationContents/ConversationMultipartContent.d.ts +8 -0
  115. package/esm/components/messages/conversationContents/ConversationMultipartContent.d.ts.map +1 -0
  116. package/esm/components/messages/conversationContents/ConversationMultipartContent.js +40 -0
  117. package/esm/components/messages/conversationContents/ConversationVisualizationContent.js +2 -0
  118. package/esm/components/utils/groupUtility.d.ts +3 -0
  119. package/esm/components/utils/groupUtility.d.ts.map +1 -1
  120. package/esm/context/addContextReference.d.ts +0 -2
  121. package/esm/context/addContextReference.d.ts.map +1 -1
  122. package/esm/context/addContextReference.js +12 -35
  123. package/esm/context/collectContextReferences.d.ts +2 -2
  124. package/esm/context/collectContextReferences.d.ts.map +1 -1
  125. package/esm/context/collectContextReferences.js +22 -20
  126. package/esm/context/removeContextReference.d.ts +2 -16
  127. package/esm/context/removeContextReference.d.ts.map +1 -1
  128. package/esm/context/removeContextReference.js +7 -70
  129. package/esm/context/selectContextReferences.d.ts +5 -0
  130. package/esm/context/selectContextReferences.d.ts.map +1 -0
  131. package/esm/context/selectContextReferences.js +68 -0
  132. package/esm/index.d.ts +12 -1
  133. package/esm/index.d.ts.map +1 -1
  134. package/esm/index.js +10 -0
  135. package/esm/localization/bundles/en-US.localization-bundle.d.ts +8 -0
  136. package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  137. package/esm/localization/bundles/en-US.localization-bundle.js +8 -0
  138. package/esm/localization/bundles/zh-HK.localization-bundle.js +9 -9
  139. package/esm/sdk-ui-gen-ai.d.ts +378 -11
  140. package/esm/store/chatWindow/chatWindowSelectors.d.ts +2 -1
  141. package/esm/store/chatWindow/chatWindowSelectors.d.ts.map +1 -1
  142. package/esm/store/chatWindow/chatWindowSelectors.js +1 -0
  143. package/esm/store/chatWindow/chatWindowSlice.d.ts +2 -2
  144. package/esm/store/chatWindow/chatWindowSlice.d.ts.map +1 -1
  145. package/esm/store/chatWindow/chatWindowSlice.js +11 -6
  146. package/esm/store/sideEffects/onVisualizationSuccessSave.d.ts.map +1 -1
  147. package/esm/store/sideEffects/onVisualizationSuccessSave.js +2 -0
  148. package/esm/types.d.ts +22 -0
  149. package/esm/types.d.ts.map +1 -1
  150. package/esm/whatIf/whatIfMapping.d.ts +2 -2
  151. package/esm/whatIf/whatIfMapping.d.ts.map +1 -1
  152. package/esm/whatIf/whatIfMapping.js +3 -3
  153. package/package.json +21 -22
  154. package/styles/css/main.css +4 -0
  155. package/styles/css/main.css.map +1 -1
  156. package/styles/scss/main.scss +5 -0
@@ -8,9 +8,9 @@ import { UiIconButton, UiTooltip } from "@gooddata/sdk-ui-kit";
8
8
  import { agentSwitchingActiveSelector, agentSwitchingEnabledSelector, reasoningEffortEnabledSelector, } from "../store/chatWindow/chatWindowSelectors.js";
9
9
  import { agentsSelector, conversationSelector, conversationsLoadedSelector, conversationsSelector, selectedAgentIdSelector, selectedEffortSelector, } from "../store/messages/messagesSelectors.js";
10
10
  import { setSelectedAgentAction, setSelectedEffortAction } from "../store/messages/messagesSlice.js";
11
- import { GenAIChatAgentDropdown } from "./GenAIChatAgentDropdown.js";
11
+ import { useCustomization } from "./CustomizationContext.js";
12
12
  import { GenAIChatEffortDropdown } from "./GenAIChatEffortDropdown.js";
13
- import { getAgentSelectionStatus } from "./utils/agentSelection.js";
13
+ import { getAgentSelectionStatus, getEffectiveSelectedAgentId } from "./utils/agentSelection.js";
14
14
  const msgs = defineMessages({
15
15
  send: {
16
16
  id: "gd.gen-ai.button.send",
@@ -21,6 +21,7 @@ const msgs = defineMessages({
21
21
  });
22
22
  function GenAiChatAgentSwitchingCore({ agentSwitchingEnabled, isAssistantLoading, isConversationsLoading, handleSubmit, conversations, conversation, agentDropdownDisabled, agents, selectedAgentId, selectedEffort, reasoningEffortEnabled, agentSwitchingActive, disabled, onMouseDown, setSelectedAgent, setSelectedEffort, setBusy, setNoAgents, leftContent, }) {
23
23
  const intl = useIntl();
24
+ const { AgentChooserComponent } = useCustomization();
24
25
  const sendLabel = intl.formatMessage(msgs.send);
25
26
  const noAgentAvailableLabel = intl.formatMessage(msgs.noAgentAvailable);
26
27
  const { availableAgents, hasNoAgents, isSelectionLoading } = getAgentSelectionStatus({
@@ -30,6 +31,11 @@ function GenAiChatAgentSwitchingCore({ agentSwitchingEnabled, isAssistantLoading
30
31
  agents,
31
32
  selectedAgentId,
32
33
  });
34
+ const effectiveSelectedAgentId = getEffectiveSelectedAgentId({
35
+ agents: availableAgents,
36
+ conversationAgentId: conversation?.agentId,
37
+ selectedAgentId,
38
+ });
33
39
  const buttonDisabled = disabled || (agentSwitchingActive && hasNoAgents);
34
40
  const isBusy = agentSwitchingActive && (hasNoAgents || isSelectionLoading);
35
41
  const handleSubmitHandler = useCallback(() => {
@@ -61,7 +67,7 @@ function GenAiChatAgentSwitchingCore({ agentSwitchingEnabled, isAssistantLoading
61
67
  "gd-gen-ai-chat__input__actions": agentSwitchingEnabled,
62
68
  "gd-gen-ai-chat__input__send_button": !agentSwitchingEnabled,
63
69
  "gd-gen-ai-chat__input__send_button--disabled": !agentSwitchingEnabled && buttonDisabled,
64
- }), onMouseDown: agentSwitchingEnabled ? onMouseDown : undefined, children: [leftContent, agentSwitchingActive && hasNoAgents ? (_jsx("span", { className: "gd-gen-ai-chat__input__no-agent", "data-testid": "no_agent_available", role: "status", "aria-live": "polite", "aria-atomic": "true", children: noAgentAvailableLabel })) : agentSwitchingEnabled ? (_jsxs(_Fragment, { children: [agentSwitchingActive ? (_jsx(GenAIChatAgentDropdown, { agents: availableAgents, conversations: conversations, conversationAgentId: conversation?.agentId, selectedAgentId: selectedAgentId, isDisabled: agentDropdownDisabled || isSelectionLoading, isLoading: isSelectionLoading, onSelectAgent: handleSelectAgent, reasoningEnabled: reasoningEffortEnabled, selectedEffort: selectedEffort, onSelectEffort: handleSelectEffort })) : reasoningEffortEnabled ? (_jsx(GenAIChatEffortDropdown, { selectedEffort: selectedEffort, isDisabled: agentDropdownDisabled, onSelectEffort: handleSelectEffort })) : null, _jsx(UiTooltip, { triggerBy: ["focus", "hover"], arrowPlacement: "bottom", anchor: _jsx(UiIconButton, { icon: "arrowUp", variant: "primary", size: "small", dataTestId: "send_message", isDisabled: buttonDisabled, onClick: buttonDisabled ? undefined : handleSubmitHandler, accessibilityConfig: {
70
+ }), onMouseDown: agentSwitchingEnabled ? onMouseDown : undefined, children: [leftContent, agentSwitchingActive && hasNoAgents ? (_jsx("span", { className: "gd-gen-ai-chat__input__no-agent", "data-testid": "no_agent_available", role: "status", "aria-live": "polite", "aria-atomic": "true", children: noAgentAvailableLabel })) : agentSwitchingEnabled ? (_jsxs(_Fragment, { children: [agentSwitchingActive ? (_jsx(AgentChooserComponent, { agents: availableAgents, conversations: conversations, conversationAgentId: conversation?.agentId, selectedAgentId: selectedAgentId, effectiveSelectedAgentId: effectiveSelectedAgentId, isDisabled: agentDropdownDisabled || isSelectionLoading, isLoading: isSelectionLoading, onSelectAgent: handleSelectAgent, selectedEffort: selectedEffort, onSelectEffort: handleSelectEffort })) : reasoningEffortEnabled ? (_jsx(GenAIChatEffortDropdown, { selectedEffort: selectedEffort, isDisabled: agentDropdownDisabled, onSelectEffort: handleSelectEffort })) : null, _jsx(UiTooltip, { triggerBy: ["focus", "hover"], arrowPlacement: "bottom", anchor: _jsx(UiIconButton, { icon: "arrowUp", variant: "primary", size: "small", dataTestId: "send_message", isDisabled: buttonDisabled, onClick: buttonDisabled ? undefined : handleSubmitHandler, accessibilityConfig: {
65
71
  ariaLabel: sendLabel,
66
72
  } }), content: sendLabel })
67
73
  ] })) : (_jsx(UiTooltip, { triggerBy: ["focus", "hover"], arrowPlacement: "bottom", anchor: _jsx(UiIconButton, { icon: "send", variant: "tertiary", size: "medium", dataTestId: "send_message", isDisabled: buttonDisabled, onClick: buttonDisabled ? undefined : handleSubmitHandler, accessibilityConfig: {
@@ -1 +1 @@
1
- {"version":3,"file":"GenAiChatContextChooser.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooser.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAWvD,KAAK,+BAA+B,GAAG;IACnC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACzD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EAAE,YAAY,EAAE,EAAE,+BAA+B,kDA4ExF"}
1
+ {"version":3,"file":"GenAiChatContextChooser.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooser.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAWvD,KAAK,+BAA+B,GAAG;IACnC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACzD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EAAE,YAAY,EAAE,EAAE,+BAA+B,kDA6ExF"}
@@ -4,10 +4,10 @@ import { useCallback } from "react";
4
4
  import { defineMessages, useIntl } from "react-intl";
5
5
  import { useDispatch, useSelector } from "react-redux";
6
6
  import { Dropdown, UiIconButton, useIdPrefixed } from "@gooddata/sdk-ui-kit";
7
- import { ambientContextSelector, userContextSelector } from "../store/chatWindow/chatWindowSelectors.js";
7
+ import { ambientContextSelector, selectedContextSelector, userContextSelector, } from "../store/chatWindow/chatWindowSelectors.js";
8
8
  import { addContextReferenceAction, initContextObjectsAction } from "../store/chatWindow/chatWindowSlice.js";
9
9
  import { GenAiChatContextChooserBody } from "./GenAiChatContextChooserBody.js";
10
- import { useContextItems } from "./hooks/useContextItems.js";
10
+ import { useUserContextItems } from "./hooks/useContextItems.js";
11
11
  const msgs = defineMessages({
12
12
  add: {
13
13
  id: "gd.gen-ai.context.add_context",
@@ -18,8 +18,9 @@ export function GenAiChatContextChooser({ onAddContext }) {
18
18
  const dispatch = useDispatch();
19
19
  const titleId = useIdPrefixed("context-chooser-title");
20
20
  const ambient = useSelector((state) => ambientContextSelector(state));
21
+ const selected = useSelector((state) => selectedContextSelector(state));
21
22
  const active = useSelector((state) => userContextSelector(state));
22
- const { items: inputItems, search, setSearch, isLoading, hasNextPage, loadNextPage, } = useContextItems(ambient, active);
23
+ const { items: inputItems, search, setSearch, isLoading, hasNextPage, loadNextPage, } = useUserContextItems(ambient, selected, active);
23
24
  const addContextLabel = intl.formatMessage(msgs.add);
24
25
  const onOpenStateChanged = useCallback((isOpen) => {
25
26
  setSearch("");
@@ -1,3 +1,4 @@
1
+ import { type ObjRef } from "@gooddata/sdk-model";
1
2
  import { type IGenAIContextObject } from "../types.js";
2
3
  type GenAiChatContextChooserBodyProps = {
3
4
  inputItems: IGenAIContextObject[];
@@ -5,6 +6,7 @@ type GenAiChatContextChooserBodyProps = {
5
6
  titleId: string;
6
7
  search: string;
7
8
  onSearchChange: (search: string) => void;
9
+ selectedIds?: ObjRef[];
8
10
  isLoading?: boolean;
9
11
  hasNextPage?: boolean;
10
12
  loadNextPage?: () => void;
@@ -16,6 +18,6 @@ type GenAiChatContextChooserBodyProps = {
16
18
  onSelect: (item: IGenAIContextObject) => void;
17
19
  closeDropdown: () => void;
18
20
  };
19
- export declare function GenAiChatContextChooserBody({ inputItems, title, titleId, search, onSearchChange, isLoading, hasNextPage, loadNextPage, ariaAttributes, onSelect, closeDropdown }: GenAiChatContextChooserBodyProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function GenAiChatContextChooserBody({ inputItems, title, titleId, search, selectedIds, onSearchChange, isLoading, hasNextPage, loadNextPage, ariaAttributes, onSelect, closeDropdown }: GenAiChatContextChooserBodyProps): import("react/jsx-runtime").JSX.Element;
20
22
  export {};
21
23
  //# sourceMappingURL=GenAiChatContextChooserBody.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenAiChatContextChooserBody.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooserBody.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA8BvD,KAAK,gCAAgC,GAAG;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EACxC,UAAU,EACV,KAAK,EACL,OAAO,EACP,MAAM,EACN,cAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,aAAa,EAChB,EAAE,gCAAgC,2CAmIlC"}
1
+ {"version":3,"file":"GenAiChatContextChooserBody.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooserBody.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,qBAAqB,CAAC;AAiBnE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA8BvD,KAAK,gCAAgC,GAAG;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EACxC,UAAU,EACV,KAAK,EACL,OAAO,EACP,MAAM,EACN,WAAW,EACX,cAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,aAAa,EAChB,EAAE,gCAAgC,2CAyIlC"}
@@ -3,6 +3,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
3
3
  import { useCallback, useEffect, useId } from "react";
4
4
  import cx from "classnames";
5
5
  import { defineMessages, useIntl } from "react-intl";
6
+ import { areObjRefsEqual } from "@gooddata/sdk-model";
6
7
  import { useDebouncedState } from "@gooddata/sdk-ui";
7
8
  import { DEFAULT_ITEM_HEIGHT, DETAILED_ANNOUNCEMENT_THRESHOLD, Input, NoData, ScopedIdStore, ShortenedText, UiIcon, UiPagedVirtualList, UiSearchResultsAnnouncement, UiSubmenuHeader, isTypingKey, useScopedIdStoreValue, } from "@gooddata/sdk-ui-kit";
8
9
  import { getIconByObject } from "./utils/icons.js";
@@ -30,7 +31,7 @@ const msgs = defineMessages({
30
31
  id: "gd.gen-ai.context.noDataAvailable",
31
32
  },
32
33
  });
33
- export function GenAiChatContextChooserBody({ inputItems, title, titleId, search, onSearchChange, isLoading = false, hasNextPage = false, loadNextPage, ariaAttributes, onSelect, closeDropdown, }) {
34
+ export function GenAiChatContextChooserBody({ inputItems, title, titleId, search, selectedIds, onSearchChange, isLoading = false, hasNextPage = false, loadNextPage, ariaAttributes, onSelect, closeDropdown, }) {
34
35
  const intl = useIntl();
35
36
  const listboxId = useId();
36
37
  const [searchString, setSearchString, debouncedSearch] = useDebouncedState(search, SEARCH_DEBOUNCE_MS);
@@ -76,10 +77,12 @@ export function GenAiChatContextChooserBody({ inputItems, title, titleId, search
76
77
  ] })) : null, shouldShowPagedList ? (_jsx(ScopedIdStore, { value: scopedIdStoreValue, children: _jsx(UiPagedVirtualList, { maxHeight: listMaxHeight, items: inputItems, itemHeight: DEFAULT_ITEM_HEIGHT, itemsGap: 0, itemPadding: 0, skeletonItemsCount: skeletonItemsCount, isLoading: isLoading, hasNextPage: hasNextPage, loadNextPage: loadNextPage, representAs: "listbox", closeDropdown: closeDropdown, onKeyDownConfirm: handleSelect, listboxProps: {
77
78
  id: listboxId,
78
79
  "aria-label": intl.formatMessage(msgs.listAriaLabel),
79
- }, children: (item) => _jsx(ContextChooserItem, { item: item, onSelect: () => handleSelect(item) }) }) })) : (_jsx(NoData, { hasNoMatchingData: hasNoMatchingData, notFoundLabel: intl.formatMessage(msgs.noMatchingData), noDataLabel: intl.formatMessage(msgs.noDataAvailable) }))] }));
80
+ }, children: (item) => (_jsx(ContextChooserItem, { item: item, selected: selectedIds?.some((r) => areObjRefsEqual(r, item.ref)), onSelect: () => handleSelect(item) })) }) })) : (_jsx(NoData, { hasNoMatchingData: hasNoMatchingData, notFoundLabel: intl.formatMessage(msgs.noMatchingData), noDataLabel: intl.formatMessage(msgs.noDataAvailable) }))] }));
80
81
  }
81
- function ContextChooserItem({ item, onSelect }) {
82
+ function ContextChooserItem({ item, selected, onSelect, }) {
82
83
  const icon = getIconByObject(item);
83
- return (_jsxs("div", { className: "gd-list-item", onClick: onSelect, children: [icon.iconBefore ? _jsx(UiIcon, { size: 16, type: icon.iconBefore, color: icon.iconColor }) : null, _jsx(ShortenedText, { ellipsisPosition: "end", children: item.title })
84
+ return (_jsxs("div", { className: cx("gd-list-item", {
85
+ "gd-list-item--selected": selected,
86
+ }), onClick: onSelect, "aria-selected": selected, children: [icon.iconBefore ? _jsx(UiIcon, { size: 16, type: icon.iconBefore, color: icon.iconColor }) : null, _jsx(ShortenedText, { ellipsisPosition: "end", children: item.title })
84
87
  ] }));
85
88
  }
@@ -1,4 +1,5 @@
1
1
  import { type IChatConversationLocal } from "../model.js";
2
+ import type { IGenAIAssistantSlots } from "./customized/types.js";
2
3
  import { type GenAiStoreProps } from "./GenAiStore.js";
3
4
  /**
4
5
  * Properties for the GenAIConversations component.
@@ -18,6 +19,10 @@ export type GenAIConversationsProps = Omit<GenAiStoreProps, "children"> & {
18
19
  * Additional class name applied to the root element.
19
20
  */
20
21
  className?: string;
22
+ /**
23
+ * Customizations for the Gen AI assistant.
24
+ */
25
+ slots?: IGenAIAssistantSlots;
21
26
  };
22
27
  /**
23
28
  * UI component that renders the Gen AI assistant.
@@ -1 +1 @@
1
- {"version":3,"file":"GenAiConversations.d.ts","sourceRoot":"","sources":["../../src/components/GenAiConversations.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAa1D,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"}
1
+ {"version":3,"file":"GenAiConversations.d.ts","sourceRoot":"","sources":["../../src/components/GenAiConversations.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAY1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,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;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAiDhE"}
@@ -26,7 +26,7 @@ export function GenAIConversations(props) {
26
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
  function GenAIConversationsContent(props) {
29
- const { catalogItems, className, onConversationSelect = noop } = props;
29
+ const { catalogItems, className, onConversationSelect = noop, slots } = props;
30
30
  const dispatch = useDispatch();
31
31
  const settings = useSelector(settingsSelector);
32
32
  const { loading } = usePermissions();
@@ -46,5 +46,5 @@ function GenAIConversationsContent(props) {
46
46
  dispatch(setCurrentConversationAction({ conversation }));
47
47
  onConversationSelect(conversation);
48
48
  }, [dispatch, onConversationSelect]);
49
- return (_jsx(ConfigProvider, { catalogItems: catalogItems, allowNativeLinks: false, canFullControl: false, canManage: false, canAnalyze: false, children: _jsx(CustomizationProvider, { children: _jsx(GenAIChatConversations, { wrapper: _jsx("div", { className: classNames }), onSelect: onSelectConversation }) }) }));
49
+ return (_jsx(ConfigProvider, { catalogItems: catalogItems, allowNativeLinks: false, canFullControl: false, canManage: false, canAnalyze: false, children: _jsx(CustomizationProvider, { slots: slots, children: _jsx(GenAIChatConversations, { wrapper: _jsx("div", { className: classNames }), onSelect: onSelectConversation }) }) }));
50
50
  }
@@ -113,7 +113,7 @@ function InputComponent({ autofocus = false, canManage, canAnalyze, targetRef })
113
113
  "gd-gen-ai-chat__input--no-agents": hasNoAgents,
114
114
  }), children: _jsxs("div", { className: "gd-gen-ai-chat__input__content", children: [
115
115
  _jsx(HintText, { focused: focused, where: "top" }), _jsxs("div", { className: "gd-gen-ai-chat__input__container", children: [
116
- _jsx("div", { className: "gd-gen-ai-chat__input__context", onMouseDown: handleContextMouseDown, children: _jsx(GenAIChatContextIndicator, { onDelete: handleOnFocus }) }), _jsx("div", { ref: targetRef, onFocus: handleOnFocus }), _jsx("div", { className: "gd-gen-ai-chat__input__text", ...ref, children: _jsx(SyntaxHighlightingInput, { className: "gd-gen-ai-chat__input__mc", placeholder: intl.formatMessage(msgs.placeholder), label: isMac ? intl.formatMessage(msgs.labelMac) : intl.formatMessage(msgs.labelWin), value: value, autocompletion: {
116
+ _jsx("div", { className: "gd-gen-ai-chat__input__context", onMouseDown: handleContextMouseDown, children: _jsx(GenAIChatContextIndicator, { onUpdate: handleOnFocus }) }), _jsx("div", { ref: targetRef, onFocus: handleOnFocus }), _jsx("div", { className: "gd-gen-ai-chat__input__text", ...ref, children: _jsx(SyntaxHighlightingInput, { className: "gd-gen-ai-chat__input__mc", placeholder: intl.formatMessage(msgs.placeholder), label: isMac ? intl.formatMessage(msgs.labelMac) : intl.formatMessage(msgs.labelWin), value: value, autocompletion: {
117
117
  aboveCursor: true,
118
118
  whenTyping: true,
119
119
  whenTypingDelay: 300,
@@ -1 +1 @@
1
- {"version":3,"file":"Messages.d.ts","sourceRoot":"","sources":["../../src/components/Messages.tsx"],"names":[],"mappings":"AAoCA,KAAK,sBAAsB,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,YAAY,EAAE,EAAE,sBAAsB,2CAmDhE"}
1
+ {"version":3,"file":"Messages.d.ts","sourceRoot":"","sources":["../../src/components/Messages.tsx"],"names":[],"mappings":"AAkCA,KAAK,sBAAsB,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,YAAY,EAAE,EAAE,sBAAsB,2CAmDhE"}
@@ -9,15 +9,13 @@ import { agentSwitchingActiveSelector, catalogItemsSelector, } from "../store/ch
9
9
  import { asyncProcessSelector, conversationMessagesSelector, conversationSelector, messagesSelector, } from "../store/messages/messagesSelectors.js";
10
10
  import { ChatSkeleton } from "./ChatSkeleton.js";
11
11
  import { parseReferences } from "./completion/references.js";
12
- import { useCustomization } from "./CustomizationProvider.js";
12
+ import { useCustomization } from "./CustomizationContext.js";
13
13
  import { useFullscreenCheck } from "./hooks/useFullscreenCheck.js";
14
- import { AssistantItemComponent } from "./messages/AssistantItem.js";
15
14
  import { AssistantMessageComponent } from "./messages/AssistantMessage.js";
16
15
  import { ItemsGroup } from "./messages/ItemsGroup.js";
17
16
  import { useMessageScroller } from "./messages/MessageScroller.js";
18
17
  import { SystemItemComponent } from "./messages/SystemItem.js";
19
18
  import { ToolItemComponent } from "./messages/ToolItem.js";
20
- import { UserItemComponent } from "./messages/UserItem.js";
21
19
  import { UserMessageComponent } from "./messages/UserMessage.js";
22
20
  import { groupMessages } from "./utils/groupUtility.js";
23
21
  export function Messages({ initializing }) {
@@ -63,6 +61,7 @@ function ConversationMessages({ messages, catalogItems }) {
63
61
  });
64
62
  }, [messages, catalogItems]);
65
63
  const groups = useMemo(() => groupMessages(currentMessages), [currentMessages]);
64
+ const { UserMessageComponent, AssistantMessageComponent } = useCustomization();
66
65
  return (_jsx(_Fragment, { children: groups.map((group, gi) => {
67
66
  const previousGroup = groups[gi - 1];
68
67
  const isLastGroup = gi === groups.length - 1;
@@ -70,9 +69,9 @@ function ConversationMessages({ messages, catalogItems }) {
70
69
  const isLast = isLastGroup && mi === group.messages.length - 1;
71
70
  switch (message.role) {
72
71
  case "user":
73
- return (_jsx(UserItemComponent, { groups: groups, message: message, isLast: isLast }, message.localId));
72
+ return (_jsx(UserMessageComponent, { groups: groups, message: message, isLast: isLast }, message.localId));
74
73
  case "assistant":
75
- return (_jsx(AssistantItemComponent, { groups: groups, message: message, isLast: isLast }, message.localId));
74
+ return (_jsx(AssistantMessageComponent, { groups: groups, message: message, isLast: isLast }, message.localId));
76
75
  case "tool":
77
76
  return (_jsx(ToolItemComponent, { groups: groups, message: message, isLast: isLast }, message.localId));
78
77
  case "system":
@@ -0,0 +1,8 @@
1
+ import type { IGenAIAssistantAgentChooserProps } from "./types.js";
2
+ /**
3
+ * Default implementation of the AgentChooser slot.
4
+ *
5
+ * @alpha
6
+ */
7
+ export declare function DefaultAgentChooser(props: IGenAIAssistantAgentChooserProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=AgentChooser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentChooser.d.ts","sourceRoot":"","sources":["../../../src/components/customized/AgentChooser.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gCAAgC,2CAE1E"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { GenAIChatAgentDropdown } from "../GenAIChatAgentDropdown.js";
4
+ /**
5
+ * Default implementation of the AgentChooser slot.
6
+ *
7
+ * @alpha
8
+ */
9
+ export function DefaultAgentChooser(props) {
10
+ return _jsx(GenAIChatAgentDropdown, { ...props });
11
+ }
@@ -2,7 +2,7 @@ import { type IGenAIAssistantAgentItemProps } from "./types.js";
2
2
  /**
3
3
  * Default implementation of the AgentItem slot.
4
4
  *
5
- * @public
5
+ * @alpha
6
6
  */
7
7
  export declare function DefaultAgentItem(props: IGenAIAssistantAgentItemProps): import("react/jsx-runtime").JSX.Element;
8
8
  //# sourceMappingURL=AgentItem.d.ts.map
@@ -4,7 +4,7 @@ import { DefaultUiMenuInteractiveItemWrapper } from "@gooddata/sdk-ui-kit";
4
4
  /**
5
5
  * Default implementation of the AgentItem slot.
6
6
  *
7
- * @public
7
+ * @alpha
8
8
  */
9
9
  export function DefaultAgentItem(props) {
10
10
  const { menuItemProps, Content } = props;
@@ -0,0 +1,8 @@
1
+ import { type IGenAIAssistantAssistantMessageProps } from "./types.js";
2
+ /**
3
+ * Default implementation of the AssistantMessage slot.
4
+ *
5
+ * @alpha
6
+ */
7
+ export declare function DefaultAssistantMessage(props: IGenAIAssistantAssistantMessageProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=AssistantMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantMessage.d.ts","sourceRoot":"","sources":["../../../src/components/customized/AssistantMessage.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oCAAoC,2CAElF"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2024-2026 GoodData Corporation
3
+ import { AssistantItemComponent } from "../messages/AssistantItem.js";
4
+ /**
5
+ * Default implementation of the AssistantMessage slot.
6
+ *
7
+ * @alpha
8
+ */
9
+ export function DefaultAssistantMessage(props) {
10
+ return _jsx(AssistantItemComponent, { ...props });
11
+ }
@@ -1,6 +1,8 @@
1
1
  import { type IGenAIAssistantDisclaimerProps } from "./types.js";
2
2
  /**
3
- * @beta
3
+ * Default implementation of the Disclaimer slot.
4
+ *
5
+ * @alpha
4
6
  */
5
7
  export declare function DefaultDisclaimer(_props: IGenAIAssistantDisclaimerProps): import("react/jsx-runtime").JSX.Element;
6
8
  //# sourceMappingURL=Disclaimer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Disclaimer.d.ts","sourceRoot":"","sources":["../../../src/components/customized/Disclaimer.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,8BAA8B,2CAMvE"}
1
+ {"version":3,"file":"Disclaimer.d.ts","sourceRoot":"","sources":["../../../src/components/customized/Disclaimer.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,8BAA8B,2CAMvE"}
@@ -3,7 +3,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { FormattedMessage } from "react-intl";
4
4
  import { Typography } from "@gooddata/sdk-ui-kit";
5
5
  /**
6
- * @beta
6
+ * Default implementation of the Disclaimer slot.
7
+ *
8
+ * @alpha
7
9
  */
8
10
  export function DefaultDisclaimer(_props) {
9
11
  return (_jsx(Typography, { tagName: "p", className: "gd-gen-ai-chat__disclaimer", children: _jsx(FormattedMessage, { id: "gd.gen-ai.disclaimer" }) }));
@@ -0,0 +1,8 @@
1
+ import type { IGenAIAssistantFeedbackProps } from "./types.js";
2
+ /**
3
+ * Default implementation of the Feedback slot.
4
+ *
5
+ * @alpha
6
+ */
7
+ export declare function DefaultFeedback(props: IGenAIAssistantFeedbackProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=Feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Feedback.d.ts","sourceRoot":"","sources":["../../../src/components/customized/Feedback.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,4BAA4B,2CAElE"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2024-2026 GoodData Corporation
3
+ import { AssistantItemFeedback } from "../messages/AssistantItemFeedback.js";
4
+ /**
5
+ * Default implementation of the Feedback slot.
6
+ *
7
+ * @alpha
8
+ */
9
+ export function DefaultFeedback(props) {
10
+ return _jsx(AssistantItemFeedback, { ...props });
11
+ }
@@ -0,0 +1,8 @@
1
+ import type { IGenAIAssistantFollowUpButtonsProps } from "./types.js";
2
+ /**
3
+ * Default implementation of the FollowUpButtons slot.
4
+ *
5
+ * @alpha
6
+ */
7
+ export declare function DefaultFollowUpButtons(props: IGenAIAssistantFollowUpButtonsProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=FollowUpButtons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FollowUpButtons.d.ts","sourceRoot":"","sources":["../../../src/components/customized/FollowUpButtons.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mCAAmC,2CAEhF"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { AssistantItemFollowUpButtons } from "../messages/AssistantItemFollowUpButtons.js";
4
+ /**
5
+ * Default implementation of the FollowUpButtons slot.
6
+ *
7
+ * @alpha
8
+ */
9
+ export function DefaultFollowUpButtons(props) {
10
+ return _jsx(AssistantItemFollowUpButtons, { ...props });
11
+ }
@@ -0,0 +1,8 @@
1
+ import type { IGenAIAssistantFollowUpQuestionProps } from "./types.js";
2
+ /**
3
+ * Default implementation of the FollowUpQuestion slot.
4
+ *
5
+ * @alpha
6
+ */
7
+ export declare function DefaultFollowUpQuestion(props: IGenAIAssistantFollowUpQuestionProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=FollowUpQuestion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FollowUpQuestion.d.ts","sourceRoot":"","sources":["../../../src/components/customized/FollowUpQuestion.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oCAAoC,2CAElF"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { AssistantItemFollowUpQuestion } from "../messages/AssistantItemFollowUpQuestion.js";
4
+ /**
5
+ * Default implementation of the FollowUpQuestion slot.
6
+ *
7
+ * @alpha
8
+ */
9
+ export function DefaultFollowUpQuestion(props) {
10
+ return _jsx(AssistantItemFollowUpQuestion, { ...props });
11
+ }
@@ -9,11 +9,15 @@ export interface ILandingContentProps {
9
9
  isSmallScreen?: boolean;
10
10
  }
11
11
  /**
12
- * @beta
12
+ * Default implementation of the LandingContainer slot.
13
+ *
14
+ * @alpha
13
15
  */
14
16
  export declare function DefaultLandingContainer({ children, isBigScreen, isSmallScreen, isFullscreen }: ILandingContentProps): import("react/jsx-runtime").JSX.Element;
15
17
  /**
16
- * @beta
18
+ * Default implementation of the LandingQuestions slot.
19
+ *
20
+ * @alpha
17
21
  */
18
22
  export declare function DefaultLandingQuestions({ children, isFullscreen, isBigScreen, isSmallScreen }: ILandingContentProps): import("react/jsx-runtime").JSX.Element;
19
23
  //# sourceMappingURL=LandingContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LandingContainer.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingContainer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACf,EAAE,oBAAoB,2CAYtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EAChB,EAAE,oBAAoB,2CAYtB"}
1
+ {"version":3,"file":"LandingContainer.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingContainer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACf,EAAE,oBAAoB,2CAYtB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EAChB,EAAE,oBAAoB,2CAYtB"}
@@ -2,7 +2,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
3
  import cx from "classnames";
4
4
  /**
5
- * @beta
5
+ * Default implementation of the LandingContainer slot.
6
+ *
7
+ * @alpha
6
8
  */
7
9
  export function DefaultLandingContainer({ children, isBigScreen, isSmallScreen, isFullscreen, }) {
8
10
  return (_jsx("div", { className: cx("gd-gen-ai-chat__messages__empty__container", {
@@ -12,7 +14,9 @@ export function DefaultLandingContainer({ children, isBigScreen, isSmallScreen,
12
14
  }), children: children }));
13
15
  }
14
16
  /**
15
- * @beta
17
+ * Default implementation of the LandingQuestions slot.
18
+ *
19
+ * @alpha
16
20
  */
17
21
  export function DefaultLandingQuestions({ children, isFullscreen, isBigScreen, isSmallScreen, }) {
18
22
  return (_jsx("div", { className: cx("gd-gen-ai-chat__messages__empty__questions", {
@@ -1,6 +1,8 @@
1
1
  import { type IUiButtonProps } from "@gooddata/sdk-ui-kit";
2
2
  /**
3
- * @beta
3
+ * Default implementation of the LandingQuestion slot.
4
+ *
5
+ * @alpha
4
6
  */
5
7
  export interface ILandingQuestionProps {
6
8
  question: string;
@@ -9,7 +11,9 @@ export interface ILandingQuestionProps {
9
11
  title?: string;
10
12
  }
11
13
  /**
12
- * @beta
14
+ * Default implementation of the LandingQuestion slot.
15
+ *
16
+ * @alpha
13
17
  */
14
18
  export declare function DefaultLandingQuestion({ icon, question, answer, title }: ILandingQuestionProps): import("react/jsx-runtime").JSX.Element;
15
19
  //# sourceMappingURL=LandingQuestion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LandingQuestion.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingQuestion.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAgBhF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAgB,EAAE,EAAE,qBAAqB,2CAuDzG"}
1
+ {"version":3,"file":"LandingQuestion.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingQuestion.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAgBhF;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAgB,EAAE,EAAE,qBAAqB,2CAuDzG"}
@@ -11,7 +11,9 @@ import { setMessagesAction as setMessagesActionCreator } from "../../store/messa
11
11
  import { escapeMarkdown } from "../utils/markdownUtils.js";
12
12
  const disabledTooltip = defineMessage({ id: "gd.gen-ai.agent.unavailable.disabled-tooltip" });
13
13
  /**
14
- * @beta
14
+ * Default implementation of the LandingQuestion slot.
15
+ *
16
+ * @alpha
15
17
  */
16
18
  export function DefaultLandingQuestion({ icon, question, answer, title = question }) {
17
19
  const intl = useIntl();
@@ -1,7 +1,7 @@
1
1
  import { type ComponentType } from "react";
2
2
  import { type IGenAIAssistantLandingScreenProps } from "./types.js";
3
3
  /**
4
- * @beta
4
+ * @alpha
5
5
  */
6
6
  export type LandingScreenProps = IGenAIAssistantLandingScreenProps & {
7
7
  /**
@@ -11,7 +11,9 @@ export type LandingScreenProps = IGenAIAssistantLandingScreenProps & {
11
11
  LandingScreen?: ComponentType;
12
12
  };
13
13
  /**
14
- * @beta
14
+ * Default implementation of the LandingScreen slot.
15
+ *
16
+ * @alpha
15
17
  */
16
18
  export declare function DefaultLandingScreen({ LandingScreen, isBigScreen, isSmallScreen, isFullscreen }: LandingScreenProps): import("react/jsx-runtime").JSX.Element;
17
19
  //# sourceMappingURL=LandingScreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LandingScreen.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAO3C,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAuBpE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,iCAAiC,GAAG;IACjE;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACf,EAAE,kBAAkB,2CAuCpB"}
1
+ {"version":3,"file":"LandingScreen.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAO3C,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAuBpE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,iCAAiC,GAAG;IACjE;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACf,EAAE,kBAAkB,2CAuCpB"}
@@ -24,7 +24,9 @@ const quickOptions = [
24
24
  },
25
25
  ];
26
26
  /**
27
- * @beta
27
+ * Default implementation of the LandingScreen slot.
28
+ *
29
+ * @alpha
28
30
  */
29
31
  export function DefaultLandingScreen({ LandingScreen, isBigScreen, isSmallScreen, isFullscreen, }) {
30
32
  const intl = useIntl();
@@ -1,16 +1,20 @@
1
1
  import { type ReactNode } from "react";
2
2
  /**
3
- * @beta
3
+ * @alpha
4
4
  */
5
5
  export interface ILandingTitleProps {
6
6
  children: ReactNode;
7
7
  }
8
8
  /**
9
- * @beta
9
+ * Default implementation of the LandingTitle slot.
10
+ *
11
+ * @alpha
10
12
  */
11
13
  export declare function DefaultLandingTitle({ children }: ILandingTitleProps): import("react/jsx-runtime").JSX.Element;
12
14
  /**
13
- * @beta
15
+ * Default implementation of the LandingTitleAscent slot.
16
+ *
17
+ * @alpha
14
18
  */
15
19
  export declare function DefaultLandingTitleAscent({ children }: ILandingTitleProps): import("react/jsx-runtime").JSX.Element;
16
20
  //# sourceMappingURL=LandingTitle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LandingTitle.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingTitle.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAEnE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAEzE"}
1
+ {"version":3,"file":"LandingTitle.d.ts","sourceRoot":"","sources":["../../../src/components/customized/LandingTitle.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAEnE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAEzE"}
@@ -1,12 +1,16 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  /**
3
- * @beta
3
+ * Default implementation of the LandingTitle slot.
4
+ *
5
+ * @alpha
4
6
  */
5
7
  export function DefaultLandingTitle({ children }) {
6
8
  return _jsx("h3", { className: "gd-typography gd-typography--h1", children: children });
7
9
  }
8
10
  /**
9
- * @beta
11
+ * Default implementation of the LandingTitleAscent slot.
12
+ *
13
+ * @alpha
10
14
  */
11
15
  export function DefaultLandingTitleAscent({ children }) {
12
16
  return _jsx("span", { className: "gd-gen-ai-chat__messages__empty__h1--accent", children: children });
@@ -0,0 +1,8 @@
1
+ import { type IGenAIAssistantMessageErrorContentProps } from "./types.js";
2
+ /**
3
+ * Default implementation of the MessageErrorContent slot.
4
+ *
5
+ * @alpha
6
+ */
7
+ export declare function DefaultMessageErrorContent(props: IGenAIAssistantMessageErrorContentProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=MessageErrorContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageErrorContent.d.ts","sourceRoot":"","sources":["../../../src/components/customized/MessageErrorContent.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uCAAuC,2CAExF"}