@gooddata/sdk-ui-kit 11.49.0-alpha.0 → 11.49.0

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 (68) hide show
  1. package/esm/@ui/UiButton/UiButton.d.ts +1 -0
  2. package/esm/@ui/UiButton/UiButton.d.ts.map +1 -1
  3. package/esm/@ui/UiButton/UiButton.js +2 -2
  4. package/esm/@ui/UiControlButton/UiControlButton.d.ts +2 -2
  5. package/esm/@ui/UiControlButton/UiControlButton.js +2 -2
  6. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts +2 -4
  7. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts.map +1 -1
  8. package/esm/@ui/UiGranteeRow/UiGranteeRow.js +3 -7
  9. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts +13 -4
  10. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts.map +1 -1
  11. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.js +13 -9
  12. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts +5 -7
  13. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts.map +1 -1
  14. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.js +7 -19
  15. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts +4 -3
  16. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts.map +1 -1
  17. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.js +1 -1
  18. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +22 -5
  19. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts.map +1 -1
  20. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +41 -23
  21. package/esm/List/DateDatasetsListItem.d.ts +6 -1
  22. package/esm/List/DateDatasetsListItem.d.ts.map +1 -1
  23. package/esm/List/DateDatasetsListItem.js +17 -3
  24. package/esm/ParameterControl/NumberParameterControlDropdown.d.ts +1 -1
  25. package/esm/ParameterControl/NumberParameterControlDropdown.d.ts.map +1 -1
  26. package/esm/ParameterControl/NumberParameterControlDropdown.js +2 -2
  27. package/esm/ParameterControl/ParameterControlButton.js +1 -1
  28. package/esm/ParameterControl/ParameterControlDropdown.d.ts +6 -4
  29. package/esm/ParameterControl/ParameterControlDropdown.d.ts.map +1 -1
  30. package/esm/ParameterControl/ParameterControlDropdown.js +17 -12
  31. package/esm/ParameterControl/ParameterInput.d.ts +21 -0
  32. package/esm/ParameterControl/ParameterInput.d.ts.map +1 -0
  33. package/esm/ParameterControl/ParameterInput.js +37 -0
  34. package/esm/ParameterControl/StringParameterControlDropdown.d.ts +1 -1
  35. package/esm/ParameterControl/StringParameterControlDropdown.d.ts.map +1 -1
  36. package/esm/ParameterControl/StringParameterControlDropdown.js +2 -2
  37. package/esm/ShortenedText/ShortenedText.d.ts +1 -0
  38. package/esm/ShortenedText/ShortenedText.d.ts.map +1 -1
  39. package/esm/ShortenedText/ShortenedText.js +26 -3
  40. package/esm/index.d.ts +1 -5
  41. package/esm/index.d.ts.map +1 -1
  42. package/esm/index.js +1 -5
  43. package/esm/locales.d.ts +0 -34
  44. package/esm/locales.d.ts.map +1 -1
  45. package/esm/locales.js +0 -14
  46. package/esm/sdk-ui-kit.d.ts +56 -152
  47. package/package.json +11 -11
  48. package/src/@ui/UiControlButton/UiControlButton.scss +20 -14
  49. package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +5 -0
  50. package/src/@ui/index.scss +0 -1
  51. package/src/ParameterControl/ParameterControl.scss +7 -17
  52. package/src/ParameterControl/ParameterInput.scss +91 -0
  53. package/styles/css/UiControlButton.css +13 -3
  54. package/styles/css/UiControlButton.css.map +1 -1
  55. package/styles/css/button.css +0 -3
  56. package/styles/css/button.css.map +1 -1
  57. package/styles/css/main.css +269 -221
  58. package/styles/css/main.css.map +1 -1
  59. package/styles/icons/visualization.svg +5 -0
  60. package/styles/scss/Button/_mixins.scss +10 -3
  61. package/styles/scss/button.scss +1 -4
  62. package/esm/@ui/UiTransferOwnershipDialog/UiTransferOwnershipDialog.d.ts +0 -17
  63. package/esm/@ui/UiTransferOwnershipDialog/UiTransferOwnershipDialog.d.ts.map +0 -1
  64. package/esm/@ui/UiTransferOwnershipDialog/UiTransferOwnershipDialog.js +0 -14
  65. package/esm/@ui/UiTransferOwnershipDialog/UiTransferOwnershipDialogCard.d.ts +0 -53
  66. package/esm/@ui/UiTransferOwnershipDialog/UiTransferOwnershipDialogCard.d.ts.map +0 -1
  67. package/esm/@ui/UiTransferOwnershipDialog/UiTransferOwnershipDialogCard.js +0 -71
  68. package/src/@ui/UiTransferOwnershipDialog/UiTransferOwnershipDialog.scss +0 -29
package/esm/locales.js CHANGED
@@ -51,9 +51,6 @@ export const olpGranteeAvatarMessages = defineMessages({
51
51
  user: { id: "shareDialog.olp.granteeAvatar.user" },
52
52
  group: { id: "shareDialog.olp.granteeAvatar.group" },
53
53
  });
