@gooddata/sdk-ui-gen-ai 11.52.0-alpha.4 → 11.52.0-alpha.6

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 (112) hide show
  1. package/NOTICE +22 -22
  2. package/esm/components/ConfigContext.d.ts +5 -0
  3. package/esm/components/ConfigContext.d.ts.map +1 -1
  4. package/esm/components/ErrorBoundary.d.ts +2 -2
  5. package/esm/components/ErrorBoundary.d.ts.map +1 -1
  6. package/esm/components/ErrorBoundary.js +14 -11
  7. package/esm/components/GenAIChat.d.ts +1 -2
  8. package/esm/components/GenAIChat.d.ts.map +1 -1
  9. package/esm/components/GenAIChat.js +4 -6
  10. package/esm/components/GenAIChatAgentDropdown.d.ts.map +1 -1
  11. package/esm/components/GenAIChatAgentDropdown.js +68 -16
  12. package/esm/components/GenAIChatContextIndicator.d.ts +9 -2
  13. package/esm/components/GenAIChatContextIndicator.d.ts.map +1 -1
  14. package/esm/components/GenAIChatContextIndicator.js +4 -6
  15. package/esm/components/GenAIChatDialog.d.ts +1 -1
  16. package/esm/components/GenAIChatDialog.d.ts.map +1 -1
  17. package/esm/components/GenAIChatDialog.js +2 -2
  18. package/esm/components/GenAIChatEffortDropdown.d.ts.map +1 -1
  19. package/esm/components/GenAIChatEffortDropdown.js +22 -10
  20. package/esm/components/GenAIChatHeader.d.ts +3 -20
  21. package/esm/components/GenAIChatHeader.d.ts.map +1 -1
  22. package/esm/components/GenAIChatHeader.js +12 -14
  23. package/esm/components/GenAIChatOverlay.d.ts.map +1 -1
  24. package/esm/components/GenAIChatOverlay.js +2 -1
  25. package/esm/components/GenAIChatReasoningMenu.d.ts +7 -0
  26. package/esm/components/GenAIChatReasoningMenu.d.ts.map +1 -1
  27. package/esm/components/GenAIChatReasoningMenu.js +33 -10
  28. package/esm/components/GenAIChatWrapper.d.ts +5 -6
  29. package/esm/components/GenAIChatWrapper.d.ts.map +1 -1
  30. package/esm/components/GenAIChatWrapper.js +20 -13
  31. package/esm/components/GenAIStandaloneInput.d.ts +4 -0
  32. package/esm/components/GenAIStandaloneInput.d.ts.map +1 -1
  33. package/esm/components/GenAIStandaloneInput.js +2 -2
  34. package/esm/components/GenAiChatAgentSwitching.d.ts +2 -2
  35. package/esm/components/GenAiChatAgentSwitching.d.ts.map +1 -1
  36. package/esm/components/GenAiChatAgentSwitching.js +20 -19
  37. package/esm/components/GenAiStore.d.ts +7 -1
  38. package/esm/components/GenAiStore.d.ts.map +1 -1
  39. package/esm/components/GenAiStore.js +2 -1
  40. package/esm/components/KeyDriverAnalysis.d.ts +1 -1
  41. package/esm/components/KeyDriverAnalysis.d.ts.map +1 -1
  42. package/esm/components/KeyDriverAnalysis.js +18 -21
  43. package/esm/components/Messages.d.ts +5 -1
  44. package/esm/components/Messages.d.ts.map +1 -1
  45. package/esm/components/Messages.js +8 -11
  46. package/esm/components/customized/LandingQuestion.d.ts +1 -2
  47. package/esm/components/customized/LandingQuestion.d.ts.map +1 -1
  48. package/esm/components/customized/LandingQuestion.js +9 -14
  49. package/esm/components/customized/LandingScreen.d.ts +2 -2
  50. package/esm/components/customized/LandingScreen.d.ts.map +1 -1
  51. package/esm/components/customized/LandingScreen.js +4 -6
  52. package/esm/components/messages/AssistantItemFeedback.d.ts +1 -3
  53. package/esm/components/messages/AssistantItemFeedback.d.ts.map +1 -1
  54. package/esm/components/messages/AssistantItemFeedback.js +8 -7
  55. package/esm/components/messages/contents/ChangeAnalysisContentsComponent.d.ts +1 -9
  56. package/esm/components/messages/contents/ChangeAnalysisContentsComponent.d.ts.map +1 -1
  57. package/esm/components/messages/contents/ChangeAnalysisContentsComponent.js +11 -14
  58. package/esm/components/messages/contents/CustomHyperlink.d.ts +1 -6
  59. package/esm/components/messages/contents/CustomHyperlink.d.ts.map +1 -1
  60. package/esm/components/messages/contents/CustomHyperlink.js +5 -4
  61. package/esm/components/messages/contents/VisualizationContents.d.ts +3 -10
  62. package/esm/components/messages/contents/VisualizationContents.d.ts.map +1 -1
  63. package/esm/components/messages/contents/VisualizationContents.js +15 -18
  64. package/esm/components/messages/contents/VisualizationSaveDialog.d.ts +3 -3
  65. package/esm/components/messages/contents/VisualizationSaveDialog.d.ts.map +1 -1
  66. package/esm/components/messages/contents/VisualizationSaveDialog.js +10 -7
  67. package/esm/components/messages/conversationContents/ConversationErrorContent.d.ts +1 -15
  68. package/esm/components/messages/conversationContents/ConversationErrorContent.d.ts.map +1 -1
  69. package/esm/components/messages/conversationContents/ConversationErrorContent.js +3 -9
  70. package/esm/components/utils/effortSelection.d.ts +11 -0
  71. package/esm/components/utils/effortSelection.d.ts.map +1 -0
  72. package/esm/components/utils/effortSelection.js +17 -0
  73. package/esm/context/dashboard.d.ts +1 -1
  74. package/esm/context/dashboard.d.ts.map +1 -1
  75. package/esm/context/dashboard.js +4 -2
  76. package/esm/hooks/useGenAIStore.d.ts +2 -1
  77. package/esm/hooks/useGenAIStore.d.ts.map +1 -1
  78. package/esm/hooks/useGenAIStore.js +8 -2
  79. package/esm/index.d.ts +3 -4
  80. package/esm/index.d.ts.map +1 -1
  81. package/esm/index.js +2 -2
  82. package/esm/localization/bundles/en-US.localization-bundle.d.ts +20 -0
  83. package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  84. package/esm/localization/bundles/en-US.localization-bundle.js +22 -2
  85. package/esm/sdk-ui-gen-ai.d.ts +52 -4
  86. package/esm/store/events.d.ts +29 -1
  87. package/esm/store/events.d.ts.map +1 -1
  88. package/esm/store/events.js +14 -0
  89. package/esm/store/messages/messagesSelectors.d.ts +1 -0
  90. package/esm/store/messages/messagesSelectors.d.ts.map +1 -1
  91. package/esm/store/messages/messagesSelectors.js +8 -1
  92. package/esm/store/messages/messagesSlice.d.ts +2 -1
  93. package/esm/store/messages/messagesSlice.d.ts.map +1 -1
  94. package/esm/store/messages/messagesSlice.js +18 -2
  95. package/esm/store/options.d.ts +4 -1
  96. package/esm/store/options.d.ts.map +1 -1
  97. package/esm/store/options.js +7 -0
  98. package/esm/store/sideEffects/onEvent.d.ts.map +1 -1
  99. package/esm/store/sideEffects/onEvent.js +23 -2
  100. package/esm/store/sideEffects/onUserMessage.js +2 -2
  101. package/esm/types.d.ts +7 -1
  102. package/esm/types.d.ts.map +1 -1
  103. package/esm/utils.js +4 -4
  104. package/package.json +20 -20
  105. package/styles/css/input.css +2 -1
  106. package/styles/css/input.css.map +1 -1
  107. package/styles/css/main.css +2 -1
  108. package/styles/css/main.css.map +1 -1
  109. package/styles/scss/input.scss +2 -1
  110. package/esm/components/hooks/useFullscreenMode.d.ts +0 -11
  111. package/esm/components/hooks/useFullscreenMode.d.ts.map +0 -1
  112. package/esm/components/hooks/useFullscreenMode.js +0 -38
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-8-7
10
+ Date generated: 2026-8-10
11
11
 
