@gooddata/sdk-ui-dashboard 11.53.0-alpha.1 → 11.53.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 (57) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.js +1 -1
  3. package/esm/index.d.ts +3 -2
  4. package/esm/index.d.ts.map +1 -1
  5. package/esm/internal.d.ts +1 -1
  6. package/esm/internal.d.ts.map +1 -1
  7. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.d.ts.map +1 -1
  8. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +43 -8
  9. package/esm/model/react/useInitializeDashboardStore.d.ts.map +1 -1
  10. package/esm/model/react/useInitializeDashboardStore.js +11 -0
  11. package/esm/model/store/config/configReducers.d.ts +8 -0
  12. package/esm/model/store/config/configReducers.d.ts.map +1 -1
  13. package/esm/model/store/config/configReducers.js +12 -0
  14. package/esm/model/store/config/index.d.ts +2 -0
  15. package/esm/model/store/config/index.d.ts.map +1 -1
  16. package/esm/model/store/dashboardStore.d.ts.map +1 -1
  17. package/esm/model/store/dashboardStore.js +1 -0
  18. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogHeader.d.ts +1 -11
  19. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogHeader.d.ts.map +1 -1
  20. package/esm/presentation/automations/alerting/DefaultAlertingDialog/AlertingDialogHeader.js +7 -11
  21. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +6 -3
  22. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  23. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +22 -4
  24. package/esm/presentation/automations/alerting/state/useAlertFormState.d.ts +1 -1
  25. package/esm/presentation/automations/alerting/state/useAlertFormState.d.ts.map +1 -1
  26. package/esm/presentation/automations/alerting/state/useAlertFormState.js +3 -2
  27. package/esm/presentation/automations/alerting/types.d.ts +51 -1
  28. package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
  29. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts +23 -3
  30. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  31. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +40 -4
  32. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Header/ScheduleEmailDialogHeader.d.ts +1 -12
  33. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Header/ScheduleEmailDialogHeader.d.ts.map +1 -1
  34. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Header/ScheduleEmailDialogHeader.js +10 -14
  35. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.d.ts +1 -1
  36. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.d.ts.map +1 -1
  37. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.js +3 -2
  38. package/esm/presentation/automations/scheduledEmail/types.d.ts +55 -1
  39. package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
  40. package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.d.ts.map +1 -1
  41. package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.js +2 -2
  42. package/esm/presentation/automations/shared/slots/types.d.ts +58 -0
  43. package/esm/presentation/automations/shared/slots/types.d.ts.map +1 -0
  44. package/esm/presentation/automations/shared/slots/types.js +2 -0
  45. package/esm/presentation/automations/shared/utils/automationTitle.d.ts +5 -0
  46. package/esm/presentation/automations/shared/utils/automationTitle.d.ts.map +1 -0
  47. package/esm/presentation/automations/shared/utils/automationTitle.js +7 -0
  48. package/esm/presentation/dragAndDrop/draggableParameterFilter/DefaultParameterDraggingComponent.d.ts.map +1 -1
  49. package/esm/presentation/dragAndDrop/draggableParameterFilter/DefaultParameterDraggingComponent.js +9 -2
  50. package/esm/presentation/filterBar/filterBar/DefaultFilterBarContainer.d.ts.map +1 -1
  51. package/esm/presentation/filterBar/filterBar/DefaultFilterBarContainer.js +8 -2
  52. package/esm/presentation/filterBar/parameterFilter/DashboardParameterFilter.d.ts.map +1 -1
  53. package/esm/presentation/filterBar/parameterFilter/DashboardParameterFilter.js +4 -3
  54. package/esm/sdk-ui-dashboard.d.ts +195 -2
  55. package/package.json +21 -21
  56. package/styles/css/main.css +62 -0
  57. package/styles/css/main.css.map +1 -1
@@ -1,8 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
+ import { getParameterValueTitle } from "@gooddata/sdk-model";
3
4
  import { ParameterControlButton } from "@gooddata/sdk-ui-kit";
4
5
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
5
6
  import { selectCatalogParameterByRef } from "../../../model/store/catalog/catalogSelectors.js";
7
+ import { matchingWorkspaceDefinition, resolveParameterTitle, } from "../../../model/store/tabs/parameters/parametersHelpers.js";
6
8
  import { selectDashboardParameterEntryByRef } from "../../../model/store/tabs/parameters/parametersSelectors.js";