54
- export const olpGranteeRowMessages = defineMessages({
55
- ownerTag: { id: "shareDialog.olp.granteeRow.ownerTag" },
56
- });
57
54
  export const olpObjectShareDialogMessages = defineMessages({
58
55
  title: { id: "shareDialog.olp.objectShareDialog.title" },
59
56
  sharedWith: { id: "shareDialog.olp.objectShareDialog.sharedWith" },
@@ -67,16 +64,6 @@ export const olpAddGranteeDialogMessages = defineMessages({
67
64
  emptyState: { id: "shareDialog.olp.addGranteeDialog.emptyState" },
68
65
  add: { id: "shareDialog.olp.addGranteeDialog.add" },
69
66
  });
70
- export const olpTransferOwnershipDialogMessages = defineMessages({
71
- title: { id: "shareDialog.olp.transferOwnershipDialog.title" },
72
- back: { id: "shareDialog.olp.transferOwnershipDialog.back" },
73
- userLabel: { id: "shareDialog.olp.transferOwnershipDialog.userLabel" },
74
- searchPlaceholder: { id: "shareDialog.olp.transferOwnershipDialog.searchPlaceholder" },
75
- alsoRemoveMyAccess: { id: "shareDialog.olp.transferOwnershipDialog.alsoRemoveMyAccess" },
76
- noteKeepAccess: { id: "shareDialog.olp.transferOwnershipDialog.note.keepAccess" },
77
- noteLoseAccess: { id: "shareDialog.olp.transferOwnershipDialog.note.loseAccess" },
78
- transfer: { id: "shareDialog.olp.transferOwnershipDialog.transfer" },
79
- });
80
67
  export const olpGeneralAccessMessages = defineMessages({
81
68
  groupLabel: { id: "shareDialog.olp.generalAccess.groupLabel" },
82
69
  restrictedTitle: { id: "shareDialog.olp.generalAccess.restricted.title" },
@@ -101,7 +88,6 @@ export const olpPermissionMessages = defineMessages({
101
88
  canEdit: { id: "shareDialog.olp.permission.edit" },
102
89
  canViewAndShareTooltip: { id: "shareDialog.olp.permission.tooltip.share" },
103
90
  canViewTooltip: { id: "shareDialog.olp.permission.tooltip.view" },
104
- transferOwnership: { id: "shareDialog.olp.permission.transferOwnership" },
105
91
  labels: { id: "shareDialog.olp.permission.labels" },
106
92
  removeAccess: { id: "shareDialog.olp.permission.removeAccess" },
107
93
  menuLabel: { id: "shareDialog.olp.permission.menuLabel" },
@@ -56,7 +56,6 @@ import { ILocale } from '@gooddata/sdk-ui';
56
56
  import { IMeasureSortTarget } from '@gooddata/sdk-model';
57
57
  import { IMetadataObjectBase } from '@gooddata/sdk-model';
58
58
  import { IntlShape } from 'react-intl';
59
- import { INumberParameterConstraints } from '@gooddata/sdk-model';
60
59
  import { IParameterDefinition } from '@gooddata/sdk-model';
61
60
  import { IParameterMetadataObject } from '@gooddata/sdk-model';
62
61
  import { ISeparators } from '@gooddata/sdk-ui';
@@ -64,7 +63,6 @@ import { ISeparators as ISeparators_2 } from '@gooddata/number-formatter';
64
63
  import { ISeparators as ISeparators_3 } from '@gooddata/sdk-model';
65
64
  import { ISettings } from '@gooddata/sdk-model';
66
65
  import { ISortItem } from '@gooddata/sdk-model';
67
- import { IStringParameterConstraints } from '@gooddata/sdk-model';
68
66
  import { ITheme } from '@gooddata/sdk-model';
69
67
  import { IThemeDefinition } from '@gooddata/sdk-model';
70
68
  import { IUser } from '@gooddata/sdk-model';
@@ -629,7 +627,12 @@ export declare function CustomizableCheckmark({ className, width, height }: ICus
629
627
  /**
630
628
  * @internal
631
629
  */
632
- export declare function DateDatasetsListItem({ id, title, isHeader, isSelected, isUnrelated, onClick }: IDateDatasetsListItemProps): JSX.Element;
630
+ export declare const DATE_DATASET_LIST_ITEM_CLASSNAME = "gd-list-item gd-list-item-shortened";
631
+
632
+ /**
633
+ * @internal
634
+ */
635
+ export declare function DateDatasetsListItem({ id, title, isHeader, isSelected, isUnrelated, width, onClick }: IDateDatasetsListItemProps): JSX.Element;
633
636
 
634
637
  /**
635
638
  * @internal
@@ -2785,6 +2788,7 @@ export declare interface IDateDatasetsListItemProps {
2785
2788
  isHeader?: boolean;
2786
2789
  isSelected?: boolean;
2787
2790
  isUnrelated?: boolean;
2791
+ width?: number;
2788
2792
  onClick: (e: MouseEvent_2<HTMLDivElement>) => void;
2789
2793
  }
2790
2794
 
@@ -5094,25 +5098,6 @@ export declare function InsightListItemTypeIcon({ type }: {
5094
5098
  type: string;
5095
5099
  }): JSX.Element;
5096
5100
 
5097
- /**
5098
- * @internal
5099
- */
5100
- export declare interface INumberParameterControlDropdownProps {
5101
- name: string;
5102
- value: number;
5103
- /**
5104
- * Workspace-default snapshot used by the Reset link. Reset is hidden when this is
5105
- * `undefined` or equals the current (valid) draft value. Reset writes this value into the
5106
- * draft input only; the user must click Apply to commit.
5107
- */
5108
- resetValue?: number;
5109
- constraints?: INumberParameterConstraints;
5110
- inputId?: string;
5111
- ariaAttributes?: IDropdownBodyRenderProps["ariaAttributes"];
5112
- onApply: (value: number) => void;
5113
- onCancel: () => void;
5114
- }
5115
-
5116
5101
  /**
5117
5102
  * @internal
5118
5103
  */
@@ -6064,25 +6049,6 @@ export declare interface IStandardPresetDefinition {
6064
6049
  messageId: string;
6065
6050
  }
6066
6051
 
6067
- /**
6068
- * @internal
6069
- */
6070
- export declare interface IStringParameterControlDropdownProps {
6071
- name: string;
6072
- value: string;
6073
- /**
6074
- * Workspace-default snapshot used by the Reset link. Reset is hidden when this is
6075
- * `undefined` or equals the current (valid) draft value. Reset writes this value into the
6076
- * draft input only; the user must click Apply to commit.
6077
- */
6078
- resetValue?: string;
6079
- constraints?: IStringParameterConstraints;
6080
- inputId?: string;
6081
- ariaAttributes?: IDropdownBodyRenderProps["ariaAttributes"];
6082
- onApply: (value: string) => void;
6083
- onCancel: () => void;
6084
- }
6085
-
6086
6052
  /**
6087
6053
  * @internal
6088
6054
  */
@@ -6719,6 +6685,7 @@ export declare interface IUiButtonProps {
6719
6685
  iconAfter?: IconType;
6720
6686
  iconAfterSize?: number;
6721
6687
  label: string;
6688
+ type?: "button" | "submit" | "reset";
6722
6689
  isDisabled?: boolean;
6723
6690
  isLoading?: boolean;
6724
6691
  isSelected?: boolean;
@@ -7466,10 +7433,20 @@ export declare interface IUiGranteeRowControlsProps {
7466
7433
  * (e.g. from a group); drives the warning badge. Undefined when not elevated.
7467
7434
  */
7468
7435
  effectivePermission?: AccessGranularPermission;
7436
+ /**
7437
+ * Merge every action into the permission dropdown: the labels drill-in and
7438
+ * Remove access render inside {@link UiPermissionMenu} (no "⋯" menu), and
7439
+ * the level dropdown is offered even for an EDIT row. Used for the signed-in
7440
+ * user's own row when they manage their own access.
7441
+ */
7442
+ mergedControls?: boolean;
7443
+ /** Levels rendered disabled in the permission menu — see {@link UiPermissionMenu}. */
7444
+ disabledLevels?: ReadonlyArray<PermissionMenuLevel>;
7445
+ /** Tooltip shown on disabled level rows in place of the level's info text. */
7446
+ disabledTooltip?: string;
7469
7447
  onLabelsChange: (selectedIds: string[]) => void;
7470
7448
  /** Fires only for selectable rows (VIEW/SHARE); EDIT rows have no level control. */
7471
7449
  onPermissionChange: (level: PermissionMenuLevel) => void;
7472
- onTransferOwnership?: () => void;
7473
7450
  onRemoveAccess?: () => void;
7474
7451
  /** Disables both triggers, e.g. while the row's change is saving. */
7475
7452
  isDisabled?: boolean;
@@ -7486,8 +7463,6 @@ export declare interface IUiGranteeRowProps {
7486
7463
  name: string;
7487
7464
  /** Optional email subline shown below the name. */
7488
7465
  email?: string;
7489
- /** When true, an "Owner" tag is rendered between the text block and the controls slot. */
7490
- isOwner?: boolean;
7491
7466
  /** When true, the row is visually muted to signal an in-flight save. */
7492
7467
  isPending?: boolean;
7493
7468
  /** Trailing controls slot — typically the `UiGranteeRowControls` trigger pair. */
@@ -8079,8 +8054,6 @@ export declare interface IUiMoreOptionsMenuProps {
8079
8054
  /** Locked items are always treated as selected. */
8080
8055
  selectedLabelIds?: ReadonlyArray<string>;
8081
8056
  onLabelsChange?: (selectedIds: string[]) => void;
8082
- /** Omit to hide the row (Transfer ownership is gated until wired). */
8083
- onTransferOwnership?: () => void;
8084
8057
  /**
8085
8058
  * Omit to hide the row. Used for read-only permission rows (e.g. EDIT), whose
8086
8059
  * level control has no dropdown to host Remove access — so the action lives here.
@@ -8173,11 +8146,12 @@ export declare interface IUiObjectShareDialogGrantee {
8173
8146
  name: string;
8174
8147
  /** Optional email subline. */
8175
8148
  email?: string;
8176
- /** When true, the row is rendered with the "Owner" tag instead of controls. */
8177
- isOwner?: boolean;
8178
8149
  /** When true, the row is visually muted to signal an in-flight save. */
8179
8150
  isPending?: boolean;
8180
- /** Per-row controls — usually `UiGranteeRowControls`. Owner rows leave this empty. */
8151
+ /**
8152
+ * Per-row controls — usually `UiGranteeRowControls`; the caller may plug in
8153
+ * any other trailing content (e.g. a static tag) instead.
8154
+ */
8181
8155
  controls?: ReactNode;
8182
8156
  }
8183
8157
 
@@ -8316,11 +8290,27 @@ export declare interface IUiPaginationButtonProps {
8316
8290
  */
8317
8291
  export declare interface IUiPermissionMenuProps {
8318
8292
  /** Element that opens the menu on click. */
8319
- anchor: ReactElement<any>;
8293
+ anchor: ReactElement;
8320
8294
  /** Currently selected permission level — drives `aria-checked`. */
8321
8295
  selectedLevel?: PermissionMenuLevel;
8322
8296
  /** Fires when the user picks a permission level. */
8323
8297
  onPermissionChange: (level: PermissionMenuLevel) => void;
8298
+ /**
8299
+ * Levels rendered disabled (`aria-disabled`, click blocked) — e.g. levels
8300
+ * above the caller's own when they manage their own access.
8301
+ */
8302
+ disabledLevels?: ReadonlyArray<PermissionMenuLevel>;
8303
+ /** Tooltip shown on disabled level rows in place of the level's info text. */
8304
+ disabledTooltip?: string;
8305
+ /**
8306
+ * Non-empty enables a labels row that drills into {@link UiLabelsChecklist}
8307
+ * within the menu — for rows whose menu hosts every action (no "⋯" menu).
8308
+ */
8309
+ labels?: ReadonlyArray<IUiLabelsChecklistItem>;
8310
+ /** Locked items are always treated as selected. */
8311
+ selectedLabelIds?: ReadonlyArray<string>;
8312
+ /** Fires with the applied label selection from the labels drill-in. */
8313
+ onLabelsChange?: (selectedIds: string[]) => void;
8324
8314
  /** Fires when the user picks Remove access. */
8325
8315
  onRemoveAccess?: () => void;
8326
8316
  /** Test id forwarded to the menu body. */
@@ -9011,52 +9001,6 @@ export declare interface IUiTooltipProps {
9011
9001
  anchorWrapperStyles?: CSSProperties;
9012
9002
  }
9013
9003
 
9014
- /**
9015
- * @internal
9016
- */
9017
- export declare interface IUiTransferOwnershipDialogCardProps {
9018
- /** Object title shown in the header — wrapped into `Transfer ownership of "\{title\}"`. */
9019
- objectTitle: string;
9020
- /**
9021
- * Loader for the user search. Owner is always an individual user, so the
9022
- * caller returns users only — any `groups` it carries are ignored here.
9023
- */
9024
- loadOptions: (search: string) => Promise<IUiGranteeAsyncOptions>;
9025
- /**
9026
- * The picked new owner, or undefined before one is chosen. Single select:
9027
- * picking another user from the search replaces this one.
9028
- */
9029
- selectedOwner: IUiGranteeAsyncOption | undefined;
9030
- /** Fires when the user picks someone from the search dropdown. */
9031
- onSelectedOwnerChange: (owner: IUiGranteeAsyncOption) => void;
9032
- /** Whether "Also remove my access" is checked. */
9033
- alsoRemoveMyAccess: boolean;
9034
- onAlsoRemoveMyAccessChange: (next: boolean) => void;
9035
- /** Fires when the user clicks the header back-arrow button. */
9036
- onBack: () => void;
9037
- /** Fires when the user clicks the header X close button. */
9038
- onClose: () => void;
9039
- /** Fires when the user clicks Cancel in the footer. */
9040
- onCancel: () => void;
9041
- /**
9042
- * Fires when the user confirms the transfer. The Transfer button is disabled
9043
- * until an owner is picked, and while a transfer is in flight.
9044
- */
9045
- onTransfer: () => void;
9046
- /** Whether a transfer write is in flight; disables the Transfer button. */
9047
- isSaving?: boolean;
9048
- /** Test id forwarded to the root element. */
9049
- dataTestId?: string;
9050
- }
9051
-
9052
- /**
9053
- * @internal
9054
- */
9055
- export declare interface IUiTransferOwnershipDialogProps extends IUiTransferOwnershipDialogCardProps {
9056
- /** Whether the dialog is shown. */
9057
- isOpen: boolean;
9058
- }
9059
-
9060
9004
  /**
9061
9005
  * @internal
9062
9006
  */
@@ -9673,14 +9617,6 @@ export declare function NonContextToastsInterop(props: {
9673
9617
  */
9674
9618
  export declare function normalizeTime(time?: Date, date?: Date, timeAnchor?: number): Date;
9675
9619
 
9676
- /**
9677
- * Dropdown panel for editing a numeric parameter value. Owns the draft, inline validation,
9678
- * preview, and (mode-aware) Reset via `resetValue`.
9679
- *
9680
- * @internal
9681
- */
9682
- export declare function NumberParameterControlDropdown({ name, value, resetValue, constraints, inputId, ariaAttributes, onApply, onCancel }: INumberParameterControlDropdownProps): JSX.Element;
9683
-
9684
9620
  /**
9685
9621
  * @internal
9686
9622
  */
@@ -10118,6 +10054,7 @@ export declare function ShareGranteeBase({ isLoading, isLockedNow, isUnderLenien
10118
10054
  export declare class ShortenedText extends PureComponent<IShortenedTextProps, IShortenedTextState> {
10119
10055
  static defaultProps: Pick<IShortenedTextProps, "className" | "tagName" | "tooltipAlignPoints" | "tooltipVisibleOnMouseOver" | "getElement" | "displayTooltip" | "ellipsisPosition">;
10120
10056
  textRef: RefObject<HTMLElement | null>;
10057
+ private naturalScrollWidth;
10121
10058
  constructor(props: IShortenedTextProps);
10122
10059
  componentDidMount(): void;
10123
10060
  UNSAFE_componentWillReceiveProps(nextProps: IShortenedTextProps): void;
@@ -10269,14 +10206,6 @@ export declare const STANDARD_PRESET_DEFINITIONS: readonly IStandardPresetDefini
10269
10206
  */
10270
10207
  export declare const STANDARD_TEMPLATE_DEFINITIONS: readonly ITemplateDefinition[];
10271
10208
 
10272
- /**
10273
- * Dropdown panel for editing a string parameter value as free text. Owns the draft, inline
10274
- * length validation, preview, and (mode-aware) Reset via `resetValue`.
10275
- *
10276
- * @internal
10277
- */
10278
- export declare function StringParameterControlDropdown({ name, value, resetValue, constraints, inputId, ariaAttributes, onApply, onCancel }: IStringParameterControlDropdownProps): JSX.Element;
10279
-
10280
10209
  /**
10281
10210
  * Properties for BEM modifiers.
10282
10211
  *
@@ -10702,8 +10631,8 @@ export declare function UiConfirmDialog({ isOpen, ...cardProps }: IUiConfirmDial
10702
10631
  export declare function UiConfirmDialogCard({ title, description, confirmLabel, confirmVariant, onClose, onCancel, onConfirm, dataTestId }: IUiConfirmDialogCardProps): JSX.Element;
10703
10632
 
10704
10633
  /**
10705
- * Generic chip-shaped dropdown trigger primitive. One source of truth for filter-bar chip
10706
- * visuals; consumed by both attribute filter chips and parameter chips.
10634
+ * Generic dropdown trigger primitive. One source of truth for filter-bar button visuals;
10635
+ * consumed by both attribute filter buttons and parameter controls.
10707
10636
  *
10708
10637
  * Owns: layout, visual states, keyboard activation, ARIA contract.
10709
10638
  *
@@ -10872,21 +10801,20 @@ export declare function UiGranteeAvatar({ kind, decorative, dataTestId }: IUiGra
10872
10801
 
10873
10802
  /**
10874
10803
  * Grantee row used by the OLP share dialog. Renders avatar + name + optional
10875
- * email subline + optional "Owner" tag + trailing controls slot.
10804
+ * email subline + trailing controls slot.
10876
10805
  *
10877
10806
  * @internal
10878
10807
  */
10879
- export declare function UiGranteeRow({ kind, name, email, isOwner, isPending, controls, dataTestId }: IUiGranteeRowProps): JSX.Element;
10808
+ export declare function UiGranteeRow({ kind, name, email, isPending, controls, dataTestId }: IUiGranteeRowProps): JSX.Element;
10880
10809
 
10881
10810
  /**
10882
10811
  * Per-row controls in the OLP share dialog: a permission trigger
10883
10812
  * ({@link UiPermissionMenu}) plus a "⋯" menu ({@link UiMoreOptionsMenu}) for
10884
- * labels access and Transfer ownership, with an optional inherited-permission
10885
- * warning badge.
10813
+ * labels access, with an optional inherited-permission warning badge.
10886
10814
  *
10887
10815
  * @internal
10888
10816
  */
10889
- export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, isDisabled, dataTestId }: IUiGranteeRowControlsProps): JSX.Element;
10817
+ export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, mergedControls, disabledLevels, disabledTooltip, onLabelsChange, onPermissionChange, onRemoveAccess, isDisabled, dataTestId }: IUiGranteeRowControlsProps): JSX.Element;
10890
10818
 
10891
10819
  /**
10892
10820
  * @internal
@@ -11001,14 +10929,14 @@ export declare function UiMenu<T extends IUiMenuItemData = object, M extends obj
11001
10929
  export declare function UiModalDialog({ children, isOpen, onClose, width, accessibilityConfig, dataTestId }: IUiModalDialogProps): JSX.Element | null;
11002
10930
 
11003
10931
  /**
11004
- * Per-grantee "⋯" menu: "Manage labels access" (drills into {@link UiLabelsChecklist}),
11005
- * "Transfer ownership" and "Remove access". Each row shows only when its data/handler
11006
- * is given. Remove access appears here for read-only permission rows whose level control
11007
- * has no dropdown to host it.
10932
+ * Per-grantee "⋯" menu: "Manage labels access" (drills into {@link UiLabelsChecklist})
10933
+ * and "Remove access". Each row shows only when its data/handler is given. Remove
10934
+ * access appears here for read-only permission rows whose level control has no
10935
+ * dropdown to host it.
11008
10936
  *
11009
10937
  * @internal
11010
10938
  */
11011
- export declare function UiMoreOptionsMenu({ labels, selectedLabelIds, onLabelsChange, onTransferOwnership, onRemoveAccess, isDisabled, dataTestId }: IUiMoreOptionsMenuProps): JSX.Element;
10939
+ export declare function UiMoreOptionsMenu({ labels, selectedLabelIds, onLabelsChange, onRemoveAccess, isDisabled, dataTestId }: IUiMoreOptionsMenuProps): JSX.Element;
11012
10940
 
11013
10941
  /**
11014
10942
  * @internal
@@ -11067,13 +10995,13 @@ export declare type UiPaginationButtonSize = "small" | "large";
11067
10995
  /**
11068
10996
  * Per-grantee permission popover. Renders a fixed set of rows — two
11069
10997
  * permission levels (Can view & share / Can view), an optional divider,
11070
- * and an optional Remove access action row. Each level row carries an
11071
- * `infoCircle` tooltip. Labels and Transfer ownership live in the separate
11072
- * {@link UiMoreOptionsMenu}.
10998
+ * an optional labels drill-in and an optional Remove access action row.
10999
+ * Each level row carries an `infoCircle` tooltip; disabled level rows
11000
+ * (`disabledLevels`) swap it for `disabledTooltip`.
11073
11001
  *
11074
11002
  * @internal
11075
11003
  */
11076
- export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): JSX.Element;
11004
+ export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, disabledLevels, disabledTooltip, labels, selectedLabelIds, onLabelsChange, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): JSX.Element;
11077
11005
 
11078
11006
  /**
11079
11007
  * @internal
@@ -11284,30 +11212,6 @@ export declare function UiToastsContainer({ dataTestId }: IUiToastsContainerProp
11284
11212
  */
11285
11213
  export declare function UiTooltip({ id, anchor, content, behaviour, arrowPlacement, triggerBy, hoverOpenDelay, hoverCloseDelay, showArrow, width, offset: offsetProp, optimalPlacement, accessibilityConfig, accessibilityHidden, variant, disabled, isOpen: isOpenProp, onOpen, onClose, onOpenChange, inlineAnchor, anchorWrapperStyles }: IUiTooltipProps): JSX.Element;
11286
11214
 
11287
- /**
11288
- * Transfer-ownership dialog — wraps `UiTransferOwnershipDialogCard` in
11289
- * `UiModalDialog` for the full modal contract (portal, dimmed backdrop, focus
11290
- * trap, Esc and backdrop dismiss).
11291
- *
11292
- * @internal
11293
- */
11294
- export declare function UiTransferOwnershipDialog({ isOpen, ...cardProps }: IUiTransferOwnershipDialogProps): JSX.Element;
11295
-
11296
- /**
11297
- * Transfer-ownership dialog card — header + single-user search picker + the
11298
- * picked owner row (with an "Owner" tag) + an "Also remove my access" checkbox
11299
- * and an informational note, then a footer with Cancel and Transfer. Renders
11300
- * inline as a plain card; for modal behavior use `UiTransferOwnershipDialog`.
11301
- *
11302
- * The card owns the visual composition but no policy. The caller controls the
11303
- * picked owner via `selectedOwner` / `onSelectedOwnerChange`, decides whether
11304
- * that owner is already an owner, and performs the actual transfer on
11305
- * `onTransfer`.
11306
- *
11307
- * @internal
11308
- */
11309
- export declare function UiTransferOwnershipDialogCard({ objectTitle, loadOptions, selectedOwner, onSelectedOwnerChange, alsoRemoveMyAccess, onAlsoRemoveMyAccessChange, onBack, onClose, onCancel, onTransfer, isSaving, dataTestId }: IUiTransferOwnershipDialogCardProps): JSX.Element;
11310
-
11311
11215
  /**
11312
11216
  * @internal
11313
11217
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "11.49.0-alpha.0",
3
+ "version": "11.49.0",
4
4
  "description": "GoodData SDK - UI Building Components",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -76,11 +76,11 @@
76
76
  "tslib": "2.8.1",
77
77
  "unified": "^11.0.5",
78
78
  "uuid": "11.1.1",
79
- "@gooddata/sdk-backend-spi": "11.49.0-alpha.0",
80
- "@gooddata/sdk-model": "11.49.0-alpha.0",
81
- "@gooddata/sdk-ui-theme-provider": "11.49.0-alpha.0",
82
- "@gooddata/util": "11.49.0-alpha.0",
83
- "@gooddata/sdk-ui": "11.49.0-alpha.0"
79
+ "@gooddata/sdk-backend-spi": "11.49.0",
80
+ "@gooddata/sdk-model": "11.49.0",
81
+ "@gooddata/sdk-ui": "11.49.0",
82
+ "@gooddata/sdk-ui-theme-provider": "11.49.0",
83
+ "@gooddata/util": "11.49.0"
84
84
  },
85
85
  "devDependencies": {
86
86
  "@microsoft/api-documenter": "^7.17.0",
@@ -129,11 +129,11 @@
129
129
  "typescript": "5.9.3",
130
130
  "vitest": "4.1.8",
131
131
  "vitest-dom": "0.1.1",
132
- "@gooddata/eslint-config": "11.49.0-alpha.0",
133
- "@gooddata/reference-workspace": "11.49.0-alpha.0",
134
- "@gooddata/oxlint-config": "11.49.0-alpha.0",
135
- "@gooddata/stylelint-config": "11.49.0-alpha.0",
136
- "@gooddata/sdk-backend-mockingbird": "11.49.0-alpha.0"
132
+ "@gooddata/eslint-config": "11.49.0",
133
+ "@gooddata/oxlint-config": "11.49.0",
134
+ "@gooddata/reference-workspace": "11.49.0",
135
+ "@gooddata/sdk-backend-mockingbird": "11.49.0",
136
+ "@gooddata/stylelint-config": "11.49.0"
137
137
  },
138
138
  "peerDependencies": {
139
139
  "react": "^18.0.0 || ^19.0.0",
@@ -1,5 +1,9 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
 
3
+ @use "../../../styles/scss/Button/variables" as button-variables;
4
+ @use "../../../styles/scss/Button/mixins" as button-mixins;
5
+ @use "../../../styles/scss/variables";
6
+
3
7
  $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0 7 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 4h2v2H0V4zm0-4h2v2H0V0zm5 4h2v2H5V4zm0-4h2v2H5V0zm0 8h2v2H5V8zM0 8h2v2H0V8zm0 4h2v2H0v-2zm5 4h2v2H5v-2zm-5 0h2v2H0v-2zm5 4h2v2H5v-2zm-5 0h2v2H0v-2zm5 4h2v2H5v-2zm-5 0h2v2H0v-2zm5-12h2v2H5v-2z' fill='%23B0BECA' fill-rule='evenodd'/%3E%3C/svg%3E";
4
8
 
5
9
  .gd-ui-kit-control-button {
@@ -8,7 +12,7 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
8
12
  position: relative;
9
13
  max-width: 230px;
10
14
  padding: 5px 10px;
11
- font-family: var(--gd-font-family), gdcustomfont, Avenir, "Helvetica Neue", arial, sans-serif;
15
+ font-family: variables.$gd-font-primary;
12
16
  font-size: 12px;
13
17
  font-weight: 400;
14
18
  line-height: 16px;
@@ -50,13 +54,13 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
50
54
 
51
55
  &:hover {
52
56
  &::after {
53
- border-color: var(--gd-palette-complementary-4-from-theme, rgba(31, 52, 73, 0.2));
57
+ border-color: button-variables.$button-normal-hover-border-color;
54
58
  }
55
59
 
56
60
  &#{$root}--isDraggable {
57
61
  box-shadow:
58
- 0 1px 3px 0 rgba(20, 56, 93, 0.1),
59
- 0 2px 9px 0 rgba(20, 56, 93, 0.15);
62
+ 0 1px 3px 0 button-variables.$button-shadow-lighter,
63
+ 0 2px 9px 0 button-variables.$button-shadow-darker;
60
64
 
61
65
  &::before {
62
66
  opacity: 1;
@@ -66,11 +70,13 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
66
70
 
67
71
  &--isOpen {
68
72
  &::after {
69
- box-shadow: inset 0 1px 0 0 rgba(20, 56, 93, 0.1);
73
+ box-shadow: inset 0 1px 0 0 button-variables.$button-normal-active-shadow;
70
74
  border-color: var(
71
75
  --gd-palette-complementary-5-from-theme,
72
- var(--gd-palette-complementary-4-from-theme, rgba(31, 52, 73, 0.2))
76
+ button-variables.$button-normal-hover-border-color
73
77
  );
78
+
79
+ @include button-mixins.button-normal-active-gradient;
74
80
  }
75
81
 
76
82
  &#{$root}--isDraggable::before {
@@ -86,7 +92,7 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
86
92
  display: inline-block;
87
93
 
88
94
  &::after {
89
- border-color: var(--gd-palette-complementary-4-from-theme, rgba(31, 52, 73, 0.2));
95
+ border-color: button-variables.$button-normal-hover-border-color;
90
96
  background: var(--gd-palette-complementary-0-from-theme, rgba(255, 255, 255, 0.95));
91
97
  }
92
98
 
@@ -97,13 +103,13 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
97
103
 
98
104
  &--isError {
99
105
  font-size: 12px;
100
- color: var(--gd-palette-error-base, #e54d42);
106
+ color: variables.$gd-palette-error-base;
101
107
  background: var(--gd-palette-error-base-t85, rgba(229, 77, 66, 0.15));
102
108
  }
103
109
 
104
110
  &--isWarning {
105
111
  font-size: 12px;
106
- color: var(--gd-palette-warning-base, #f18600);
112
+ color: variables.$gd-palette-warning-base;
107
113
  background: var(--gd-palette-warning-base-t85, rgba(241, 134, 0, 0.15));
108
114
  }
109
115
 
@@ -134,7 +140,7 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
134
140
  // Room for the pinned chevron
135
141
  padding-right: 28px;
136
142
 
137
- // Flat: no chip border or open-state gradient.
143
+ // Flat: no border or open-state gradient.
138
144
  &::after {
139
145
  display: none;
140
146
  }
@@ -215,7 +221,7 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
215
221
 
216
222
  &__title {
217
223
  overflow: hidden;
218
- color: var(--gd-palette-complementary-7, #6d7680);
224
+ color: variables.$gd-color-label;
219
225
  margin-right: auto;
220
226
  max-width: 100%;
221
227
  white-space: nowrap;
@@ -239,17 +245,17 @@ $drag-handle-icon: "data:image/svg+xml,%3Csvg width='7' height='26' viewBox='0 0
239
245
  white-space: nowrap;
240
246
  text-overflow: ellipsis;
241
247
  font-weight: bold;
242
- color: var(--gd-palette-complementary-9, #000);
248
+ color: variables.$gd-color-dark;
243
249
 
244
250
  &::after {
245
251
  content: "\e612";
246
252
  display: inline-block;
247
253
  margin-left: 0.5em;
248
- font-family: "Indigo", sans-serif;
254
+ font-family: variables.$gd-font-indigo;
249
255
  font-weight: normal;
250
256
  font-size: inherit;
251
257
  vertical-align: top;
252
- color: var(--gd-palette-complementary-6, #94a1ad);
258
+ color: variables.$gd-color-state-blank;
253
259
  transition: all 0.2s ease;
254
260
  }
255
261
  }
@@ -58,6 +58,11 @@
58
58
  color: var(--gd-palette-primary-base);
59
59
  font-weight: 700;
60
60
  }
61
+
62
+ &--disabled {
63
+ color: var(--gd-palette-complementary-5);
64
+ cursor: default;
65
+ }
61
66
  }
62
67
 
63
68
  &__item-label {
@@ -43,7 +43,6 @@
43
43
  @use "./UiModalDialog/UiModalDialog.scss";
44
44
  @use "./UiObjectShareDialog/UiObjectShareDialog.scss";
45
45
  @use "./UiAddGranteeDialog/UiAddGranteeDialog.scss";
46
- @use "./UiTransferOwnershipDialog/UiTransferOwnershipDialog.scss";
47
46
  @use "./UiGranteeAsyncPicker/UiGranteeAsyncPicker.scss";
48
47
  @use "./UiGeneralAccessRadio/UiGeneralAccessRadio.scss";
49
48
  @use "./UiLabelsChecklist/UiLabelsChecklist.scss";
@@ -1,5 +1,7 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
 
3
+ @use "./ParameterInput.scss";
4
+
3
5
  .gd-ui-kit-parameter-control {
4
6
  &--dropdown {
5
7
  display: flex;
@@ -13,7 +15,7 @@
13
15
  }
14
16
 
15
17
  &__dropdown-field {
16
- padding: 10px 10px 0;
18
+ padding: 10px;
17
19
  }
18
20
 
19
21
  &__dropdown-field-header {
@@ -21,27 +23,14 @@
21
23
  align-items: center;
22
24
  justify-content: space-between;
23
25
  padding-bottom: 5px;
26
+ font-size: 12px;
24
27
  }
25
28
 
26
29
  &__dropdown-label {
27
30
  color: var(--gd-palette-complementary-8);
28
- font-size: 12px;
29
31
  font-weight: 400;
30
32
  }
31
33
 
32
- &__dropdown-reset {
33
- padding: 0;
34
- background: none;
35
- border: none;
36
- color: var(--gd-palette-primary-base);
37
- font-size: 12px;
38
- cursor: pointer;
39
-
40
- &:hover {
41
- text-decoration: underline;
42
- }
43
- }
44
-
45
34
  &__dropdown-error {
46
35
  padding-top: 5px;
47
36
  color: var(--gd-palette-error-base);
@@ -50,7 +39,7 @@
50
39
 
51
40
  &__dropdown-divider {
52
41
  height: 1px;
53
- margin: 10px 0;
42
+ margin: 10px;
54
43
  background-color: var(--gd-palette-complementary-3);
55
44
  }
56
45
 
@@ -78,7 +67,8 @@
78
67
  display: flex;
79
68
  justify-content: flex-end;
80
69
  gap: 10px;
81
- padding: 10px;
70
+ margin: 0 10px;
71
+ padding: 10px 0;
82
72
  border-top: 1px solid var(--gd-palette-complementary-3);
83
73
  }
84
74
  }