12
- Revision ID: 81ef8e705df7e83197c71d5bca4ff1d157c580f3
12
+ Revision ID: df24fd6388dc31e841cd593b9a048731ec44afec
13
13
 
14
14
  ================================================================================
15
15
  ================================================================================
@@ -373,7 +373,7 @@ Revision ID: 81ef8e705df7e83197c71d5bca4ff1d157c580f3
373
373
  - balanced-match (2.0.0) [MIT]
374
374
  - balanced-match (4.0.4) [MIT]
375
375
  - base64-js (1.5.1) [MIT]
376
- - baseline-browser-mapping (2.11.4) [Apache-2.0]
376
+ - baseline-browser-mapping (2.11.13) [Apache-2.0]
377
377
  - batch (0.6.1) [MIT]
378
378
  - binary-extensions (2.3.0) [MIT]
379
379
  - bl (4.1.0) [MIT]
@@ -382,7 +382,7 @@ Revision ID: 81ef8e705df7e83197c71d5bca4ff1d157c580f3
382
382
  - brace-expansion (1.1.16) [MIT]
383
383
  - brace-expansion (5.0.8) [MIT]
384
384
  - braces (3.0.3) [MIT]
385
- - browserslist (4.28.7) [MIT]
385
+ - browserslist (4.28.8) [MIT]
386
386
  - buffer (5.7.1) [MIT]
387
387
  - buffer-from (1.1.2) [MIT]
388
388
  - bundle-name (4.1.0) [MIT]
@@ -394,7 +394,7 @@ Revision ID: 81ef8e705df7e83197c71d5bca4ff1d157c580f3
394
394
  - call-bind-apply-helpers (1.0.2) [MIT]
395
395
  - call-bound (1.0.4) [MIT]
396
396
  - callsites (3.1.0) [MIT]
397
- - caniuse-lite (1.0.30001806) [CC-BY-4.0]
397
+ - caniuse-lite (1.0.30001809) [CC-BY-4.0]
398
398
  - ccount (2.0.1) [MIT]
399
399
  - chalk (5.3.0) [MIT]
400
400
  - chalk (4.1.2) [MIT]
@@ -487,7 +487,7 @@ Revision ID: 81ef8e705df7e83197c71d5bca4ff1d157c580f3
487
487
  - earcut (2.2.4) [ISC]
488
488
  - earcut (3.2.3) [ISC]
489
489
  - ee-first (1.1.1) [MIT]
490
- - electron-to-chromium (1.5.396) [ISC]
490
+ - electron-to-chromium (1.5.403) [ISC]
491
491
  - emailjs-base64 (1.1.4) [MIT]
492
492
  - emoji-regex (8.0.0) [MIT]
493
493
  - emojilib (2.4.0) [MIT]
@@ -775,7 +775,7 @@ Revision ID: 81ef8e705df7e83197c71d5bca4ff1d157c580f3
775
775
  - negotiator (0.6.4) [MIT]
776
776
  - neo-async (2.6.2) [MIT]
777
777
  - node-emoji (2.2.0) [MIT]
778
- - node-releases (2.0.51) [MIT]
778
+ - node-releases (2.0.53) [MIT]
779
779
  - normalize-path (3.0.0) [MIT]
780
780
  - object-assign (4.1.1) [MIT]
781
781
  - object-code (2.0.0) [MIT]
@@ -1017,7 +1017,7 @@ Revision ID: 81ef8e705df7e83197c71d5bca4ff1d157c580f3
1017
1017
  - unist-util-visit-parents (6.0.2) [MIT]
1018
1018
  - universalify (2.0.1) [MIT]
1019
1019
  - unpipe (1.0.0) [MIT]
1020
- - update-browserslist-db (1.2.3) [MIT]
1020
+ - update-browserslist-db (1.3.0) [MIT]
1021
1021
  - use-composed-ref (1.4.0) [MIT]
1022
1022
  - use-is-mounted-ref (1.5.0) [MIT]
1023
1023
  - use-isomorphic-layout-effect (1.2.1) [MIT]
@@ -5277,9 +5277,9 @@ MIT
5277
5277
 
5278
5278
 
5279
5279
  --------------------------------------------------------------------------------
5280
- Package Title: baseline-browser-mapping (2.11.4)
5280
+ Package Title: baseline-browser-mapping (2.11.13)
5281
5281
 
5282
- Package Locator: npm+baseline-browser-mapping$2.11.4
5282
+ Package Locator: npm+baseline-browser-mapping$2.11.13
5283
5283
 
5284
5284
  Package Depth: Transitive
5285
5285
  --------------------------------------------------------------------------------
@@ -5385,9 +5385,9 @@ MIT
5385
5385
 
5386
5386
 
5387
5387
  --------------------------------------------------------------------------------
5388
- Package Title: browserslist (4.28.7)
5388
+ Package Title: browserslist (4.28.8)
5389
5389
 
