@gooddata/sdk-ui-dashboard 11.32.0-alpha.1 → 11.32.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 (151) hide show
  1. package/NOTICE +3 -3
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.d.ts +5 -0
  5. package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.d.ts.map +1 -0
  6. package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.js +238 -0
  7. package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.js.map +1 -0
  8. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.d.ts +34 -0
  9. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.d.ts.map +1 -0
  10. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.js +68 -0
  11. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerListItem.js.map +1 -0
  12. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.d.ts +21 -0
  13. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.d.ts.map +1 -0
  14. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.js +43 -0
  15. package/esm/presentation/dashboard/DashboardSidebar/InsightPickerPanel.js.map +1 -0
  16. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts +1 -1
  17. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts.map +1 -1
  18. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js +8 -0
  19. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js.map +1 -1
  20. package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.d.ts +12 -0
  21. package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.d.ts.map +1 -0
  22. package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.js +93 -0
  23. package/esm/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.js.map +1 -0
  24. package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
  25. package/esm/presentation/dashboard/components/DashboardInner.js +9 -3
  26. package/esm/presentation/dashboard/components/DashboardInner.js.map +1 -1
  27. package/esm/presentation/dragAndDrop/FilterDeleteOverlay.d.ts +11 -0
  28. package/esm/presentation/dragAndDrop/FilterDeleteOverlay.d.ts.map +1 -0
  29. package/esm/presentation/dragAndDrop/FilterDeleteOverlay.js +40 -0
  30. package/esm/presentation/dragAndDrop/FilterDeleteOverlay.js.map +1 -0
  31. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +1 -0
  32. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  33. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +1 -0
  34. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js.map +1 -1
  35. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +1 -0
  36. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  37. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +1 -0
  38. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js.map +1 -1
  39. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +1 -0
  40. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  41. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +1 -0
  42. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js.map +1 -1
  43. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +13 -1
  44. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  45. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +15 -3
  46. package/esm/presentation/localization/bundles/en-US.localization-bundle.js.map +1 -1
  47. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +1 -0
  48. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  49. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +1 -0
  50. package/esm/presentation/localization/bundles/es-419.localization-bundle.js.map +1 -1
  51. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +1 -0
  52. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  53. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +1 -0
  54. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js.map +1 -1
  55. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +1 -0
  56. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  57. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +1 -0
  58. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js.map +1 -1
  59. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +1 -0
  60. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  61. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +1 -0
  62. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js.map +1 -1
  63. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +1 -0
  64. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  65. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +1 -0
  66. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js.map +1 -1
  67. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +1 -0
  68. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  69. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +1 -0
  70. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js.map +1 -1
  71. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +1 -0
  72. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  73. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +1 -0
  74. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js.map +1 -1
  75. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +1 -0
  76. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  77. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +1 -0
  78. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js.map +1 -1
  79. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +1 -0
  80. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  81. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +1 -0
  82. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js.map +1 -1
  83. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +1 -0
  84. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  85. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +1 -0
  86. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js.map +1 -1
  87. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +1 -0
  88. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  89. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +1 -0
  90. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js.map +1 -1
  91. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +1 -0
  92. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  93. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +1 -0
  94. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js.map +1 -1
  95. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +1 -0
  96. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  97. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +1 -0
  98. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js.map +1 -1
  99. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +1 -0
  100. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  101. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +1 -0
  102. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js.map +1 -1
  103. package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.d.ts +1 -0
  104. package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.d.ts.map +1 -1
  105. package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.js +1 -0
  106. package/esm/presentation/localization/bundles/sl-Sl.localization-bundle.js.map +1 -1
  107. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +1 -0
  108. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  109. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +1 -0
  110. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js.map +1 -1
  111. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +1 -0
  112. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  113. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +1 -0
  114. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js.map +1 -1
  115. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +1 -0
  116. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  117. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +1 -0
  118. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js.map +1 -1
  119. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +1 -0
  120. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  121. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +1 -0
  122. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js.map +1 -1
  123. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +1 -0
  124. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  125. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +1 -0
  126. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js.map +1 -1
  127. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +1 -0
  128. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  129. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +1 -0
  130. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js.map +1 -1
  131. package/esm/presentation/topBar/buttonBar/button/editButton/DefaultEditButton.d.ts.map +1 -1
  132. package/esm/presentation/topBar/buttonBar/button/editButton/DefaultEditButton.js +4 -1
  133. package/esm/presentation/topBar/buttonBar/button/editButton/DefaultEditButton.js.map +1 -1
  134. package/esm/sdk-ui-dashboard.d.ts +1 -1
  135. package/package.json +20 -20
  136. package/styles/css/dashboard.css +4 -0
  137. package/styles/css/dashboard.css.map +1 -1
  138. package/styles/css/dragAndDrop.css +4 -0
  139. package/styles/css/dragAndDrop.css.map +1 -1
  140. package/styles/css/floatingToolbar.css +140 -0
  141. package/styles/css/floatingToolbar.css.map +1 -0
  142. package/styles/css/main.css +147 -0
  143. package/styles/css/main.css.map +1 -1
  144. package/styles/scss/dashboard.scss +4 -0
  145. package/styles/scss/dragAndDrop.scss +7 -0
  146. package/styles/scss/floatingToolbar.scss +174 -0
  147. package/styles/scss/main.scss +1 -0
  148. package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.d.ts +0 -5
  149. package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.d.ts.map +0 -1
  150. package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.js +0 -8
  151. package/esm/presentation/dragAndDrop/draggableWidget/AddKpiWidgetButton.js.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-4-20
