@gooddata/sdk-ui-gen-ai 11.62.0-alpha.0 → 11.62.0-alpha.2

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 (177) hide show
  1. package/NOTICE +10 -11
  2. package/esm/components/ConfigContext.d.ts +1 -0
  3. package/esm/components/ConfigContext.d.ts.map +1 -1
  4. package/esm/components/GenAIChatContextIndicator.d.ts +1 -1
  5. package/esm/components/GenAIChatContextIndicator.d.ts.map +1 -1
  6. package/esm/components/GenAIChatContextIndicator.js +6 -10
  7. package/esm/components/GenAIChatDialogConnected.d.ts +7 -4
  8. package/esm/components/GenAIChatDialogConnected.d.ts.map +1 -1
  9. package/esm/components/GenAIChatDialogConnected.js +5 -3
  10. package/esm/components/GenAiChatContextChooser.d.ts +1 -1
  11. package/esm/components/GenAiChatContextChooser.d.ts.map +1 -1
  12. package/esm/components/GenAiChatContextChooser.js +5 -1
  13. package/esm/components/hooks/useContextChangeAnnouncement.d.ts +1 -1
  14. package/esm/components/hooks/useContextChangeAnnouncement.d.ts.map +1 -1
  15. package/esm/components/hooks/useContextChangeAnnouncement.js +15 -9
  16. package/esm/components/hooks/useContextItems.d.ts +2 -2
  17. package/esm/components/hooks/useDashboardSavedSync.d.ts +13 -0
  18. package/esm/components/hooks/useDashboardSavedSync.d.ts.map +1 -0
  19. package/esm/components/hooks/useDashboardSavedSync.js +14 -0
  20. package/esm/components/hooks/usePublisherDocumentSavedSync.d.ts +18 -0
  21. package/esm/components/hooks/usePublisherDocumentSavedSync.d.ts.map +1 -0
  22. package/esm/components/hooks/usePublisherDocumentSavedSync.js +18 -0
  23. package/esm/components/intelligence/data/categoryDetailRows.js +1 -1
  24. package/esm/components/messages/components/SemanticSearchTreeView.d.ts.map +1 -1
  25. package/esm/components/messages/components/SemanticSearchTreeView.js +5 -1
  26. package/esm/components/messages/contents/CustomHyperlink.d.ts +3 -1
  27. package/esm/components/messages/contents/CustomHyperlink.d.ts.map +1 -1
  28. package/esm/components/messages/contents/CustomHyperlink.js +7 -4
  29. package/esm/components/messages/conversationContents/ConversationDashboardContent.d.ts.map +1 -1
  30. package/esm/components/messages/conversationContents/ConversationDashboardContent.js +13 -4
  31. package/esm/components/messages/conversationContents/ConversationMultipartContent.js +3 -3
  32. package/esm/components/messages/conversationContents/ConversationPublisherDocumentContent.d.ts +11 -0
  33. package/esm/components/messages/conversationContents/ConversationPublisherDocumentContent.d.ts.map +1 -0
  34. package/esm/components/messages/conversationContents/ConversationPublisherDocumentContent.js +57 -0
  35. package/esm/components/messages/conversationContents/ConversationVisualizationContent.d.ts.map +1 -1
  36. package/esm/components/messages/conversationContents/ConversationVisualizationContent.js +9 -5
  37. package/esm/components/messages/conversationContents/useSaveCheck.d.ts +6 -2
  38. package/esm/components/messages/conversationContents/useSaveCheck.d.ts.map +1 -1
  39. package/esm/components/messages/conversationContents/useSaveCheck.js +26 -1
  40. package/esm/components/utils/icons.js +5 -5
  41. package/esm/context/addContextReference.js +2 -2
  42. package/esm/context/build.d.ts.map +1 -1
  43. package/esm/context/build.js +8 -6
  44. package/esm/context/collectContextReferences.js +9 -9
  45. package/esm/context/removeContextReference.d.ts.map +1 -1
  46. package/esm/context/removeContextReference.js +4 -3
  47. package/esm/context/selectContextReferences.js +11 -9
  48. package/esm/context/{viewReport.d.ts → viewedPublisherDocument.d.ts} +4 -4
  49. package/esm/context/viewedPublisherDocument.d.ts.map +1 -0
  50. package/esm/context/{viewReport.js → viewedPublisherDocument.js} +3 -3
  51. package/esm/index.d.ts +1 -1
  52. package/esm/index.d.ts.map +1 -1
  53. package/esm/index.js +1 -1
  54. package/esm/internal.d.ts +2 -1
  55. package/esm/internal.d.ts.map +1 -1
  56. package/esm/localization/bundles/de-DE.localization-bundle.d.ts +1 -0
  57. package/esm/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  58. package/esm/localization/bundles/de-DE.localization-bundle.js +1 -0
  59. package/esm/localization/bundles/en-AU.localization-bundle.d.ts +1 -0
  60. package/esm/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  61. package/esm/localization/bundles/en-AU.localization-bundle.js +1 -0
  62. package/esm/localization/bundles/en-GB.localization-bundle.d.ts +1 -0
  63. package/esm/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  64. package/esm/localization/bundles/en-GB.localization-bundle.js +1 -0
  65. package/esm/localization/bundles/en-US.localization-bundle.d.ts +10 -6
  66. package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  67. package/esm/localization/bundles/en-US.localization-bundle.js +19 -15
  68. package/esm/localization/bundles/es-419.localization-bundle.d.ts +1 -0
  69. package/esm/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  70. package/esm/localization/bundles/es-419.localization-bundle.js +1 -0
  71. package/esm/localization/bundles/es-ES.localization-bundle.d.ts +1 -0
  72. package/esm/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  73. package/esm/localization/bundles/es-ES.localization-bundle.js +1 -0
  74. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts +1 -0
  75. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  76. package/esm/localization/bundles/fi-FI.localization-bundle.js +1 -0
  77. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts +1 -0
  78. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  79. package/esm/localization/bundles/fr-CA.localization-bundle.js +1 -0
  80. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts +1 -0
  81. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  82. package/esm/localization/bundles/fr-FR.localization-bundle.js +1 -0
  83. package/esm/localization/bundles/id-ID.localization-bundle.d.ts +1 -0
  84. package/esm/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  85. package/esm/localization/bundles/id-ID.localization-bundle.js +1 -0
  86. package/esm/localization/bundles/it-IT.localization-bundle.d.ts +1 -0
  87. package/esm/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  88. package/esm/localization/bundles/it-IT.localization-bundle.js +1 -0
  89. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts +1 -0
  90. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  91. package/esm/localization/bundles/ja-JP.localization-bundle.js +1 -0
  92. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts +1 -0
  93. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  94. package/esm/localization/bundles/ko-KR.localization-bundle.js +1 -0
  95. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts +1 -0
  96. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  97. package/esm/localization/bundles/nl-NL.localization-bundle.js +1 -0
  98. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts +1 -0
  99. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  100. package/esm/localization/bundles/pl-PL.localization-bundle.js +1 -0
  101. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts +1 -0
  102. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  103. package/esm/localization/bundles/pt-BR.localization-bundle.js +1 -0
  104. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts +1 -0
  105. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  106. package/esm/localization/bundles/pt-PT.localization-bundle.js +1 -0
  107. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts +1 -0
  108. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  109. package/esm/localization/bundles/ru-RU.localization-bundle.js +1 -0
  110. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts +1 -0
  111. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  112. package/esm/localization/bundles/sl-SI.localization-bundle.js +1 -0
  113. package/esm/localization/bundles/th-TH.localization-bundle.d.ts +1 -0
  114. package/esm/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  115. package/esm/localization/bundles/th-TH.localization-bundle.js +1 -0
  116. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts +1 -0
  117. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  118. package/esm/localization/bundles/tr-TR.localization-bundle.js +1 -0
  119. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts +1 -0
  120. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  121. package/esm/localization/bundles/uk-UA.localization-bundle.js +1 -0
  122. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts +1 -0
  123. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  124. package/esm/localization/bundles/vi-VN.localization-bundle.js +1 -0
  125. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts +1 -0
  126. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  127. package/esm/localization/bundles/zh-HK.localization-bundle.js +1 -0
  128. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts +1 -0
  129. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  130. package/esm/localization/bundles/zh-Hans.localization-bundle.js +1 -0
  131. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts +1 -0
  132. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  133. package/esm/localization/bundles/zh-Hant.localization-bundle.js +1 -0
  134. package/esm/model.d.ts +1 -0
  135. package/esm/model.d.ts.map +1 -1
  136. package/esm/sdk-ui-gen-ai.d.ts +42 -11
  137. package/esm/store/chatWindow/chatWindowSelectors.d.ts.map +1 -1
  138. package/esm/store/chatWindow/chatWindowSelectors.js +4 -3
  139. package/esm/store/chatWindow/chatWindowSlice.d.ts +6 -6
  140. package/esm/store/chatWindow/chatWindowSlice.d.ts.map +1 -1
  141. package/esm/store/events.d.ts +11 -11
  142. package/esm/store/events.d.ts.map +1 -1
  143. package/esm/store/messages/messagesSelectors.d.ts +1 -0
  144. package/esm/store/messages/messagesSelectors.d.ts.map +1 -1
  145. package/esm/store/messages/messagesSelectors.js +1 -0
  146. package/esm/store/messages/messagesSlice.d.ts +22 -6
  147. package/esm/store/messages/messagesSlice.d.ts.map +1 -1
  148. package/esm/store/messages/messagesSlice.js +42 -8
  149. package/esm/store/sideEffects/index.d.ts.map +1 -1
  150. package/esm/store/sideEffects/index.js +5 -1
  151. package/esm/store/sideEffects/onDashboardSaved.d.ts +3 -0
  152. package/esm/store/sideEffects/onDashboardSaved.d.ts.map +1 -0
  153. package/esm/store/sideEffects/onDashboardSaved.js +31 -0
  154. package/esm/store/sideEffects/onDefinitionReceivedTrigger.d.ts.map +1 -1
  155. package/esm/store/sideEffects/onDefinitionReceivedTrigger.js +8 -7
  156. package/esm/store/sideEffects/onPublisherDocumentSaved.d.ts +3 -0
  157. package/esm/store/sideEffects/onPublisherDocumentSaved.d.ts.map +1 -0
  158. package/esm/store/sideEffects/onPublisherDocumentSaved.js +26 -0
  159. package/esm/store/sideEffects/onVisualizationSuccessSave.d.ts.map +1 -1
  160. package/esm/store/sideEffects/onVisualizationSuccessSave.js +1 -0
  161. package/esm/types.d.ts +4 -4
  162. package/esm/types.d.ts.map +1 -1
  163. package/esm/utils.d.ts +7 -7
  164. package/esm/utils.d.ts.map +1 -1
  165. package/esm/utils.js +15 -15
  166. package/package.json +20 -20
  167. package/styles/css/main.css +79 -86
  168. package/styles/css/main.css.map +1 -1
  169. package/styles/css/messages.css +73 -73
  170. package/styles/scss/messages.scss +5 -5
  171. package/esm/components/hooks/useReportSavedSync.d.ts +0 -18
  172. package/esm/components/hooks/useReportSavedSync.d.ts.map +0 -1
  173. package/esm/components/hooks/useReportSavedSync.js +0 -18
  174. package/esm/components/messages/conversationContents/ConversationReportContent.d.ts +0 -11
  175. package/esm/components/messages/conversationContents/ConversationReportContent.d.ts.map +0 -1
  176. package/esm/components/messages/conversationContents/ConversationReportContent.js +0 -56
  177. package/esm/context/viewReport.d.ts.map +0 -1
