@gooddata/sdk-ui-dashboard 11.15.0-alpha.13 → 11.15.0-alpha.15

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 (78) hide show
  1. package/NOTICE +6 -6
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/kdaDialog/const.d.ts +1 -0
  5. package/esm/kdaDialog/const.d.ts.map +1 -1
  6. package/esm/kdaDialog/const.js +3 -1
  7. package/esm/kdaDialog/const.js.map +1 -1
  8. package/esm/kdaDialog/dialog/KdaDialog.d.ts.map +1 -1
  9. package/esm/kdaDialog/dialog/KdaDialog.js +10 -4
  10. package/esm/kdaDialog/dialog/KdaDialog.js.map +1 -1
  11. package/esm/kdaDialog/dialog/KdaDialogActionButtons.d.ts +13 -0
  12. package/esm/kdaDialog/dialog/KdaDialogActionButtons.d.ts.map +1 -0
  13. package/esm/kdaDialog/dialog/KdaDialogActionButtons.js +28 -0
  14. package/esm/kdaDialog/dialog/KdaDialogActionButtons.js.map +1 -0
  15. package/esm/kdaDialog/dialog/KdaDialogArbiter.d.ts +22 -0
  16. package/esm/kdaDialog/dialog/KdaDialogArbiter.d.ts.map +1 -0
  17. package/esm/kdaDialog/dialog/KdaDialogArbiter.js +50 -0
  18. package/esm/kdaDialog/dialog/KdaDialogArbiter.js.map +1 -0
  19. package/esm/kdaDialog/dialog/KdaDialogController.d.ts +17 -0
  20. package/esm/kdaDialog/dialog/KdaDialogController.d.ts.map +1 -0
  21. package/esm/kdaDialog/dialog/KdaDialogController.js +70 -0
  22. package/esm/kdaDialog/dialog/KdaDialogController.js.map +1 -0
  23. package/esm/kdaDialog/dialog/KdaDialogControls.d.ts +6 -0
  24. package/esm/kdaDialog/dialog/KdaDialogControls.d.ts.map +1 -0
  25. package/esm/kdaDialog/dialog/KdaDialogControls.js +13 -0
  26. package/esm/kdaDialog/dialog/KdaDialogControls.js.map +1 -0
  27. package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.d.ts +10 -0
  28. package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.d.ts.map +1 -0
  29. package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.js +47 -0
  30. package/esm/kdaDialog/dialog/KdaDialogFloatingStatusBar.js.map +1 -0
  31. package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.d.ts +8 -0
  32. package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.d.ts.map +1 -0
  33. package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.js +15 -0
  34. package/esm/kdaDialog/dialog/KdaReplaceConfirmationDialog.js.map +1 -0
  35. package/esm/kdaDialog/dialog/hooks/useChangeAnalysis.js +31 -31
  36. package/esm/kdaDialog/dialog/hooks/useChangeAnalysis.js.map +1 -1
  37. package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.d.ts +1 -1
  38. package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.d.ts.map +1 -1
  39. package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.js +4 -4
  40. package/esm/kdaDialog/dialog/hooks/useKdaDialogAccessibility.js.map +1 -1
  41. package/esm/kdaDialog/dialog/hooks/useValidAttributes.js +9 -10
  42. package/esm/kdaDialog/dialog/hooks/useValidAttributes.js.map +1 -1
  43. package/esm/kdaDialog/internal.d.ts +2 -1
  44. package/esm/kdaDialog/internal.d.ts.map +1 -1
  45. package/esm/kdaDialog/internal.js +3 -2
  46. package/esm/kdaDialog/internal.js.map +1 -1
  47. package/esm/kdaDialog/internalTypes.d.ts +6 -4
  48. package/esm/kdaDialog/internalTypes.d.ts.map +1 -1
  49. package/esm/kdaDialog/internalTypes.js +1 -1
  50. package/esm/kdaDialog/internalTypes.js.map +1 -1
  51. package/esm/kdaDialog/providers/Kda.d.ts.map +1 -1
  52. package/esm/kdaDialog/providers/Kda.js +2 -1
  53. package/esm/kdaDialog/providers/Kda.js.map +1 -1
  54. package/esm/kdaDialog/providers/KdaState.d.ts +8 -6
  55. package/esm/kdaDialog/providers/KdaState.d.ts.map +1 -1
  56. package/esm/kdaDialog/providers/KdaState.js +9 -8
  57. package/esm/kdaDialog/providers/KdaState.js.map +1 -1
  58. package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
  59. package/esm/model/store/widgetDrills/widgetDrillSelectors.js +17 -3
  60. package/esm/model/store/widgetDrills/widgetDrillSelectors.js.map +1 -1
  61. package/esm/presentation/drill/types.d.ts +2 -1
  62. package/esm/presentation/drill/types.d.ts.map +1 -1
  63. package/esm/presentation/drill/types.js +2 -1
  64. package/esm/presentation/drill/types.js.map +1 -1
  65. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +3068 -757
  66. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  67. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +3068 -757
  68. package/esm/presentation/localization/bundles/en-US.localization-bundle.js.map +1 -1
  69. package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.d.ts.map +1 -1
  70. package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.js +11 -3
  71. package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.js.map +1 -1
  72. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/useDrillDialogInsightDrills.js +1 -1
  73. package/package.json +19 -19
  74. package/styles/css/kdaDialog.css +130 -1
  75. package/styles/css/kdaDialog.css.map +1 -1
  76. package/styles/css/main.css +130 -1
  77. package/styles/css/main.css.map +1 -1
  78. package/styles/scss/kdaDialog.scss +169 -2
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-1-5
10
+ Date generated: 2026-1-6
11
11
 