5390
- Package Locator: npm+browserslist$4.28.7
5390
+ Package Locator: npm+browserslist$4.28.8
5391
5391
 
5392
5392
  Package Depth: Transitive
5393
5393
  --------------------------------------------------------------------------------
@@ -5529,9 +5529,9 @@ MIT
5529
5529
 
5530
5530
 
5531
5531
  --------------------------------------------------------------------------------
5532
- Package Title: caniuse-lite (1.0.30001806)
5532
+ Package Title: caniuse-lite (1.0.30001809)
5533
5533
 
5534
- Package Locator: npm+caniuse-lite$1.0.30001806
5534
+ Package Locator: npm+caniuse-lite$1.0.30001809
5535
5535
 
5536
5536
  Package Depth: Transitive
5537
5537
  --------------------------------------------------------------------------------
@@ -6649,9 +6649,9 @@ MIT
6649
6649
 
6650
6650
 
6651
6651
  --------------------------------------------------------------------------------
6652
- Package Title: electron-to-chromium (1.5.396)
6652
+ Package Title: electron-to-chromium (1.5.403)
6653
6653
 
6654
- Package Locator: npm+electron-to-chromium$1.5.396
6654
+ Package Locator: npm+electron-to-chromium$1.5.403
6655
6655
 
6656
6656
  Package Depth: Transitive
6657
6657
  --------------------------------------------------------------------------------
@@ -10123,9 +10123,9 @@ MIT
10123
10123
 
10124
10124
 
10125
10125
  --------------------------------------------------------------------------------
10126
- Package Title: node-releases (2.0.51)
10126
+ Package Title: node-releases (2.0.53)
10127
10127
 
10128
- Package Locator: npm+node-releases$2.0.51
10128
+ Package Locator: npm+node-releases$2.0.53
10129
10129
 
10130
10130
  Package Depth: Transitive
10131
10131
  --------------------------------------------------------------------------------
@@ -13081,9 +13081,9 @@ MIT
13081
13081
 
13082
13082
 
13083
13083
  --------------------------------------------------------------------------------
13084
- Package Title: update-browserslist-db (1.2.3)
13084
+ Package Title: update-browserslist-db (1.3.0)
13085
13085
 
13086
- Package Locator: npm+update-browserslist-db$1.2.3
13086
+ Package Locator: npm+update-browserslist-db$1.3.0
13087
13087
 
13088
13088
  Package Depth: Transitive
13089
13089
  --------------------------------------------------------------------------------
@@ -28551,7 +28551,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28551
28551
 
28552
28552
  The MIT License (MIT)
28553
28553
 
28554
- Copyright 2022 Andrey Sitnik <andrey@sitnik.ru> and other contributors
28554
+ Copyright 2022 Andrey Sitnik <andrey@sitnik.es> and other contributors
28555
28555
 
28556
28556
  Permission is hereby granted, free of charge, to any person obtaining a copy of
28557
28557
  this software and associated documentation files (the "Software"), to deal in
@@ -29357,4 +29357,4 @@ POSSIBILITY OF SUCH DAMAGE.
29357
29357
  --------------------------------------------------------------------------------
29358
29358
  --------------------------------------------------------------------------------
29359
29359
 
29360
- Report Generated by FOSSA on 2026-8-7
29360
+ Report Generated by FOSSA on 2026-8-10
@@ -24,6 +24,11 @@ export type LinkHandlerEvent = {
24
24
  visualization?: IInsight;
25
25
  visualizationStatus?: "saved" | "draft";
26
26
  };
27
+ /**
28
+ * Display mode of the Gen AI assistant.
29
+ * @public
30
+ */
31
+ export type GenAIAssistantMode = "docked" | "fullscreen";
27
32
  export declare function ConfigProvider({ children, allowNativeLinks, linkHandler, catalogItems, canManage, canAnalyze, canFullControl }: PropsWithChildren<ConfigContext>): import("react/jsx-runtime").JSX.Element;
28
33
  export declare const useConfig: () => ConfigContext;
29
34
  //# sourceMappingURL=ConfigContext.d.ts.map