10
+ Date generated: 2026-4-24
11
11
 
12
- Revision ID: 39ae9f560bcef668b8fbfd561499cd1d0947af28
12
+ Revision ID: ea38c9f6ab57140c60fdc8caf735517b2b03ab5b
13
13
 
14
14
  ================================================================================
15
15
  ================================================================================
@@ -38241,4 +38241,4 @@ POSSIBILITY OF SUCH DAMAGE.
38241
38241
  --------------------------------------------------------------------------------
38242
38242
  --------------------------------------------------------------------------------
38243
38243
 
38244
- Report Generated by FOSSA on 2026-4-20
38244
+ Report Generated by FOSSA on 2026-4-24
@@ -1,4 +1,4 @@
1
- export declare const LIB_VERSION = "11.32.0-alpha.1";
1
+ export declare const LIB_VERSION = "11.32.0-alpha.2";
2
2
  export declare const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
3
3
  export declare const LIB_NAME = "@gooddata/sdk-ui-dashboard";
4
4
  //# sourceMappingURL=__version.d.ts.map
package/esm/__version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // (C) 2021 GoodData Corporation
2
2
  // DO NOT CHANGE THIS FILE, IT IS RE-GENERATED ON EVERY BUILD
3
- export const LIB_VERSION = "11.32.0-alpha.1";
3
+ export const LIB_VERSION = "11.32.0-alpha.2";
4
4
  export const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
5
5
  export const LIB_NAME = "@gooddata/sdk-ui-dashboard";
6
6
  //# sourceMappingURL=__version.js.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ export declare function FloatingToolbar(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=FloatingToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingToolbar.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/FloatingToolbar.tsx"],"names":[],"mappings":"AAoLA;;GAEG;AACH,wBAAgB,eAAe,4CAyN9B"}