package/NOTICE CHANGED
@@ -7,9 +7,9 @@
7
7
 
8
8
  The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
9
9
 
10
- Date generated: 2026-10-7
10
+ Date generated: 2026-10-9
11
11
 
12
- Revision ID: e469c84a382ddeb7cdb44635954e2578cb2e6e75
12
+ Revision ID: 3ef6d105ddec892804628036fd14253a8cc9efdf
13
13
 
14
14
  ================================================================================
15
15
  ================================================================================
@@ -219,8 +219,8 @@ No first party licenses found in gooddata-ui-sdk
219
219
  - array-union (2.1.0) [MIT]
220
220
  - astral-regex (2.0.0) [MIT]
221
221
  - asynckit (0.4.0) [MIT]
222
- - axios (1.18.1) [MIT]
223
- - axios-cache-interceptor (1.12.0) [MIT]
222
+ - axios (1.20.0) [MIT]
223
+ - axios-cache-interceptor (1.12.3) [MIT]
224
224
  - babel-plugin-macros (3.1.0) [MIT]
225
225
  - bail (2.0.2) [MIT]
226
226
  - balanced-match (2.0.0) [MIT]
@@ -19838,9 +19838,9 @@ Dependency Path: axios > form-data > asynckit > axios-cache-interceptor > axios
19838
19838
  File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
19839
19839
 
19840
19840
  --------------------------------------------------------------------------------
19841
- Package Title: axios (1.18.1)
19841
+ Package Title: axios (1.20.0)
19842
19842
 
19843
- Package Locator: npm+axios$1.18.1
19843
+ Package Locator: npm+axios$1.20.0
19844
19844
 