@@ -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,eAAe,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC3C,CAAC;AAIF,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACjB,EAAE,iBAAiB,CAAC,aAAa,CAAC,2CA6BlC;AAED,eAAO,MAAM,SAAS,qBAErB,CAAC"}
1
+ {"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,eAAe,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC3C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAIzD,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACjB,EAAE,iBAAiB,CAAC,aAAa,CAAC,2CA6BlC;AAED,eAAO,MAAM,SAAS,qBAErB,CAAC"}
@@ -1,3 +1,3 @@
1
- import { type FC, type PropsWithChildren } from "react";
2
- export declare const ErrorBoundary: FC<PropsWithChildren>;
1
+ import { type PropsWithChildren } from "react";
2
+ export declare function ErrorBoundary({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAkB,MAAM,OAAO,CAAC;AA+FnG,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAGhB,CAAC"}
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,iBAAiB,EAA+B,MAAM,OAAO,CAAC;AAoFvG,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CA0B5D"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2024-2026 GoodData Corporation
3
- import { Component } from "react";
4
- import { connect } from "react-redux";
3
+ import { Component, useCallback } from "react";
4
+ import { useDispatch, useSelector } from "react-redux";
5
5
  import { AnalyticalBackendErrorTypes, isAnalyticalBackendError, isUnexpectedResponseError, } from "@gooddata/sdk-backend-spi";
6
6
  import { asyncProcessSelector, globalErrorSelector } from "../store/messages/messagesSelectors.js";
7
7
  import { clearThreadAction, setGlobalErrorAction } from "../store/messages/messagesSlice.js";
@@ -38,12 +38,15 @@ class ErrorBoundaryComponent extends Component {
38
38
  return this.props.children;
39
39
  }
40
40
  }
41
- const mapStateToProps = (state) => ({
42
- globalError: globalErrorSelector(state),
43
- isClearing: asyncProcessSelector(state) === "clearing",
44
- });
45
- const mapDispatchToProps = {
46
- setGlobalError: setGlobalErrorAction,
47
- clearThread: clearThreadAction,
48
- };
49
- export const ErrorBoundary = connect(mapStateToProps, mapDispatchToProps)(ErrorBoundaryComponent);
41
+ export function ErrorBoundary({ children }) {
42
+ const dispatch = useDispatch();
43
+ const globalError = useSelector(globalErrorSelector);
44
+ const isClearing = useSelector(asyncProcessSelector) === "clearing";
45
+ const setGlobalError = useCallback((payload) => {
46
+ dispatch(setGlobalErrorAction(payload));
47
+ }, [dispatch]);
48
+ const clearThread = useCallback(() => {
49
+ dispatch(clearThreadAction());
50
+ }, [dispatch]);
51
+ return (_jsx(ErrorBoundaryComponent, { globalError: globalError, isClearing: isClearing, setGlobalError: setGlobalError, clearThread: clearThread, children: children }));
52
+ }
@@ -1,7 +1,6 @@
1
1
  import { type ComponentType } from "react";
2
- import { type LinkHandlerEvent } from "./ConfigContext.js";
2
+ import { type GenAIAssistantMode, type LinkHandlerEvent } from "./ConfigContext.js";
3
3
  import { type GenAiStoreProps } from "./GenAiStore.js";
4
- import { type GenAIAssistantMode } from "./hooks/useFullscreenMode.js";
5
4
  /**
6
5
  * Properties for the GenAIAssistant component.
7
6
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAkB,KAAK,gBAAgB,EAAa,MAAM,oBAAoB,CAAC;AAGtF,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,KAAK,kBAAkB,EAAqB,MAAM,8BAA8B,CAAC;AAE1F;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IAClE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IAEvE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;IAErD;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAiDxD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,uBAAiB,CAAC"}
1
+ {"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAEH,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAExB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IAClE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IAEvE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;IAErD;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAmDxD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,uBAAiB,CAAC"}
@@ -3,20 +3,19 @@ import { BackendProvider, WorkspaceProvider, useBackendStrict, useWorkspaceStric
3
3
  import { IntlWrapper } from "../localization/IntlWrapper.js";
4
4
  import { PermissionsProvider } from "../permissions/PermissionsContext.js";
5
5
  import { usePermissions } from "../permissions/usePermissions.js";
6
- import { ConfigProvider, useConfig } from "./ConfigContext.js";
6
+ import { ConfigProvider, useConfig, } from "./ConfigContext.js";
7
7
  import { CustomizationProvider } from "./CustomizationProvider.js";
8
8
  import { GenAIChatWrapper } from "./GenAIChatWrapper.js";
9
9
  import { GenAiStore } from "./GenAiStore.js";
10
- import { useFullscreenMode } from "./hooks/useFullscreenMode.js";
11
10
  /**
12
11
  * UI component that renders the Gen AI assistant.
13
12
  * @public
14
13
  */
15
14
  export function GenAIAssistant(props) {
16
- const { backend, workspace, locale, colorPalette, eventHandlers, settings, objectTypes, catalogItems, includeTags, excludeTags, isPreview, providedStore, onDispatcher, onLinkClick, allowNativeLinks, } = props;
15
+ const { backend, workspace, locale, colorPalette, eventHandlers, settings, objectTypes, catalogItems, includeTags, excludeTags, isPreview, providedStore, onDispatcher, onLinkClick, mode, allowNativeLinks, } = props;
17
16
  const effectiveBackend = useBackendStrict(backend);
18
17
  const effectiveWorkspace = useWorkspaceStrict(workspace);
19
- return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, colorPalette: colorPalette, eventHandlers: eventHandlers, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, isPreview: isPreview, providedStore: providedStore, children: _jsx(BackendProvider, { backend: effectiveBackend, children: _jsx(WorkspaceProvider, { workspace: effectiveWorkspace, children: _jsx(PermissionsProvider, { children: _jsx(GenAIContent, { ...props }) }) }) }) }) }));
18
+ return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, colorPalette: colorPalette, mode: mode, eventHandlers: eventHandlers, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, isPreview: isPreview, providedStore: providedStore, children: _jsx(BackendProvider, { backend: effectiveBackend, children: _jsx(WorkspaceProvider, { workspace: effectiveWorkspace, children: _jsx(PermissionsProvider, { children: _jsx(GenAIContent, { ...props }) }) }) }) }) }));
20
19
  }
21
20
  /**
22
21
  * UI component that renders the Gen AI chat.
@@ -25,9 +24,8 @@ export function GenAIAssistant(props) {
25
24
  */
26
25
  export const GenAIChat = GenAIAssistant;