@@ -0,0 +1,238 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useCallback, useState } from "react";
4
+ import cx from "classnames";
5
+ import { useIntl } from "react-intl";
6
+ import { v4 as uuidv4 } from "uuid";
7
+ import { idRef } from "@gooddata/sdk-model";
8
+ import { DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_DEFAULT, INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT, RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT, VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT, useInsightPickerState, } from "@gooddata/sdk-ui-ext";
9
+ import { GD_COLOR_HIGHLIGHT, IconAttributeFilter, IconColumnContainer, IconInsight, IconInsightPicker, IconRichText, IconVisualizationSwitcher, isActionKey, } from "@gooddata/sdk-ui-kit";
10
+ import { useTheme } from "@gooddata/sdk-ui-theme-provider";
11
+ import { getInsightPlaceholderSizeInfo } from "../../../_staging/layout/sizing.js";
12
+ import { addLayoutSection, addSectionItem } from "../../../model/commands/layout.js";
13
+ import { useDashboardDispatch, useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
14
+ import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
15
+ import { dispatchAndWaitFor } from "../../../model/store/_infra/dispatchAndWaitFor.js";
16
+ import { selectBackendCapabilities, selectSupportsRichTextWidgets, } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
17
+ import { selectEnableKDRichText, selectEnableVisualizationSwitcher, selectSettings, } from "../../../model/store/config/configSelectors.js";
18
+ import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
19
+ import { selectFilterContextFilters } from "../../../model/store/tabs/filterContext/filterContextSelectors.js";
20
+ import { selectLayout } from "../../../model/store/tabs/layout/layoutSelectors.js";
21
+ import { uiActions } from "../../../model/store/ui/index.js";
22
+ import { selectCurrentUser } from "../../../model/store/user/userSelectors.js";
23
+ import { getAuthor } from "../../../model/utils/author.js";
24
+ import { INSIGHT_PLACEHOLDER_WIDGET_ID, newInsightPlaceholderWidget, } from "../../../widgets/placeholders/types.js";
25
+ import { gdColorStateBlank } from "../../constants/colors.js";
26
+ import { useWidgetDragEndHandler } from "../../dragAndDrop/draggableWidget/useWidgetDragEndHandler.js";
27
+ import { useDashboardDrag } from "../../dragAndDrop/useDashboardDrag.js";
28
+ import { InsightPickerPanel } from "./InsightPickerPanel.js";
29
+ const ICON_SIZE = 28;
30
+ const ATTRIBUTE_FILTER_DRAG_ITEM = {
31
+ type: "attributeFilter-placeholder",
32
+ };
33
+ const INSIGHT_PLACEHOLDER_DRAG_ITEM = {
34
+ type: "insight-placeholder",
35
+ size: {
36
+ gridHeight: INSIGHT_WIDGET_SIZE_INFO_DEFAULT.height.default,
37
+ gridWidth: INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
38
+ },
39
+ };
40
+ const RICH_TEXT_DRAG_ITEM = {
41
+ type: "richTextListItem",
42
+ size: {
43
+ gridHeight: RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT.height.default,
44
+ gridWidth: RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
45
+ },
46
+ };
47
+ const VIS_SWITCHER_DRAG_ITEM = {
48
+ type: "visualizationSwitcherListItem",
49
+ size: {
50
+ gridHeight: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT.height.default,
51
+ gridWidth: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
52
+ },
53
+ };
54
+ const DASHBOARD_LAYOUT_DRAG_ITEM = {
55
+ type: "dashboardLayoutListItem",
56
+ size: {
57
+ gridHeight: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.height.default,
58
+ gridWidth: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.width.default,
59
+ },
60
+ };
61
+ function DraggableToolbarButton({ icon, label, dragItem, testSelector, onMouseDown, onActivate, }) {
62
+ const isInEditMode = useDashboardSelector(selectIsInEditMode);
63
+ const onDragEnd = useWidgetDragEndHandler();
64
+ const { deselectWidgets } = useWidgetSelection();
65
+ const [{ isDragging }, dragRef] = useDashboardDrag({
66
+ dragItem,
67
+ canDrag: isInEditMode,
68
+ hideDefaultPreview: false,
69
+ dragEnd: () => {
70
+ onDragEnd?.();
71
+ },
72
+ dragStart: () => deselectWidgets(),
73
+ }, [isInEditMode, dragItem]);
74
+ const handleKeyDown = useCallback((e) => {
75
+ if (isActionKey(e)) {
76
+ e.preventDefault();
77
+ onActivate?.();
78
+ }
79
+ }, [onActivate]);
80
+ return (_jsxs("div", { ref: dragRef, className: cx("gd-floating-toolbar__button", testSelector, { "is-dragging": isDragging }), role: "button", tabIndex: 0, onMouseDown: onMouseDown, onClick: onActivate, onKeyDown: handleKeyDown, children: [icon, _jsx("span", { className: "gd-floating-toolbar__button-label", children: label })
81
+ ] }));
82
+ }
83
+ /**
84
+ * Adds an item to the end of the last section in the layout.
85
+ * If the layout has no sections, creates a new one.
86
+ * After adding, optionally selects the widget and opens the config panel.
87
+ */
88
+ async function addItemAtEndOfLayout(dispatch, layout, item, widgetRef) {
89
+ if (layout.sections.length > 0) {
90
+ await dispatchAndWaitFor(dispatch, addSectionItem(layout.sections.length - 1, -1, item, true));
91
+ }
92
+ else {
93
+ await dispatchAndWaitFor(dispatch, addLayoutSection(-1, undefined, [item], true));
94
+ }
95
+ if (widgetRef) {
96
+ dispatch(uiActions.selectWidget(widgetRef));
97
+ dispatch(uiActions.setConfigurationPanelOpened(true));
98
+ }
99
+ }
100
+ /**
101
+ * @internal
102
+ */
103
+ export function FloatingToolbar() {
104
+ const theme = useTheme();
105
+ const intl = useIntl();
106
+ const dispatch = useDashboardDispatch();
107
+ const iconColor = theme?.palette?.complementary?.c6 ?? gdColorStateBlank;
108
+ const primaryColor = theme?.palette?.primary?.base ?? GD_COLOR_HIGHLIGHT;
109
+ const supportsRichText = useDashboardSelector(selectSupportsRichTextWidgets);
110
+ const enableRichText = useDashboardSelector(selectEnableKDRichText);
111
+ const enableVisualizationSwitcher = useDashboardSelector(selectEnableVisualizationSwitcher);
112
+ const layout = useDashboardSelector(selectLayout);
113
+ const settings = useDashboardSelector(selectSettings);
114
+ const filterContextFilters = useDashboardSelector(selectFilterContextFilters);
115
+ const [isInsightPickerOpen, setIsInsightPickerOpen] = useState(false);
116
+ // Picker state — persists across open/close
117
+ const capabilities = useDashboardSelector(selectBackendCapabilities);
118
+ const currentUser = useDashboardSelector(selectCurrentUser);
119
+ const author = getAuthor(capabilities, currentUser);
120
+ const pickerState = useInsightPickerState(author);
121
+ const toggleInsightPicker = useCallback(() => {
122
+ setIsInsightPickerOpen((prev) => !prev);
123
+ }, []);
124
+ const closeInsightPicker = useCallback(() => {
125
+ setIsInsightPickerOpen(false);
126
+ }, []);
127
+ const handleInsightPlaceholderActivate = useCallback(() => {
128
+ closeInsightPicker();
129
+ const sizeInfo = getInsightPlaceholderSizeInfo(settings);
130
+ const item = {
131
+ type: "IDashboardLayoutItem",
132
+ size: {
133
+ xl: {
134
+ gridHeight: sizeInfo.height.default,
135
+ gridWidth: sizeInfo.width.default,
136
+ },
137
+ },
138
+ widget: newInsightPlaceholderWidget(),
139
+ };
140
+ void addItemAtEndOfLayout(dispatch, layout, item, idRef(INSIGHT_PLACEHOLDER_WIDGET_ID));
141
+ }, [dispatch, layout, settings, closeInsightPicker]);
142
+ const handleDashboardLayoutActivate = useCallback(() => {
143
+ closeInsightPicker();
144
+ const id = uuidv4();
145
+ const ref = idRef(id);
146
+ const item = {
147
+ type: "IDashboardLayoutItem",
148
+ size: {
149
+ xl: {
150
+ gridHeight: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.height.default,
151
+ gridWidth: DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT.width.default,
152
+ },
153
+ },
154
+ widget: {
155
+ type: "IDashboardLayout",
156
+ identifier: id,
157
+ sections: [],
158
+ ref,
159
+ uri: `/${id}`,
160
+ configuration: {
161
+ direction: "column",
162
+ sections: {
163
+ enableHeader: false,
164
+ },
165
+ },
166
+ },
167
+ };
168
+ void addItemAtEndOfLayout(dispatch, layout, item, ref);
169
+ }, [dispatch, layout, closeInsightPicker]);
170
+ const handleVisSwitcherActivate = useCallback(() => {
171
+ closeInsightPicker();
172
+ const id = uuidv4();
173
+ const ref = idRef(id);
174
+ const item = {
175
+ type: "IDashboardLayoutItem",
176
+ size: {
177
+ xl: {
178
+ gridHeight: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT.height.default,
179
+ gridWidth: VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
180
+ },
181
+ },
182
+ widget: {
183
+ type: "visualizationSwitcher",
184
+ visualizations: [],
185
+ description: "",
186
+ drills: [],
187
+ ignoreDashboardFilters: [],
188
+ title: "",
189
+ identifier: id,
190
+ ref,
191
+ uri: `/${id}`,
192
+ },
193
+ };
194
+ void addItemAtEndOfLayout(dispatch, layout, item, ref);
195
+ }, [dispatch, layout, closeInsightPicker]);
196
+ const handleRichTextActivate = useCallback(() => {
197
+ closeInsightPicker();
198
+ const id = uuidv4();
199
+ const ref = idRef(id);
200
+ const item = {
201
+ type: "IDashboardLayoutItem",
202
+ size: {
203
+ xl: {
204
+ gridHeight: RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT.height.default,
205
+ gridWidth: RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT.width.default,
206
+ },
207
+ },
208
+ widget: {
209
+ type: "richText",
210
+ description: "",
211
+ content: "",
212
+ drills: [],
213
+ ignoreDashboardFilters: [],
214
+ title: "",
215
+ identifier: id,
216
+ ref,
217
+ uri: `/${id}`,
218
+ },
219
+ };
220
+ void addItemAtEndOfLayout(dispatch, layout, item, ref);
221
+ }, [dispatch, layout, closeInsightPicker]);
222
+ const handleFilterActivate = useCallback(() => {
223
+ closeInsightPicker();
224
+ dispatch(uiActions.selectFilterIndex(filterContextFilters.length));
225
+ }, [dispatch, filterContextFilters.length, closeInsightPicker]);
226
+ return (_jsxs(_Fragment, { children: [isInsightPickerOpen ? (_jsx(InsightPickerPanel, { onClose: closeInsightPicker, ...pickerState })) : null, _jsxs("div", { className: "gd-floating-toolbar s-floating-toolbar", children: [
227
+ _jsxs("div", { className: cx("gd-floating-toolbar__button", "gd-floating-toolbar__button--primary", "s-floating-toolbar-insight-picker", { "is-selected": isInsightPickerOpen }), role: "button", tabIndex: 0, onClick: toggleInsightPicker, onKeyDown: (e) => {
228
+ if (isActionKey(e)) {
229
+ e.preventDefault();
230
+ toggleInsightPicker();
231
+ }
232
+ }, children: [
233
+ _jsx(IconInsightPicker, { color: isInsightPickerOpen ? primaryColor : iconColor, width: ICON_SIZE, height: ICON_SIZE }), _jsx("span", { className: "gd-floating-toolbar__button-label", children: intl.formatMessage({ id: "addPanel.savedVisualizations" }) })
234
+ ] }), _jsx(DraggableToolbarButton, { icon: _jsx(IconInsight, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.newVisualization" }), dragItem: INSIGHT_PLACEHOLDER_DRAG_ITEM, testSelector: "s-floating-toolbar-new-visualization", onMouseDown: closeInsightPicker, onActivate: handleInsightPlaceholderActivate }), _jsx(DraggableToolbarButton, { icon: _jsx(IconColumnContainer, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardLayout" }), dragItem: DASHBOARD_LAYOUT_DRAG_ITEM, testSelector: "s-floating-toolbar-dashboard-layout", onMouseDown: closeInsightPicker, onActivate: handleDashboardLayoutActivate }), enableVisualizationSwitcher ? (_jsx(DraggableToolbarButton, { icon: _jsx(IconVisualizationSwitcher, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.visualizationSwitcher" }), dragItem: VIS_SWITCHER_DRAG_ITEM, testSelector: "s-floating-toolbar-visualization-switcher", onMouseDown: closeInsightPicker, onActivate: handleVisSwitcherActivate })) : null, supportsRichText && enableRichText ? (_jsx(DraggableToolbarButton, { icon: _jsx(IconRichText, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.richTextWidget" }), dragItem: RICH_TEXT_DRAG_ITEM, testSelector: "s-floating-toolbar-rich-text", onMouseDown: closeInsightPicker, onActivate: handleRichTextActivate })) : null, _jsx(DraggableToolbarButton, { icon: _jsx(IconAttributeFilter, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardFilter" }), dragItem: ATTRIBUTE_FILTER_DRAG_ITEM, testSelector: "s-floating-toolbar-attribute-filter", onMouseDown: closeInsightPicker, onActivate: handleFilterActivate })
235
+ ] })
236
+ ] }));
237
+ }
238
+ //# sourceMappingURL=FloatingToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingToolbar.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/FloatingToolbar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type IInsight } from "@gooddata/sdk-model";
2
+ import { type IInsightPickerItem } from "@gooddata/sdk-ui-ext";
3
+ /**
4
+ * Props for a single insight picker list item.
5
+ *
6
+ * @internal
7
+ */
8
+ export interface IInsightPickerListItemProps {
9
+ item: IInsightPickerItem;
10
+ type: string;
11
+ /**
12
+ * The original IInsight object, needed for drag-and-drop.
13
+ * When undefined (e.g. semantic search results), the item is not draggable.
14
+ */
15
+ sourceInsight?: IInsight;
16
+ metadataTimeZone?: string;
17
+ /**
18
+ * Called when the item is activated via keyboard (Enter/Space).
19
+ * Receives the source insight so the caller can add it to the layout.
20
+ */
21
+ onActivate?: (insight: IInsight) => void;
22
+ /**
23
+ * Called when a drag-and-drop ends with a successful drop.
24
+ */
25
+ onDropped?: () => void;
26
+ }
27
+ /**
28
+ * A single draggable insight item for the insight picker panel.
29
+ * Renders a visualization type icon, title, and last-updated date.
30
+ *
31
+ * @internal
32
+ */
33
+ export declare function InsightPickerListItem({ item, type, sourceInsight, metadataTimeZone, onActivate, onDropped }: IInsightPickerListItemProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=InsightPickerListItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InsightPickerListItem.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerListItem.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,QAAQ,EAA4B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,KAAK,kBAAkB,EAAoC,MAAM,sBAAsB,CAAC;AAWjG;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IACxC,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,SAAS,EACZ,EAAE,2BAA2B,2CA2E7B"}
@@ -0,0 +1,68 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useMemo } from "react";
4
+ import classNames from "classnames";
5
+ import { insightVisualizationType } from "@gooddata/sdk-model";
6
+ import { INSIGHT_WIDGET_SIZE_INFO_DEFAULT } from "@gooddata/sdk-ui-ext";
7
+ import { InsightListItemDate, InsightListItemTypeIcon, getDateTimeConfig } from "@gooddata/sdk-ui-kit";
8
+ import { getSizeInfo } from "../../../_staging/layout/sizing.js";
9
+ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
10
+ import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
11
+ import { selectSettings } from "../../../model/store/config/configSelectors.js";
12
+ import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
13
+ import { useWidgetDragEndHandler } from "../../dragAndDrop/draggableWidget/useWidgetDragEndHandler.js";
14
+ import { useDashboardDrag } from "../../dragAndDrop/useDashboardDrag.js";
15
+ /**
16
+ * A single draggable insight item for the insight picker panel.
17
+ * Renders a visualization type icon, title, and last-updated date.
18
+ *
19
+ * @internal
20
+ */
21
+ export function InsightPickerListItem({ item, type, sourceInsight, metadataTimeZone, onActivate, onDropped, }) {
22
+ const isInEditMode = useDashboardSelector(selectIsInEditMode);
23
+ const settings = useDashboardSelector(selectSettings);
24
+ const handleDragEnd = useWidgetDragEndHandler();
25
+ const { deselectWidgets } = useWidgetSelection();
26
+ const canDrag = isInEditMode && !!sourceInsight;
27
+ const [{ isDragging }, dragRef] = useDashboardDrag({
28
+ dragItem: () => {
29
+ if (!sourceInsight) {
30
+ // Should not happen since canDrag is false, but satisfy types
31
+ return {
32
+ type: "insightListItem",
33
+ insight: undefined,
34
+ size: { gridHeight: 0, gridWidth: 0 },
35
+ };
36
+ }
37
+ const sizeInfo = getSizeInfo(settings, "insight", sourceInsight);
38
+ return {
39
+ type: "insightListItem",
40
+ insight: sourceInsight,
41
+ size: {
42
+ gridHeight: sizeInfo.height.default || INSIGHT_WIDGET_SIZE_INFO_DEFAULT.height.default,
43
+ gridWidth: sizeInfo.width.default || INSIGHT_WIDGET_SIZE_INFO_DEFAULT.width.default,
44
+ },
45
+ };
46
+ },
47
+ canDrag,
48
+ hideDefaultPreview: false,
49
+ dragEnd: (_item, monitor) => {
50
+ handleDragEnd();
51
+ if (monitor.didDrop()) {
52
+ onDropped?.();
53
+ }
54
+ },
55
+ dragStart: () => deselectWidgets(),
56
+ }, [canDrag, sourceInsight, settings, handleDragEnd, onDropped]);
57
+ const resolvedType = sourceInsight ? (insightVisualizationType(sourceInsight) ?? type) : type;
58
+ const updated = item.updated ?? item.created;
59
+ const dateConfig = useMemo(() => (updated ? getDateTimeConfig(updated, { dateTimezone: metadataTimeZone }) : undefined), [updated, metadataTimeZone]);
60
+ return (_jsxs("div", { className: classNames("gd-insight-picker-list-item", {
61
+ "is-dragging": isDragging,
62
+ "is-not-draggable": !canDrag,
63
+ }), ref: dragRef, onClick: sourceInsight ? () => onActivate?.(sourceInsight) : undefined, children: [
64
+ _jsx("div", { className: "gd-insight-picker-list-item__icon", children: _jsx(InsightListItemTypeIcon, { type: resolvedType }) }), _jsxs("div", { className: "gd-insight-picker-list-item__content", children: [
65
+ _jsx("div", { className: "gd-insight-picker-list-item__title", title: item.title, children: item.title }), dateConfig ? (_jsx("div", { className: "gd-insight-picker-list-item__date", children: _jsx(InsightListItemDate, { config: dateConfig }) })) : null] })
66
+ ] }));
67
+ }
68
+ //# sourceMappingURL=InsightPickerListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InsightPickerListItem.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerListItem.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAY,OAAO,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAiB,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAA2B,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEvG,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AA2BzE;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAClC,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,SAAS,GACiB,EAAE;IAC5B,MAAM,YAAY,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,uBAAuB,EAAE,CAAC;IAChD,MAAM,EAAE,eAAe,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAEjD,MAAM,OAAO,GAAG,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC;IAEhD,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAC9C;QACI,QAAQ,EAAE,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,8DAA8D;gBAC9D,OAAO;oBACH,IAAI,EAAE,iBAA0B;oBAChC,OAAO,EAAE,SAAU;oBACnB,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;iBACxC,CAAC;YACN,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YACjE,OAAO;gBACH,IAAI,EAAE,iBAA0B;gBAChC,OAAO,EAAE,aAAa;gBACtB,IAAI,EAAE;oBACF,UAAU,EACN,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,gCAAgC,CAAC,MAAM,CAAC,OAAO;oBAC9E,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,gCAAgC,CAAC,KAAK,CAAC,OAAO;iBACtF;aACJ,CAAC;QAAA,CACL;QACD,OAAO;QACP,kBAAkB,EAAE,KAAK;QACzB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;YACzB,aAAa,EAAE,CAAC;YAChB,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpB,SAAS,EAAE,EAAE,CAAC;YAClB,CAAC;QAAA,CACJ;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE;KACrC,EACD,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAC/D,CAAC;IAEF,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5F,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAC9B,CAAC;IAEF,OAAO,CACH,eACI,SAAS,EAAE,UAAU,CAAC,6BAA6B,EAAE;YACjD,aAAa,EAAE,UAAU;YACzB,kBAAkB,EAAE,CAAC,OAAO;SAC/B,CAAC,EACF,GAAG,EAAE,OAAyC,EAC9C,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;YAEtE,cAAK,SAAS,EAAC,mCAAmC,YAC9C,KAAC,uBAAuB,IAAC,IAAI,EAAE,YAAY,GAAI,GAC7C,EACN,eAAK,SAAS,EAAC,sCAAsC;oBACjD,cAAK,SAAS,EAAC,oCAAoC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,YAChE,IAAI,CAAC,KAAK,GACT,EACL,UAAU,CAAC,CAAC,CAAC,CACV,cAAK,SAAS,EAAC,mCAAmC,YAC9C,KAAC,mBAAmB,IAAC,MAAM,EAAE,UAAU,GAAI,GACzC,CACT,CAAC,CAAC,CAAC,IAAI,IACN;YACJ,CACT,CAAC;AAAA,CACL"}
@@ -0,0 +1,21 @@
1
+ import { type InsightPickerSortBy, type InsightPickerSortDirection } from "@gooddata/sdk-ui-ext";
2
+ /**
3
+ * @internal
4
+ */
5
+ export interface IInsightPickerPanelProps {
6
+ onClose: () => void;
7
+ searchQuery: string;
8
+ onSearchChange: (query: string) => void;
9
+ sortBy: InsightPickerSortBy;
10
+ sortDirection: InsightPickerSortDirection;
11
+ onSortChange: (sortBy: InsightPickerSortBy, sortDirection: InsightPickerSortDirection) => void;
12
+ authorFilter: string[];
13
+ onAuthorFilterChange: (authorIds: string[]) => void;
14
+ tagFilter: string[];
15
+ onTagFilterChange: (tagIds: string[]) => void;
16
+ }
17
+ /**
18
+ * @internal
19
+ */
20
+ export declare function InsightPickerPanel({ onClose, searchQuery, onSearchChange, sortBy, sortDirection, onSortChange, authorFilter, onAuthorFilterChange, tagFilter, onTagFilterChange }: IInsightPickerPanelProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=InsightPickerPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InsightPickerPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerPanel.tsx"],"names":[],"mappings":"AAKA,OAAO,EAIH,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAClC,MAAM,sBAAsB,CAAC;AAqB9B;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,YAAY,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,aAAa,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC/F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,WAAW,EACX,cAAc,EACd,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACpB,EAAE,wBAAwB,2CA0E1B"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useCallback } from "react";
4
+ import { InsightPicker, } from "@gooddata/sdk-ui-ext";
5
+ import { Dialog } from "@gooddata/sdk-ui-kit";
6
+ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
7
+ import { selectBackendCapabilities } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
8
+ import { selectEnableVisualizationFilteringByTags, selectObjectAvailabilityConfig, selectSettings, } from "../../../model/store/config/configSelectors.js";
9
+ import { selectCurrentUser } from "../../../model/store/user/userSelectors.js";
10
+ import { getAuthor } from "../../../model/utils/author.js";
11
+ import { InsightPickerListItem } from "./InsightPickerListItem.js";
12
+ import { useInsertInsightToLayout } from "./useInsertInsightToLayout.js";
13
+ function useAuthor() {
14
+ const capabilities = useDashboardSelector(selectBackendCapabilities);
15
+ const currentUser = useDashboardSelector(selectCurrentUser);
16
+ return getAuthor(capabilities, currentUser);
17
+ }
18
+ /**
19
+ * @internal
20
+ */
21
+ export function InsightPickerPanel({ onClose, searchQuery, onSearchChange, sortBy, sortDirection, onSortChange, authorFilter, onAuthorFilterChange, tagFilter, onTagFilterChange, }) {
22
+ const settings = useDashboardSelector(selectSettings);
23
+ const author = useAuthor();
24
+ const objectAvailability = useDashboardSelector(selectObjectAvailabilityConfig);
25
+ const isFilteringByTagsEnabled = useDashboardSelector(selectEnableVisualizationFilteringByTags);
26
+ const insertInsight = useInsertInsightToLayout();
27
+ const includeTags = isFilteringByTagsEnabled ? objectAvailability?.includeObjectsWithTags : undefined;
28
+ const excludeTags = isFilteringByTagsEnabled ? objectAvailability?.excludeObjectsWithTags : undefined;
29
+ const handleSelect = useCallback((_ref, _item) => {
30
+ // no-op — selection handled via drag-and-drop or keyboard activate
31
+ }, []);
32
+ const handleInsightActivate = useCallback((insight) => {
33
+ onClose();
34
+ insertInsight(insight);
35
+ }, [onClose, insertInsight]);
36
+ const renderItem = useCallback((renderProps) => (_jsx(InsightPickerListItem, { item: renderProps.item, type: renderProps.type, sourceInsight: renderProps.sourceInsight, metadataTimeZone: settings?.metadataTimeZone, onActivate: handleInsightActivate, onDropped: onClose })), [settings?.metadataTimeZone, handleInsightActivate, onClose]);
37
+ return (_jsx(Dialog, { className: "gd-insight-picker-panel s-insight-picker-panel", containerClassName: "gd-insight-picker-panel-overlay", isModal: false, shouldCloseOnClick: () => true, closeOnEscape: true, onClose: onClose, alignPoints: [{ align: "bc bc" }], children: _jsx(InsightPicker, { author: author, includeTags: includeTags, excludeTags: excludeTags, metadataTimeZone: settings?.metadataTimeZone, enableDescriptions: settings?.enableDescriptions, enableSemanticSearch: false, maxHeight: 350, width: 718, searchQuery: searchQuery, onSearchChange: onSearchChange, sortBy: sortBy, sortDirection: sortDirection, onSortChange: onSortChange, authorFilter: authorFilter, onAuthorFilterChange: onAuthorFilterChange, tagFilter: tagFilter, onTagFilterChange: onTagFilterChange, onSelect: handleSelect, onItemActivate: (_item, sourceInsight) => {
38
+ if (sourceInsight) {
39
+ handleInsightActivate(sourceInsight);
40
+ }
41
+ }, renderItem: renderItem }) }));
42
+ }
43
+ //# sourceMappingURL=InsightPickerPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InsightPickerPanel.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/InsightPickerPanel.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC,OAAO,EAGH,aAAa,GAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAC;AACrH,OAAO,EACH,wCAAwC,EACxC,8BAA8B,EAC9B,cAAc,GACjB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,SAAS,SAAS,GAAG;IACjB,MAAM,YAAY,GAAG,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC5D,OAAO,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAAA,CAC/C;AAoBD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAC/B,OAAO,EACP,WAAW,EACX,cAAc,EACd,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,SAAS,EACT,iBAAiB,GACM,EAAE;IACzB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,8BAA8B,CAAC,CAAC;IAChF,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,wCAAwC,CAAC,CAAC;IAChG,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IAEjD,MAAM,WAAW,GAAG,wBAAwB,CAAC,CAAC,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,MAAM,WAAW,GAAG,wBAAwB,CAAC,CAAC,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,KAAyB,EAAE,EAAE,CAAC;QAC1E,qEAAmE;IADQ,CAE9E,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,qBAAqB,GAAG,WAAW,CACrC,CAAC,OAAiB,EAAE,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,aAAa,CAAC,OAAO,CAAC,CAAC;IAAA,CAC1B,EACD,CAAC,OAAO,EAAE,aAAa,CAAC,CAC3B,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,WAA0C,EAAE,EAAE,CAAC,CAC5C,KAAC,qBAAqB,IAClB,IAAI,EAAE,WAAW,CAAC,IAAI,EACtB,IAAI,EAAE,WAAW,CAAC,IAAI,EACtB,aAAa,EAAE,WAAW,CAAC,aAAa,EACxC,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAC5C,UAAU,EAAE,qBAAqB,EACjC,SAAS,EAAE,OAAO,GACpB,CACL,EACD,CAAC,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAC/D,CAAC;IAEF,OAAO,CACH,KAAC,MAAM,IACH,SAAS,EAAC,gDAAgD,EAC1D,kBAAkB,EAAC,iCAAiC,EACpD,OAAO,EAAE,KAAK,EACd,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,EAC9B,aAAa,QACb,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,YAEjC,KAAC,aAAa,IACV,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAC5C,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAChD,oBAAoB,EAAE,KAAK,EAC3B,SAAS,EAAE,GAAG,EACd,KAAK,EAAE,GAAG,EACV,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,oBAAoB,EAC1C,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,CAAC,KAAyB,EAAE,aAAwB,EAAE,EAAE,CAAC;gBACrE,IAAI,aAAa,EAAE,CAAC;oBAChB,qBAAqB,CAAC,aAAa,CAAC,CAAC;gBACzC,CAAC;YAAA,CACJ,EACD,UAAU,EAAE,UAAU,GACxB,GACG,CACZ,CAAC;AAAA,CACL"}
@@ -3,5 +3,5 @@ import { type ISidebarProps } from "./types.js";
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export declare function SidebarConfigurationPanel(props: Omit<ISidebarProps, "DefaultSidebar">): ReactElement;
6
+ export declare function SidebarConfigurationPanel(props: Omit<ISidebarProps, "DefaultSidebar">): ReactElement | null;
7
7
  //# sourceMappingURL=SidebarConfigurationPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,CA+BpG"}
1
+ {"version":3,"file":"SidebarConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAO1C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,GAAG,IAAI,CAqC3G"}
@@ -1,6 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
2
3
  import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
4
+ import { selectSettings } from "../../../model/store/config/configSelectors.js";
3
5
  import { CreationPanel } from "./CreationPanel.js";
6
+ import { FloatingToolbar } from "./FloatingToolbar.js";
4
7
  /**
5
8
  * @internal
6
9
  */
@@ -8,6 +11,11 @@ export function SidebarConfigurationPanel(props) {
8
11
  const { configurationPanelClassName, WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent, AttributeFilterComponentSet, InsightWidgetComponentSet, RichTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet, } = props;
9
12
  const { deselectWidgets } = useWidgetSelection();
10
13
  const DeleteDropZoneComponent = props.DeleteDropZoneComponent;
14
+ const settings = useDashboardSelector(selectSettings);
15
+ const enableEnhancedInsightPicker = settings?.enableEnhancedInsightPicker ?? false;
16
+ if (enableEnhancedInsightPicker) {
17
+ return _jsx(FloatingToolbar, {});
18
+ }
11
19
  return (_jsxs("div", { className: "col gd-flex-item gd-sidebar-container", onClick: deselectWidgets, children: [
12
20
  _jsx("div", { className: "flex-panel-full-height", children: _jsx(CreationPanel, { className: configurationPanelClassName, WrapCreatePanelItemWithDragComponent: WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent: WrapInsightListItemWithDragComponent, AttributeFilterComponentSet: AttributeFilterComponentSet, InsightWidgetComponentSet: InsightWidgetComponentSet, RichTextWidgetComponentSet: RichTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet: VisualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet: DashboardLayoutWidgetComponentSet }) }), _jsx(DeleteDropZoneComponent, {})
13
21
  ] }));
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarConfigurationPanel.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAA4C,EAAgB;IAClG,MAAM,EACF,2BAA2B,EAC3B,oCAAoC,EACpC,oCAAoC,EACpC,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,uCAAuC,EACvC,iCAAiC,GACpC,GAAG,KAAK,CAAC;IACV,MAAM,EAAE,eAAe,EAAE,GAAG,kBAAkB,EAAE,CAAC;IACjD,MAAM,uBAAuB,GAAG,KAAK,CAAC,uBAAwB,CAAC;IAE/D,OAAO,CACH,eAAK,SAAS,EAAC,uCAAuC,EAAC,OAAO,EAAE,eAAe;YAC3E,cAAK,SAAS,EAAC,wBAAwB,YACnC,KAAC,aAAa,IACV,SAAS,EAAE,2BAA2B,EACtC,oCAAoC,EAAE,oCAAoC,EAC1E,oCAAoC,EAAE,oCAAoC,EAC1E,2BAA2B,EAAE,2BAA2B,EACxD,yBAAyB,EAAE,yBAAyB,EACpD,0BAA0B,EAAE,0BAA0B,EACtD,uCAAuC,EAAE,uCAAuC,EAChF,iCAAiC,EAAE,iCAAiC,GACtE,GACA,EACN,KAAC,uBAAuB,KAAG;YACzB,CACT,CAAC;AAAA,CACL"}
1
+ {"version":3,"file":"SidebarConfigurationPanel.js","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAA4C,EAAuB;IACzG,MAAM,EACF,2BAA2B,EAC3B,oCAAoC,EACpC,oCAAoC,EACpC,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,uCAAuC,EACvC,iCAAiC,GACpC,GAAG,KAAK,CAAC;IACV,MAAM,EAAE,eAAe,EAAE,GAAG,kBAAkB,EAAE,CAAC;IACjD,MAAM,uBAAuB,GAAG,KAAK,CAAC,uBAAwB,CAAC;IAC/D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,2BAA2B,GAAG,QAAQ,EAAE,2BAA2B,IAAI,KAAK,CAAC;IAEnF,IAAI,2BAA2B,EAAE,CAAC;QAC9B,OAAO,KAAC,eAAe,KAAG,CAAC;IAC/B,CAAC;IAED,OAAO,CACH,eAAK,SAAS,EAAC,uCAAuC,EAAC,OAAO,EAAE,eAAe;YAC3E,cAAK,SAAS,EAAC,wBAAwB,YACnC,KAAC,aAAa,IACV,SAAS,EAAE,2BAA2B,EACtC,oCAAoC,EAAE,oCAAoC,EAC1E,oCAAoC,EAAE,oCAAoC,EAC1E,2BAA2B,EAAE,2BAA2B,EACxD,yBAAyB,EAAE,yBAAyB,EACpD,0BAA0B,EAAE,0BAA0B,EACtD,uCAAuC,EAAE,uCAAuC,EAChF,iCAAiC,EAAE,iCAAiC,GACtE,GACA,EACN,KAAC,uBAAuB,KAAG;YACzB,CACT,CAAC;AAAA,CACL"}
@@ -0,0 +1,12 @@
1
+ import { type IInsight } from "@gooddata/sdk-model";
2
+ /**
3
+ * Hook that inserts an insight to the end of the last layout section using the same
4
+ * two-step flow as drag-and-drop:
5
+ * 1. Insert a loading placeholder immediately (instant visual feedback)
6
+ * 2. Replace it with the real insight widget
7
+ * 3. Select the widget, open config panel, and preselect date dataset
8
+ *
9
+ * @internal
10
+ */
11
+ export declare function useInsertInsightToLayout(): (insight: IInsight) => Promise<void>;
12
+ //# sourceMappingURL=useInsertInsightToLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInsertInsightToLayout.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/useInsertInsightToLayout.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAA4B,MAAM,qBAAqB,CAAC;AA4B9E;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,yCAwFvC"}