12
- Revision ID: 22b75f31e0d2730f300e9445fd06681255a06c86
12
+ Revision ID: 138e5d8e2a41f60c653af27d0263208a4259a1ea
13
13
 
14
14
  ================================================================================
15
15
  ================================================================================
@@ -939,7 +939,7 @@ Revision ID: 22b75f31e0d2730f300e9445fd06681255a06c86
939
939
  - tslib (2.8.1) [ISC]
940
940
  - type-fest (0.21.3) [Multi-license: MIT OR CC0-1.0]
941
941
  - type-is (1.6.18) [MIT]
942
- - typescript (5.8.3) [Apache-2.0, MIT, Unicode-DFS-2020, CC-BY-4.0, BSD-3-Clause, W3C-20150513]
942
+ - typescript (5.9.3) [Apache-2.0, MIT, Unicode-DFS-2020, CC-BY-4.0, BSD-3-Clause, W3C-20150513]
943
943
  - typescript-compare (0.0.2) [MIT]
944
944
  - typescript-logic (0.0.0) [MIT]
945
945
  - typescript-tuple (2.2.1) [MIT]
@@ -12085,9 +12085,9 @@ MIT
12085
12085
 
12086
12086
 
12087
12087
  --------------------------------------------------------------------------------
12088
- Package Title: typescript (5.8.3)
12088
+ Package Title: typescript (5.9.3)
12089
12089
 
12090
- Package Locator: npm+typescript$5.8.3
12090
+ Package Locator: npm+typescript$5.9.3
12091
12091
 
12092
12092
  Package Depth: Transitive
12093
12093
  --------------------------------------------------------------------------------
@@ -35462,4 +35462,4 @@ POSSIBILITY OF SUCH DAMAGE.
35462
35462
  --------------------------------------------------------------------------------
35463
35463
  --------------------------------------------------------------------------------
35464
35464
 
35465
- Report Generated by FOSSA on 2026-1-5
35465
+ Report Generated by FOSSA on 2026-1-6
@@ -1,4 +1,4 @@
1
- export declare const LIB_VERSION = "11.15.0-alpha.13";
1
+ export declare const LIB_VERSION = "11.15.0-alpha.15";
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.15.0-alpha.13";
3
+ export const LIB_VERSION = "11.15.0-alpha.15";
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
@@ -1,3 +1,4 @@
1
1
  export declare const DEFAULT_MEASURE_FORMAT = "#,##0.00";
2
2
  export declare const KDA_DIALOG_OVERS_Z_INDEX = 6100;
3
+ export declare const KDA_DIALOG_REPLACE_CONFIRMATION_OVERS_Z_INDEX: number;
3
4
  //# sourceMappingURL=const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAGjD,eAAO,MAAM,wBAAwB,OAAO,CAAC"}
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAGjD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAG7C,eAAO,MAAM,6CAA6C,QAA+B,CAAC"}
@@ -1,5 +1,7 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  export const DEFAULT_MEASURE_FORMAT = "#,##0.00";
3
3
  // Z index of all overlays in kda dialogs
4
4
  export const KDA_DIALOG_OVERS_Z_INDEX = 6100;
5
+ // Z index of replace confirmation dialog overlay (must be above KDA dialog overlays and floating status bar).
6
+ export const KDA_DIALOG_REPLACE_CONFIRMATION_OVERS_Z_INDEX = KDA_DIALOG_OVERS_Z_INDEX + 1;
5
7
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAEjD,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/kdaDialog/const.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAEjD,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,8GAA8G;AAC9G,MAAM,CAAC,MAAM,6CAA6C,GAAG,wBAAwB,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"KdaDialog.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAOnD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,eAAsB,EAAE,OAAO,EAAE,EAAE,eAAe,2CA6DxF"}
1
+ {"version":3,"file":"KdaDialog.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,eAAsB,EAAE,OAAO,EAAE,EAAE,eAAe,2CAyFxF"}
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- // (C) 2025 GoodData Corporation
3
- import { useId } from "react";
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import { useId, useMemo } from "react";
4
4
  import cx from "classnames";
5
5
  import { ErrorComponent } from "@gooddata/sdk-ui";
6
6
  import { Dialog, OverlayController, OverlayControllerProvider } from "@gooddata/sdk-ui-kit";