27
26
  function GenAIContent(props) {
28
- const { onLinkClick, catalogItems, LandingScreenComponentProvider, DisclaimerComponentProvider, className, mode, onModeChange, } = props;
27
+ const { onLinkClick, catalogItems, LandingScreenComponentProvider, DisclaimerComponentProvider, className, } = props;
29
28
  const { permissions, loading } = usePermissions();
30
29
  const { allowNativeLinks } = useConfig();
31
- useFullscreenMode(mode, onModeChange);
32
30
  return (_jsx(ConfigProvider, { linkHandler: onLinkClick, catalogItems: catalogItems, allowNativeLinks: allowNativeLinks ?? props.allowNativeLinks, canFullControl: props.disableFullControl ? false : (permissions.canManageProject ?? false), canManage: props.disableManage ? false : (permissions.canManageProject ?? false), canAnalyze: props.disableAnalyze ? false : (permissions.canCreateVisualization ?? false), children: _jsx(CustomizationProvider, { landingScreenComponentProvider: LandingScreenComponentProvider, disclaimerComponentProvider: DisclaimerComponentProvider, children: _jsx(GenAIChatWrapper, { initializing: loading, className: className }) }) }));
33
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChatAgentDropdown.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatAgentDropdown.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAc3D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AA2B3E,MAAM,MAAM,2BAA2B,GAAG;IACtC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACnC,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAwB,EACxB,cAAyB,EACzB,cAAc,EACjB,EAAE,2BAA2B,2CAiI7B"}
1
+ {"version":3,"file":"GenAIChatAgentDropdown.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatAgentDropdown.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAgB3D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAkC3E,MAAM,MAAM,2BAA2B,GAAG;IACtC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACnC,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAwB,EACxB,cAA+B,EAC/B,cAAc,EACjB,EAAE,2BAA2B,2CA0L7B"}
@@ -1,23 +1,30 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
- import { useEffect, useMemo } from "react";
3
+ import { useCallback, useEffect, useMemo } from "react";
4
4
  import cx from "classnames";
5
5
  import { defineMessages, useIntl } from "react-intl";
6
- import { DefaultUiMenuInteractiveItemWrapper, Dropdown, UiButton, UiIcon, UiMenu, UiSubmenuHeader, typedUiMenuContextStore, } from "@gooddata/sdk-ui-kit";
6
+ import { DefaultUiMenuInteractiveItemWrapper, Dropdown, UiButton, UiIcon, UiMenu, UiSubmenuHeader, typedUiMenuContextStore, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
7
7
  import { GenAIChatReasoningMenuRow, REASONING_MENU_ITEM_ID, useReasoningMenuItems, useSelectedReasoningLabel, } from "./GenAIChatReasoningMenu.js";
8
8
  import { getEffectiveSelectedAgentId, selectDefaultAgentId } from "./utils/agentSelection.js";
9
+ import { DEFAULT_EFFORT } from "./utils/effortSelection.js";
9
10
  const msgs = defineMessages({
10
11
  agent: {
11
12
  id: "gd.gen-ai.agents",
12
13
  },
14
+ agentTriggerAriaLabel: {
15
+ id: "gd.gen-ai.agent.trigger.ariaLabel",
16
+ },
17
+ agentTriggerWithReasoningAriaLabel: {
18
+ id: "gd.gen-ai.agent.trigger.withReasoning.ariaLabel",
19
+ },
13
20
  loading: {
14
21
  id: "gd.gen-ai.agents.loading",
15
22
  },
16
- close: {
23
+ closeAgents: {
17
24
  id: "gd.gen-ai.close",
18
25
  },
19
26
  });
20
- export function GenAIChatAgentDropdown({ agents, conversations, conversationAgentId, selectedAgentId, isDisabled, isLoading, onSelectAgent, reasoningEnabled = false, selectedEffort = "MEDIUM", onSelectEffort, }) {
27
+ export function GenAIChatAgentDropdown({ agents, conversations, conversationAgentId, selectedAgentId, isDisabled, isLoading, onSelectAgent, reasoningEnabled = false, selectedEffort = DEFAULT_EFFORT, onSelectEffort, }) {
21
28
  const intl = useIntl();
22
29
  const effectiveSelectedAgentId = getEffectiveSelectedAgentId({
23
30
  agents,
@@ -33,6 +40,8 @@ export function GenAIChatAgentDropdown({ agents, conversations, conversationAgen
33
40
  onSelectEffort,
34
41
  });
35
42
  const reasoningValueLabel = useSelectedReasoningLabel(selectedEffort, "short");
43
+ const agentsTitleId = useIdPrefixed("agents-menu-title");
44
+ const agentTriggerId = useIdPrefixed("agent-dropdown-trigger");
36
45
  useEffect(() => {
37
46
  const isConversationAgentAvailable = !!conversationAgentId && agents.some((agent) => agent.id === conversationAgentId);
38
47
  const isSelectedAgentAvailable = !!selectedAgentId && agents.some((agent) => agent.id === selectedAgentId);
@@ -64,32 +73,75 @@ export function GenAIChatAgentDropdown({ agents, conversations, conversationAgen
64
73
  id: agent.id,
65
74
  stringTitle: agent.title,
66
75
  isSelected,
76
+ selectionRole: "radio",
67
77
  isDisabled: false,
68
78
  data: { type: "agent", agent },
69
79
  tooltip: agent.description || undefined,
70
- ariaAttributes: agent.description
71
- ? { "aria-label": `${agent.title}. ${agent.description}` }
72
- : undefined,
73
80
  iconRight: agent.description ? (_jsx(UiIcon, { type: "question", size: 12, color: "complementary-5", accessibilityConfig: { ariaHidden: true } })) : undefined,
74
81
  };
75
82
  });
76
- return [...agentItems, ...reasoningItems];
83
+ const agentGroupItems = agentItems.length
84
+ ? [
85
+ {
86
+ type: "group",
87
+ id: "agents-group",
88
+ stringTitle: "",
89
+ data: undefined,
90
+ subItems: agentItems,
91
+ },
92
+ ]
93
+ : [];
94
+ return [...agentGroupItems, ...reasoningItems];
77
95
  }, [agents, effectiveSelectedAgentId, reasoningItems]);
96
+ const AgentsMenuGroupItem = useCallback((props) => (_jsx(AgentsGroupItem, { ...props, titleId: agentsTitleId })), [agentsTitleId]);
97
+ const MenuHeader = useCallback(() => _jsx(AgentMenuHeader, { titleId: agentsTitleId }), [agentsTitleId]);
98
+ const agentTriggerAriaLabel = useMemo(() => {
99
+ if (isLoading) {
100
+ return loadingLabel;
101
+ }
102
+ const agentName = selectedAgent?.title ?? agentLabel;
103
+ if (reasoningEnabled && reasoningValueLabel) {
104
+ return intl.formatMessage(msgs.agentTriggerWithReasoningAriaLabel, {
105
+ agent: agentName,
106
+ effort: reasoningValueLabel,
107
+ });
108
+ }
109
+ return intl.formatMessage(msgs.agentTriggerAriaLabel, { agent: agentName });
110
+ }, [
111
+ agentLabel,
112
+ intl,
113
+ isLoading,
114
+ loadingLabel,
115
+ reasoningEnabled,
116
+ reasoningValueLabel,
117
+ selectedAgent?.title,
118
+ ]);
78
119
  return (_jsxs(_Fragment, { children: [
79
120
  _jsx("span", { className: "sr-only", "aria-live": "polite", "aria-atomic": "true", children: isLoading ? loadingLabel : "" }), _jsx(Dropdown, { className: cx("gd-gen-ai-chat__input__agent-dropdown", {
80
121
  "gd-gen-ai-chat__input__agent-dropdown--loading": isLoading,
81
- }), alignPoints: [{ align: "tr br", offset: { x: 0, y: 0 } }], closeOnEscape: true, fullscreenOnMobile: false, autofocusOnOpen: true, accessibilityConfig: {}, renderButton: ({ isOpen, toggleDropdown, accessibilityConfig }) => (_jsx(UiButton, { label: isLoading ? loadingLabel : (selectedAgent?.title ?? agentLabel), badgeAfter: !isLoading && reasoningEnabled ? reasoningValueLabel : undefined, variant: "dropdownInline", size: "small", iconAfter: isLoading ? undefined : isOpen ? "navigateUp" : "navigateDown", isDisabled: isLoading || isDisabled || !agents.length, onClick: toggleDropdown, dataTestId: "agent_dropdown_button", accessibilityConfig: accessibilityConfig, disableIconAnimation: true })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiMenu, { dataTestId: "agent_dropdown_menu", items: items, size: "small", minWidth: 200, maxWidth: 200, containerTopPadding: "small", containerBottomPadding: "small", MenuHeader: AgentMenuHeader, InteractiveItemWrapper: AgentMenuItemWrapper, onClose: closeDropdown, ariaAttributes: ariaAttributes, onSelect: (item) => {
82
- if (item.data.type === "agent") {
83
- onSelectAgent(item.data.agent.id, { showChangeEvent: true });
84
- closeDropdown();
85
- }
86
- } })) })] }));
122
+ }), alignPoints: [{ align: "tr br", offset: { x: 0, y: 0 } }], closeOnEscape: true, fullscreenOnMobile: false, autofocusOnOpen: true, returnFocusTo: agentTriggerId, accessibilityConfig: { popupRole: "dialog" }, renderButton: ({ isOpen, toggleDropdown, accessibilityConfig }) => (_jsx(UiButton, { id: agentTriggerId, label: isLoading ? loadingLabel : (selectedAgent?.title ?? agentLabel), badgeAfter: !isLoading && reasoningEnabled ? reasoningValueLabel : undefined, variant: "dropdownInline", size: "small", iconAfter: isLoading ? undefined : isOpen ? "navigateUp" : "navigateDown", isDisabled: isLoading || isDisabled || !agents.length, onClick: toggleDropdown, dataTestId: "agent_dropdown_button", accessibilityConfig: {
123
+ ...accessibilityConfig,
124
+ ariaLabel: agentTriggerAriaLabel,
125
+ }, disableIconAnimation: true })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx("div", { ...ariaAttributes, "aria-labelledby": agentsTitleId, children: _jsx(UiMenu, { dataTestId: "agent_dropdown_menu", items: items, size: "small", minWidth: 200, maxWidth: 200, containerTopPadding: "small", containerBottomPadding: "small", MenuHeader: MenuHeader, GroupItem: AgentsMenuGroupItem, InteractiveItemWrapper: AgentMenuItemWrapper, onClose: closeDropdown, ariaAttributes: {
126
+ id: `${ariaAttributes.id}-menu`,
127
+ "aria-labelledby": agentsTitleId,
128
+ }, onSelect: (item) => {
129
+ if (item.data.type === "agent") {
130
+ onSelectAgent(item.data.agent.id, { showChangeEvent: true });
131
+ closeDropdown();
132
+ }
133
+ } }) })) })] }));
134
+ }
135
+ function AgentsGroupItem({ item, titleId }) {
136
+ const { useContextStore, createSelector } = typedUiMenuContextStore();
137
+ const ItemComponent = useContextStore(createSelector((ctx) => ctx.ItemComponent));
138
+ return (_jsx("ul", { className: "gd-ui-kit-menu__group", role: "group", "aria-labelledby": titleId, children: item.subItems.map((groupItem, index) => (_jsx(ItemComponent, { item: groupItem }, "id" in groupItem ? groupItem.id : index))) }));
87
139
  }