7
9
  /**
8
10
  * Renders the floating preview of a parameter chip while it is being dragged.
@@ -15,6 +17,11 @@ export function DefaultParameterDraggingComponent({ item }) {
15
17
  if (entry?.runtimeOverride === undefined) {
16
18
  return null;
17
19
  }
18
- const name = entry.parameter.label ?? workspaceParameter?.title ?? "";
19
- return (_jsx(ParameterControlButton, { name: name, value: entry.runtimeOverride, isActive: false, isDraggable: true, isDragging: true }));
20
+ const definition = matchingWorkspaceDefinition(entry.parameter, workspaceParameter);
21
+ if (!workspaceParameter || !definition) {
22
+ return null;
23
+ }
24
+ const name = resolveParameterTitle(entry.parameter, workspaceParameter);
25
+ const value = getParameterValueTitle(definition, entry.runtimeOverride);
26
+ return _jsx(ParameterControlButton, { name: name, value: value, isActive: false, isDraggable: true, isDragging: true });
20
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultFilterBarContainer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/filterBar/DefaultFilterBarContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGH,KAAK,SAAS,EAOjB,MAAM,OAAO,CAAC;AA0cf;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,2CAQ/E"}
1
+ {"version":3,"file":"DefaultFilterBarContainer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/filterBar/DefaultFilterBarContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGH,KAAK,SAAS,EAOjB,MAAM,OAAO,CAAC;AAidf;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,2CAQ/E"}
@@ -47,17 +47,22 @@ function DefaultFilterBarContainerCore({ children }) {
47
47
  const intl = useIntl();
48
48
  const [expandedAutomatically, setExpandedAutomatically] = useState(false);
49
49
  const [collapseAnnouncement, setCollapseAnnouncement] = useState("");
50
+ // ref mirror: render-time state is stale inside the synchronous blur+focus pair
51
+ // fired when focus moves into a portaled filter dropdown
52
+ const isFilterBarExpandedRef = useRef(isFilterBarExpanded);
53
+ isFilterBarExpandedRef.current = isFilterBarExpanded;
50
54
  const onContainerFocus = useCallback(() => {
51
55
  // detect if event is mouse
52
56
  if (!isFocusVisible()) {
53
57
  return;
54
58
  }
55
59
  setCollapseAnnouncement("");
56
- if (hasMultipleRows && !isFilterBarExpanded) {
60
+ if (hasMultipleRows && !isFilterBarExpandedRef.current) {
61
+ isFilterBarExpandedRef.current = true;
57
62
  setFilterBarExpanded(true);
58
63
  setExpandedAutomatically(true);
59
64
  }
60
- }, [hasMultipleRows, isFilterBarExpanded, setFilterBarExpanded]);
65
+ }, [hasMultipleRows, setFilterBarExpanded]);
61
66
  const onContainerBlur = useCallback((event) => {
62
67
  // React bubbles blur from every child. Moving keyboard focus between
63
68
  // chips collapse/expand the filter bar
@@ -66,6 +71,7 @@ function DefaultFilterBarContainerCore({ children }) {
66
71
  return;
67
72
  }
68
73
  if (isFocusVisible() && expandedAutomatically) {
74
+ isFilterBarExpandedRef.current = false;
69
75
  setFilterBarExpanded(false);
70
76
  setExpandedAutomatically(false);
71
77
  const message = `${intl.formatMessage({ id: "filterBar.label" })}. ${intl.formatMessage({
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardParameterFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/parameterFilter/DashboardParameterFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAgC,KAAK,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAmB7G;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,SAAS,EAAE,mBAAmB,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,EAAE,8BAA8B,GAAG,YAAY,GAAG,IAAI,CA0E3G"}
1
+ {"version":3,"file":"DashboardParameterFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/parameterFilter/DashboardParameterFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAEH,KAAK,mBAAmB,EAG3B,MAAM,qBAAqB,CAAC;AAmB7B;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,SAAS,EAAE,mBAAmB,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,EAAE,8BAA8B,GAAG,YAAY,GAAG,IAAI,CA2E3G"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { defineMessages, useIntl } from "react-intl";
3
- import { DashboardParameterModeValues, objRefToString } from "@gooddata/sdk-model";
3
+ import { DashboardParameterModeValues, getParameterValueTitle, objRefToString, } from "@gooddata/sdk-model";
4
4
  import { Dropdown, ParameterControl, ParameterControlButton, useIdPrefixed } from "@gooddata/sdk-ui-kit";
5
5
  import { useDashboardDispatch, useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
6
6
  import { selectCatalogParameterByRef } from "../../../model/store/catalog/catalogSelectors.js";
@@ -34,12 +34,13 @@ export function DashboardParameterFilter({ parameter }) {
34
34
  return null;
35
35
  }
36
36
  const name = parameter.label ?? workspaceParameter.title;
37
+ const valueTitle = getParameterValueTitle(definition, runtimeOverride);
37
38
  const dragItem = { type: "parameter", ref: parameter.ref };
38
39
  const warningTooltip = reconciliation === "reset" ? intl.formatMessage(messages.resetWarning) : undefined;
39
40
  if (parameter.mode === DashboardParameterModeValues.READONLY) {
40
- return (_jsx(DraggableChipSource, { dragItem: dragItem, canDrag: isInEditMode, children: _jsx(ParameterControlButton, { name: name, value: runtimeOverride, isActive: false, isDraggable: isInEditMode, warningTooltip: warningTooltip, "data-testid": `dashboard-parameter-${objRefToString(parameter.ref)}` }) }));
41
+ return (_jsx(DraggableChipSource, { dragItem: dragItem, canDrag: isInEditMode, children: _jsx(ParameterControlButton, { name: name, value: valueTitle, isActive: false, isDraggable: isInEditMode, warningTooltip: warningTooltip, "data-testid": `dashboard-parameter-${objRefToString(parameter.ref)}` }) }));
41
42
  }
42
- return (_jsx(DraggableChipSource, { dragItem: dragItem, canDrag: isInEditMode, children: _jsx(Dropdown, { autofocusOnOpen: true, initialFocus: valueInputId, closeOnEscape: true, renderButton: ({ isOpen, toggleDropdown, dropdownId }) => (_jsx(ParameterControlButton, { name: name, value: runtimeOverride, isActive: isOpen, isDraggable: isInEditMode, dropdownId: dropdownId, onClick: () => toggleDropdown(), warningTooltip: warningTooltip, "data-testid": `dashboard-parameter-${objRefToString(parameter.ref)}` })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(ParameterControl, { name: name, definition: definition, value: runtimeOverride, resetValue: resetValue, inputId: valueInputId, ariaAttributes: ariaAttributes, onApply: (value) => {
43
+ return (_jsx(DraggableChipSource, { dragItem: dragItem, canDrag: isInEditMode, children: _jsx(Dropdown, { autofocusOnOpen: true, initialFocus: valueInputId, closeOnEscape: true, renderButton: ({ isOpen, toggleDropdown, dropdownId }) => (_jsx(ParameterControlButton, { name: name, value: valueTitle, isActive: isOpen, isDraggable: isInEditMode, dropdownId: dropdownId, onClick: () => toggleDropdown(), warningTooltip: warningTooltip, "data-testid": `dashboard-parameter-${objRefToString(parameter.ref)}` })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(ParameterControl, { name: name, definition: definition, value: runtimeOverride, resetValue: resetValue, inputId: valueInputId, ariaAttributes: ariaAttributes, onApply: (value) => {
43
44
  dispatch(tabsActions.setParameterRuntimeValue({ ref: parameter.ref, value }));
44
45
  closeDropdown();
45
46
  }, onCancel: closeDropdown })) }) }));
@@ -194,6 +194,7 @@ import { IWidget } from '@gooddata/sdk-model';
194
194
  import { IWidgetDefinition } from '@gooddata/sdk-model';
195
195
  import { IWorkspacePermissions } from '@gooddata/sdk-model';
196
196
  import { JSX } from 'react/jsx-runtime';
197
+ import { KeyboardEvent as KeyboardEvent_2 } from 'react';
197
198
  import { LocalIdRef } from '@gooddata/sdk-model';
198
199
  import { MeasureValueFilterCondition } from '@gooddata/sdk-model';
199
200
  import { MessageDescriptor } from 'react-intl';
@@ -217,6 +218,7 @@ import { ReactElement } from 'react';
217
218
  import { ReactNode } from 'react';
218
219
  import { ReactReduxContextValue } from 'react-redux';
219
220
  import { Reducer } from '@reduxjs/toolkit';
221
+ import { Ref } from 'react';
220
222
  import { RefObject } from 'react';
221
223
  import { SagaIterator } from 'redux-saga';
222
224
  import { ScreenSize } from '@gooddata/sdk-model';
@@ -513,6 +515,16 @@ export declare function addVisualizationToSwitcherWidgetContent(ref: ObjRef, vis
513
515
  */