7
7
  import { useKdaDialogAccessibility } from "./hooks/useKdaDialogAccessibility.js";
8
+ import { KdaDialogFloatingStatusBar } from "./KdaDialogFloatingStatusBar.js";
8
9
  import { KdaDialogSections } from "./KdaDialogSections.js";
9
10
  import { KdaContent } from "../components/KdaContent.js";
10
11
  import { KdaFooter } from "../components/KdaFooter.js";
@@ -19,19 +20,24 @@ import { useKdaState } from "../providers/KdaState.js";
19
20
  import { useChangeAnalysis } from "./hooks/useChangeAnalysis.js";
20
21
  import { useKdaDialogTooltipsOverride } from "./hooks/useKdaDialogTooltipsOverride.js";
21
22
  import { useValidAttributes } from "./hooks/useValidAttributes.js";
23
+ import { KdaDialogControls } from "./KdaDialogControls.js";
22
24
  const overlayController = OverlayController.getInstance(KDA_DIALOG_OVERS_Z_INDEX);
23
25
  /**
24
26
  * @internal
25
27
  */
26
28
  export function KdaDialog({ className, showCloseButton = true, onClose }) {
27
29
  const { state } = useKdaState();
30
+ const { isMinimized } = state;
28
31
  const metric = state.definition?.metric.measure;
29
32
  const title = metric?.alias ?? metric?.title ?? "";
30
- const accessibilityConfig = useKdaDialogAccessibility(title);
31
33
  const detailsId = useId();
34
+ const minimizedAlignPoints = useMemo(() => (isMinimized ? [{ align: "tc tc", offset: { x: 0, y: 30 } }] : undefined), [isMinimized]);
35
+ const accessibilityConfig = useKdaDialogAccessibility(title, isMinimized);
36
+ const dialogBaseClassName = cx(accessibilityConfig.dialogId, className);
37
+ const displayCloseButton = showCloseButton ? !isMinimized : undefined;
32
38
  useChangeAnalysis();
33
39
  useValidAttributes();
34
40
  useKdaDialogTooltipsOverride();
35
- return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(Dialog, { closeOnEscape: !state.attributesDropdownOpen && !state.addFilterDropdownOpen, className: cx(accessibilityConfig.dialogId, className), isModal: accessibilityConfig.isModal, accessibilityConfig: accessibilityConfig, displayCloseButton: showCloseButton, onClose: onClose, children: _jsx(KdaDialogSections, { header: _jsx(KdaHeader, { titleId: accessibilityConfig.titleElementId, title: accessibilityConfig.title, bars: _jsxs(_Fragment, { children: [_jsx(MetricsBar, {}), _jsx(FiltersBar, {})] }) }), content: _jsx(KdaContent, { leftContent: _jsx(KeyDriversPanel, { detailsId: detailsId }), leftLoader: _jsx(KeyDriversPanel, { detailsId: detailsId, loading: true }), leftError: _jsx(ErrorComponent, { message: "Unknown error", description: "Can not load key drivers attributes list. Please try again later." }), rightContent: _jsx(KeyDriversOverview, { detailsId: detailsId }), rightLoader: _jsx(KeyDriversOverview, { loading: true }), rightError: _jsx(ErrorComponent, { message: "Unknown error", description: "Can not load key driver details. Please try again later." }) }), footer: _jsx(KdaFooter, { content: _jsx(KeyDriversFooter, {}), onClose: onClose }) }) }) }));
41
+ return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: isMinimized ? (_jsx(Dialog, { className: cx(dialogBaseClassName, "gd-kda-dialog--minimized"), closeOnEscape: false, isModal: false, alignPoints: minimizedAlignPoints, accessibilityConfig: accessibilityConfig, displayCloseButton: displayCloseButton, onClose: onClose, CloseButton: KdaDialogControls, children: _jsx(KdaDialogFloatingStatusBar, { titleElementId: accessibilityConfig.titleElementId, onClose: onClose }) })) : (_jsx(Dialog, { className: cx(dialogBaseClassName, "gd-kda-dialog--expanded"), closeOnEscape: !state.attributesDropdownOpen && !state.addFilterDropdownOpen, isModal: true, accessibilityConfig: accessibilityConfig, displayCloseButton: displayCloseButton, onClose: onClose, CloseButton: KdaDialogControls, children: _jsx(KdaDialogSections, { header: _jsx(KdaHeader, { titleId: accessibilityConfig.titleElementId, title: accessibilityConfig.title, bars: _jsxs(_Fragment, { children: [_jsx(MetricsBar, {}), _jsx(FiltersBar, {})] }) }), content: _jsx(KdaContent, { leftContent: _jsx(KeyDriversPanel, { detailsId: detailsId }), leftLoader: _jsx(KeyDriversPanel, { detailsId: detailsId, loading: true }), leftError: _jsx(ErrorComponent, { message: "Unknown error", description: "Can not load key drivers attributes list. Please try again later." }), rightContent: _jsx(KeyDriversOverview, { detailsId: detailsId }), rightLoader: _jsx(KeyDriversOverview, { loading: true }), rightError: _jsx(ErrorComponent, { message: "Unknown error", description: "Can not load key driver details. Please try again later." }) }), footer: _jsx(KdaFooter, { content: _jsx(KeyDriversFooter, {}), onClose: onClose }) }) })) }));
36
42
  }