88
- function AgentMenuHeader() {
140
+ function AgentMenuHeader({ titleId }) {
89
141
  const intl = useIntl();
90
142
  const { useContextStore, createSelector } = typedUiMenuContextStore();
91
143
  const onClose = useContextStore(createSelector((ctx) => ctx.onClose));
92
- return (_jsx(UiSubmenuHeader, { title: intl.formatMessage(msgs.agent), height: "medium", onClose: onClose, closeAriaLabel: intl.formatMessage(msgs.close) }));
144
+ return (_jsx(UiSubmenuHeader, { title: intl.formatMessage(msgs.agent), titleId: titleId, height: "medium", onClose: onClose, closeAriaLabel: intl.formatMessage(msgs.closeAgents) }));
93
145
  }
94
146
  function AgentMenuItemWrapper(props) {
95
147
  if (props.item.id === REASONING_MENU_ITEM_ID) {
@@ -1,7 +1,14 @@
1
- import { type FC } from "react";
2
1
  type GenAIChatContextIndicatorOwnProps = {
3
2
  onDelete?: () => void;
4
3
  };
5
- export declare const GenAIChatContextIndicator: FC<GenAIChatContextIndicatorOwnProps>;
4
+ /**
5
+ * Shows what ambient context the assistant is answering about — the open dashboard and its live
6
+ * filters (e.g. "Answering about: Revenue Dashboard · Region: Europe · Q1 2026"). Renders nothing
7
+ * when no ambient dashboard context is present. Re-renders whenever the host re-syncs the context,
8
+ * so filter changes on the dashboard are reflected immediately.
9
+ *
10
+ * @internal
11
+ */
12
+ export declare function GenAIChatContextIndicator({ onDelete }: GenAIChatContextIndicatorOwnProps): import("react/jsx-runtime").JSX.Element | null;
6
13
  export {};
7
14
  //# sourceMappingURL=GenAIChatContextIndicator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChatContextIndicator.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatContextIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,EAAe,MAAM,OAAO,CAAC;AAc7C,KAAK,iCAAiC,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AA4DF,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,iCAAiC,CAG5C,CAAC"}
1
+ {"version":3,"file":"GenAIChatContextIndicator.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatContextIndicator.tsx"],"names":[],"mappings":"AAgBA,KAAK,iCAAiC,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,kDA2CxF"}
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
3
  import { useCallback } from "react";
4
4
  import { useIntl } from "react-intl";
5
- import { connect, useSelector } from "react-redux";
5
+ import { useDispatch, useSelector } from "react-redux";
6
6
  import { UiChip } from "@gooddata/sdk-ui-kit";
7
7
  import { collectContextReferences } from "../context/collectContextReferences.js";
8
8
  import { contextSetupEnabledSelector, userContextSelector } from "../store/chatWindow/chatWindowSelectors.js";
@@ -16,12 +16,14 @@ import { getIconByType } from "./utils/icons.js";
16
16
  *
17
17
  * @internal
18
18
  */
19
- function GenAIChatContextIndicatorCore({ removeContextReference, onDelete, }) {
19
+ export function GenAIChatContextIndicator({ onDelete }) {
20
20
  const intl = useIntl();
21
21
  const emptyReferenceLabel = intl.formatMessage({ id: "gd.gen-ai.context.untitled" });
22
22
  const isContextSetupEnabled = useSelector(contextSetupEnabledSelector);
23
23
  const context = useSelector(userContextSelector);
24
24
  const references = collectContextReferences(context, emptyReferenceLabel);
25
+ const dispatch = useDispatch();
26
+ const removeContextReference = useCallback((payload) => dispatch(removeContextReferenceAction(payload)), [dispatch]);
25
27
  const onDeleteHandler = useCallback((reference) => {
26
28
  return () => {
27
29
  removeContextReference({ object: reference });
@@ -33,7 +35,3 @@ function GenAIChatContextIndicatorCore({ removeContextReference, onDelete, }) {
33
35
  }
34
36
  return (_jsx("div", { className: "gd-gen-ai-chat__context-indicator", "aria-live": "polite", children: references.map((reference, index) => (_jsx(UiChip, { isDisabled: true, isDeletable: true, ...getIconByType(reference.type), label: reference.title, isExpandable: false, onDelete: onDeleteHandler(reference) }, index))) }));
35
37
  }
36
- const mapDispatchToProps = {
37
- removeContextReference: removeContextReferenceAction,
38
- };
39
- export const GenAIChatContextIndicator = connect(null, mapDispatchToProps)(GenAIChatContextIndicatorCore);
@@ -21,5 +21,5 @@ export type GenAIChatDialogProps = Omit<GenAiStoreProps, "children"> & {
21
21
  */
22
22
  closeOnEscape?: boolean;
23
23
  };
24
- export declare function GenAIChatDialog({ backend, workspace, locale, disabled, isOpen, onOpen, onClose, settings, className, dialogPosition, allowNativeLinks, returnFocusTo, objectTypes, includeTags, excludeTags, canManage, canAnalyze, canFullControl, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, LandingScreenComponentProvider, closeOnEscape }: GenAIChatDialogProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function GenAIChatDialog({ backend, workspace, locale, disabled, isOpen, onOpen, onClose, settings, className, dialogPosition, allowNativeLinks, returnFocusTo, objectTypes, includeTags, excludeTags, canManage, canAnalyze, canFullControl, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, mode, LandingScreenComponentProvider, closeOnEscape }: GenAIChatDialogProps): import("react/jsx-runtime").JSX.Element;
25
25
  //# sourceMappingURL=GenAIChatDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChatDialog.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAA2C,MAAM,OAAO,CAAC;AAcpG,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGnE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IACnE,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;IACrD;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AASF,wBAAgB,eAAe,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,gBAAuB,EACvB,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAiB,EACjB,UAAkB,EAClB,cAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,8BAA8B,EAC9B,aAAa,EAChB,EAAE,oBAAoB,2CA6CtB"}
1
+ {"version":3,"file":"GenAIChatDialog.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAA2C,MAAM,OAAO,CAAC;AAcpG,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGnE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IACnE,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;IACrD;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AASF,wBAAgB,eAAe,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,gBAAuB,EACvB,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAiB,EACjB,UAAkB,EAClB,cAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,8BAA8B,EAC9B,aAAa,EAChB,EAAE,oBAAoB,2CA8CtB"}
@@ -18,10 +18,10 @@ import { KeyDriverAnalysis } from "./KeyDriverAnalysis.js";
18
18
  const DEFAULT_CHAT_Z_INDEX = 3000;
19
19
  // - Must be more than DEFAULT_CHAT_Z_INDEX
20
20
  const DEFAULT_KDA_Z_INDEX = 3050;
21
- export function GenAIChatDialog({ backend, workspace, locale, disabled, isOpen, onOpen, onClose, settings, className, dialogPosition, allowNativeLinks = true, returnFocusTo, objectTypes, includeTags, excludeTags, canManage = false, canAnalyze = false, canFullControl = false, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, LandingScreenComponentProvider, closeOnEscape, }) {
21
+ export function GenAIChatDialog({ backend, workspace, locale, disabled, isOpen, onOpen, onClose, settings, className, dialogPosition, allowNativeLinks = true, returnFocusTo, objectTypes, includeTags, excludeTags, canManage = false, canAnalyze = false, canFullControl = false, eventHandlers, catalogItems, colorPalette, onLinkClick, onDispatcher, mode, LandingScreenComponentProvider, closeOnEscape, }) {
22
22
  const effectiveBackend = useBackendStrict(backend);
23
23
  const effectiveWorkspace = useWorkspaceStrict(workspace);
24
- return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, eventHandlers: eventHandlers, colorPalette: colorPalette, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, children: (genAIStore) => (_jsx(GenAIChatDialogContent, { genAIStore: genAIStore, backend: effectiveBackend, workspace: effectiveWorkspace, className: className, dialogPosition: dialogPosition, disabled: disabled, isOpen: isOpen, onOpen: onOpen, onClose: onClose, returnFocusTo: returnFocusTo, closeOnEscape: closeOnEscape, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, catalogItems: catalogItems, canManage: canManage, canAnalyze: canAnalyze, canFullControl: canFullControl, LandingScreenComponentProvider: LandingScreenComponentProvider })) }) }));
24
+ return (_jsx(IntlWrapper, { locale: locale, children: _jsx(GenAiStore, { backend: effectiveBackend, workspace: effectiveWorkspace, onDispatcher: onDispatcher, eventHandlers: eventHandlers, colorPalette: colorPalette, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, settings: settings, objectTypes: objectTypes, includeTags: includeTags, excludeTags: excludeTags, catalogItems: catalogItems, mode: mode, children: (genAIStore) => (_jsx(GenAIChatDialogContent, { genAIStore: genAIStore, backend: effectiveBackend, workspace: effectiveWorkspace, className: className, dialogPosition: dialogPosition, disabled: disabled, isOpen: isOpen, onOpen: onOpen, onClose: onClose, returnFocusTo: returnFocusTo, closeOnEscape: closeOnEscape, allowNativeLinks: allowNativeLinks, onLinkClick: onLinkClick, catalogItems: catalogItems, canManage: canManage, canAnalyze: canAnalyze, canFullControl: canFullControl, LandingScreenComponentProvider: LandingScreenComponentProvider })) }) }));
25
25
  }
26
26
  function GenAIChatDialogContent({ genAIStore, backend, workspace, className, dialogPosition, disabled, isOpen, onOpen, onClose, returnFocusTo, onLinkClick, allowNativeLinks, catalogItems, canManage, canAnalyze, canFullControl, LandingScreenComponentProvider, closeOnEscape, }) {
27
27
  const open = useRef(onOpen);
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChatEffortDropdown.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatEffortDropdown.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAe3D,MAAM,MAAM,4BAA4B,GAAG;IACvC,cAAc,EAAE,eAAe,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,cAAc,EACd,UAAU,EACV,cAAc,EACjB,EAAE,4BAA4B,2CA8C9B"}
1
+ {"version":3,"file":"GenAIChatEffortDropdown.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatEffortDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAmB3D,MAAM,MAAM,4BAA4B,GAAG;IACvC,cAAc,EAAE,eAAe,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,cAAc,EACd,UAAU,EACV,cAAc,EACjB,EAAE,4BAA4B,2CAwE9B"}
@@ -1,12 +1,16 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
+ import { useCallback, useMemo } from "react";
3
4
  import { defineMessages, useIntl } from "react-intl";
4
- import { Dropdown, UiButton, UiMenu, UiSubmenuHeader } from "@gooddata/sdk-ui-kit";
5
- import { useReasoningOptionItems, useSelectedReasoningLabel, } from "./GenAIChatReasoningMenu.js";
5
+ import { Dropdown, UiButton, UiMenu, useIdPrefixed } from "@gooddata/sdk-ui-kit";
6
+ import { ReasoningEffortMenuHeader, useReasoningOptionItems, useSelectedReasoningLabel, } from "./GenAIChatReasoningMenu.js";
6
7
  const msgs = defineMessages({
7
8
  reasoning: {
8
9
  id: "gd.gen-ai.reasoning",
9
10
  },
11
+ effortTriggerAriaLabel: {
12
+ id: "gd.gen-ai.effort.trigger.ariaLabel",
13
+ },
10
14
  });
11
15
  /**
12
16
  * Standalone reasoning-effort dropdown, structured like GenAIChatAgentDropdown but listing effort
@@ -18,12 +22,20 @@ export function GenAIChatEffortDropdown({ selectedEffort, isDisabled, onSelectEf
18
22
  const reasoningLabel = intl.formatMessage(msgs.reasoning);
19
23
  const options = useReasoningOptionItems(selectedEffort, "full");
20
24
  const valueLabel = useSelectedReasoningLabel(selectedEffort, "full");
21
- return (_jsx(Dropdown, { className: "gd-gen-ai-chat__input__effort-dropdown", alignPoints: [{ align: "tr br", offset: { x: 0, y: 0 } }], closeOnEscape: true, fullscreenOnMobile: false, autofocusOnOpen: true, accessibilityConfig: {}, renderButton: ({ isOpen, toggleDropdown, accessibilityConfig }) => (_jsx(UiButton, { label: valueLabel ?? reasoningLabel, variant: "dropdownInline", size: "small", iconAfter: isOpen ? "navigateUp" : "navigateDown", isDisabled: isDisabled, onClick: toggleDropdown, dataTestId: "effort_dropdown_button", accessibilityConfig: accessibilityConfig, disableIconAnimation: true })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiMenu, { dataTestId: "effort_dropdown_menu", items: options, size: "small", minWidth: 200, maxWidth: 260, containerTopPadding: "small", containerBottomPadding: "small", MenuHeader: EffortMenuHeader, ariaAttributes: ariaAttributes, onSelect: (item) => {
22
- onSelectEffort(item.data.effort);
23
- closeDropdown();
24
- } })) }));
25
- }
26
- function EffortMenuHeader() {
27
- const intl = useIntl();
28
- return _jsx(UiSubmenuHeader, { title: intl.formatMessage(msgs.reasoning), height: "medium" });
25
+ const effortTitleId = useIdPrefixed("effort-menu-title");
26
+ const effortTriggerId = useIdPrefixed("effort-dropdown-trigger");
27
+ const MenuHeader = useCallback(() => _jsx(ReasoningEffortMenuHeader, { titleId: effortTitleId }), [effortTitleId]);
28
+ const effortTriggerAriaLabel = useMemo(() => intl.formatMessage(msgs.effortTriggerAriaLabel, {
29
+ effort: valueLabel ?? reasoningLabel,
30
+ }), [intl, reasoningLabel, valueLabel]);
31
+ return (_jsx(Dropdown, { className: "gd-gen-ai-chat__input__effort-dropdown", alignPoints: [{ align: "tr br", offset: { x: 0, y: 0 } }], closeOnEscape: true, fullscreenOnMobile: false, autofocusOnOpen: true, returnFocusTo: effortTriggerId, accessibilityConfig: { popupRole: "dialog" }, renderButton: ({ isOpen, toggleDropdown, accessibilityConfig }) => (_jsx(UiButton, { id: effortTriggerId, label: valueLabel ?? reasoningLabel, variant: "dropdownInline", size: "small", iconAfter: isOpen ? "navigateUp" : "navigateDown", isDisabled: isDisabled, onClick: toggleDropdown, dataTestId: "effort_dropdown_button", accessibilityConfig: {
32
+ ...accessibilityConfig,
33
+ ariaLabel: effortTriggerAriaLabel,
34
+ }, disableIconAnimation: true })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx("div", { ...ariaAttributes, "aria-labelledby": effortTitleId, children: _jsx(UiMenu, { dataTestId: "effort_dropdown_menu", items: options, size: "small", minWidth: 200, maxWidth: 260, containerTopPadding: "small", containerBottomPadding: "small", MenuHeader: MenuHeader, onClose: closeDropdown, ariaAttributes: {
35
+ id: `${ariaAttributes.id}-menu`,
36
+ "aria-labelledby": effortTitleId,
37
+ }, onSelect: (item) => {
38
+ onSelectEffort(item.data.effort);
39
+ closeDropdown();
40
+ } }) })) }));
29
41
  }
@@ -1,22 +1,5 @@
1
- import { type FC } from "react";
2
- import { settingsSelector } from "../store/chatWindow/chatWindowSelectors.js";
3
- import { setFullscreenAction, setHistoryAction } from "../store/chatWindow/chatWindowSlice.js";
4
- import { clearThreadAction, startNewConversationAction } from "../store/messages/messagesSlice.js";
5
- type GenAIChatHeaderOwnProps = {
1
+ export interface IGenAIChatHeaderProps {
6
2
  onClose: () => void;
7
- };
8
- type GenAIChatHeaderStateProps = {
9
- hasMessages: boolean;
10
- hasPinnedContext: boolean;
11
- settings: ReturnType<typeof settingsSelector>;
12
- };
13
- type GenAIChatHeaderDispatchProps = {
14
- clearThread: typeof clearThreadAction;
15
- setFullscreen: typeof setFullscreenAction;
16
- setHistory: typeof setHistoryAction;
17
- startNewConversation: typeof startNewConversationAction;
18
- };
19
- export type GenAIChatHeaderProps = GenAIChatHeaderOwnProps & GenAIChatHeaderStateProps & GenAIChatHeaderDispatchProps;
20
- export declare const GenAIChatHeader: FC<GenAIChatHeaderOwnProps>;
21
- export {};
3
+ }
4
+ export declare function GenAIChatHeader({ onClose }: IGenAIChatHeaderProps): import("react/jsx-runtime").JSX.Element;
22
5
  //# sourceMappingURL=GenAIChatHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChatHeader.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,EAA4B,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE/F,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAMnG,KAAK,uBAAuB,GAAG;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;CACjD,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAChC,WAAW,EAAE,OAAO,iBAAiB,CAAC;IACtC,aAAa,EAAE,OAAO,mBAAmB,CAAC;IAC1C,UAAU,EAAE,OAAO,gBAAgB,CAAC;IACpC,oBAAoB,EAAE,OAAO,0BAA0B,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,GACtD,yBAAyB,GACzB,4BAA4B,CAAC;AAkFjC,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAG7B,CAAC"}
1
+ {"version":3,"file":"GenAIChatHeader.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChatHeader.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,qBAAqB,2CA+EjE"}