@gooddata/sdk-ui-kit 11.43.0-alpha.0 → 11.43.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 (89) hide show
  1. package/esm/@ui/@types/icon.d.ts +1 -1
  2. package/esm/@ui/@types/icon.d.ts.map +1 -1
  3. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.d.ts +3 -1
  4. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.d.ts.map +1 -1
  5. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.js +2 -2
  6. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts.map +1 -1
  7. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.js +7 -4
  8. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts +3 -1
  9. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts.map +1 -1
  10. package/esm/@ui/UiGranteeRow/UiGranteeRow.js +2 -2
  11. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts +15 -15
  12. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts.map +1 -1
  13. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.js +20 -18
  14. package/esm/@ui/UiIcon/icons.d.ts.map +1 -1
  15. package/esm/@ui/UiIcon/icons.js +1 -0
  16. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts +44 -0
  17. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts.map +1 -0
  18. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.js +58 -0
  19. package/esm/@ui/UiLabelsList/UiLabelsList.d.ts +6 -1
  20. package/esm/@ui/UiLabelsList/UiLabelsList.d.ts.map +1 -1
  21. package/esm/@ui/UiLabelsList/UiLabelsList.js +2 -3
  22. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts +23 -0
  23. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts.map +1 -0
  24. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.js +83 -0
  25. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts +14 -1
  26. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts.map +1 -1
  27. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.js +5 -3
  28. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +4 -15
  29. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts.map +1 -1
  30. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +11 -23
  31. package/esm/@ui/UiPopover/UiPopover.d.ts +29 -1
  32. package/esm/@ui/UiPopover/UiPopover.d.ts.map +1 -1
  33. package/esm/@ui/UiPopover/UiPopover.js +4 -4
  34. package/esm/@ui/UiTag/UiTag.d.ts +1 -0
  35. package/esm/@ui/UiTag/UiTag.d.ts.map +1 -1
  36. package/esm/@ui/UiTag/UiTag.js +10 -4
  37. package/esm/@ui/UiTags/UiTag.d.ts +0 -2
  38. package/esm/@ui/UiTags/UiTag.d.ts.map +1 -1
  39. package/esm/@ui/UiTags/UiTag.js +14 -9
  40. package/esm/@ui/UiTags/UiTags.d.ts.map +1 -1
  41. package/esm/@ui/UiTags/UiTags.js +38 -24
  42. package/esm/@ui/UiTags/interactions.d.ts +4 -9
  43. package/esm/@ui/UiTags/interactions.d.ts.map +1 -1
  44. package/esm/@ui/UiTags/interactions.js +58 -228
  45. package/esm/@ui/UiTooltip/UiTooltip.d.ts +1 -1
  46. package/esm/@ui/UiTooltip/UiTooltip.d.ts.map +1 -1
  47. package/esm/@ui/UiTooltip/UiTooltip.js +17 -9
  48. package/esm/@ui/UiTooltip/types.d.ts +10 -1
  49. package/esm/@ui/UiTooltip/types.d.ts.map +1 -1
  50. package/esm/Button/Button.d.ts.map +1 -1
  51. package/esm/Button/Button.js +2 -2
  52. package/esm/Datepicker/Datepicker.d.ts.map +1 -1
  53. package/esm/Datepicker/Datepicker.js +1 -1
  54. package/esm/Icon/icons/InsightIcons/Radar.d.ts.map +1 -1
  55. package/esm/Icon/icons/InsightIcons/Radar.js +3 -1
  56. package/esm/List/MenuList.d.ts +2 -1
  57. package/esm/List/MenuList.d.ts.map +1 -1
  58. package/esm/List/MenuList.js +2 -2
  59. package/esm/index.d.ts +2 -1
  60. package/esm/index.d.ts.map +1 -1
  61. package/esm/index.js +2 -1
  62. package/esm/locales.d.ts +11 -4
  63. package/esm/locales.d.ts.map +1 -1
  64. package/esm/locales.js +5 -4
  65. package/esm/sdk-ui-kit.d.ts +139 -85
  66. package/esm/tsdoc-metadata.json +1 -1
  67. package/package.json +11 -11
  68. package/src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.scss +12 -0
  69. package/src/@ui/UiGranteeRow/UiGranteeRow.scss +5 -0
  70. package/src/@ui/UiGranteeRowControls/UiGranteeRowControls.scss +7 -0
  71. package/src/@ui/UiLabelsChecklist/UiLabelsChecklist.scss +31 -0
  72. package/src/@ui/UiLabelsList/UiLabelsList.scss +3 -0
  73. package/src/@ui/UiModalDialog/UiModalDialog.scss +11 -1
  74. package/src/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.scss +10 -0
  75. package/src/@ui/UiObjectShareDialog/UiObjectShareDialog.scss +7 -0
  76. package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +0 -7
  77. package/src/@ui/UiPopover/UiPopover.scss +7 -0
  78. package/src/@ui/UiTabs/UiTabs.scss +0 -1
  79. package/src/@ui/UiTag/UiTag.scss +4 -0
  80. package/src/@ui/UiTags/UiTags.scss +5 -1
  81. package/src/@ui/index.scss +2 -1
  82. package/styles/css/main.css +66 -21
  83. package/styles/css/main.css.map +1 -1
  84. package/styles/images/visualization-types/radar-active.svg +10 -6
  85. package/styles/images/visualization-types/radar.svg +16 -5
  86. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts +0 -64
  87. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts.map +0 -1
  88. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.js +0 -89
  89. package/src/@ui/UiLabelsPicker/UiLabelsPicker.scss +0 -29