19845
19845
  Package Depth: Direct
19846
19846
  --------------------------------------------------------------------------------
@@ -19884,14 +19884,13 @@ MIT
19884
19884
  Authors: jasonsaayman@gmail.com
19885
19885
  Package Manager: NPM
19886
19886
  Project URL: https://axios-http.com/
19887
- Package Download URL: https://registry.npmjs.org/axios/-/axios-1.18.1.tgz
19888
19887
  Dependency Path: axios > axios-cache-interceptor > axios
19889
19888
  File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
19890
19889
 
19891
19890
  --------------------------------------------------------------------------------
19892
- Package Title: axios-cache-interceptor (1.12.0)
19891
+ Package Title: axios-cache-interceptor (1.12.3)
19893
19892
 
19894
- Package Locator: npm+axios-cache-interceptor$1.12.0
19893
+ Package Locator: npm+axios-cache-interceptor$1.12.3
19895
19894
 
19896
19895
  Package Depth: Direct
19897
19896
  --------------------------------------------------------------------------------
@@ -19959,7 +19958,7 @@ MIT
19959
19958
  Authors: arthur.fiorette@gmail.com
19960
19959
  Package Manager: NPM
19961
19960
  Project URL: https://axios-cache-interceptor.js.org/
19962
- Package Download URL: https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.12.0.tgz
19961
+ Package Download URL: https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.12.3.tgz
19963
19962
  Dependency Path: axios-cache-interceptor
19964
19963
  File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
19965
19964
 
@@ -64773,4 +64772,4 @@ File Path(s): common/config/subspaces/sdk/pnpm-lock.yaml
64773
64772
  --------------------------------------------------------------------------------
64774
64773
  --------------------------------------------------------------------------------
64775
64774
 
