@gooddata/sdk-ui-kit 11.40.0-alpha.0 → 11.40.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 (35) hide show
  1. package/esm/@ui/@types/icon.d.ts +1 -1
  2. package/esm/@ui/UiAsyncTable/UiAsyncTable/UiAsyncTableCheckbox.js +7 -1
  3. package/esm/@ui/UiAsyncTable/UiAsyncTable/UiAsyncTableDropdownItem.js +1 -1
  4. package/esm/@ui/UiCheckbox/UiCheckbox.d.ts +13 -1
  5. package/esm/@ui/UiCheckbox/UiCheckbox.js +14 -4
  6. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts +32 -0
  7. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.js +31 -0
  8. package/esm/@ui/UiIcon/icons.js +3 -0
  9. package/esm/@ui/UiLabelChecklistRow/UiLabelChecklistRow.d.ts +33 -0
  10. package/esm/@ui/UiLabelChecklistRow/UiLabelChecklistRow.js +26 -0
  11. package/esm/@ui/UiLabelRow/UiLabelRow.d.ts +52 -0
  12. package/esm/@ui/UiLabelRow/UiLabelRow.js +18 -0
  13. package/esm/@ui/UiLabelsList/UiLabelsList.d.ts +30 -0
  14. package/esm/@ui/UiLabelsList/UiLabelsList.js +24 -0
  15. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts +63 -0
  16. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.js +89 -0
  17. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +43 -0
  18. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +113 -0
  19. package/esm/@ui/UiPopover/UiPopover.d.ts +14 -2
  20. package/esm/@ui/UiPopover/UiPopover.js +21 -5
  21. package/esm/index.d.ts +6 -0
  22. package/esm/index.js +6 -0
  23. package/esm/locales.d.ts +54 -0
  24. package/esm/locales.js +22 -0
  25. package/esm/sdk-ui-kit.d.ts +289 -3
  26. package/package.json +11 -11
  27. package/src/@ui/UiCheckbox/UiCheckbox.scss +29 -8
  28. package/src/@ui/UiGranteeRowControls/UiGranteeRowControls.scss +8 -0
  29. package/src/@ui/UiLabelRow/UiLabelRow.scss +40 -0
  30. package/src/@ui/UiLabelsList/UiLabelsList.scss +21 -0
  31. package/src/@ui/UiLabelsPicker/UiLabelsPicker.scss +29 -0
  32. package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +66 -0
  33. package/src/@ui/index.scss +5 -0
  34. package/styles/css/main.css +158 -7
  35. package/styles/css/main.css.map +1 -1