37
43
  //# sourceMappingURL=KdaDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KdaDialog.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KdaDialog.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type KdaDialogActionButtonsSize = "small" | "medium";
2
+ export interface IKdaDialogActionButtonsProps {
3
+ size: KdaDialogActionButtonsSize;
4
+ onClose?: () => void;
5
+ className?: string;
6
+ }
7
+ /**
8
+ * Renders the KDA dialog actions (expand/minimize toggle + divider + close).
9
+ *
10
+ * @internal
11
+ */
12
+ export declare function KdaDialogActionButtons({ size, onClose, className }: IKdaDialogActionButtonsProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=KdaDialogActionButtons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogActionButtons.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogActionButtons.tsx"],"names":[],"mappings":"AASA,MAAM,MAAM,0BAA0B,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,4BAA4B;IACzC,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,4BAA4B,2CAyBhG"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import cx from "classnames";
4
+ import { useIntl } from "react-intl";
5
+ import { UiIconButton } from "@gooddata/sdk-ui-kit";
6
+ import { useKdaState } from "../providers/KdaState.js";
7
+ /**
8
+ * Renders the KDA dialog actions (expand/minimize toggle + divider + close).
9
+ *
10
+ * @internal
11
+ */
12
+ export function KdaDialogActionButtons({ size, onClose, className }) {
13
+ const intl = useIntl();
14
+ const { state, setState } = useKdaState();
15
+ const { isMinimized } = state;
16
+ const expandLabel = intl.formatMessage({ id: "kdaDialog.floatingStatus.expand" });
17
+ const shrinkLabel = intl.formatMessage({ id: "kdaDialog.floatingStatus.minimize" });
18
+ const closeLabel = intl.formatMessage({ id: "kdaDialog.dialog.closeLabel" });
19
+ const handleToggle = () => {
20
+ setState({ isMinimized: !isMinimized });
21
+ };
22
+ return (_jsx(KdaDialogActionButtonsView, { className: className, size: size, isMinimized: isMinimized, expandLabel: expandLabel, shrinkLabel: shrinkLabel, closeLabel: closeLabel, onToggle: handleToggle, onClose: onClose }));
23
+ }
24
+ function KdaDialogActionButtonsView(props) {
25
+ const { size, isMinimized, expandLabel, shrinkLabel, closeLabel, onToggle, onClose, className } = props;
26
+ return (_jsxs("div", { className: cx("gd-kda-dialog-action-buttons", `gd-kda-dialog-action-buttons--size-${size}`, className), children: [_jsx("div", { className: cx("gd-kda-dialog-action-buttons__button", isMinimized ? "s-kda-dialog-expand-button" : "s-kda-dialog-minimize-button"), children: _jsx(UiIconButton, { label: isMinimized ? expandLabel : shrinkLabel, icon: isMinimized ? "expand" : "shrink", iconColor: "complementary-7", variant: "tertiary", size: size, onClick: onToggle }) }), _jsx("div", { className: "gd-kda-dialog-action-buttons__divider" }), _jsx("div", { className: cx("gd-kda-dialog-action-buttons__button", "s-dialog-close-button", "s-kda-dialog-close-button"), children: _jsx(UiIconButton, { label: closeLabel, icon: "cross", iconColor: "complementary-7", variant: "tertiary", size: size, onClick: onClose }) })] }));
27
+ }
28
+ //# sourceMappingURL=KdaDialogActionButtons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogActionButtons.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogActionButtons.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAgC;IAC7F,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAC1C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAClF,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,mCAAmC,EAAE,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAE7E,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,0BAA0B,IACvB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,GAClB,CACL,CAAC;AACN,CAAC;AAUD,SAAS,0BAA0B,CAAC,KAAuC;IACvE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACxG,OAAO,CACH,eACI,SAAS,EAAE,EAAE,CACT,8BAA8B,EAC9B,sCAAsC,IAAI,EAAE,EAC5C,SAAS,CACZ,aAED,cACI,SAAS,EAAE,EAAE,CACT,sCAAsC,EACtC,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,8BAA8B,CAC9E,YAED,KAAC,YAAY,IACT,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAC9C,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EACvC,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAC,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,GACnB,GACA,EACN,cAAK,SAAS,EAAC,uCAAuC,GAAG,EACzD,cACI,SAAS,EAAE,EAAE,CACT,sCAAsC,EACtC,uBAAuB,EACvB,2BAA2B,CAC9B,YAED,KAAC,YAAY,IACT,KAAK,EAAE,UAAU,EACjB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAC,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,GAClB,GACA,IACJ,CACT,CAAC;AACN,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { IKdaDefinition } from "../types.js";
2
+ type OwnerId = string;
3
+ type OpenRequestListener = (definition: IKdaDefinition) => void;
4
+ /**
5
+ * Lightweight in-memory arbiter to prevent multiple {@link KdaDialogController} instances from opening at once.
6
+ *
7
+ * @remarks
8
+ * This is an internal short-term mitigation. Ideal solution is a single host.
9
+ */
10
+ export declare class KdaDialogArbiter {
11
+ private static instance;
12
+ static getInstance(): KdaDialogArbiter;
13
+ private activeOwnerId;
14
+ private openRequestListeners;
15
+ private constructor();
16
+ registerOwner(ownerId: OwnerId, onOpenRequested: OpenRequestListener): () => void;
17
+ tryAcquire(ownerId: OwnerId): boolean;
18
+ requestOpen(ownerId: OwnerId, definition: IKdaDefinition): boolean;
19
+ release(ownerId: OwnerId): void;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=KdaDialogArbiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogArbiter.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogArbiter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,KAAK,OAAO,GAAG,MAAM,CAAC;AAEtB,KAAK,mBAAmB,GAAG,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;AAEhE;;;;;GAKG;AACH,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IAEtD,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,oBAAoB,CAA2C;IAEvE,OAAO;IAEP,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAQjF,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAQrC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO;IAclE,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAKlC"}
@@ -0,0 +1,50 @@
1
+ // (C) 2025-2026 GoodData Corporation
2
+ /**
3
+ * Lightweight in-memory arbiter to prevent multiple {@link KdaDialogController} instances from opening at once.
4
+ *
5
+ * @remarks
6
+ * This is an internal short-term mitigation. Ideal solution is a single host.
7
+ */
8
+ export class KdaDialogArbiter {
9
+ static instance;
10
+ static getInstance() {
11
+ if (!KdaDialogArbiter.instance) {
12
+ KdaDialogArbiter.instance = new KdaDialogArbiter();
13
+ }
14
+ return KdaDialogArbiter.instance;
15
+ }
16
+ activeOwnerId = null;
17
+ openRequestListeners = new Map();
18
+ constructor() { }
19
+ registerOwner(ownerId, onOpenRequested) {
20
+ this.openRequestListeners.set(ownerId, onOpenRequested);
21
+ return () => {
22
+ this.openRequestListeners.delete(ownerId);
23
+ this.release(ownerId);
24
+ };
25
+ }
26
+ tryAcquire(ownerId) {
27
+ if (this.activeOwnerId === null || this.activeOwnerId === ownerId) {
28
+ this.activeOwnerId = ownerId;
29
+ return true;
30
+ }
31
+ return false;
32
+ }
33
+ requestOpen(ownerId, definition) {
34
+ if (this.tryAcquire(ownerId)) {
35
+ return true;
36
+ }
37
+ const activeOwnerId = this.activeOwnerId;
38
+ if (!activeOwnerId) {
39
+ return false;
40
+ }
41
+ this.openRequestListeners.get(activeOwnerId)?.(definition);
42
+ return false;
43
+ }
44
+ release(ownerId) {
45
+ if (this.activeOwnerId === ownerId) {
46
+ this.activeOwnerId = null;
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=KdaDialogArbiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogArbiter.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogArbiter.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAQrC;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACjB,MAAM,CAAC,QAAQ,CAA+B;IAEtD,MAAM,CAAC,WAAW;QACd,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC7B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACrC,CAAC;IAEO,aAAa,GAAmB,IAAI,CAAC;IACrC,oBAAoB,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEvE,gBAAuB,CAAC;IAExB,aAAa,CAAC,OAAgB,EAAE,eAAoC;QAChE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;IACN,CAAC;IAED,UAAU,CAAC,OAAgB;QACvB,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YAChE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,OAAgB,EAAE,UAA0B;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,OAAgB;QACpB,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,17 @@
1
+ import type { ISeparators } from "@gooddata/sdk-model";
2
+ import type { IKdaDefinition, IKdaDialogProps } from "../types.js";
3
+ export interface IKdaDialogControllerProps extends IKdaDialogProps {
4
+ separators?: ISeparators;
5
+ /**
6
+ * Latest requested definition. When a dialog is already open and this differs from the active definition,
7
+ * confirmation is shown before the active definition is replaced.
8
+ */
9
+ requestedDefinition?: IKdaDefinition;
10
+ /**
11
+ * Optional callback allowing the controller to sync the host's requested definition.
12
+ * Used to revert the host back to active definition on "Stay" and to clear it on close.
13
+ */
14
+ onRequestedDefinitionChange?: (definition?: IKdaDefinition) => void;
15
+ }
16
+ export declare function KdaDialogController({ requestedDefinition, separators, onRequestedDefinitionChange, ...dialogProps }: IKdaDialogControllerProps): import("react/jsx-runtime").JSX.Element | null;
17
+ //# sourceMappingURL=KdaDialogController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogController.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogController.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAOnE,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAC9D,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,cAAc,CAAC;IACrC;;;OAGG;IACH,2BAA2B,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CACvE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,mBAAmB,EACnB,UAAU,EACV,2BAA2B,EAC3B,GAAG,WAAW,EACjB,EAAE,yBAAyB,kDAmF3B"}
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import { useCallback, useEffect, useState } from "react";
4
+ import { v4 as uuid } from "uuid";
5
+ import { KdaProvider } from "../providers/Kda.js";
6
+ import { KdaDialog } from "./KdaDialog.js";
7
+ import { KdaDialogArbiter } from "./KdaDialogArbiter.js";
8
+ import { KdaReplaceConfirmationDialog } from "./KdaReplaceConfirmationDialog.js";
9
+ const arbiter = KdaDialogArbiter.getInstance();
10
+ export function KdaDialogController({ requestedDefinition, separators, onRequestedDefinitionChange, ...dialogProps }) {
11
+ const [activeDefinition, setActiveDefinition] = useState(undefined);
12
+ const [pendingDefinition, setPendingDefinition] = useState(undefined);
13
+ const isReplaceConfirmationOpen = !!pendingDefinition;
14
+ const [ownerId] = useState(() => uuid());
15
+ const handleDelegatedOpen = useCallback((definition) => {
16
+ onRequestedDefinitionChange?.(definition);
17
+ }, [onRequestedDefinitionChange]);
18
+ useEffect(() => {
19
+ return arbiter.registerOwner(ownerId, handleDelegatedOpen);
20
+ }, [ownerId, handleDelegatedOpen]);
21
+ useEffect(() => {
22
+ if (!requestedDefinition) {
23
+ setActiveDefinition(undefined);
24
+ setPendingDefinition(undefined);
25
+ arbiter.release(ownerId);
26
+ return;
27
+ }
28
+ if (!activeDefinition) {
29
+ const granted = arbiter.requestOpen(ownerId, requestedDefinition);
30
+ if (!granted) {
31
+ // Request delegated to another active controller. Clear the host request to avoid re-trigger loops.
32
+ onRequestedDefinitionChange?.(undefined);
33
+ return;
34
+ }
35
+ setActiveDefinition(requestedDefinition);
36
+ return;
37
+ }
38
+ // Whenever a dialog is already open and a *different* request arrives, always ask for confirmation.
39
+ // This prevents showing confirmation immediately on the initial open (where active === requested).
40
+ if (!pendingDefinition && requestedDefinition !== activeDefinition) {
41
+ setPendingDefinition(requestedDefinition);
42
+ }
43
+ }, [activeDefinition, ownerId, onRequestedDefinitionChange, pendingDefinition, requestedDefinition]);
44
+ const onCloseInternal = useCallback(() => {
45
+ setActiveDefinition(undefined);
46
+ setPendingDefinition(undefined);
47
+ arbiter.release(ownerId);
48
+ onRequestedDefinitionChange?.(undefined);
49
+ dialogProps.onClose?.();
50
+ }, [dialogProps, ownerId, onRequestedDefinitionChange]);
51
+ const onCancelReplace = useCallback(() => {
52
+ setPendingDefinition(undefined);
53
+ if (activeDefinition) {
54
+ onRequestedDefinitionChange?.(activeDefinition);
55
+ }
56
+ }, [activeDefinition, onRequestedDefinitionChange]);
57
+ const onConfirmReplace = useCallback(() => {
58
+ if (!pendingDefinition) {
59
+ return;
60
+ }
61
+ setActiveDefinition(pendingDefinition);
62
+ setPendingDefinition(undefined);
63
+ onRequestedDefinitionChange?.(pendingDefinition);
64
+ }, [onRequestedDefinitionChange, pendingDefinition]);
65
+ if (!activeDefinition) {
66
+ return null;
67
+ }
68
+ return (_jsxs(_Fragment, { children: [_jsx(KdaReplaceConfirmationDialog, { isOpen: isReplaceConfirmationOpen, onCancel: onCancelReplace, onConfirm: onConfirmReplace }), _jsx(KdaProvider, { definition: activeDefinition, separators: separators, children: _jsx(KdaDialog, { ...dialogProps, onClose: onCloseInternal }) })] }));
69
+ }
70
+ //# sourceMappingURL=KdaDialogController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogController.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogController.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type IDialogCloseButtonProps } from "@gooddata/sdk-ui-kit";
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare const KdaDialogControls: import("react").NamedExoticComponent<IDialogCloseButtonProps>;
6
+ //# sourceMappingURL=KdaDialogControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogControls.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogControls.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAIpE;;GAEG;AACH,eAAO,MAAM,iBAAiB,+DAS5B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import { memo } from "react";
4
+ import cx from "classnames";
5
+ import { KdaDialogActionButtons } from "./KdaDialogActionButtons.js";
6
+ /**
7
+ * @internal
8
+ */
9
+ export const KdaDialogControls = memo(function KdaDialogControls(props) {
10
+ const { className, onClose } = props;
11
+ return (_jsx(KdaDialogActionButtons, { className: cx("gd-dialog-close", "gd-kda-dialog-controls", className), size: "medium", onClose: onClose }));
12
+ });
13
+ //# sourceMappingURL=KdaDialogControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogControls.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogControls.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,iBAAiB,CAAC,KAA8B;IAC3F,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACrC,OAAO,CACH,KAAC,sBAAsB,IACnB,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,SAAS,CAAC,EACrE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,GAClB,CACL,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ interface IKdaDialogFloatingStatusBarProps {
2
+ titleElementId: string;
3
+ onClose?: () => void;
4
+ }
5
+ /**
6
+ * @internal
7
+ */
8
+ export declare function KdaDialogFloatingStatusBar({ onClose, titleElementId }: IKdaDialogFloatingStatusBarProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=KdaDialogFloatingStatusBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogFloatingStatusBar.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogFloatingStatusBar.tsx"],"names":[],"mappings":"AAmBA,UAAU,gCAAgC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,gCAAgC,2CAqBvG"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import { defineMessages, useIntl } from "react-intl";
4
+ import { LoadingSpinner, UiIcon } from "@gooddata/sdk-ui-kit";
5
+ import { KdaDialogActionButtons } from "./KdaDialogActionButtons.js";
6
+ import { useKdaState } from "../providers/KdaState.js";
7
+ const floatingStatusMessages = defineMessages({
8
+ step01: { id: "kdaDialog.floatingStatus.step1" },
9
+ step02: { id: "kdaDialog.floatingStatus.step2" },
10
+ done: { id: "kdaDialog.floatingStatus.done" },
11
+ error: { id: "kdaDialog.floatingStatus.error" },
12
+ });
13
+ /**
14
+ * @internal
15
+ */
16
+ export function KdaDialogFloatingStatusBar({ onClose, titleElementId }) {
17
+ const intl = useIntl();
18
+ const { state } = useKdaState();
19
+ const status = getFloatingStatus(state.relevantStatus, state.itemsStatus, state.selectedStatus);
20
+ const statusText = intl.formatMessage(floatingStatusMessages[status]);
21
+ return (_jsxs("div", { className: "gd-kda-floating-status-bar", children: [_jsx("div", { className: "sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true", children: status === "done" || status === "error" ? statusText : null }), _jsxs("div", { className: "gd-kda-floating-status-bar__content", children: [_jsx(StatusIndicator, { status: status }), _jsx("p", { className: "gd-kda-floating-status-bar__text", id: titleElementId, children: statusText })] }), _jsx(KdaDialogActionButtons, { size: "small", onClose: onClose })] }));
22
+ }
23
+ function StatusIndicator({ status }) {
24
+ if (status === "error") {
25
+ return _jsx(UiIcon, { type: "crossCircle", color: "error", size: 16, layout: "block", ariaHidden: true });
26
+ }
27
+ if (status === "done") {
28
+ return _jsx(UiIcon, { type: "checkCircle", color: "success", size: 16, layout: "block", ariaHidden: true });
29
+ }
30
+ return _jsx(LoadingSpinner, { className: "small gd-kda-floating-status-bar__spinner", color: "#6d7680" });
31
+ }
32
+ function getFloatingStatus(relevantStatus, itemsStatus, selectedStatus) {
33
+ if (relevantStatus === "error" || itemsStatus === "error" || selectedStatus === "error") {
34
+ return "error";
35
+ }
36
+ if (relevantStatus === "pending" || relevantStatus === "loading") {
37
+ return "step01";
38
+ }
39
+ if (itemsStatus === "pending" ||
40
+ itemsStatus === "loading" ||
41
+ selectedStatus === "pending" ||
42
+ selectedStatus === "loading") {
43
+ return "step02";
44
+ }
45
+ return "done";
46
+ }
47
+ //# sourceMappingURL=KdaDialogFloatingStatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaDialogFloatingStatusBar.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaDialogFloatingStatusBar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface IKdaReplaceConfirmationDialogProps {
2
+ isOpen: boolean;
3
+ onCancel: () => void;
4
+ onConfirm: () => void;
5
+ }
6
+ export declare function KdaReplaceConfirmationDialog(props: IKdaReplaceConfirmationDialogProps): import("react/jsx-runtime").JSX.Element | null;
7
+ export {};
8
+ //# sourceMappingURL=KdaReplaceConfirmationDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaReplaceConfirmationDialog.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaReplaceConfirmationDialog.tsx"],"names":[],"mappings":"AAUA,UAAU,kCAAkC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,kCAAkC,kDAuBrF"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import { useIntl } from "react-intl";
4
+ import { ConfirmDialog, OverlayController, OverlayControllerProvider } from "@gooddata/sdk-ui-kit";
5
+ import { KDA_DIALOG_REPLACE_CONFIRMATION_OVERS_Z_INDEX } from "../const.js";
6
+ const overlayController = OverlayController.getInstance(KDA_DIALOG_REPLACE_CONFIRMATION_OVERS_Z_INDEX);
7
+ export function KdaReplaceConfirmationDialog(props) {
8
+ const { isOpen, onCancel, onConfirm } = props;
9
+ const intl = useIntl();
10
+ if (!isOpen) {
11
+ return null;
12
+ }
13
+ return (_jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(ConfirmDialog, { headline: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.headline" }), cancelButtonText: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.stay" }), submitButtonText: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.runAnyway" }), isPositive: false, onCancel: onCancel, onClose: onCancel, onSubmit: onConfirm, children: intl.formatMessage({ id: "kdaDialog.replaceConfirmation.message" }) }) }));
14
+ }
15
+ //# sourceMappingURL=KdaReplaceConfirmationDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KdaReplaceConfirmationDialog.js","sourceRoot":"","sources":["../../../src/kdaDialog/dialog/KdaReplaceConfirmationDialog.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,6CAA6C,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAC;AAQvG,MAAM,UAAU,4BAA4B,CAAC,KAAyC;IAClF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,yBAAyB,IAAC,iBAAiB,EAAE,iBAAiB,YAC3D,KAAC,aAAa,IACV,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,wCAAwC,EAAE,CAAC,EAC9E,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,oCAAoC,EAAE,CAAC,EAClF,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,yCAAyC,EAAE,CAAC,EACvF,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,YAElB,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,uCAAuC,EAAE,CAAC,GACxD,GACQ,CAC/B,CAAC;AACN,CAAC"}
@@ -1,4 +1,4 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
2
  import { useEffect, useMemo } from "react";
3
3
  import stringify from "json-stable-stringify";
4
4
  import { ClientFormatterFacade } from "@gooddata/number-formatter";
@@ -37,37 +37,37 @@ function useChangeAnalysisResults(definition, attrs, attrFilters, loading) {
37
37
  .map((f) => stringify(f))
38
38
  .join();
39
39
  }, [attrFilters]);
40
+ const dateAttribute = dateAttributeFinder(definition?.dateAttribute);
41
+ const shouldComputeChangeAnalysis = !!definition && !!dateAttribute && !loading;
40
42
  return useCancelablePromise({
41
- promise: () => {
42
- const dateAttribute = dateAttributeFinder(definition?.dateAttribute);
43
- if (!definition || !dateAttribute || loading) {
44
- return Promise.resolve(undefined);
43
+ promise: shouldComputeChangeAnalysis
44
+ ? () => {
45
+ const granularity = dateAttribute.granularity;
46
+ const attributes = attrs
47
+ .map((ref) => {
48
+ const attr = attributeFinder(ref);
49
+ return attr ? newAttribute(ref) : null;
50
+ })
51
+ .filter(Boolean);
52
+ const filters = attrFilters
53
+ .filter((f) => !isAllValuesDashboardAttributeFilter(f))
54
+ .map(dashboardAttributeFilterToAttributeFilter);
55
+ return backend
56
+ .workspace(workspace)
57
+ .keyDriverAnalysis()
58
+ .computeChangeAnalysis({
59
+ measure: definition.metric,
60
+ auxMeasures: definition.metrics,
61
+ attributes,
62
+ filters,
63
+ }, {
64
+ dateAttribute: newAttribute(dateAttribute.defaultDisplayForm.ref),
65
+ from: from ?? "",
66
+ to: to ?? "",
67
+ granularity,
68
+ });
45
69
  }
46
- const granularity = dateAttribute.granularity;
47
- const attributes = attrs
48
- .map((ref) => {
49
- const attr = attributeFinder(ref);
50
- return attr ? newAttribute(ref) : null;
51
- })
52
- .filter(Boolean);
53
- const filters = attrFilters
54
- .filter((f) => !isAllValuesDashboardAttributeFilter(f))
55
- .map(dashboardAttributeFilterToAttributeFilter);
56
- return backend
57
- .workspace(workspace)
58
- .keyDriverAnalysis()
59
- .computeChangeAnalysis({
60
- measure: definition.metric,
61
- auxMeasures: definition.metrics,
62
- attributes,
63
- filters,
64
- }, {
65
- dateAttribute: newAttribute(dateAttribute.defaultDisplayForm.ref),
66
- from: from ?? "",
67
- to: to ?? "",
68
- granularity,
69
- });
70
- },
70
+ : undefined,
71
71
  }, [
72
72
  backend,
73
73
  definition,
@@ -76,7 +76,7 @@ function useChangeAnalysisResults(definition, attrs, attrFilters, loading) {
76
76
  from,
77
77
  to,
78
78
  loading,
79
- dateAttributeFinder,
79
+ dateAttribute,
80
80
  attributeFiltersFingerprint,
81
81
  ]);
82
82
  }