64776
- Report Generated by FOSSA on 2026-10-7
64775
+ Report Generated by FOSSA on 2026-10-9
@@ -18,6 +18,7 @@ export type LinkHandlerEvent = {
18
18
  newTab: boolean;
19
19
  itemUrl: string;
20
20
  preventDefault: () => void;
21
+ conversationId?: string;
21
22
  section?: "ai";
22
23
  dashboard?: IDashboard;
23
24
  insights?: IInsight[];
@@ -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,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7G,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,QAAQ,GAAG,eAAe,CAAC;IAC7C,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;IACf,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACxC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAI3D,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,GACjB,EAAE,iBAAiB,CAAC,aAAa,CAAC,2CAsBlC;AAED,eAAO,MAAM,SAAS,QAAO,aAE5B,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,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7G,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,QAAQ,GAAG,eAAe,CAAC;IAC7C,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,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACxC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAI3D,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,GACjB,EAAE,iBAAiB,CAAC,aAAa,CAAC,2CAsBlC;AAED,eAAO,MAAM,SAAS,QAAO,aAE5B,CAAC"}
@@ -4,7 +4,7 @@ type GenAIChatContextIndicatorOwnProps = {
4
4
  /**
5
5
  * Shows what ambient context the assistant is answering about — the open dashboard and its live
6
6
  * filters (e.g. "Answering about: Revenue Dashboard · Region: Europe · Q1 2026"), or the open
7
- * report. Renders nothing when no ambient dashboard or report context is present. Re-renders whenever
7
+ * document. Renders nothing when no ambient dashboard or document context is present. Re-renders whenever
8
8
  * the host re-syncs the context, so filter changes on the dashboard are reflected immediately.
9
9
  *
10
10
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChatContextIndicator.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatContextIndicator.tsx"],"names":[],"mappings":"AAoDA,KAAK,iCAAiC,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,kDAkMxF"}
1
+ {"version":3,"file":"GenAIChatContextIndicator.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatContextIndicator.tsx"],"names":[],"mappings":"AAoDA,KAAK,iCAAiC,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,kDA4LxF"}
@@ -37,7 +37,7 @@ const msgs = defineMessages({
37
37
  /**
38
38
  * Shows what ambient context the assistant is answering about — the open dashboard and its live
39
39
  * filters (e.g. "Answering about: Revenue Dashboard · Region: Europe · Q1 2026"), or the open
40
- * report. Renders nothing when no ambient dashboard or report context is present. Re-renders whenever
40
+ * document. Renders nothing when no ambient dashboard or document context is present. Re-renders whenever
41
41
  * the host re-syncs the context, so filter changes on the dashboard are reflected immediately.
42
42
  *
43
43
  * @internal
@@ -77,7 +77,7 @@ export function GenAIChatContextIndicator({ onUpdate }) {
77
77
  }, [setSearch]);
78
78
  const isSelected = Boolean(selectedContext || references.length > 0);
79
79
  const ambientToggleLabel = intl.formatMessage(selectedContext?.activated ? msgs.stopUsingContext : msgs.startUsingContext);
80
- const announcement = useContextChangeAnnouncement(selectedContext, references);
80
+ const announcement = useContextChangeAnnouncement(selectedContext, references, ambientLoading);
81
81
  if (!isContextSetupEnabled || !isSelected) {
82
82
  return null;
83
83
  }
@@ -89,14 +89,10 @@ export function GenAIChatContextIndicator({ onUpdate }) {
89
89
  if (!item || !selectedContext) {
90
90
  return null;
91
91
  }
92
- return (_jsx(UiChip, { isActionable: true, isExpandable: true, isActive: isOpen, ...getIconByObject(item), label: getSelectedTitle(selectedContext, emptyReferenceLabel), iconAction: selectedContext.activated ? "visible" : "invisible", actionIconTooltip: selectedContext.activated
93
- ? intl.formatMessage(msgs.stopUsingContext)
94
- : intl.formatMessage(msgs.startUsingContext), tooltip: intl.formatMessage(msgs.context), variant: selectedContext.activated ? "normal" : "inactive", onClick: toggleDropdown, onAction: onAmbientToggleHandler(), accessibilityConfig: {
92
+ return (_jsx(UiChip, { isActionable: true, isExpandable: true, isActive: isOpen, ...getIconByObject(item), label: getSelectedTitle(selectedContext, emptyReferenceLabel), iconAction: selectedContext.activated ? "visible" : "invisible", actionIconTooltip: ambientToggleLabel, tooltip: intl.formatMessage(msgs.context), variant: selectedContext.activated ? "normal" : "inactive", onClick: toggleDropdown, onAction: onAmbientToggleHandler(), accessibilityConfig: {
95
93
  ...accessibilityConfig,
96
- deleteAriaLabel: intl.formatMessage(msgs.remove, {
97
- title: getSelectedTitle(selectedContext, emptyReferenceLabel),
98
- }),
99
94
  iconBeforeAriaLabel: getTypeLabel(item.type, intl),
95
+ actionAriaLabel: ambientToggleLabel,
100
96
  } }));
101
97
  }, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(GenAiChatContextChooserBody, { inputItems: items, selectedIds: selectedIds, title: addContextLabel, titleId: titleId, search: search, onSearchChange: setSearch, ariaAttributes: ariaAttributes, closeDropdown: closeDropdown, onSelect: (item) => {
102
98
  dispatch(selectedContextReferencesAction({
@@ -115,8 +111,8 @@ export function GenAIChatContextIndicator({ onUpdate }) {
115
111
  activated: true,
116
112
  }));
117
113
  onUpdate?.();
118
- } })) })) : selectedContext?.report ? (_jsx(UiChip, { isActionable: true, isExpandable: false, ...getIconByObject(selectedContext.report), label: selectedContext.report.title || emptyReferenceLabel, iconAction: selectedContext.activated ? "visible" : "invisible", actionIconTooltip: ambientToggleLabel, tooltip: intl.formatMessage(msgs.context), variant: selectedContext.activated ? "normal" : "inactive", onClick: onAmbientToggleHandler(), onAction: onAmbientToggleHandler(), accessibilityConfig: {
119
- iconBeforeAriaLabel: getTypeLabel(selectedContext.report.type, intl),
114
+ } })) })) : selectedContext?.publisherDocument ? (_jsx(UiChip, { isActionable: true, isExpandable: false, ...getIconByObject(selectedContext.publisherDocument), label: selectedContext.publisherDocument.title || emptyReferenceLabel, iconAction: selectedContext.activated ? "visible" : "invisible", actionIconTooltip: ambientToggleLabel, tooltip: intl.formatMessage(msgs.context), variant: selectedContext.activated ? "normal" : "inactive", onClick: onAmbientToggleHandler(), onAction: onAmbientToggleHandler(), accessibilityConfig: {
115
+ iconBeforeAriaLabel: getTypeLabel(selectedContext.publisherDocument.type, intl),
120
116
  actionAriaLabel: ambientToggleLabel,
121
117
  } })) : null, references.length > 0
122
118
  ? references.map((reference, index) => (_jsx(UiChip, { isDisabled: true, isDeletable: true, ...getIconByObject(reference), label: reference.title, isExpandable: false, onDelete: onDeleteHandler(reference), accessibilityConfig: {
@@ -3,7 +3,8 @@ import { type IAnalyticalBackend, type IUserWorkspaceSettings } from "@gooddata/
3
3
  import type { GenAIObjectType, IColorPalette, IGenAIUserContext } from "@gooddata/sdk-model";
4
4
  import { type ChatAssistantMessageEvent, type ChatClosedEvent, type ChatCopyToClipboardEvent, type ChatDefinitionReceivedEvent, type ChatEvent, type ChatFeedbackErrorEvent, type ChatFeedbackEvent, type ChatModeChangeEvent, type ChatOpenedEvent, type ChatResetEvent, type ChatSaveVisualizationErrorEvent, type ChatSaveVisualizationSuccessEvent, type ChatUserMessageEvent } from "../store/events.js";
5
5
  import { type GenAIAssistantDisplayMode, type LinkHandlerEvent } from "./ConfigContext.js";
6
- import { type IReportSaved } from "./hooks/useReportSavedSync.js";
6
+ import { type IDashboardSaved } from "./hooks/useDashboardSavedSync.js";
7
+ import { type IPublisherDocumentSaved } from "./hooks/usePublisherDocumentSavedSync.js";
7
8
  /**
8
9
  * Discriminated union of GenAI chat events surfaced to a caller via {@link IGenAIChatDialogConnectedProps.onEvent}.
9
10
  *
@@ -107,10 +108,12 @@ export interface IGenAIChatDialogConnectedProps {
107
108
  */
108
109
  ambientUserContextLoading?: boolean;
109
110
  /**
110
- * A report of the conversation that an application saved. The report in the chat then reads as
111
+ * A document of the conversation that an application saved. The document in the chat then reads as
111
112
  * saved without the conversation being loaded again. Each save carries a new `seq`.
112
113
  */
113
- reportSaved?: IReportSaved;
114
+ publisherDocumentSaved?: IPublisherDocumentSaved;
115
+ /** A dashboard save reported by an application. Each save carries a new `seq`. */
116
+ dashboardSaved?: IDashboardSaved;
114
117
  /**
115
118
  * Agent ID to use for the seeded question. If not provided, the default agent will be used.
116
119
  */
@@ -148,5 +151,5 @@ export interface IGenAIChatDialogConnectedProps {
148
151
  *
149
152
  * @internal
150
153
  */
151
- export declare function GenAIChatDialogConnected({ backend, workspace, locale, canManage, canAnalyze, canFullControl, settings, agentId, isOpen, isDisabled, displayMode, onOpen, onClose, askedQuestion, askSeq, userContext, ambientUserContext, ambientUserContextLoading, reportSaved, appendToChat, replaceUserContext, includeTags, excludeTags, objectTypes: objectTypesOverride, onEvent, onAnyEvent, dialogPosition, className, colorPalette, allowNativeLinks, onLinkClick, returnFocusTo, }: IGenAIChatDialogConnectedProps): import("react/jsx-runtime").JSX.Element;
154
+ export declare function GenAIChatDialogConnected({ backend, workspace, locale, canManage, canAnalyze, canFullControl, settings, agentId, isOpen, isDisabled, displayMode, onOpen, onClose, askedQuestion, askSeq, userContext, ambientUserContext, ambientUserContextLoading, publisherDocumentSaved, dashboardSaved, appendToChat, replaceUserContext, includeTags, excludeTags, objectTypes: objectTypesOverride, onEvent, onAnyEvent, dialogPosition, className, colorPalette, allowNativeLinks, onLinkClick, returnFocusTo, }: IGenAIChatDialogConnectedProps): import("react/jsx-runtime").JSX.Element;
152
155
  //# sourceMappingURL=GenAIChatDialogConnected.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChatDialogConnected.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatDialogConnected.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GenAIChatDialogConnected.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatDialogConnected.tsx"],"names":[],"mappings":"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"}
@@ -6,7 +6,8 @@ import { setAmbientUserContextAction, setUserContextAction } from "../store/chat
6
6
  import { isChatAssistantMessageEvent, isChatClosedEvent, isChatCopyToClipboardEvent, isChatDefinitionReceivedEvent, isChatFeedbackErrorEvent, isChatFeedbackEvent, isChatModeChangeEvent, isChatOpenedEvent, isChatResetEvent, isChatSaveVisualizationErrorEvent, isChatSaveVisualizationSuccessEvent, isChatUserMessageEvent, } from "../store/events.js";
7
7
  import { clearThreadAction, newMessageAction, setSelectedAgentAction, } from "../store/messages/messagesSlice.js";
8
8
  import { GenAIChatDialog } from "./GenAIChatDialog.js";
9
- import { useReportSavedSync } from "./hooks/useReportSavedSync.js";
9
+ import { useDashboardSavedSync } from "./hooks/useDashboardSavedSync.js";
10
+ import { usePublisherDocumentSavedSync, } from "./hooks/usePublisherDocumentSavedSync.js";
10
11
  /**
11
12
  * A "connected" wrapper over {@link GenAIChatDialog} that centralizes the wiring every consumer otherwise
12
13
  * duplicates: object-type derivation, the dispatcher-based seeding flow (clear thread / set user context), default link handling, and normalizing
@@ -17,7 +18,7 @@ import { useReportSavedSync } from "./hooks/useReportSavedSync.js";
17
18
  *
18
19
  * @internal
19
20
  */
20
- export function GenAIChatDialogConnected({ backend, workspace, locale, canManage, canAnalyze, canFullControl, settings, agentId, isOpen, isDisabled = true, displayMode, onOpen, onClose, askedQuestion, askSeq, userContext, ambientUserContext, ambientUserContextLoading, reportSaved, appendToChat, replaceUserContext, includeTags, excludeTags, objectTypes: objectTypesOverride, onEvent, onAnyEvent, dialogPosition, className, colorPalette, allowNativeLinks = true, onLinkClick, returnFocusTo, }) {
21
+ export function GenAIChatDialogConnected({ backend, workspace, locale, canManage, canAnalyze, canFullControl, settings, agentId, isOpen, isDisabled = true, displayMode, onOpen, onClose, askedQuestion, askSeq, userContext, ambientUserContext, ambientUserContextLoading, publisherDocumentSaved, dashboardSaved, appendToChat, replaceUserContext, includeTags, excludeTags, objectTypes: objectTypesOverride, onEvent, onAnyEvent, dialogPosition, className, colorPalette, allowNativeLinks = true, onLinkClick, returnFocusTo, }) {
21
22
  const defaultLinkClick = useCallback(({ itemUrl, newTab, preventDefault, type, dashboardStatus, }) => {
22
23
  // NOTE: If dashboard is draft, do nothing for now
23
24
  if (type === "dashboard" && dashboardStatus === "draft") {
@@ -107,7 +108,8 @@ export function GenAIChatDialogConnected({ backend, workspace, locale, canManage
107
108
  loading: ambientUserContextLoading,
108
109
  }));
109
110
  }, [chatDispatcher, ambientUserContext, ambientUserContextLoading]);
110
- useReportSavedSync(chatDispatcher, reportSaved);
111
+ usePublisherDocumentSavedSync(chatDispatcher, publisherDocumentSaved);
112
+ useDashboardSavedSync(chatDispatcher, dashboardSaved);
111
113
  // The token of the last seed we applied. Each ask is identified by `askSeq` (bumped on every ask,
112
114
  // so even a repeated identical question re-seeds); we seed once per token. Without this guard the
113
115
  // effect would replay the question whenever `settings`/`userContext` merely change object identity.
@@ -2,6 +2,6 @@ import { type IGenAIContextObject } from "../types.js";
2
2
  type GenAiChatContextChooserOwnProps = {
3
3
  onAddContext?: (context: IGenAIContextObject) => void;
4
4
  };
5
- export declare function GenAiChatContextChooser({ onAddContext }: GenAiChatContextChooserOwnProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function GenAiChatContextChooser({ onAddContext }: GenAiChatContextChooserOwnProps): import("react/jsx-runtime").JSX.Element | null;
6
6
  export {};
7
7
  //# sourceMappingURL=GenAiChatContextChooser.d.ts.map
@@ -1 +1 @@
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,2CAyExF"}
1
+ {"version":3,"file":"GenAiChatContextChooser.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooser.tsx"],"names":[],"mappings":"AAiBA,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,kDA8ExF"}
@@ -4,7 +4,7 @@ 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, selectedContextSelector, userContextSelector, } from "../store/chatWindow/chatWindowSelectors.js";
7
+ import { ambientContextSelector, contextSetupEnabledSelector, 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
10
  import { useUserContextItems } from "./hooks/useContextItems.js";
@@ -17,6 +17,7 @@ export function GenAiChatContextChooser({ onAddContext }) {
17
17
  const intl = useIntl();
18
18
  const dispatch = useDispatch();
19
19
  const titleId = useIdPrefixed("context-chooser-title");
20
+ const isContextSetupEnabled = useSelector(contextSetupEnabledSelector);
20
21
  const ambient = useSelector((state) => ambientContextSelector(state));
21
22
  const selected = useSelector((state) => selectedContextSelector(state));
22
23
  const active = useSelector((state) => userContextSelector(state));
@@ -28,6 +29,9 @@ export function GenAiChatContextChooser({ onAddContext }) {
28
29
  dispatch(initContextObjectsAction());
29
30
  }
30
31
  }, [dispatch, setSearch]);
32
+ if (!isContextSetupEnabled) {
33
+ return null;
34
+ }
31
35
  return (_jsx("div", { className: "gd-gen-ai-chat__input__context", children: _jsx(Dropdown, { alignPoints: [{ align: "tl bl", offset: { x: 0, y: 0 } }], closeOnEscape: true, fullscreenOnMobile: false, autofocusOnOpen: true, accessibilityConfig: { popupRole: "dialog" }, onOpenStateChanged: onOpenStateChanged, renderButton: ({ isOpen, toggleDropdown, accessibilityConfig }) => (_jsx(UiIconButton, { icon: "plus", variant: "tertiary", size: "small", dataTestId: "choose_context", isActive: isOpen, accessibilityConfig: {
32
36
  ...accessibilityConfig,
33
37
  ariaLabel: addContextLabel,
@@ -5,5 +5,5 @@ import { type IGenAIContextObject, type SelectedContext } from "../../types.js";
5
5
  * nothing is left.
6
6
  * @internal
7
7
  */
8
- export declare function useContextChangeAnnouncement(selected: SelectedContext | undefined, references: IGenAIContextObject[]): string;
8
+ export declare function useContextChangeAnnouncement(selected: SelectedContext | undefined, references: IGenAIContextObject[], loading?: boolean): string;
9
9
  //# sourceMappingURL=useContextChangeAnnouncement.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useContextChangeAnnouncement.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useContextChangeAnnouncement.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAmBhF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CACxC,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,UAAU,EAAE,mBAAmB,EAAE,GAClC,MAAM,CA8BR"}
1
+ {"version":3,"file":"useContextChangeAnnouncement.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useContextChangeAnnouncement.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAmBhF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CACxC,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,CAAC,EAAE,OAAO,GAClB,MAAM,CAqCR"}
@@ -22,30 +22,36 @@ const ANNOUNCEMENT_DELAY = 250;
22
22
  * nothing is left.
23
23
  * @internal
24
24
  */
25
- export function useContextChangeAnnouncement(selected, references) {
25
+ export function useContextChangeAnnouncement(selected, references, loading) {
26
26
  const intl = useIntl();
27
27
  const [announcement, setAnnouncement] = useState("");
28
- const previousReferences = useRef(null);
28
+ const announcedReferences = useRef(null);
29
29
  useEffect(() => {
30
- const previous = previousReferences.current;
30
+ if (loading) {
31
+ return undefined;
32
+ }
33
+ const announced = announcedReferences.current;
31
34
  const all = [
32
35
  ...(selected?.activated && selected.dashboard ? [selected.dashboard] : []),
33
- ...(selected?.activated && selected.report ? [selected.report] : []),
36
+ ...(selected?.activated && selected.publisherDocument ? [selected.publisherDocument] : []),
34
37
  ...(selected?.activated && selected.visualization ? [selected.visualization] : []),
35
38
  ...references,
36
39
  ];
37
- previousReferences.current = all;
38
- if (previous === null) {
40
+ if (announced === null) {
41
+ announcedReferences.current = all;
39
42
  return undefined;
40
43
  }
41
- const message = getAnnouncement(previous, all, intl);
44
+ const message = getAnnouncement(announced, all, intl);
42
45
  if (!message) {
43
46
  return undefined;
44
47
  }
45
48
  setAnnouncement("");
46
- const timeout = setTimeout(() => setAnnouncement(message), ANNOUNCEMENT_DELAY);
49
+ const timeout = setTimeout(() => {
50
+ announcedReferences.current = all;
51
+ setAnnouncement(message);
52
+ }, ANNOUNCEMENT_DELAY);
47
53
  return () => clearTimeout(timeout);
48
- }, [references, intl, selected]);
54
+ }, [references, intl, selected, loading]);
49
55
  return announcement;
50
56
  }
51
57
  function getAnnouncement(previous, current, intl) {
@@ -14,8 +14,8 @@ export declare function useAmbientContextItems(ambientContext: IGenAIUserContext
14
14
  ref?: ObjRef;
15
15
  title: string;
16
16
  nesting: number;
17
- type: import("@gooddata/sdk-model").GenAIObjectType | "widget" | "report";
18
- where: "view.dashboard" | "view.report" | "referencedObjects";
17
+ type: import("@gooddata/sdk-model").GenAIObjectType | "widget" | "publisherDocument";
18
+ where: "view.dashboard" | "view.publisherDocument" | "referencedObjects";
19
19
  context?: import("@gooddata/sdk-model").IGenAIObjectReference;
20
20
  insightRef?: ObjRef;
21
21
  visualizationUrl?: string;
@@ -0,0 +1,13 @@
1
+ import { dashboardSavedAction } from "../../store/messages/messagesSlice.js";
2
+ export interface IDashboardSaved {
3
+ seq: number;
4
+ conversationId: string;
5
+ originalDashboardId: string;
6
+ savedDashboardId: string;
7
+ savedInsights: ReadonlyArray<{
8
+ originalInsightId: string;
9
+ savedInsightId: string;
10
+ }>;
11
+ }
12
+ export declare function useDashboardSavedSync(dispatch: ((action: ReturnType<typeof dashboardSavedAction>) => void) | null, dashboardSaved: IDashboardSaved | undefined): void;
13
+ //# sourceMappingURL=useDashboardSavedSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDashboardSavedSync.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useDashboardSavedSync.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;CACN;AAED,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,EAC5E,cAAc,EAAE,eAAe,GAAG,SAAS,QAY9C"}
@@ -0,0 +1,14 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useEffect, useRef } from "react";
3
+ import { dashboardSavedAction } from "../../store/messages/messagesSlice.js";
4
+ export function useDashboardSavedSync(dispatch, dashboardSaved) {
5
+ const lastSeq = useRef(undefined);
6
+ useEffect(() => {
7
+ if (!dispatch || !dashboardSaved || lastSeq.current === dashboardSaved.seq) {
8
+ return;
9
+ }
10
+ lastSeq.current = dashboardSaved.seq;
11
+ const { seq: _seq, ...payload } = dashboardSaved;
12
+ dispatch(dashboardSavedAction(payload));
13
+ }, [dashboardSaved, dispatch]);
14
+ }
@@ -0,0 +1,18 @@
1
+ import { publisherDocumentSavedAction } from "../../store/messages/messagesSlice.js";
2
+ /**
3
+ * A document of the chat that an application saved. `seq` tells one save from the next, so saving the
4
+ * same document again is reported again.
5
+ */
6
+ export interface IPublisherDocumentSaved {
7
+ seq: number;
8
+ conversationId: string;
9
+ itemId: string;
10
+ documentRef?: string;
11
+ savedDocumentId: string;
12
+ }
13
+ /**
14
+ * Tells the chat store about a document an application saved, so the document in the chat reads as saved
15
+ * without the conversation being loaded again.
16
+ */
17
+ export declare function usePublisherDocumentSavedSync(dispatch: ((action: ReturnType<typeof publisherDocumentSavedAction>) => void) | null, documentSaved: IPublisherDocumentSaved | undefined): void;
18
+ //# sourceMappingURL=usePublisherDocumentSavedSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePublisherDocumentSavedSync.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/usePublisherDocumentSavedSync.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAErF;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,EACpF,aAAa,EAAE,uBAAuB,GAAG,SAAS,QAYrD"}
@@ -0,0 +1,18 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useEffect, useRef } from "react";
3
+ import { publisherDocumentSavedAction } from "../../store/messages/messagesSlice.js";
4
+ /**
5
+ * Tells the chat store about a document an application saved, so the document in the chat reads as saved
6
+ * without the conversation being loaded again.
7
+ */
8
+ export function usePublisherDocumentSavedSync(dispatch, documentSaved) {
9
+ const lastSeq = useRef(undefined);
10
+ useEffect(() => {
11
+ if (!dispatch || !documentSaved || lastSeq.current === documentSaved.seq) {
12
+ return;
13
+ }
14
+ lastSeq.current = documentSaved.seq;
15
+ const { seq: _seq, ...payload } = documentSaved;
16
+ dispatch(publisherDocumentSavedAction(payload));
17
+ }, [dispatch, documentSaved]);
18
+ }
@@ -6,7 +6,7 @@ const ANSWER_OUTPUT_LABEL_MESSAGES = defineMessages({
6
6
  text: { id: "gd.gen-ai.interactionIntelligence.detail.output.text" },
7
7
  visualization: { id: "gd.gen-ai.interactionIntelligence.detail.output.visualization" },
8
8
  dashboard: { id: "gd.gen-ai.interactionIntelligence.detail.output.dashboard" },
9
- report: { id: "gd.gen-ai.interactionIntelligence.detail.output.report" },
9
+ report: { id: "gd.gen-ai.interactionIntelligence.detail.output.publisherDocument" },
10
10
  keyDriverAnalysis: { id: "gd.gen-ai.interactionIntelligence.detail.output.keyDriverAnalysis" },
11
11
  whatIf: { id: "gd.gen-ai.interactionIntelligence.detail.output.whatIf" },
12
12
  searchResults: { id: "gd.gen-ai.interactionIntelligence.detail.output.searchResults" },
@@ -1 +1 @@
1
- {"version":3,"file":"SemanticSearchTreeView.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/components/SemanticSearchTreeView.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAGjC,MAAM,qBAAqB,CAAC;AAa7B,KAAK,2BAA2B,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C,aAAa,EAAE,2BAA2B,EAAE,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CAQxE;AAED,wBAAgB,0BAA0B,CAAC,EACvC,SAAS,EACT,aAAa,EACb,aAAa,EACb,SAAS,GACZ,EAAE,2BAA2B,kDA2E7B"}
1
+ {"version":3,"file":"SemanticSearchTreeView.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/components/SemanticSearchTreeView.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAGjC,MAAM,qBAAqB,CAAC;AAc7B,KAAK,2BAA2B,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C,aAAa,EAAE,2BAA2B,EAAE,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CAQxE;AAED,wBAAgB,0BAA0B,CAAC,EACvC,SAAS,EACT,aAAa,EACb,aAAa,EACb,SAAS,GACZ,EAAE,2BAA2B,kDA8E7B"}
@@ -7,6 +7,7 @@ import { isSemanticSearchRelationship, isSemanticSearchResultItem, } from "@good
7
7
  import { useBackendStrict } from "@gooddata/sdk-ui";
8
8
  import { LeveledSearchTreeView, PermissionsProvider, SemanticSearchIntlProvider, buildSemanticSearchTreeViewItems, } from "@gooddata/sdk-ui-semantic-search/internal";
9
9
  import { settingsSelector } from "../../../store/chatWindow/chatWindowSelectors.js";
10
+ import { conversationSelector } from "../../../store/messages/messagesSelectors.js";
10
11
  import { useConfig } from "../../ConfigContext.js";
11
12
  export function SemanticSearchTreeView(props) {
12
13
  const intl = useIntl();
@@ -17,6 +18,7 @@ export function SemanticSearchTreeViewImpl({ workspace, searchResults, relations
17
18
  const backend = useBackendStrict();
18
19
  const { canFullControl, canManage, canAnalyze, linkHandler } = useConfig();
19
20
  const settings = useSelector(settingsSelector);
21
+ const conversation = useSelector(conversationSelector);
20
22
  const canEdit = canFullControl || canManage || canAnalyze;
21
23
  const useHostDashboards = Boolean(settings?.enableShellApplication_dashboards);
22
24
  const items = buildSemanticSearchTreeViewItems({
@@ -49,6 +51,7 @@ export function SemanticSearchTreeViewImpl({ workspace, searchResults, relations
49
51
  newTab,
50
52
  preventDefault,
51
53
  action: "open",
54
+ conversationId: conversation?.localId,
52
55
  });
53
56
  }
54
57
  if (isSemanticSearchRelationship(data)) {
@@ -60,10 +63,11 @@ export function SemanticSearchTreeViewImpl({ workspace, searchResults, relations
60
63
  newTab,
61
64
  preventDefault,
62
65
  action: "open",
66
+ conversationId: conversation?.localId,
63
67
  });
64
68
  }
65
69
  }
66
- }, [linkHandler, workspace]);
70
+ }, [linkHandler, workspace, conversation]);
67
71
  if (items.length === 0) {
68
72
  return null;
69
73
  }
@@ -1,16 +1,18 @@
1
1
  import { type IUserWorkspaceSettings } from "@gooddata/sdk-backend-spi";
2
+ import { type IChatConversationLocal } from "../../../model.js";
2
3
  export type CustomHyperlinkOwnProps = {
3
4
  href: string;
4
5
  text: string;
5
6
  };
6
7
  type CustomHyperlinkProps = CustomHyperlinkOwnProps & {
7
8
  settings?: IUserWorkspaceSettings;
9
+ conversation?: IChatConversationLocal;
8
10
  };
9
11
  /**
10
12
  * Similar to SDK Hyperlink, but can handle customer schemas
11
13
  * used for links management
12
14
  */
13
- export declare function CustomHyperlinkComponent({ href, text, settings }: CustomHyperlinkProps): string | import("react/jsx-runtime").JSX.Element;
15
+ export declare function CustomHyperlinkComponent({ href, text, settings, conversation }: CustomHyperlinkProps): string | import("react/jsx-runtime").JSX.Element;
14
16
  export declare function CustomHyperlink({ href, text }: CustomHyperlinkOwnProps): import("react/jsx-runtime").JSX.Element;
15
17
  export {};
16
18
  //# sourceMappingURL=CustomHyperlink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomHyperlink.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/CustomHyperlink.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAOxE,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,oBAAoB,GAAG,uBAAuB,GAAG;IAClD,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,oBAAoB,oDA0FtF;AAwBD,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,uBAAuB,2CAItE"}
1
+ {"version":3,"file":"CustomHyperlink.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/CustomHyperlink.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAOhE,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,oBAAoB,GAAG,uBAAuB,GAAG;IAClD,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,oBAAoB,oDA2FpG;AAwBD,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,uBAAuB,2CAOtE"}
@@ -3,14 +3,15 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useMemo } from "react";
4
4
  import { useSelector } from "react-redux";
5
5
  import { settingsSelector } from "../../../store/chatWindow/chatWindowSelectors.js";
6
- import { getReportHref } from "../../../utils.js";
6
+ import { conversationSelector } from "../../../store/messages/messagesSelectors.js";
7
+ import { getPublisherDocumentHref } from "../../../utils.js";
7
8
  import { useConfig } from "../../ConfigContext.js";
8
9
  import { removeMarkdown } from "../../utils/markdownUtils.js";
9
10
  /**
10
11
  * Similar to SDK Hyperlink, but can handle customer schemas
11
12
  * used for links management
12
13
  */
13
- export function CustomHyperlinkComponent({ href, text, settings }) {
14
+ export function CustomHyperlinkComponent({ href, text, settings, conversation }) {
14
15
  const { linkHandler, allowNativeLinks, canManage, canAnalyze } = useConfig();
15
16
  const enableShellApplication_dashboards = Boolean(settings?.enableShellApplication_dashboards);
16
17
  const canManageMetrics = canManage || canAnalyze;
@@ -63,6 +64,7 @@ export function CustomHyperlinkComponent({ href, text, settings }) {
63
64
  newTab: e.metaKey,
64
65
  preventDefault: e.preventDefault.bind(e),
65
66
  action: "open",
67
+ conversationId: conversation?.localId,
66
68
  });
67
69
  };
68
70
  // If the link is for a metric and the user cannot manage metrics,
@@ -91,12 +93,13 @@ const getItemUrl = (workspaceId, id, objectType, enableShellApplication_dashboar
91
93
  case "metric":
92
94
  return `/workspace/${workspaceId}/metrics/metric/${id}`;
93
95
  case "report":
94
- return getReportHref(workspaceId, id);
96
+ return getPublisherDocumentHref(workspaceId, id);
95
97
  default:
96
98
  return null;
97
99
  }
98
100
  };
99
101
  export function CustomHyperlink({ href, text }) {
100
102
  const settings = useSelector(settingsSelector);
101
- return _jsx(CustomHyperlinkComponent, { href: href, text: text, settings: settings });
103
+ const conversation = useSelector(conversationSelector);
104
+ return (_jsx(CustomHyperlinkComponent, { href: href, text: text, settings: settings, conversation: conversation }));
102
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationDashboardContent.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/ConversationDashboardContent.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAKzG,MAAM,MAAM,iCAAiC,GAAG;IAC5C,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,mCAAmC,CAAC;IAC1C,SAAS,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iCAAiC,kDAuFpF"}
1
+ {"version":3,"file":"ConversationDashboardContent.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/conversationContents/ConversationDashboardContent.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAQzG,MAAM,MAAM,iCAAiC,GAAG;IAC5C,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,mCAAmC,CAAC;IAC1C,SAAS,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iCAAiC,kDAkGpF"}
@@ -7,20 +7,26 @@ import { useSelector } from "react-redux";
7
7
  import { useWorkspaceStrict } from "@gooddata/sdk-ui";
8
8
  import { UiButton, UiIcon } from "@gooddata/sdk-ui-kit";
9
9
  import { settingsSelector } from "../../../store/chatWindow/chatWindowSelectors.js";
10
+ import { conversationSelector } from "../../../store/messages/messagesSelectors.js";
10
11
  import { getDashboardHref } from "../../../utils.js";
11
12
  import { useConfig } from "../../ConfigContext.js";
13
+ import { useDashboardSaveCheck } from "./useSaveCheck.js";
12
14
  export function ConversationDashboardContent(props) {
13
- const { className, dashboard, insights, saved, message } = props;
15
+ const { className, dashboard, insights, message, part } = props;
14
16
  const intl = useIntl();
15
17
  const config = useConfig();
16
18
  const workspaceId = useWorkspaceStrict();
17
19
  const useHostedDashboards = Boolean(useSelector(settingsSelector)?.enableShellApplication_dashboards);
20
+ const conversation = useSelector(conversationSelector);
21
+ const { dashboardCheckLoading, dashboardSaved } = useDashboardSaveCheck(part, dashboard, true);
22
+ const isDashboardSaved = dashboardSaved || part.saved;
18
23
  const handleOpenDashboard = useMemo(() => {
19
24
  if (!dashboard) {
20
25
  return undefined;
21
26
  }
22
27
  return (e) => {
23
- const dashboardStatus = saved ? "saved" : "draft";
28
+ //NOTE: Dashboard click here is always in draft mode
29
+ const dashboardStatus = "draft";
24
30
  if (config.allowNativeLinks) {
25
31
  window.location.href = getDashboardHref(workspaceId, dashboard.identifier, dashboardStatus, useHostedDashboards);
26
32
  }
@@ -36,10 +42,11 @@ export function ConversationDashboardContent(props) {
36
42
  insights: insights ?? [],
37
43
  dashboardStatus,
38
44
  action: "open",
45
+ conversationId: conversation?.localId,
39
46
  });
40
47
  }
41
48
  };
42
- }, [dashboard, insights, config, workspaceId, useHostedDashboards, saved]);
49
+ }, [dashboard, insights, config, workspaceId, useHostedDashboards, conversation]);
43
50
  const classNames = cx("gd-gen-ai-chat__conversation__item__content", "gd-gen-ai-chat__conversation__item__content--dashboard", className);
44
51
  if (!dashboard) {
45
52
  return null;
@@ -47,7 +54,9 @@ export function ConversationDashboardContent(props) {
47
54
  return (_jsx("div", { className: classNames, children: _jsxs("div", { className: "gd-gen-ai-chat__conversation__item__content-dashboard-frame", children: [_jsx("div", { className: "gd-gen-ai-chat__conversation__item__content-dashboard-icon", children: _jsx(UiIcon, { type: "dashboard", size: 14, color: "complementary-6", backgroundSize: 26, backgroundColor: "complementary-2" }) }), _jsxs("div", { className: "gd-gen-ai-chat__conversation__item__content-dashboard-content", children: [_jsx("div", { className: "gd-gen-ai-chat__conversation__item__content-dashboard-content-title", children: dashboard.title }), _jsx("div", { className: "gd-gen-ai-chat__conversation__item__content-dashboard-content-date", children: Intl.DateTimeFormat(intl.locale, {
48
55
  dateStyle: "medium",
49
56
  timeStyle: "short",
50
- }).format(showDate(dashboard.created, message.createdAt)) })] }), _jsx("div", { className: "gd-gen-ai-chat__conversation__item__content-dashboard-item-buttons", children: _jsx(UiButton, { label: intl.formatMessage({ id: "gd.gen-ai.dashboard.open-dashboard" }), variant: "secondary", onClick: handleOpenDashboard }) })] }) }));
57
+ }).format(showDate(dashboard.created, message.createdAt)) })] }), _jsx("div", { className: "gd-gen-ai-chat__conversation__item__content-dashboard-item-buttons", children: _jsx(UiButton, { label: isDashboardSaved
58
+ ? intl.formatMessage({ id: "gd.gen-ai.dashboard.edit-dashboard" })
59
+ : intl.formatMessage({ id: "gd.gen-ai.dashboard.open-dashboard" }), variant: "secondary", onClick: handleOpenDashboard, isLoading: dashboardCheckLoading, isDisabled: dashboardCheckLoading }) })] }) }));
51
60
  }
52
61
  function showDate(...args) {
53
62
  const dates = args.map((arg) => {