514
516
  export declare function AlertingDialog(props: IAlertingDialogProps): ReactElement;
515
517
 
518
+ /**
519
+ * The exact props the default dialog renders its header with, including the dialog's
520
+ * initial-focus ref.
521
+ *
522
+ * @alpha
523
+ */
524
+ export declare type AlertingDialogHeaderDefaultProps = IAlertingDialogHeaderProps & {
525
+ ref?: Ref<HTMLInputElement>;
526
+ };
527
+
516
528
  /**
517
529
  * @internal
518
530
  */
@@ -3850,9 +3862,12 @@ export declare const DEFAULT_TAB_ID = "defaultTabId";
3850
3862
  * that is what lets a wholesale replacement receive the same contexts. Rendering this component
3851
3863
  * outside those providers throws at runtime.
3852
3864
  *
3865
+ * Slots render only in the fully rendered dialog: not while the dialog context reports loading,
3866
+ * and not while the stale-filters confirmation step is shown.
3867
+ *
3853
3868
  * @alpha
3854
3869
  */
3855
- export declare function DefaultAlertingDialog(props: IAlertingDialogProps): JSX.Element;
3870
+ export declare function DefaultAlertingDialog(props: IDefaultAlertingDialogProps): JSX.Element;
3856
3871
 
3857
3872
  /**
3858
3873
  * Self-contained version of DefaultAlertingManagementDialogNew that builds the required
@@ -4090,9 +4105,29 @@ export declare function DefaultSaveAsNewButton({ isVisible, isEnabled, onSaveAsN
4090
4105
  export declare function DefaultSaveButton({ isVisible, isEnabled, isSaving, buttonTitle, onSaveClick }: ISaveButtonProps): JSX.Element | null;
4091
4106
 
4092
4107
  /**
4108
+ * Default implementation of the scheduled export create/edit dialog.
4109
+ *
4110
+ * This component is a pure consumer of `AutomationsContext`, `ScheduledEmailDialogContext`, and the
4111
+ * scheduled export dialog state contexts: it reads org/workspace data, per-dialog state, and the
4112
+ * export draft's state from those contexts rather than from the dashboard store. It must therefore
4113
+ * be rendered within an `AutomationsContextProvider`, a `ScheduledEmailDialogContextProvider` (for
4114
+ * the create/edit flow), and a `ScheduledEmailDialogStateProvider`, whose state model establishes
4115
+ * itself once `useScheduledEmailDialogContext().isLoading` is false. Inside a `Dashboard`, the
4116
+ * scheduled export connector supplies the first two providers above the
4117
+ * `ScheduledEmailDialogComponent` slot and mounts `ScheduledEmailDialogStateProvider` around the
4118
+ * resolved slot component — so the default component, and any wholesale slot replacement, inherit
4119
+ * all three contexts automatically and require no extra wiring.
4120
+ *
4121
+ * The providers are intentionally hoisted above the slot rather than built inside this component:
4122
+ * that is what lets a wholesale replacement receive the same contexts. Rendering this component
4123
+ * outside those providers throws at runtime.
4124
+ *
4125
+ * Slots render only in the fully rendered dialog: not while the dialog context reports loading,
4126
+ * and not while the stale-filters confirmation step is shown.
4127
+ *
4093
4128
  * @alpha
4094
4129
  */