@@ -2598,7 +2598,7 @@ export declare function IconTreeMap({ className, width, height, color, ariaHidde
2598
2598
  /**
2599
2599
  * @internal
2600
2600
  */
2601
- 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" | "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";
2601
+ 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";
2602
2602
 
2603
2603
  /**
2604
2604
  * @internal
@@ -5949,6 +5949,16 @@ export declare interface ISingleSelectListItemProps {
5949
5949
  dataTestId?: string;
5950
5950
  }
5951
5951
 
5952
+ /**
5953
+ * Predicate the picker uses to decide whether an item is effectively selected:
5954
+ * locked items always count as selected, otherwise membership in the staged
5955
+ * `selected` set. Exported so consumers (e.g. the grantee row counter) can
5956
+ * apply the same rule without re-encoding it.
5957
+ *
5958
+ * @internal
5959
+ */
5960
+ export declare const isLabelsPickerItemChecked: (item: IUiLabelsPickerItem, selectedIds: readonly string[]) => boolean;
5961
+
5952
5962
  /**
5953
5963
  * @internal
5954
5964
  */
@@ -6602,6 +6612,12 @@ export declare interface IUiCheckboxProps {
6602
6612
  accessibilityConfig?: IAccessibilityConfigBase;
6603
6613
  tabIndex?: number;
6604
6614
  label?: string;
6615
+ /**
6616
+ * Id set on the native input. When omitted a stable id is generated.
6617
+ * Pass an explicit id when an ancestor renders its own
6618
+ * `<label htmlFor={id}>` so the two stay associated.
6619
+ */
6620
+ id?: string;
6605
6621
  }
6606
6622
 
6607
6623
  /**
@@ -7162,6 +7178,28 @@ export declare interface IUiGranteeAvatarProps {
7162
7178
  dataTestId?: string;
7163
7179
  }
7164
7180
 
7181
+ /**
7182
+ * @internal
7183
+ */
7184
+ export declare interface IUiGranteeRowControlsProps {
7185
+ /** All labels available on the parent attribute. */
7186
+ labels: ReadonlyArray<IUiLabelsPickerItem>;
7187
+ /** Currently selected label ids. Locked items are always treated as selected. */
7188
+ selectedLabelIds: ReadonlyArray<string>;
7189
+ /** Current permission level for the grantee. */
7190
+ permissionLevel: PermissionMenuLevel;
7191
+ /** Fires when the labels picker commits a new selection. */
7192
+ onLabelsChange: (selectedIds: string[]) => void;
7193
+ /** Fires when the user picks a new permission level. */
7194
+ onPermissionChange: (level: PermissionMenuLevel) => void;
7195
+ /** Fires when the user picks Transfer ownership in the permission menu. */
7196
+ onTransferOwnership?: () => void;
7197
+ /** Fires when the user picks Remove access in the permission menu. */
7198
+ onRemoveAccess?: () => void;
7199
+ /** Test id forwarded to the root element. */
7200
+ dataTestId?: string;
7201
+ }
7202
+
7165
7203
  /**
7166
7204
  * @internal
7167
7205
  */
@@ -7255,6 +7293,135 @@ export declare interface IUiInlineTextGeneratorResult {
7255
7293
  text: string;
7256
7294
  }
7257
7295
 
7296
+ /**
7297
+ * @internal
7298
+ */
7299
+ export declare interface IUiLabelChecklistRowProps {
7300
+ /** Label text. */
7301
+ label: string;
7302
+ /** Determines the leading icon. Omit for a generic label icon. */
7303
+ kind?: LabelRowKind;
7304
+ /** Optional trailing suffix passed through to `UiLabelRow`. */
7305
+ suffix?: string;
7306
+ /** Whether the label is selected for inclusion. */
7307
+ checked: boolean;
7308
+ /**
7309
+ * When true the row is rendered but cannot be toggled. Use for the primary
7310
+ * key row, which is always included.
7311
+ */
7312
+ disabled?: boolean;
7313
+ /** Fires when the user toggles the checkbox. */
7314
+ onChange?: (checked: boolean) => void;
7315
+ /** Test id forwarded to the root element. */
7316
+ dataTestId?: string;
7317
+ }
7318
+
7319
+ /**
7320
+ * @internal
7321
+ */
7322
+ export declare interface IUiLabelRowProps {
7323
+ /** Label text. */
7324
+ label: string;
7325
+ /** Determines the leading icon. Omit for a generic label icon. */
7326
+ kind?: LabelRowKind;
7327
+ /**
7328
+ * Optional trailing suffix text rendered after the label (e.g.
7329
+ * "Primary key", "Default label"). The kit primitive does not format
7330
+ * domain-specific copy — callers translate and pass the string.
7331
+ */
7332
+ suffix?: string;
7333
+ /**
7334
+ * Optional content rendered before the kind icon. Used by
7335
+ * `UiLabelChecklistRow` to inject the row's checkbox.
7336
+ */
7337
+ leading?: ReactNode;
7338
+ /**
7339
+ * Optional id set on the inner label `<span>` so an interactive ancestor
7340
+ * can use it as `aria-labelledby` — e.g. `UiLabelChecklistRow` binds the
7341
+ * row checkbox's accessible name to this id instead of wrapping the row
7342
+ * in a `<label>` (which is invalid HTML around a `<div>`).
7343
+ */
7344
+ labelId?: string;
7345
+ /**
7346
+ * Optional row click handler. Used by `UiLabelChecklistRow` to delegate
7347
+ * clicks anywhere on the row to the inner checkbox without nesting the
7348
+ * row inside a `<label>`. Not fired when the click originates inside an
7349
+ * interactive descendant.
7350
+ */
7351
+ onClick?: () => void;
7352
+ /** Test id forwarded to the root element. */
7353
+ dataTestId?: string;
7354
+ }
7355
+
7356
+ /**
7357
+ * One label entry in the list.
7358
+ *
7359
+ * @internal
7360
+ */
7361
+ export declare interface IUiLabelsListItem {
7362
+ /** Stable identifier for React keys. */
7363
+ id: string;
7364
+ /** Label text. */
7365
+ label: string;
7366
+ /** Drives the icon + suffix. Omit for a regular label. */
7367
+ kind?: LabelRowKind;
7368
+ }
7369
+
7370
+ /**
7371
+ * @internal
7372
+ */
7373
+ export declare interface IUiLabelsListProps {
7374
+ /** Label items to render in source order. */
7375
+ items: ReadonlyArray<IUiLabelsListItem>;
7376
+ /** Test id forwarded to the root element. */
7377
+ dataTestId?: string;
7378
+ }
7379
+
7380
+ /**
7381
+ * One label entry in the picker.
7382
+ *
7383
+ * @internal
7384
+ */
7385
+ export declare interface IUiLabelsPickerItem {
7386
+ /** Stable identifier — used as the React key and in selection state. */
7387
+ id: string;
7388
+ /** Label text. */
7389
+ label: string;
7390
+ /** Drives the icon + suffix. Omit for a regular label. */
7391
+ kind?: LabelRowKind;
7392
+ /**
7393
+ * When true the item is rendered locked (checked + disabled). Used for
7394
+ * the primary-key row, which is always included.
7395
+ */
7396
+ locked?: boolean;
7397
+ }
7398
+
7399
+ /**
7400
+ * @internal
7401
+ */
7402
+ export declare interface IUiLabelsPickerProps {
7403
+ /** Element that opens the picker on click. */
7404
+ anchor: ReactElement<any>;
7405
+ /** All available label items, in source order. */
7406
+ items: ReadonlyArray<IUiLabelsPickerItem>;
7407
+ /**
7408
+ * Initial set of selected item ids. Locked items are always treated as
7409
+ * selected regardless of what's passed here. Consumers that need to
7410
+ * reset the staged state when switching contexts (e.g. picking labels
7411
+ * for a different grantee) should pass `key={contextId}` so React
7412
+ * remounts the picker body.
7413
+ */
7414
+ defaultSelectedIds: ReadonlyArray<string>;
7415
+ /**
7416
+ * Fires when the user clicks Apply with the (locked-augmented) set of
7417
+ * selected ids. The picker keeps its own staged state — the caller is
7418
+ * notified only on commit.
7419
+ */
7420
+ onApply: (selectedIds: string[]) => void;
7421
+ /** Test id forwarded to the picker body. */
7422
+ dataTestId?: string;
7423
+ }
7424
+
7258
7425
  /**
7259
7426
  * @internal
7260
7427
  */
@@ -7786,12 +7953,52 @@ export declare interface IUiPaginationButtonProps {
7786
7953
  accessibilityConfig?: IAccessibilityConfigBase;
7787
7954
  }
7788
7955
 
7956
+ /**
7957
+ * @internal
7958
+ */
7959
+ export declare interface IUiPermissionMenuProps {
7960
+ /** Element that opens the menu on click. */
7961
+ anchor: ReactElement<any>;
7962
+ /** Currently selected permission level — drives `aria-checked`. */
7963
+ selectedLevel?: PermissionMenuLevel;
7964
+ /** Fires when the user picks a permission level. */
7965
+ onPermissionChange: (level: PermissionMenuLevel) => void;
7966
+ /** Fires when the user picks Transfer ownership. */
7967
+ onTransferOwnership?: () => void;
7968
+ /**
7969
+ * Fires when the user picks the Labels entry. Display the count via
7970
+ * `labelsCounter`.
7971
+ */
7972
+ onLabelsClick?: () => void;
7973
+ /**
7974
+ * Counter shown next to the Labels row (e.g. `"4/4"`). Hidden
7975
+ * if omitted.
7976
+ */
7977
+ labelsCounter?: string;
7978
+ /** Fires when the user picks Remove access. */
7979
+ onRemoveAccess?: () => void;
7980
+ /** Test id forwarded to the menu body. */
7981
+ dataTestId?: string;
7982
+ }
7983
+
7789
7984
  /**
7790
7985
  * @internal
7791
7986
  */
7792
7987
  export declare interface IUiPopoverProps {
7793
7988
  id?: string;
7794
7989
  anchor: ReactElement<any>;
7990
+ /**
7991
+ * Accessibility attributes forwarded to the anchor element (the trigger).
7992
+ * `ariaHaspopup` defaults to `"dialog"` — pass
7993
+ * `"menu"` for menu-style popovers, `"listbox"` for
7994
+ * single-select pickers, etc. Set `ariaHaspopup: false` to
7995
+ * suppress. (Separate from `accessibilityConfig`, which targets
7996
+ * the popover content surface.)
7997
+ */
7998
+ anchorAccessibilityConfig?: {
7999
+ ariaHaspopup?: "dialog" | "menu" | "listbox" | "tree" | "grid" | false;
8000
+ ariaControls?: AriaAttributes["aria-controls"];
8001
+ };
7795
8002
  width?: "default" | number;
7796
8003
  disabled?: boolean;
7797
8004
  tabIndex?: number;
@@ -8578,6 +8785,14 @@ export declare interface IZoomContextState {
8578
8785
  hasVisualViewport: boolean;
8579
8786
  }
8580
8787
 
8788
+ /**
8789
+ * Display-form kind. Drives the icon only — the trailing suffix text is
8790
+ * supplied by the caller via `suffix`. Omit for a regular label.
8791
+ *
8792
+ * @internal
8793
+ */
8794
+ export declare type LabelRowKind = "primary" | "default";
8795
+
8581
8796
  /**
8582
8797
  * @internal
8583
8798
  */
@@ -8995,6 +9210,13 @@ export declare function ParameterControlDropdown({ name, value, resetValue, cons
8995
9210
  */
8996
9211
  export declare function ParameterPicker({ parameters, excludedKeys, isLoading, maxListHeight, onAdd, onCancel }: IParameterPickerProps): JSX.Element;
8997
9212
 
9213
+ /**
9214
+ * Permission level offered by the menu.
9215
+ *
9216
+ * @internal
9217
+ */
9218
+ export declare type PermissionMenuLevel = "VIEW" | "SHARE";
9219
+
8998
9220
  /**
8999
9221
  * @internal
9000
9222
  */
@@ -9710,9 +9932,15 @@ export declare type UiButtonSegmentedControlProps = Omit<ComponentPropsWithRef<"
9710
9932
  export declare const UiCard: ForwardRefExoticComponent<IUiCardProps & RefAttributes<HTMLDivElement>>;
9711
9933
 
9712
9934
  /**
9935
+ * Checkbox control — renders a native `<input type="checkbox">` for
9936
+ * accessibility and a custom 14px box for the visual. The input is overlaid on
9937
+ * the box, so clicking the box toggles it. Renders no wrapping `<label>`: an
9938
+ * optional inline label is a sibling associated via `htmlFor`, which lets an
9939
+ * ancestor row supply its own label without nesting.
9940
+ *
9713
9941
  * @internal
9714
9942
  */
9715
- export declare function UiCheckbox({ checked, onChange, preventDefault, indeterminate, disabled, accessibilityConfig, tabIndex, label }: IUiCheckboxProps): JSX.Element;
9943
+ export declare function UiCheckbox({ checked, onChange, preventDefault, indeterminate, disabled, accessibilityConfig, tabIndex, label, id }: IUiCheckboxProps): JSX.Element;
9716
9944
 
9717
9945
  /**
9718
9946
  * @internal
@@ -9946,6 +10174,16 @@ export declare function UiGranteeAvatar({ kind, decorative, dataTestId }: IUiGra
9946
10174
  */
9947
10175
  export declare function UiGranteeRow({ kind, name, email, isOwner, controls, dataTestId }: IUiGranteeRowProps): JSX.Element;
9948
10176
 
10177
+ /**
10178
+ * Pair of controls shown on every grantee row in the OLP share dialog:
10179
+ * a labels-picker trigger and a permission-menu trigger. Both triggers are
10180
+ * Tertiary `small` `UiButton`s with `chevronDown`
10181
+ * and open their respective popovers on click.
10182
+ *
10183
+ * @internal
10184
+ */
10185
+ export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, dataTestId }: IUiGranteeRowControlsProps): JSX.Element;
10186
+
9949
10187
  /**
9950
10188
  * @internal
9951
10189
  */
@@ -9966,6 +10204,44 @@ export declare type UiIconButtonProps = IUiIconButtonPublicProps;
9966
10204
  */
9967
10205
  export declare const UiInlineTextGenerator: ForwardRefExoticComponent<IUiInlineTextGeneratorProps & RefAttributes<HTMLDivElement>>;
9968
10206
 
10207
+ /**
10208
+ * Selectable label row used inside the Labels picker. The row delegates row
10209
+ * clicks to the inner checkbox and binds the checkbox's accessible name to
10210
+ * the row's label span via `aria-labelledby` — instead of wrapping the row
10211
+ * in a `<label>` element (which is invalid HTML around the row's `<div>`).
10212
+ * `disabled` locks the row for the primary-key case.
10213
+ *
10214
+ * @internal
10215
+ */
10216
+ export declare function UiLabelChecklistRow({ label, kind, suffix, checked, disabled, onChange, dataTestId }: IUiLabelChecklistRowProps): JSX.Element;
10217
+
10218
+ /**
10219
+ * Read-only label row — icon + label + optional caller-supplied suffix. Used
10220
+ * inside the Labels list and (via `UiLabelChecklistRow`) the
10221
+ * Labels picker.
10222
+ *
10223
+ * @internal
10224
+ */
10225
+ export declare function UiLabelRow({ label, kind, suffix, leading, labelId, onClick, dataTestId }: IUiLabelRowProps): JSX.Element;
10226
+
10227
+ /**
10228
+ * Read-only list of labels — uppercase heading + N `UiLabelRow`s.
10229
+ * Renders only the panel content; whoever needs a popover wraps it.
10230
+ *
10231
+ * @internal
10232
+ */
10233
+ export declare function UiLabelsList({ items, dataTestId }: IUiLabelsListProps): JSX.Element;
10234
+
10235
+ /**
10236
+ * Per-label picker popover. Anchored on a click target; stages selection
10237
+ * internally and commits via `onApply`. Locked items are always included
10238
+ * — at render time via {@link isLabelsPickerItemChecked} and again at
10239
+ * commit via the locked-aware filter.
10240
+ *
10241
+ * @internal
10242
+ */
10243
+ export declare function UiLabelsPicker({ anchor, items, defaultSelectedIds, onApply, dataTestId }: IUiLabelsPickerProps): JSX.Element;
10244
+
9969
10245
  /**
9970
10246
  * @internal
9971
10247
  */
@@ -10055,10 +10331,20 @@ export declare type UiPaginationButtonDirection = "previous" | "next";
10055
10331
  */
10056
10332
  export declare type UiPaginationButtonSize = "small" | "large";
10057
10333
 
10334
+ /**
10335
+ * Per-grantee permission popover. Renders a fixed set of rows — two
10336
+ * permission levels (Can view & share / Can view), an optional divider,
10337
+ * and optional Transfer ownership / Labels / Remove access action rows.
10338
+ * Each level row carries an `infoCircle` tooltip.
10339
+ *
10340
+ * @internal
10341
+ */
10342
+ export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onTransferOwnership, onLabelsClick, labelsCounter, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): JSX.Element;
10343
+
10058
10344
  /**
10059
10345
  * @internal
10060
10346
  */
10061
- export declare function UiPopover({ id, accessibilityConfig, anchor, width, title, tabIndex, disabled, content, footer, closeText, closeVisible, initialFocus, returnFocusTo, triggerBy, returnFocusAfterClose, focusCheckFn, enableFocusTrap, onOpen, onClose }: IUiPopoverProps): JSX.Element;
10347
+ 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;
10062
10348
 
10063
10349
  /**
10064
10350
  * Standalone radio control — renders a native `<input type="radio">` for
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "11.40.0-alpha.0",
3
+ "version": "11.40.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.0",
78
- "@gooddata/sdk-backend-spi": "11.40.0-alpha.0",
79
- "@gooddata/sdk-model": "11.40.0-alpha.0",
80
- "@gooddata/util": "11.40.0-alpha.0",
81
- "@gooddata/sdk-ui": "11.40.0-alpha.0",
82
- "@gooddata/sdk-ui-theme-provider": "11.40.0-alpha.0"
78
+ "@gooddata/sdk-backend-spi": "11.40.0-alpha.2",
79
+ "@gooddata/sdk-ui": "11.40.0-alpha.2",
80
+ "@gooddata/sdk-model": "11.40.0-alpha.2",
81
+ "@gooddata/util": "11.40.0-alpha.2",
82
+ "@gooddata/sdk-ui-theme-provider": "11.40.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.0",
130
130
  "vitest-dom": "0.1.1",
131
- "@gooddata/eslint-config": "11.40.0-alpha.0",
132
- "@gooddata/oxlint-config": "11.40.0-alpha.0",
133
- "@gooddata/reference-workspace": "11.40.0-alpha.0",
134
- "@gooddata/sdk-backend-mockingbird": "11.40.0-alpha.0",
135
- "@gooddata/stylelint-config": "11.40.0-alpha.0"
131
+ "@gooddata/oxlint-config": "11.40.0-alpha.2",
132
+ "@gooddata/eslint-config": "11.40.0-alpha.2",
133
+ "@gooddata/reference-workspace": "11.40.0-alpha.2",
134
+ "@gooddata/sdk-backend-mockingbird": "11.40.0-alpha.2",
135
+ "@gooddata/stylelint-config": "11.40.0-alpha.2"
136
136
  },
137
137
  "peerDependencies": {
138
138
  "react": "^18.0.0 || ^19.0.0",
@@ -3,14 +3,28 @@
3
3
  .gd-ui-kit-checkbox {
4
4
  display: inline-flex;
5
5
  align-items: center;
6
- cursor: pointer;
7
6
  user-select: none;
8
7
 
8
+ &__control {
9
+ position: relative;
10
+ display: inline-flex;
11
+ flex-shrink: 0;
12
+ width: 14px;
13
+ height: 14px;
14
+ }
15
+
9
16
  &__input {
10
17
  position: absolute;
18
+ inset: 0;
19
+ width: 100%;
20
+ height: 100%;
21
+ margin: 0;
11
22
  opacity: 0;
12
- width: 0;
13
- height: 0;
23
+ cursor: pointer;
24
+
25
+ &:disabled {
26
+ cursor: not-allowed;
27
+ }
14
28
  }
15
29
 
16
30
  &__box {
@@ -20,16 +34,12 @@
20
34
  border: 1px solid var(--gd-palette-complementary-5);
21
35
  border-radius: 2px;
22
36
  position: relative;
37
+ pointer-events: none;
23
38
  transition:
24
39
  background-color 0.2s,
25
40
  border-color 0.2s;
26
41
  background-color: var(--gd-palette-complementary-0);
27
42
 
28
- &:hover:not(&--disabled) {
29
- border-color: var(--gd-palette-complementary-6);
30
- box-shadow: 0 1px 2px 0 rgba(31, 53, 74, 0.15) inset;
31
- }
32
-
33
43
  &::after {
34
44
  box-sizing: border-box;
35
45
  content: "";
@@ -66,6 +76,16 @@
66
76
  &--disabled {
67
77
  border-color: var(--gd-palette-complementary-3);
68
78
  }
79
+
80
+ &--checked#{&}--disabled {
81
+ background-color: var(--gd-palette-complementary-4);
82
+ border-color: var(--gd-palette-complementary-4);
83
+ }
84
+ }
85
+
86
+ &__input:hover:not(:disabled) + &__box {
87
+ border-color: var(--gd-palette-complementary-6);
88
+ box-shadow: 0 1px 2px 0 rgba(31, 53, 74, 0.15) inset;
69
89
  }
70
90
 
71
91
  &__input:focus-visible + &__box {
@@ -75,5 +95,6 @@
75
95
  &__label {
76
96
  margin-left: 8px;
77
97
  user-select: none;
98
+ cursor: pointer;
78
99
  }
79
100
  }
@@ -0,0 +1,8 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ .gd-ui-kit-grantee-row-controls {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: var(--gd-spacing-10px);
7
+ flex-shrink: 0;
8
+ }
@@ -0,0 +1,40 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ .gd-ui-kit-label-row {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: var(--gd-spacing-5px);
7
+ padding: var(--gd-spacing-5px) var(--gd-spacing-10px);
8
+ font-size: 12px;
9
+ line-height: 18px;
10
+
11
+ &__leading {
12
+ display: inline-flex;
13
+ align-items: center;
14
+ flex-shrink: 0;
15
+ padding-right: var(--gd-spacing-5px);
16
+ }
17
+
18
+ &__icon {
19
+ display: inline-flex;
20
+ align-items: center;
21
+ flex-shrink: 0;
22
+ }
23
+
24
+ &__label {
25
+ flex: 0 1 auto;
26
+ min-width: 0;
27
+ font-weight: 700;
28
+ color: var(--gd-palette-complementary-8);
29
+ overflow: hidden;
30
+ text-overflow: ellipsis;
31
+ white-space: nowrap;
32
+ }
33
+
34
+ &__suffix {
35
+ flex: 1 1 auto;
36
+ min-width: 0;
37
+ color: var(--gd-palette-complementary-6);
38
+ font-weight: 400;
39
+ }
40
+ }
@@ -0,0 +1,21 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ .gd-ui-kit-labels-list {
4
+ display: flex;
5
+ flex-direction: column;
6
+
7
+ &__heading {
8
+ padding: var(--gd-spacing-10px) var(--gd-spacing-10px) var(--gd-spacing-5px);
9
+ font-size: 10px;
10
+ font-weight: 700;
11
+ line-height: 14px;
12
+ letter-spacing: 0.04em;
13
+ text-transform: uppercase;
14
+ color: var(--gd-palette-complementary-6);
15
+ }
16
+
17
+ &__items {
18
+ display: flex;
19
+ flex-direction: column;
20
+ }
21
+ }
@@ -0,0 +1,29 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ // Rendered inside UiPopover.__content (which adds 10px padding + 20px gap).
4
+ // Pull the padding back so the rows stretch edge-to-edge of the popover and
5
+ // disable the gap. The actions strip sits flush at the bottom with its own
6
+ // top border.
7
+
8
+ .gd-ui-kit-labels-picker {
9
+ align-self: stretch;
10
+ display: flex;
11
+ flex-direction: column;
12
+ // UiPopover's __content adds 10px padding all around. Pull it back so rows
13
+ // reach edge-to-edge of the popover; the popover sets its own width.
14
+ margin: calc(-1 * var(--gd-spacing-10px));
15
+
16
+ &__items {
17
+ display: flex;
18
+ flex-direction: column;
19
+ padding: var(--gd-spacing-10px) 0;
20
+ }
21
+
22
+ &__actions {
23
+ display: flex;
24
+ justify-content: flex-end;
25
+ gap: var(--gd-spacing-10px);
26
+ padding: var(--gd-spacing-10px);
27
+ border-top: 1px solid var(--gd-palette-complementary-3);
28
+ }
29
+ }
@@ -0,0 +1,66 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ // Rendered inside UiPopover.__content (which adds 10px padding all around).
4
+ // Pull the padding back so rows span the popover edge-to-edge.
5
+
6
+ .gd-ui-kit-permission-menu {
7
+ align-self: stretch;
8
+ display: flex;
9
+ flex-direction: column;
10
+ margin: calc(-1 * var(--gd-spacing-10px));
11
+
12
+ &__items {
13
+ display: flex;
14
+ flex-direction: column;
15
+ padding: var(--gd-spacing-5px) 0;
16
+ }
17
+
18
+ &__divider {
19
+ height: 1px;
20
+ margin: var(--gd-spacing-5px) 0;
21
+ background: var(--gd-palette-complementary-3);
22
+ }
23
+
24
+ &__item-row {
25
+ display: flex;
26
+ align-items: stretch;
27
+ }
28
+
29
+ &__item {
30
+ flex: 1 1 auto;
31
+ min-width: 0;
32
+ display: flex;
33
+ align-items: center;
34
+ gap: var(--gd-spacing-5px);
35
+ padding: var(--gd-spacing-5px) var(--gd-spacing-10px);
36
+ border: 0;
37
+ background: transparent;
38
+ cursor: pointer;
39
+ text-align: left;
40
+ font: inherit;
41
+ color: var(--gd-palette-complementary-8);
42
+
43
+ &:hover,
44
+ &:focus-visible {
45
+ background: var(--gd-palette-complementary-2);
46
+ outline: none;
47
+ }
48
+ }
49
+
50
+ &__item-label {
51
+ flex: 1 1 auto;
52
+ min-width: 0;
53
+ font-size: 12px;
54
+ line-height: 18px;
55
+ overflow: hidden;
56
+ text-overflow: ellipsis;
57
+ white-space: nowrap;
58
+ }
59
+
60
+ &__item-counter {
61
+ flex-shrink: 0;
62
+ font-size: 12px;
63
+ line-height: 18px;
64
+ color: var(--gd-palette-complementary-6);
65
+ }
66
+ }