@@ -2599,7 +2599,7 @@ export declare function IconTreeMap({ className, width, height, color, ariaHidde
2599
2599
  /**
2600
2600
  * @internal
2601
2601
  */
2602
- export declare type IconType = "aiAgent" | "aiAgentDisabled" | "brain" | "brainDisabled" | "check" | "checkCircle" | "certification" | "plus" | "plusCircle" | "sync" | "alert" | "alertPaused" | "close" | "cross" | "edit" | "crossCircle" | "question" | "chevronUp" | "chevronRight" | "chevronDown" | "chevronLeft" | "date" | "navigateUp" | "navigateDown" | "navigateRight" | "navigateLeft" | "download" | "slack" | "expand" | "exclamationCircle" | "infoCircle" | "book" | "visible" | "invisible" | "lock" | "unlock" | "ai" | "aiFill" | "drawer" | "drawerEmpty" | "prohibited" | "dropDown" | "dropRight" | "clock" | "clockPaused" | "questionMark" | "upload" | "expandRectangle" | "file" | "number" | "code" | "user" | "userPlus" | "users" | "magic" | "tab" | "pauseCircle" | "filter" | "timer" | "mail" | "envelope" | "copy" | "rain" | "earth" | "geoCollection" | "geoCollectionUpload" | "minimize" | "shrink" | "copyright" | "ellipsis" | "pencil" | "folder" | "folderSmall" | "folderPlus" | "trash" | "arrowUp" | "arrowRight" | "arrowDown" | "arrowLeft" | "undo" | "redo" | "trendDown" | "trendUp" | "save" | "minus" | "minusCircle" | "percent" | "enter" | "enterRight" | "money" | "ghost" | "warning" | "home" | "settings" | "search" | "university" | "printer" | "picture" | "visualization" | "dashboard" | "metric" | "fact" | "ldmAttribute" | "ldmKey" | "ldmLabel" | "sharp" | "attribute" | "horn" | "cw" | "ccw" | "table" | "directionColumn" | "directionRow" | "header" | "genai" | "genai2" | "explainai" | "hiddenForAi" | "box" | "ellipsisVertical" | "list" | "drillTo" | "hierarchy" | "history" | "history2" | "thumbsUp" | "thumbsDown" | "send" | "visualizationArea" | "visualizationTable" | "visualizationTreemap" | "visualizationScatter" | "visualizationDonut" | "visualizationHeadline" | "visualizationColumn" | "visualizationLine" | "visualizationPyramid" | "visualizationFunnel" | "visualizationHeatmap" | "visualizationBubble" | "visualizationPie" | "visualizationBar" | "visualizationCombo" | "visualizationBullet" | "visualizationWaterfall" | "visualizationDependencywheel" | "visualizationSankey" | "visualizationPushpin" | "visualizationRepeater" | "visualizationXirr" | "link" | "externalLink" | "click" | "fileXlsx" | "filePptx" | "filePdf" | "fileImage" | "fileCsvFormatted" | "fileCsvRaw" | "aiDocument" | "recommendation" | "streamUp" | "streamDown" | "stream" | "density" | "parameter" | "pin" | "unpin" | "speechBubble" | "pieChart";
2602
+ export declare type IconType = "aiAgent" | "aiAgentDisabled" | "brain" | "brainDisabled" | "check" | "checkCircle" | "certification" | "plus" | "plusCircle" | "sync" | "alert" | "alertPaused" | "close" | "cross" | "edit" | "crossCircle" | "question" | "chevronUp" | "chevronRight" | "chevronDown" | "chevronLeft" | "date" | "navigateUp" | "navigateDown" | "navigateRight" | "navigateLeft" | "download" | "slack" | "expand" | "exclamationCircle" | "infoCircle" | "book" | "visible" | "invisible" | "lock" | "unlock" | "ai" | "aiFill" | "drawer" | "drawerEmpty" | "prohibited" | "dropDown" | "dropRight" | "clock" | "clockPaused" | "questionMark" | "upload" | "expandRectangle" | "file" | "number" | "code" | "user" | "userPlus" | "users" | "magic" | "tab" | "pauseCircle" | "filter" | "timer" | "mail" | "envelope" | "copy" | "rain" | "earth" | "geoCollection" | "geoCollectionUpload" | "minimize" | "shrink" | "copyright" | "ellipsis" | "pencil" | "folder" | "folderSmall" | "folderPlus" | "trash" | "arrowUp" | "arrowRight" | "arrowDown" | "arrowLeft" | "undo" | "redo" | "trendDown" | "trendUp" | "save" | "minus" | "minusCircle" | "percent" | "enter" | "enterRight" | "money" | "ghost" | "warning" | "home" | "settings" | "search" | "university" | "building" | "printer" | "picture" | "visualization" | "dashboard" | "metric" | "fact" | "ldmAttribute" | "ldmKey" | "ldmLabel" | "sharp" | "attribute" | "horn" | "cw" | "ccw" | "table" | "directionColumn" | "directionRow" | "header" | "genai" | "genai2" | "explainai" | "hiddenForAi" | "box" | "ellipsisVertical" | "list" | "drillTo" | "hierarchy" | "history" | "history2" | "thumbsUp" | "thumbsDown" | "send" | "visualizationArea" | "visualizationTable" | "visualizationTreemap" | "visualizationScatter" | "visualizationDonut" | "visualizationHeadline" | "visualizationColumn" | "visualizationLine" | "visualizationPyramid" | "visualizationFunnel" | "visualizationHeatmap" | "visualizationBubble" | "visualizationPie" | "visualizationBar" | "visualizationCombo" | "visualizationBullet" | "visualizationWaterfall" | "visualizationDependencywheel" | "visualizationSankey" | "visualizationPushpin" | "visualizationRepeater" | "visualizationXirr" | "link" | "externalLink" | "click" | "fileXlsx" | "filePptx" | "filePdf" | "fileImage" | "fileCsvFormatted" | "fileCsvRaw" | "aiDocument" | "recommendation" | "streamUp" | "streamDown" | "stream" | "density" | "parameter" | "pin" | "unpin" | "speechBubble" | "pieChart";
2603
2603
 
2604
2604
  /**
2605
2605
  * @internal
@@ -4444,6 +4444,7 @@ export declare interface IItemProps {
4444
4444
  children: ReactNode;
4445
4445
  className?: string;
4446
4446
  style?: CSSProperties;
4447
+ testId?: string;
4447
4448
  onClick?: (e: MouseEvent_2<HTMLDivElement>) => void;
4448
4449
  }
4449
4450
 
@@ -5961,14 +5962,12 @@ export declare interface ISingleSelectListItemProps {
5961
5962
  }
5962
5963
 
5963
5964
  /**
5964
- * Predicate the picker uses to decide whether an item is effectively selected:
5965
- * locked items always count as selected, otherwise membership in the staged
5966
- * `selected` set. Exported so consumers (e.g. the grantee row counter) can
5967
- * apply the same rule without re-encoding it.
5965
+ * Whether an item counts as selected: locked items always do, otherwise
5966
+ * membership in `selectedIds`. Exported so callers apply the same rule.
5968
5967
  *
5969
5968
  * @internal
5970
5969
  */
5971
- export declare const isLabelsPickerItemChecked: (item: IUiLabelsPickerItem, selectedIds: readonly string[]) => boolean;
5970
+ export declare const isLabelsChecklistItemChecked: (item: IUiLabelsChecklistItem, selectedIds: readonly string[]) => boolean;
5972
5971
 
5973
5972
  /**
5974
5973
  * @internal
@@ -6185,7 +6184,7 @@ export declare interface ITabsState {
6185
6184
  /**
6186
6185
  * @internal
6187
6186
  */
6188
- export declare function Item({ checked, subMenu, disabled, className, children, style, onClick }: IItemProps): JSX.Element;
6187
+ export declare function Item({ checked, subMenu, disabled, className, children, style, testId, onClick }: IItemProps): JSX.Element;
6189
6188
 
6190
6189
  /**
6191
6190
  * Base template definition without localized name.
@@ -7283,6 +7282,8 @@ export declare interface IUiGeneralAccessRadioProps {
7283
7282
  value: GeneralAccessValue;
7284
7283
  /** Fired when the user picks a different option. */
7285
7284
  onChange: (value: GeneralAccessValue) => void;
7285
+ /** Disables both rows — e.g. while the access list is still loading. */
7286
+ disabled?: boolean;
7286
7287
  /**
7287
7288
  * Optional slot rendered to the right of the `All workspace members`
7288
7289
  * row — typically the `UiGranteeRowControls` pair that lets the
@@ -7367,21 +7368,21 @@ export declare interface IUiGranteeAvatarProps {
7367
7368
  * @internal
7368
7369
  */
7369
7370
  export declare interface IUiGranteeRowControlsProps {
7370
- /** All labels available on the parent attribute. */
7371
- labels: ReadonlyArray<IUiLabelsPickerItem>;
7372
- /** Currently selected label ids. Locked items are always treated as selected. */
7371
+ /** Locked items are always treated as selected. */
7372
+ labels: ReadonlyArray<IUiLabelsChecklistItem>;
7373
7373
  selectedLabelIds: ReadonlyArray<string>;
7374
- /** Current permission level for the grantee. */
7375
7374
  permissionLevel: PermissionMenuLevel;
7376
- /** Fires when the labels picker commits a new selection. */
7375
+ /**
7376
+ * Set only when the grantee inherits a higher permission than `permissionLevel`
7377
+ * (e.g. from a group); drives the warning badge. Undefined when not elevated.
7378
+ */
7379
+ effectivePermission?: PermissionMenuLevel;
7377
7380
  onLabelsChange: (selectedIds: string[]) => void;
7378
- /** Fires when the user picks a new permission level. */
7379
7381
  onPermissionChange: (level: PermissionMenuLevel) => void;
7380
- /** Fires when the user picks Transfer ownership in the permission menu. */
7381
7382
  onTransferOwnership?: () => void;
7382
- /** Fires when the user picks Remove access in the permission menu. */
7383
7383
  onRemoveAccess?: () => void;
7384
- /** Test id forwarded to the root element. */
7384
+ /** Disables both triggers, e.g. while the row's change is saving. */
7385
+ isDisabled?: boolean;
7385
7386
  dataTestId?: string;
7386
7387
  }
7387
7388
 
@@ -7397,6 +7398,8 @@ export declare interface IUiGranteeRowProps {
7397
7398
  email?: string;
7398
7399
  /** When true, an "Owner" tag is rendered between the text block and the controls slot. */
7399
7400
  isOwner?: boolean;
7401
+ /** When true, the row is visually muted to signal an in-flight save. */
7402
+ isPending?: boolean;
7400
7403
  /** Trailing controls slot — typically the `UiGranteeRowControls` trigger pair. */
7401
7404
  controls?: ReactNode;
7402
7405
  /** Test id forwarded to the root element. */
@@ -7539,71 +7542,60 @@ export declare interface IUiLabelRowProps {
7539
7542
  }
7540
7543
 
7541
7544
  /**
7542
- * One label entry in the list.
7545
+ * One label entry in the checklist.
7543
7546
  *
7544
7547
  * @internal
7545
7548
  */
7546
- export declare interface IUiLabelsListItem {
7547
- /** Stable identifier for React keys. */
7549
+ export declare interface IUiLabelsChecklistItem {
7548
7550
  id: string;
7549
- /** Label text. */
7550
7551
  label: string;
7551
- /** Drives the icon + suffix. Omit for a regular label. */
7552
7552
  kind?: LabelRowKind;
7553
+ /** Locked rows render checked + disabled and are always included (the primary key). */
7554
+ locked?: boolean;
7553
7555
  }
7554
7556
 
7555
7557
  /**
7556
7558
  * @internal
7557
7559
  */
7558
- export declare interface IUiLabelsListProps {
7559
- /** Label items to render in source order. */
7560
- items: ReadonlyArray<IUiLabelsListItem>;
7561
- /** Test id forwarded to the root element. */
7560
+ export declare interface IUiLabelsChecklistProps {
7561
+ items: ReadonlyArray<IUiLabelsChecklistItem>;
7562
+ /** Locked items are always selected regardless of this. */
7563
+ defaultSelectedIds: ReadonlyArray<string>;
7564
+ /** Fires on Apply with the locked-augmented selection (staged internally until then). */
7565
+ onApply: (selectedIds: string[]) => void;
7566
+ /** Back arrow — returns to the parent view. */
7567
+ onBack: () => void;
7568
+ /** Dismisses the menu; Cancel and (post-commit) Apply both call it. */
7569
+ onClose: () => void;
7562
7570
  dataTestId?: string;
7563
7571
  }
7564
7572
 
7565
7573
  /**
7566
- * One label entry in the picker.
7574
+ * One label entry in the list.
7567
7575
  *
7568
7576
  * @internal
7569
7577
  */
7570
- export declare interface IUiLabelsPickerItem {
7571
- /** Stable identifier used as the React key and in selection state. */
7578
+ export declare interface IUiLabelsListItem {
7579
+ /** Stable identifier for React keys. */
7572
7580
  id: string;
7573
7581
  /** Label text. */
7574
7582
  label: string;
7575
7583
  /** Drives the icon + suffix. Omit for a regular label. */
7576
7584
  kind?: LabelRowKind;
7577
- /**
7578
- * When true the item is rendered locked (checked + disabled). Used for
7579
- * the primary-key row, which is always included.
7580
- */
7581
- locked?: boolean;
7582
7585
  }
7583
7586
 
7584
7587
  /**
7585
7588
  * @internal
7586
7589
  */
7587
- export declare interface IUiLabelsPickerProps {
7588
- /** Element that opens the picker on click. */
7589
- anchor: ReactElement<any>;
7590
- /** All available label items, in source order. */
7591
- items: ReadonlyArray<IUiLabelsPickerItem>;
7592
- /**
7593
- * Initial set of selected item ids. Locked items are always treated as
7594
- * selected regardless of what's passed here. Consumers that need to
7595
- * reset the staged state when switching contexts (e.g. picking labels
7596
- * for a different grantee) should pass `key={contextId}` so React
7597
- * remounts the picker body.
7598
- */
7599
- defaultSelectedIds: ReadonlyArray<string>;
7590
+ export declare interface IUiLabelsListProps {
7591
+ /** Label items to render in source order. */
7592
+ items: ReadonlyArray<IUiLabelsListItem>;
7600
7593
  /**
7601
- * Fires when the user clicks Apply with the (locked-augmented) set of
7602
- * selected ids. The picker keeps its own staged state — the caller is
7603
- * notified only on commit.
7594
+ * Whether to render the uppercase "LABELS" heading. Defaults to `true`.
7595
+ * Set `false` when a wrapping popover already supplies the title.
7604
7596
  */
7605
- onApply: (selectedIds: string[]) => void;
7606
- /** Test id forwarded to the picker body. */
7597
+ showHeading?: boolean;
7598
+ /** Test id forwarded to the root element. */
7607
7599
  dataTestId?: string;
7608
7600
  }
7609
7601
 
@@ -7972,6 +7964,21 @@ export declare interface IUiModalDialogProps {
7972
7964
  dataTestId?: string;
7973
7965
  }
7974
7966
 
7967
+ /**
7968
+ * @internal
7969
+ */
7970
+ export declare interface IUiMoreOptionsMenuProps {
7971
+ /** Empty/omitted hides the "Manage labels access" row (e.g. facts have no labels). */
7972
+ labels?: ReadonlyArray<IUiLabelsChecklistItem>;
7973
+ /** Locked items are always treated as selected. */
7974
+ selectedLabelIds?: ReadonlyArray<string>;
7975
+ onLabelsChange?: (selectedIds: string[]) => void;
7976
+ /** Omit to hide the row (Transfer ownership is gated until wired). */
7977
+ onTransferOwnership?: () => void;
7978
+ isDisabled?: boolean;
7979
+ dataTestId?: string;
7980
+ }
7981
+
7975
7982
  /**
7976
7983
  * @internal
7977
7984
  */
@@ -8004,16 +8011,27 @@ export declare interface IUiObjectShareDialogCardProps {
8004
8011
  grantees: IUiObjectShareDialogGrantee[];
8005
8012
  /** Fires when the user clicks the + Add link in the SHARED WITH heading. */
8006
8013
  onAddClick: () => void;
8014
+ /** Disables the + Add action — e.g. while the object's labels are still loading. */
8015
+ isAddDisabled?: boolean;
8007
8016
  /** Selected general-access option. */
8008
8017
  generalAccess: GeneralAccessValue;
8009
8018
  /** Fires when the user picks a different general-access option. */
8010
8019
  onGeneralAccessChange: (value: GeneralAccessValue) => void;
8020
+ /** Disables the general-access radio — e.g. while the access list is still loading. */
8021
+ isGeneralAccessDisabled?: boolean;
8011
8022
  /**
8012
8023
  * Optional slot rendered next to the "All workspace members" row — typically a
8013
8024
  * `UiGranteeRowControls` pair for the workspace-wide labels picker
8014
8025
  * and permission level.
8015
8026
  */
8016
8027
  workspaceControls?: ReactNode;
8028
+ /**
8029
+ * Optional error notice. When set, it replaces the grantee list and
8030
+ * general-access sections (which can't reflect a real policy on a failed
8031
+ * load), so the dialog shows why it's empty instead of a misleading
8032
+ * "restricted, no one has access".
8033
+ */
8034
+ error?: ReactNode;
8017
8035
  /** Test id forwarded to the root element. */
8018
8036
  dataTestId?: string;
8019
8037
  }
@@ -8036,6 +8054,8 @@ export declare interface IUiObjectShareDialogGrantee {
8036
8054
  email?: string;
8037
8055
  /** When true, the row is rendered with the "Owner" tag instead of controls. */
8038
8056
  isOwner?: boolean;
8057
+ /** When true, the row is visually muted to signal an in-flight save. */
8058
+ isPending?: boolean;
8039
8059
  /** Per-row controls — usually `UiGranteeRowControls`. Owner rows leave this empty. */
8040
8060
  controls?: ReactNode;
8041
8061
  }
@@ -8180,18 +8200,6 @@ export declare interface IUiPermissionMenuProps {
8180
8200
  selectedLevel?: PermissionMenuLevel;
8181
8201
  /** Fires when the user picks a permission level. */
8182
8202
  onPermissionChange: (level: PermissionMenuLevel) => void;
8183
- /** Fires when the user picks Transfer ownership. */
8184
- onTransferOwnership?: () => void;
8185
- /**
8186
- * Fires when the user picks the Labels entry. Display the count via
8187
- * `labelsCounter`.
8188
- */
8189
- onLabelsClick?: () => void;
8190
- /**
8191
- * Counter shown next to the Labels row (e.g. `"4/4"`). Hidden
8192
- * if omitted.
8193
- */
8194
- labelsCounter?: string;
8195
8203
  /** Fires when the user picks Remove access. */
8196
8204
  onRemoveAccess?: () => void;
8197
8205
  /** Test id forwarded to the menu body. */
@@ -8234,10 +8242,29 @@ export declare interface IUiPopoverProps {
8234
8242
  content?: ReactNode | ((args: {
8235
8243
  onClose: () => void;
8236
8244
  }) => ReactNode);
8245
+ /**
8246
+ * Padding around the content surface. Defaults to `"default"`. Use `"none"`
8247
+ * for edge-to-edge content whose own children carry their inset (e.g. a list
8248
+ * of full-bleed rows); the surface then also stretches the content to its
8249
+ * full width.
8250
+ */
8251
+ contentPadding?: "default" | "none";
8237
8252
  footer?: ReactNode | ((args: {
8238
8253
  onClose: () => void;
8239
8254
  }) => ReactNode);
8240
8255
  triggerBy?: IUiTooltipProps["triggerBy"];
8256
+ /**
8257
+ * Where the popover sits relative to its anchor (the arrow side; the panel
8258
+ * opens on the opposite side). Defaults to `"top-start"` — i.e. the panel
8259
+ * opens below the anchor, left-aligned.
8260
+ */
8261
+ arrowPlacement?: IUiTooltipProps["arrowPlacement"];
8262
+ /**
8263
+ * Allow the popover to flip to the opposite side when the preferred side
8264
+ * would overflow. Defaults to `true`. Set `false` to pin it to
8265
+ * `arrowPlacement` (e.g. an anchor that should always open downward).
8266
+ */
8267
+ optimalPlacement?: boolean;
8241
8268
  closeText?: string;
8242
8269
  closeVisible?: boolean;
8243
8270
  initialFocus?: RefObject<HTMLElement> | string;
@@ -8253,6 +8280,15 @@ export declare interface IUiPopoverProps {
8253
8280
  * When true, uses UiFocusManager's focus trap instead of tabOutHandler
8254
8281
  */
8255
8282
  enableFocusTrap?: boolean;
8283
+ /**
8284
+ * Controls the open state. When set, the popover ignores anchor clicks and
8285
+ * opens/closes purely from this prop; pair with `onOpenChange` to
8286
+ * react to outside-click / Escape. When omitted the popover stays
8287
+ * uncontrolled and opens on anchor click as before.
8288
+ */
8289
+ isOpen?: boolean;
8290
+ /** Fires when an interaction (outside-click, Escape) requests an open-state change. */
8291
+ onOpenChange?: (open: boolean) => void;
8256
8292
  onOpen?: () => void;
8257
8293
  onClose?: () => void;
8258
8294
  }
@@ -8823,9 +8859,18 @@ export declare interface IUiTooltipProps {
8823
8859
  */
8824
8860
  onClose?: () => void;
8825
8861
  /**
8826
- * Controls the open state of the tooltip, overrides the triggerBy prop if set
8862
+ * Controls the open state of the tooltip, overrides the triggerBy prop if set.
8863
+ * In controlled mode the anchor's own hover/focus/click triggers are
8864
+ * suppressed — open state is driven solely by this prop — but outside-click
8865
+ * and Escape still request a close via `onOpenChange`.
8827
8866
  */
8828
8867
  isOpen?: boolean;
8868
+ /**
8869
+ * Fires whenever an interaction requests an open-state change (anchor
8870
+ * triggers when uncontrolled, outside-click / Escape always). Pair with
8871
+ * `isOpen` to drive the tooltip from the parent.
8872
+ */
8873
+ onOpenChange?: (open: boolean) => void;
8829
8874
  /**
8830
8875
  * Custom styles for the anchor wrapper element
8831
8876
  */
@@ -10586,7 +10631,7 @@ export declare function UiFocusTrap({ root, children, focusCheckFn }: {
10586
10631
  *
10587
10632
  * @internal
10588
10633
  */
10589
- export declare function UiGeneralAccessRadio({ value, onChange, workspaceControls, dataTestId }: IUiGeneralAccessRadioProps): JSX.Element;
10634
+ export declare function UiGeneralAccessRadio({ value, onChange, disabled, workspaceControls, dataTestId }: IUiGeneralAccessRadioProps): JSX.Element;
10590
10635
 
10591
10636
  /**
10592
10637
  * Sectioned async grantee picker — specialization of `UiAutocomplete` for the
@@ -10615,17 +10660,17 @@ export declare function UiGranteeAvatar({ kind, decorative, dataTestId }: IUiGra
10615
10660
  *
10616
10661
  * @internal
10617
10662
  */
10618
- export declare function UiGranteeRow({ kind, name, email, isOwner, controls, dataTestId }: IUiGranteeRowProps): JSX.Element;
10663
+ export declare function UiGranteeRow({ kind, name, email, isOwner, isPending, controls, dataTestId }: IUiGranteeRowProps): JSX.Element;
10619
10664
 
10620
10665
  /**
10621
- * Pair of controls shown on every grantee row in the OLP share dialog:
10622
- * a labels-picker trigger and a permission-menu trigger. Both triggers are
10623
- * Tertiary `small` `UiButton`s with `chevronDown`
10624
- * and open their respective popovers on click.
10666
+ * Per-row controls in the OLP share dialog: a permission trigger
10667
+ * ({@link UiPermissionMenu}) plus a "⋯" menu ({@link UiMoreOptionsMenu}) for
10668
+ * labels access and Transfer ownership, with an optional inherited-permission
10669
+ * warning badge.
10625
10670
  *
10626
10671
  * @internal
10627
10672
  */
10628
- export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, dataTestId }: IUiGranteeRowControlsProps): JSX.Element;
10673
+ export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, isDisabled, dataTestId }: IUiGranteeRowControlsProps): JSX.Element;
10629
10674
 
10630
10675
  /**
10631
10676
  * @internal
@@ -10668,22 +10713,21 @@ export declare function UiLabelChecklistRow({ label, kind, suffix, checked, disa
10668
10713
  export declare function UiLabelRow({ label, kind, suffix, leading, labelId, onClick, dataTestId }: IUiLabelRowProps): JSX.Element;
10669
10714
 
10670
10715
  /**
10671
- * Read-only list of labels uppercase heading + N `UiLabelRow`s.
10672
- * Renders only the panel content; whoever needs a popover wraps it.
10716
+ * Per-label checklist drill-in for the grantee "⋯" menu. Stages selection
10717
+ * internally, commits via `onApply`, and renders its own back-only header so it
10718
+ * slots into {@link UiMenu} as a `showComponentOnly` content item.
10673
10719
  *
10674
10720
  * @internal
10675
10721
  */
10676
- export declare function UiLabelsList({ items, dataTestId }: IUiLabelsListProps): JSX.Element;
10722
+ export declare function UiLabelsChecklist({ items, defaultSelectedIds, onApply, onBack, onClose, dataTestId }: IUiLabelsChecklistProps): JSX.Element;
10677
10723
 
10678
10724
  /**
10679
- * Per-label picker popover. Anchored on a click target; stages selection
10680
- * internally and commits via `onApply`. Locked items are always included
10681
- * — at render time via {@link isLabelsPickerItemChecked} and again at
10682
- * commit via the locked-aware filter.
10725
+ * Read-only list of labels uppercase heading + N `UiLabelRow`s.
10726
+ * Renders only the panel content; whoever needs a popover wraps it.
10683
10727
  *
10684
10728
  * @internal
10685
10729
  */
10686
- export declare function UiLabelsPicker({ anchor, items, defaultSelectedIds, onApply, dataTestId }: IUiLabelsPickerProps): JSX.Element;
10730
+ export declare function UiLabelsList({ items, showHeading, dataTestId }: IUiLabelsListProps): JSX.Element;
10687
10731
 
10688
10732
  /**
10689
10733
  * @internal
@@ -10740,6 +10784,14 @@ export declare function UiMenu<T extends IUiMenuItemData = object, M extends obj
10740
10784
  */
10741
10785
  export declare function UiModalDialog({ children, isOpen, onClose, width, accessibilityConfig, dataTestId }: IUiModalDialogProps): JSX.Element | null;
10742
10786
 
10787
+ /**
10788
+ * Per-grantee "⋯" menu: "Manage labels access" (drills into {@link UiLabelsChecklist})
10789
+ * and "Transfer ownership". Each row shows only when its data/handler is given.
10790
+ *
10791
+ * @internal
10792
+ */
10793
+ export declare function UiMoreOptionsMenu({ labels, selectedLabelIds, onLabelsChange, onTransferOwnership, isDisabled, dataTestId }: IUiMoreOptionsMenuProps): JSX.Element;
10794
+
10743
10795
  /**
10744
10796
  * @internal
10745
10797
  */
@@ -10762,7 +10814,7 @@ export declare function UiObjectShareDialog({ isOpen, ...cardProps }: IUiObjectS
10762
10814
  *
10763
10815
  * @internal
10764
10816
  */
10765
- export declare function UiObjectShareDialogCard({ objectTitle, onClose, grantees, onAddClick, generalAccess, onGeneralAccessChange, workspaceControls, dataTestId }: IUiObjectShareDialogCardProps): JSX.Element;
10817
+ export declare function UiObjectShareDialogCard({ objectTitle, onClose, grantees, onAddClick, isAddDisabled, generalAccess, onGeneralAccessChange, isGeneralAccessDisabled, workspaceControls, error, dataTestId }: IUiObjectShareDialogCardProps): JSX.Element;
10766
10818
 
10767
10819
  /**
10768
10820
  * @internal
@@ -10797,17 +10849,18 @@ export declare type UiPaginationButtonSize = "small" | "large";
10797
10849
  /**
10798
10850
  * Per-grantee permission popover. Renders a fixed set of rows — two
10799
10851
  * permission levels (Can view & share / Can view), an optional divider,
10800
- * and optional Transfer ownership / Labels / Remove access action rows.
10801
- * Each level row carries an `infoCircle` tooltip.
10852
+ * and an optional Remove access action row. Each level row carries an
10853
+ * `infoCircle` tooltip. Labels and Transfer ownership live in the separate
10854
+ * {@link UiMoreOptionsMenu}.
10802
10855
  *
10803
10856
  * @internal
10804
10857
  */
10805
- export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onTransferOwnership, onLabelsClick, labelsCounter, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): JSX.Element;
10858
+ export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): JSX.Element;
10806
10859
 
10807
10860
  /**
10808
10861
  * @internal
10809
10862
  */
10810
- export declare function UiPopover({ id, accessibilityConfig, anchor, anchorAccessibilityConfig, width, title, tabIndex, disabled, content, footer, closeText, closeVisible, initialFocus, returnFocusTo, triggerBy, returnFocusAfterClose, focusCheckFn, enableFocusTrap, onOpen, onClose }: IUiPopoverProps): JSX.Element;
10863
+ export declare function UiPopover({ id, accessibilityConfig, anchor, anchorAccessibilityConfig, width, title, tabIndex, disabled, content, contentPadding, footer, closeText, closeVisible, initialFocus, returnFocusTo, triggerBy, arrowPlacement, optimalPlacement, returnFocusAfterClose, focusCheckFn, enableFocusTrap, isOpen, onOpenChange, onOpen, onClose }: IUiPopoverProps): JSX.Element;
10811
10864
 
10812
10865
  /**
10813
10866
  * Standalone radio control — renders a native `<input type="radio">` for
@@ -10927,6 +10980,7 @@ export declare type UiTagProps = {
10927
10980
  onDeleteKeyDown?: (event: KeyboardEvent_2<HTMLButtonElement>) => void;
10928
10981
  tabIndex?: number;
10929
10982
  deleteTabIndex?: number;
10983
+ labelAs?: "button" | "span";
10930
10984
  };
10931
10985
 
10932
10986
  /**
@@ -11010,7 +11064,7 @@ export declare function UiToastsContainer({ dataTestId }: IUiToastsContainerProp
11010
11064
  /**
11011
11065
  * @internal
11012
11066
  */
11013
- export declare function UiTooltip({ id, anchor, content, behaviour, arrowPlacement, triggerBy, hoverOpenDelay, hoverCloseDelay, showArrow, width, offset: offsetProp, optimalPlacement, accessibilityConfig, variant, disabled, isOpen: isOpenProp, onOpen, onClose, anchorWrapperStyles }: IUiTooltipProps): JSX.Element;
11067
+ export declare function UiTooltip({ id, anchor, content, behaviour, arrowPlacement, triggerBy, hoverOpenDelay, hoverCloseDelay, showArrow, width, offset: offsetProp, optimalPlacement, accessibilityConfig, variant, disabled, isOpen: isOpenProp, onOpen, onClose, onOpenChange, anchorWrapperStyles }: IUiTooltipProps): JSX.Element;
11014
11068
 
11015
11069
  /**
11016
11070
  * @internal
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.58.7"
8
+ "packageVersion": "7.58.9"
9
9
  }
10
10
  ]
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "11.43.0-alpha.0",
3
+ "version": "11.43.0-alpha.2",
4
4
  "description": "GoodData SDK - UI Building Components",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -75,11 +75,11 @@
75
75
  "tslib": "2.8.1",
76
76
  "unified": "^11.0.5",
77
77
  "uuid": "11.1.1",
78
- "@gooddata/sdk-backend-spi": "11.43.0-alpha.0",
79
- "@gooddata/sdk-model": "11.43.0-alpha.0",
80
- "@gooddata/sdk-ui": "11.43.0-alpha.0",
81
- "@gooddata/util": "11.43.0-alpha.0",
82
- "@gooddata/sdk-ui-theme-provider": "11.43.0-alpha.0"
78
+ "@gooddata/sdk-backend-spi": "11.43.0-alpha.2",
79
+ "@gooddata/sdk-model": "11.43.0-alpha.2",
80
+ "@gooddata/sdk-ui": "11.43.0-alpha.2",
81
+ "@gooddata/sdk-ui-theme-provider": "11.43.0-alpha.2",
82
+ "@gooddata/util": "11.43.0-alpha.2"
83
83
  },
84
84
  "devDependencies": {
85
85
  "@microsoft/api-documenter": "^7.17.0",
@@ -128,11 +128,11 @@
128
128
  "typescript": "5.9.3",
129
129
  "vitest": "4.1.8",
130
130
  "vitest-dom": "0.1.1",
131
- "@gooddata/eslint-config": "11.43.0-alpha.0",
132
- "@gooddata/oxlint-config": "11.43.0-alpha.0",
133
- "@gooddata/reference-workspace": "11.43.0-alpha.0",
134
- "@gooddata/sdk-backend-mockingbird": "11.43.0-alpha.0",
135
- "@gooddata/stylelint-config": "11.43.0-alpha.0"
131
+ "@gooddata/eslint-config": "11.43.0-alpha.2",
132
+ "@gooddata/oxlint-config": "11.43.0-alpha.2",
133
+ "@gooddata/reference-workspace": "11.43.0-alpha.2",
134
+ "@gooddata/sdk-backend-mockingbird": "11.43.0-alpha.2",
135
+ "@gooddata/stylelint-config": "11.43.0-alpha.2"
136
136
  },
137
137
  "peerDependencies": {
138
138
  "react": "^18.0.0 || ^19.0.0",
@@ -3,6 +3,18 @@
3
3
  flex-direction: column;
4
4
  gap: 12px;
5
5
 
6
+ &__field {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: var(--gd-spacing-5px);
10
+ }
11
+
12
+ &__field-label {
13
+ font-size: 14px;
14
+ line-height: 21px;
15
+ color: var(--gd-palette-complementary-7);
16
+ }
17
+
6
18
  &__empty-state {
7
19
  min-height: 50px;
8
20
  display: flex;
@@ -9,6 +9,11 @@
9
9
  padding: var(--gd-spacing-5px) 0;
10
10
  box-sizing: border-box;
11
11
 
12
+ // Muted while a change for this row is being saved (its controls are disabled too).
13
+ &--pending {
14
+ opacity: 0.6;
15
+ }
16
+
12
17
  &__text {
13
18
  flex: 1 1 auto;
14
19
  min-width: 0;
@@ -5,4 +5,11 @@
5
5
  align-items: center;
6
6
  gap: var(--gd-spacing-10px);
7
7
  flex-shrink: 0;
8
+
9
+ // Warning badge shown when the effective permission exceeds the assigned one.
10
+ &__effective-warning {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ cursor: default;
14
+ }
8
15
  }
@@ -0,0 +1,31 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ // Rendered as a UiMenu content view — its parent (UiMoreOptionsMenu) already
4
+ // cancels the popover padding, so this lays out normally (no negative margin).
5
+
6
+ .gd-ui-kit-labels-checklist {
7
+ align-self: stretch;
8
+ display: flex;
9
+ flex-direction: column;
10
+
11
+ // The submenu header is width:100% + content-box, so its 10px side padding
12
+ // would overflow the column by 20px. Make it border-box so it lines up with
13
+ // the rows and the actions strip below.
14
+ .gd-ui-kit-submenu-header {
15
+ box-sizing: border-box;
16
+ }
17
+
18
+ &__items {
19
+ display: flex;
20
+ flex-direction: column;
21
+ padding: var(--gd-spacing-5px) 0;
22
+ }
23
+
24
+ &__actions {
25
+ display: flex;
26
+ justify-content: flex-end;
27
+ gap: var(--gd-spacing-10px);
28
+ padding: var(--gd-spacing-10px);
29
+ border-top: 1px solid var(--gd-palette-complementary-3);
30
+ }
31
+ }
@@ -17,5 +17,8 @@
17
17
  &__items {
18
18
  display: flex;
19
19
  flex-direction: column;
20
+ // Vertical breathing room when the list is the sole popover content
21
+ // (rows carry their own horizontal inset, so the list sits flush).
22
+ padding-block: var(--gd-spacing-10px);
20
23
  }
21
24
  }
@@ -4,9 +4,19 @@
4
4
  display: flex;
5
5
  align-items: center;
6
6
  justify-content: center;
7
- background: var(--gd-modal-outsideBackgroundColor);
7
+
8
+ // Dimmed backdrop on a pseudo-element so the overlay tint never bleeds onto
9
+ // the card. Matches the legacy `.modalityPlugin-mask` (outside colour at 0.9).
10
+ &::before {
11
+ content: "";
12
+ position: absolute;
13
+ inset: 0;
14
+ background: var(--gd-modal-outsideBackgroundColor);
15
+ opacity: 0.9;
16
+ }
8
17
 
9
18
  &__card {
19
+ position: relative;
10
20
  display: flex;
11
21
  flex-direction: column;
12
22
  max-height: calc(100vh - 80px);
@@ -0,0 +1,10 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ // Cancel UiPopover.__content's 10px padding so the menu spans edge-to-edge.
4
+
5
+ .gd-ui-kit-more-options-menu {
6
+ align-self: stretch;
7
+ display: flex;
8
+ flex-direction: column;
9
+ margin: calc(-1 * var(--gd-spacing-10px));
10
+ }
@@ -9,4 +9,11 @@
9
9
  display: flex;
10
10
  flex-direction: column;
11
11
  }
12
+
13
+ &__error {
14
+ padding-block: var(--gd-spacing-20px);
15
+ color: var(--gd-palette-complementary-6, #94a1ad);
16
+ font-size: 14px;
17
+ text-align: center;
18
+ }
12
19
  }