4095
- export declare function DefaultScheduledEmailDialog(props: IScheduledEmailDialogProps): JSX.Element;
4130
+ export declare function DefaultScheduledEmailDialog(props: IDefaultScheduledEmailDialogProps): JSX.Element;
4096
4131
 
4097
4132
  /**
4098
4133
  * @alpha
@@ -5727,6 +5762,18 @@ export declare interface IAlertingDialogContextValue {
5727
5762
  isLoading: boolean;
5728
5763
  }
5729
5764
 
5765
+ /**
5766
+ * Props of the default alerting dialog's header region (the title input row).
5767
+ *
5768
+ * @alpha
5769
+ */
5770
+ export declare interface IAlertingDialogHeaderProps extends IAutomationDialogHeaderProps {
5771
+ /**
5772
+ * Called when the header's back/close button is pressed. The default dialog closes on it.
5773
+ */
5774
+ onCancel?: () => void;
5775
+ }
5776
+
5730
5777
  /**
5731
5778
  * @alpha
5732
5779
  */
@@ -5799,6 +5846,19 @@ export declare interface IAlertingDialogProps {
5799
5846
  onDeleteError?: (error: GoodDataSdkError) => void;
5800
5847
  }
5801
5848
 
5849
+ /**
5850
+ * Section-level overrides of the default alerting dialog.
5851
+ *
5852
+ * @alpha
5853
+ */
5854
+ export declare interface IAlertingDialogSlots {
5855
+ /**
5856
+ * Wraps or replaces the dialog header (the title input row). Must have a stable reference
5857
+ * identity — see {@link ISlotProps}.
5858
+ */
5859
+ Header?: ComponentType<ISlotProps<AlertingDialogHeaderDefaultProps>>;
5860
+ }
5861
+
5802
5862
  /**
5803
5863
  * Sub-context for the alerting management dialog.
5804
5864
  * The connector hydrates this from dashboard state.
@@ -6037,6 +6097,38 @@ export declare interface IAttributesDropdownProps extends IDashboardAttributeFil
6037
6097
  onParameterSelect?: (ref: IdentifierRef) => void;
6038
6098
  }
6039
6099
 
6100
+ /**
6101
+ * Members shared by both automation dialogs' header regions.
6102
+ *
6103
+ * @alpha
6104
+ */
6105
+ export declare interface IAutomationDialogHeaderProps {
6106
+ /**
6107
+ * Current automation title.
6108
+ */
6109
+ title: string;
6110
+ /**
6111
+ * Placeholder shown while the title is empty.
6112
+ */
6113
+ placeholder: string;
6114
+ /**
6115
+ * Whether the secondary title row is shown.
6116
+ */
6117
+ isSecondaryTitleVisible?: boolean;
6118
+ /**
6119
+ * Secondary title text (e.g. the widget name).
6120
+ */
6121
+ secondaryTitle?: string;
6122
+ /**
6123
+ * Icon rendered before the secondary title.
6124
+ */
6125
+ secondaryTitleIcon: ReactNode;
6126
+ /**
6127
+ * Called on every title change with the new value. The dialog validates the title itself.
6128
+ */
6129
+ onChange: (value: string) => void;
6130
+ }
6131
+
6040
6132
  /**
6041
6133
  * Automation filters grouped by tab, returned by {@link selectAutomationFiltersByTab}.
6042
6134
  * @alpha
@@ -12771,6 +12863,24 @@ export declare interface IDateFiltersCustomizer {
12771
12863
  withCustomProvider(provider: OptionalDateFilterComponentProvider): IDateFiltersCustomizer;
12772
12864
  }
12773
12865
 
12866
+ /**
12867
+ * Props of {@link DefaultAlertingDialog}.
12868
+ *
12869
+ * @remarks
12870
+ * Extends the shared {@link IAlertingDialogProps} with customization only the default implementation
12871
+ * supports. Slots render only in the fully rendered dialog: not while the dialog context reports
12872
+ * loading, and not while the stale-filters confirmation step is shown.
12873
+ *
12874
+ * @alpha
12875
+ */
12876
+ export declare interface IDefaultAlertingDialogProps extends IAlertingDialogProps {
12877
+ /**
12878
+ * Section-level overrides. Each slot receives `{ Default, defaultProps }` and may render its own
12879
+ * content (replace) or `<Default {...defaultProps} />` inside its own markup (wrap).
12880
+ */
12881
+ slots?: IAlertingDialogSlots;
12882
+ }
12883
+
12774
12884
  /**
12775
12885
  * @alpha
12776
12886
  */
@@ -12797,6 +12907,24 @@ export declare interface IDefaultDashboardToolbarGroupProps {
12797
12907
  children?: ReactNode;
12798
12908
  }
12799
12909
 
12910
+ /**
12911
+ * Props of {@link DefaultScheduledEmailDialog}.
12912
+ *
12913
+ * @remarks
12914
+ * Extends the shared {@link IScheduledEmailDialogProps} with customization only the default implementation
12915
+ * supports. Slots render only in the fully rendered dialog: not while the dialog context reports
12916
+ * loading, and not while the stale-filters confirmation step is shown.
12917
+ *
12918
+ * @alpha
12919
+ */
12920
+ export declare interface IDefaultScheduledEmailDialogProps extends IScheduledEmailDialogProps {
12921
+ /**
12922
+ * Section-level overrides. Each slot receives `{ Default, defaultProps }` and may render its own
12923
+ * content (replace) or `<Default {...defaultProps} />` inside its own markup (wrap).
12924
+ */
12925
+ slots?: IScheduledEmailDialogSlots;
12926
+ }
12927
+
12800
12928
  /**
12801
12929
  * This event is emitted when an attribute hierarchy is deleted.
12802
12930
  *
@@ -17084,6 +17212,22 @@ export declare interface IScheduledEmailDialogContextValue {
17084
17212
  isLoading: boolean;
17085
17213
  }
17086
17214
 
17215
+ /**
17216
+ * Props of the default scheduled email dialog's header region (the title input row).
17217
+ *
17218
+ * @alpha
17219
+ */
17220
+ export declare interface IScheduledEmailDialogHeaderProps extends IAutomationDialogHeaderProps {
17221
+ /**
17222
+ * Called on key-down inside the title input.
17223
+ */
17224
+ onTitleKeyDown: (event: KeyboardEvent_2) => void;
17225
+ /**
17226
+ * Called when the header's back button is pressed.
17227
+ */
17228
+ onBack?: () => void;
17229
+ }
17230
+
17087
17231
  /**
17088
17232
  * @alpha
17089
17233
  */
@@ -17198,6 +17342,19 @@ export declare interface IScheduledEmailDialogProps {
17198
17342
  onDeleteError?: (error: GoodDataSdkError) => void;
17199
17343
  }
17200
17344
 
17345
+ /**
17346
+ * Section-level overrides of the default scheduled email dialog.
17347
+ *
17348
+ * @alpha
17349
+ */
17350
+ export declare interface IScheduledEmailDialogSlots {
17351
+ /**
17352
+ * Wraps or replaces the dialog header (the title input row). Must have a stable reference
17353
+ * identity — see {@link ISlotProps}.
17354
+ */
17355
+ Header?: ComponentType<ISlotProps<ScheduledEmailDialogHeaderDefaultProps>>;
17356
+ }
17357
+
17201
17358
  /**
17202
17359
  * Sub-context for the scheduled-email management dialog.
17203
17360
  * The connector hydrates this from dashboard state.
@@ -19428,6 +19585,32 @@ export declare function isLayoutSectionPath(obj: unknown): obj is ILayoutSection
19428
19585
  */
19429
19586
  export declare function isLoadingPlaceholderWidget(obj: unknown): obj is IPlaceholderWidget;
19430
19587
 
19588
+ /**
19589
+ * Contract of a section-level slot: the default implementation and the exact props the default
19590
+ * dialog would render it with.
19591
+ *
19592
+ * The component a customer assigns to a slot is rendered as an element type, so its reference
19593
+ * identity is load-bearing: define it at module scope (or memoize it), never inline in a render
19594
+ * function — an inline definition gets a fresh identity on every render of the declaring
19595
+ * component, which unmounts and remounts the region, losing focus and transient DOM state.
19596
+ *
19597
+ * Render `<Default {...defaultProps} />` inside your own markup to wrap the region rather than
19598
+ * replace it; a slot that does not spread `defaultProps` onto `Default` loses the default
19599
+ * behavior wired through them (including the dialog's initial-focus ref).
19600
+ *
19601
+ * @alpha
19602
+ */
19603
+ export declare interface ISlotProps<TProps> {
19604
+ /**
19605
+ * The default implementation of the region.
19606
+ */
19607
+ Default: ComponentType<TProps>;
19608
+ /**
19609
+ * The exact props the default dialog would render {@link ISlotProps.Default} with.
19610
+ */
19611
+ defaultProps: TProps;
19612
+ }
19613
+
19431
19614
  /**
19432
19615
  * @internal
19433
19616
  */
@@ -22970,6 +23153,16 @@ export declare type SavingState = {
22970
23153
  */
22971
23154
  export declare function ScheduledEmailDialog(props: IScheduledEmailDialogProps): ReactElement;
22972
23155
 
23156
+ /**
23157
+ * The exact props the default dialog renders its header with, including the dialog's
23158
+ * initial-focus ref.
23159
+ *
23160
+ * @alpha
23161
+ */
23162
+ export declare type ScheduledEmailDialogHeaderDefaultProps = IScheduledEmailDialogHeaderProps & {
23163
+ ref?: Ref<HTMLInputElement>;
23164
+ };
23165
+
22973
23166
  /**
22974
23167
  * @internal
22975
23168
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-dashboard",
3
- "version": "11.53.0-alpha.1",
3
+ "version": "11.53.0-alpha.2",
4
4
  "description": "GoodData SDK - Dashboard Component",
5
5
  "license": "LicenseRef-LICENSE",
6
6
  "author": "GoodData Corporation",
@@ -60,20 +60,20 @@
60
60
  "ts-invariant": "0.10.3",
61
61
  "tslib": "2.8.1",
62
62
  "uuid": "11.1.1",
63
- "@gooddata/sdk-backend-base": "11.53.0-alpha.1",
64
- "@gooddata/sdk-model": "11.53.0-alpha.1",
65
- "@gooddata/sdk-ui": "11.53.0-alpha.1",
66
- "@gooddata/sdk-backend-spi": "11.53.0-alpha.1",
67
- "@gooddata/sdk-ui-charts": "11.53.0-alpha.1",
68
- "@gooddata/sdk-ui-filters": "11.53.0-alpha.1",
69
- "@gooddata/sdk-ui-ext": "11.53.0-alpha.1",
70
- "@gooddata/sdk-ui-geo": "11.53.0-alpha.1",
71
- "@gooddata/sdk-ui-kit": "11.53.0-alpha.1",
72
- "@gooddata/sdk-ui-pivot": "11.53.0-alpha.1",
73
- "@gooddata/sdk-ui-semantic-search": "11.53.0-alpha.1",
74
- "@gooddata/sdk-ui-theme-provider": "11.53.0-alpha.1",
75
- "@gooddata/sdk-ui-vis-commons": "11.53.0-alpha.1",
76
- "@gooddata/util": "11.53.0-alpha.1"
63
+ "@gooddata/sdk-ui": "11.53.0-alpha.2",
64
+ "@gooddata/sdk-model": "11.53.0-alpha.2",
65
+ "@gooddata/sdk-backend-spi": "11.53.0-alpha.2",
66
+ "@gooddata/sdk-ui-charts": "11.53.0-alpha.2",
67
+ "@gooddata/sdk-ui-ext": "11.53.0-alpha.2",
68
+ "@gooddata/sdk-ui-geo": "11.53.0-alpha.2",
69
+ "@gooddata/sdk-ui-kit": "11.53.0-alpha.2",
70
+ "@gooddata/sdk-ui-pivot": "11.53.0-alpha.2",
71
+ "@gooddata/sdk-ui-semantic-search": "11.53.0-alpha.2",
72
+ "@gooddata/sdk-ui-theme-provider": "11.53.0-alpha.2",
73
+ "@gooddata/sdk-ui-vis-commons": "11.53.0-alpha.2",
74
+ "@gooddata/sdk-backend-base": "11.53.0-alpha.2",
75
+ "@gooddata/util": "11.53.0-alpha.2",
76
+ "@gooddata/sdk-ui-filters": "11.53.0-alpha.2"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@microsoft/api-documenter": "^7.17.0",
@@ -119,12 +119,12 @@
119
119
  "typescript": "5.9.3",
120
120
  "vitest": "4.1.8",
121
121
  "vitest-dom": "0.1.1",
122
- "@gooddata/eslint-config": "11.53.0-alpha.1",
123
- "@gooddata/i18n-toolkit": "11.53.0-alpha.1",
124
- "@gooddata/oxlint-config": "11.53.0-alpha.1",
125
- "@gooddata/reference-workspace": "11.53.0-alpha.1",
126
- "@gooddata/sdk-backend-mockingbird": "11.53.0-alpha.1",
127
- "@gooddata/stylelint-config": "11.53.0-alpha.1"
122
+ "@gooddata/eslint-config": "11.53.0-alpha.2",
123
+ "@gooddata/oxlint-config": "11.53.0-alpha.2",
124
+ "@gooddata/reference-workspace": "11.53.0-alpha.2",
125
+ "@gooddata/stylelint-config": "11.53.0-alpha.2",
126
+ "@gooddata/sdk-backend-mockingbird": "11.53.0-alpha.2",
127
+ "@gooddata/i18n-toolkit": "11.53.0-alpha.2"
128
128
  },
129
129
  "peerDependencies": {
130
130
  "react": "^18.0.0 || ^19.0.0",
@@ -1022,6 +1022,20 @@ button.gd-list-item {
1022
1022
  text-decoration: underline;
1023
1023
  }
1024
1024
 
1025
+ .gd-list-item:has(.gd-list-item-suffix) {
1026
+ justify-content: flex-start;
1027
+ }
1028
+
1029
+ .gd-list-item:has(.gd-list-item-suffix) > span {
1030
+ flex-grow: 0;
1031
+ }
1032
+
1033
+ .gd-list-item .gd-list-item-suffix {
1034
+ flex: 0 0 auto;
1035
+ margin-left: 5px;
1036
+ color: var(--gd-palette-complementary-6);
1037
+ }
1038
+
1025
1039
  .gd-list-item.gd-list-item-separator, .gd-list-item.gd-list-item-header {
1026
1040
  cursor: default;
1027
1041
  }
@@ -1822,6 +1836,12 @@ button.gd-list-item {
1822
1836
  border-radius: 4px;
1823
1837
  box-shadow: 0 8px 15px rgba(0, 0, 0, 0.08), 0 2px 10px rgba(0, 0, 0, 0.1);
1824
1838
  }
1839
+ .gd-ui-kit-parameter-control--allowed-values {
1840
+ padding: 5px 0;
1841
+ }
1842
+ .gd-ui-kit-parameter-control--allowed-values:has(.gd-list-searchfield) .gd-infinite-list {
1843
+ margin-top: 0;
1844
+ }
1825
1845
  .gd-ui-kit-parameter-control__dropdown-field {
1826
1846
  padding: 10px;
1827
1847
  }
@@ -2766,6 +2786,20 @@ button.gd-list-item {
2766
2786
  text-decoration: underline;
2767
2787
  }
2768
2788
 
2789
+ .gd-list-item:has(.gd-list-item-suffix) {
2790
+ justify-content: flex-start;
2791
+ }
2792
+
2793
+ .gd-list-item:has(.gd-list-item-suffix) > span {
2794
+ flex-grow: 0;
2795
+ }
2796
+
2797
+ .gd-list-item .gd-list-item-suffix {
2798
+ flex: 0 0 auto;
2799
+ margin-left: 5px;
2800
+ color: var(--gd-palette-complementary-6);
2801
+ }
2802
+
2769
2803
  .gd-list-item.gd-list-item-separator, .gd-list-item.gd-list-item-header {
2770
2804
  cursor: default;
2771
2805
  }
@@ -8148,6 +8182,20 @@ button.gd-list-item {
8148
8182
  text-decoration: underline;
8149
8183
  }
8150
8184
 
8185
+ .gd-list-item:has(.gd-list-item-suffix) {
8186
+ justify-content: flex-start;
8187
+ }
8188
+
8189
+ .gd-list-item:has(.gd-list-item-suffix) > span {
8190
+ flex-grow: 0;
8191
+ }
8192
+
8193
+ .gd-list-item .gd-list-item-suffix {
8194
+ flex: 0 0 auto;
8195
+ margin-left: 5px;
8196
+ color: var(--gd-palette-complementary-6);
8197
+ }
8198
+
8151
8199
  .gd-list-item.gd-list-item-separator, .gd-list-item.gd-list-item-header {
8152
8200
  cursor: default;
8153
8201
  }
@@ -14043,6 +14091,20 @@ button.gd-list-item {
14043
14091
  text-decoration: underline;
14044
14092
  }
14045
14093
 
14094
+ .gd-list-item:has(.gd-list-item-suffix) {
14095
+ justify-content: flex-start;
14096
+ }
14097
+
14098
+ .gd-list-item:has(.gd-list-item-suffix) > span {
14099
+ flex-grow: 0;
14100
+ }
14101
+
14102
+ .gd-list-item .gd-list-item-suffix {
14103
+ flex: 0 0 auto;
14104
+ margin-left: 5px;
14105
+ color: var(--gd-palette-complementary-6);
14106
+ }
14107
+
14046
14108
  .gd-list-item.gd-list-item-separator, .gd-list-item.gd-list-item-header {
14047
14109
  cursor: default;
14048
14110
  }