@gooddata/sdk-ui-kit 11.39.0-alpha.3 → 11.39.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 (46) hide show
  1. package/esm/@ui/@types/icon.d.ts +1 -1
  2. package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialog.d.ts +39 -0
  3. package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialog.js +30 -0
  4. package/esm/@ui/UiAvatar/UiAvatar.d.ts +40 -0
  5. package/esm/@ui/UiAvatar/UiAvatar.js +19 -0
  6. package/esm/@ui/UiButton/UiButton.d.ts +1 -1
  7. package/esm/@ui/UiDialogShell/UiDialogFooter.d.ts +1 -1
  8. package/esm/@ui/UiDialogShell/UiDialogHeader.d.ts +1 -1
  9. package/esm/@ui/UiDialogShell/UiDialogShell.d.ts +10 -10
  10. package/esm/@ui/UiDialogShell/UiDialogShell.js +2 -2
  11. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.d.ts +32 -0
  12. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.js +22 -0
  13. package/esm/@ui/UiGranteeAvatar/UiGranteeAvatar.d.ts +30 -0
  14. package/esm/@ui/UiGranteeAvatar/UiGranteeAvatar.js +25 -0
  15. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts +26 -0
  16. package/esm/@ui/UiGranteeRow/UiGranteeRow.js +19 -0
  17. package/esm/@ui/UiIcon/icons.js +1 -0
  18. package/esm/@ui/UiMenu/hooks.js +2 -4
  19. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialog.d.ts +57 -0
  20. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialog.js +28 -0
  21. package/esm/@ui/UiRadio/UiRadio.d.ts +40 -0
  22. package/esm/@ui/UiRadio/UiRadio.js +23 -0
  23. package/esm/@ui/UiRadioRow/UiRadioRow.d.ts +33 -0
  24. package/esm/@ui/UiRadioRow/UiRadioRow.js +19 -0
  25. package/esm/@ui/UiTextInput/UiTextInput.d.ts +55 -0
  26. package/esm/@ui/UiTextInput/UiTextInput.js +24 -0
  27. package/esm/index.d.ts +9 -0
  28. package/esm/index.js +9 -0
  29. package/esm/locales.d.ts +61 -0
  30. package/esm/locales.js +27 -0
  31. package/esm/sdk-ui-kit.d.ts +374 -14
  32. package/package.json +11 -11
  33. package/src/@ui/UiAddGranteeDialog/UiAddGranteeDialog.scss +22 -0
  34. package/src/@ui/UiAvatar/UiAvatar.scss +22 -0
  35. package/src/@ui/UiDialogShell/UiDialogShell.scss +0 -1
  36. package/src/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.scss +8 -0
  37. package/src/@ui/UiGranteeRow/UiGranteeRow.scss +36 -0
  38. package/src/@ui/UiObjectShareDialog/UiObjectShareDialog.scss +12 -0
  39. package/src/@ui/UiRadio/UiRadio.scss +63 -0
  40. package/src/@ui/UiRadioRow/UiRadioRow.scss +44 -0
  41. package/src/@ui/UiSectionHeading/UiSectionHeading.scss +0 -1
  42. package/src/@ui/UiTextInput/UiTextInput.scss +68 -0
  43. package/src/@ui/index.scss +17 -0
  44. package/src/FilterGroupItem/FilterGroupItem.scss +13 -24
  45. package/styles/css/main.css +285 -20
  46. package/styles/css/main.css.map +1 -1
@@ -1134,6 +1134,13 @@ export declare const GD_COLOR_STATE_HOVER = "#94a1ad";
1134
1134
  */
1135
1135
  export declare const GD_COLOR_WHITE = "#fff";
1136
1136
 
1137
+ /**
1138
+ * Which general-access option is currently selected.
1139
+ *
1140
+ * @internal
1141
+ */
1142
+ export declare type GeneralAccessValue = "RESTRICTED" | "WORKSPACE";
1143
+
1137
1144
  /**
1138
1145
  * @internal
1139
1146
  */
@@ -1333,6 +1340,13 @@ export declare const GOODSTRAP_DRAG_EVENT = "goodstrap.drag";
1333
1340
  */
1334
1341
  export declare const GOODSTRAP_SCROLLED_EVENT = "goodstrap.scrolled";
1335
1342
 
1343
+ /**
1344
+ * Visual variant of a grantee avatar.
1345
+ *
1346
+ * @internal
1347
+ */
1348
+ export declare type GranteeAvatarKind = "user" | "group";
1349
+
1336
1350
  /**
1337
1351
  * @internal
1338
1352
  */
@@ -2584,7 +2598,7 @@ export declare function IconTreeMap({ className, width, height, color, ariaHidde
2584
2598
  /**
2585
2599
  * @internal
2586
2600
  */
2587
- 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" | "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" | "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";
2588
2602
 
2589
2603
  /**
2590
2604
  * @internal
@@ -6264,6 +6278,37 @@ export declare interface ITypographyProps {
6264
6278
  id?: string;
6265
6279
  }
6266
6280
 
6281
+ /**
6282
+ * @internal
6283
+ */
6284
+ export declare interface IUiAddGranteeDialogProps {
6285
+ /** Object title shown in the header — wrapped into `Share "\{title\}"`. */
6286
+ objectTitle: string;
6287
+ /** Current search query. */
6288
+ searchQuery: string;
6289
+ /** Fires when the user edits the search query. */
6290
+ onSearchQueryChange: (next: string) => void;
6291
+ /**
6292
+ * Optional slot rendered between the search input and the bottom divider.
6293
+ * When empty, the screen falls back to a "No user or group selected"
6294
+ * placeholder. Callers typically render a single `UiGranteeRow`
6295
+ * here to preview the grantee they've picked from the search dropdown.
6296
+ */
6297
+ selectedGrantee?: ReactNode;
6298
+ /** Fires when the user clicks the header back-arrow button. */
6299
+ onBack: () => void;
6300
+ /** Fires when the user clicks the header X close button. */
6301
+ onClose: () => void;
6302
+ /** Fires when the user clicks Cancel in the footer. */
6303
+ onCancel: () => void;
6304
+ /** Fires when the user clicks the primary Add button in the footer. */
6305
+ onAdd: () => void;
6306
+ /** When true, the primary Add button is disabled. */
6307
+ isAddDisabled?: boolean;
6308
+ /** Test id forwarded to the root element. */
6309
+ dataTestId?: string;
6310
+ }
6311
+
6267
6312
  /**
6268
6313
  * @internal
6269
6314
  */
@@ -6432,6 +6477,37 @@ export declare interface IUiAutofocusOptions {
6432
6477
  initialFocus?: string | RefObject<HTMLElement | null>;
6433
6478
  }
6434
6479
 
6480
+ /**
6481
+ * @internal
6482
+ */
6483
+ export declare interface IUiAvatarProps {
6484
+ /** Icon rendered inside the circle. */
6485
+ icon: IconType;
6486
+ /** Outer circle size in px. Defaults to 32. */
6487
+ size?: number;
6488
+ /** Background tone of the circle. Defaults to `complementary-2`. */
6489
+ backgroundColor?: ThemeColor;
6490
+ /** Icon tone. Defaults to `complementary-5`. */
6491
+ iconColor?: ThemeColor;
6492
+ /**
6493
+ * Icon size in px. Defaults to `Math.round(size * ICON_TO_AVATAR_RATIO)`,
6494
+ * which mirrors the 14/32 proportion used across the kit's avatars.
6495
+ */
6496
+ iconSize?: number;
6497
+ /**
6498
+ * Accessibility config for the avatar. Provide an `ariaLabel`
6499
+ * when the avatar carries meaning (e.g. a stand-alone "who" indicator).
6500
+ * Use `ariaHidden: true` when the avatar sits next to a visible
6501
+ * name and would only duplicate that name for screen-reader users.
6502
+ */
6503
+ accessibilityConfig?: {
6504
+ ariaLabel?: string;
6505
+ ariaHidden?: boolean;
6506
+ };
6507
+ /** Test id forwarded to the root element. */
6508
+ dataTestId?: string;
6509
+ }
6510
+
6435
6511
  /**
6436
6512
  * @internal
6437
6513
  */
@@ -6498,7 +6574,7 @@ export declare interface IUiButtonProps {
6498
6574
  tabIndex?: number;
6499
6575
  /**
6500
6576
  * When true, the button is focused on mount via the native HTML
6501
- * <code>autofocus</code> attribute. Use sparingly — best fit is the safest
6577
+ * `autofocus` attribute. Use sparingly — best fit is the safest
6502
6578
  * action in a confirmation dialog so accidental Enter presses cancel
6503
6579
  * rather than confirm a destructive action.
6504
6580
  */
@@ -6723,7 +6799,7 @@ export declare interface IUiDialogFooterProps {
6723
6799
  children: ReactNode;
6724
6800
  /**
6725
6801
  * When true, draws a 1px complementary-3 divider above the footer and adds
6726
- * matching top padding. ObjectShareDialog and AddGranteeScreen want this;
6802
+ * matching top padding. ObjectShareDialog and AddGranteeDialog want this;
6727
6803
  * ConfirmDialog does not.
6728
6804
  */
6729
6805
  divider?: boolean;
@@ -6735,7 +6811,7 @@ export declare interface IUiDialogFooterProps {
6735
6811
  export declare interface IUiDialogHeaderProps {
6736
6812
  /** Title shown in the header. */
6737
6813
  title: string;
6738
- /** Title size — <code>"default"</code> = 18/26, <code>"large"</code> = 20/26. */
6814
+ /** Title size — `"default"` = 18/26, `"large"` = 20/26. */
6739
6815
  titleSize?: DialogHeaderTitleSize;
6740
6816
  /** Fires when the user clicks the X close button. Omit to hide the X. */
6741
6817
  onClose?: () => void;
@@ -6745,10 +6821,10 @@ export declare interface IUiDialogHeaderProps {
6745
6821
 
6746
6822
  /**
6747
6823
  * Accessibility config for a dialog. By default the shell wires
6748
- * <code>aria-labelledby</code> to the <code>UiDialogHeader</code> title via
6824
+ * `aria-labelledby` to the `UiDialogHeader` title via
6749
6825
  * context — no config is needed when a header is present. For headerless
6750
- * dialogs, pass <code>ariaLabel</code>; to point at an external title
6751
- * element, pass <code>ariaLabelledBy</code>.
6826
+ * dialogs, pass `ariaLabel`; to point at an external title
6827
+ * element, pass `ariaLabelledBy`.
6752
6828
  *
6753
6829
  * @internal
6754
6830
  */
@@ -6768,16 +6844,16 @@ export declare interface IUiDialogShellProps {
6768
6844
  width?: number;
6769
6845
  /**
6770
6846
  * When true, the dialog acts as a modal: focus is trapped inside,
6771
- * autofocus + return-focus-on-unmount apply, ESC fires <code>onClose</code>,
6772
- * and <code>aria-modal="true"</code> is set. Leave off for inline
6847
+ * autofocus + return-focus-on-unmount apply, ESC fires `onClose`,
6848
+ * and `aria-modal="true"` is set. Leave off for inline
6773
6849
  * non-blocking dialog cards.
6774
6850
  */
6775
6851
  isModal?: boolean;
6776
- /** Fires when the user dismisses via ESC. Only active when <code>isModal</code>. */
6852
+ /** Fires when the user dismisses via ESC. Only active when `isModal`. */
6777
6853
  onClose?: () => void;
6778
6854
  /**
6779
- * Accessibility config. Usually unnecessary — when <code>UiDialogHeader</code>
6780
- * is used as a child the shell auto-wires <code>aria-labelledby</code> to
6855
+ * Accessibility config. Usually unnecessary — when `UiDialogHeader`
6856
+ * is used as a child the shell auto-wires `aria-labelledby` to
6781
6857
  * the header's title.
6782
6858
  */
6783
6859
  accessibilityConfig?: IUiDialogShellAccessibilityConfig;
@@ -7052,6 +7128,58 @@ export declare type IUiFocusManagerProps = {
7052
7128
  children: ReactNode;
7053
7129
  };
7054
7130
 
7131
+ /**
7132
+ * @internal
7133
+ */
7134
+ export declare interface IUiGeneralAccessRadioProps {
7135
+ /** Selected option. */
7136
+ value: GeneralAccessValue;
7137
+ /** Fired when the user picks a different option. */
7138
+ onChange: (value: GeneralAccessValue) => void;
7139
+ /**
7140
+ * Optional slot rendered to the right of the `All workspace members`
7141
+ * row — typically the `UiGranteeRowControls` pair that lets the
7142
+ * author pick labels and the workspace-wide permission level.
7143
+ */
7144
+ workspaceControls?: ReactNode;
7145
+ /** Test id forwarded to the root element. */
7146
+ dataTestId?: string;
7147
+ }
7148
+
7149
+ /**
7150
+ * @internal
7151
+ */
7152
+ export declare interface IUiGranteeAvatarProps {
7153
+ /** Visual kind — drives which silhouette is rendered. */
7154
+ kind: GranteeAvatarKind;
7155
+ /**
7156
+ * When true, the avatar is hidden from assistive tech. Use when the
7157
+ * avatar sits next to a visible name and would only duplicate that name
7158
+ * for screen-reader users (e.g. inside `UiGranteeRow`).
7159
+ */
7160
+ decorative?: boolean;
7161
+ /** Test id forwarded to the root element. */
7162
+ dataTestId?: string;
7163
+ }
7164
+
7165
+ /**
7166
+ * @internal
7167
+ */
7168
+ export declare interface IUiGranteeRowProps {
7169
+ /** Visual kind — drives the avatar silhouette. */
7170
+ kind: GranteeAvatarKind;
7171
+ /** Display name shown on the first line. */
7172
+ name: string;
7173
+ /** Optional email subline shown below the name. */
7174
+ email?: string;
7175
+ /** When true, an "Owner" tag is rendered between the text block and the controls slot. */
7176
+ isOwner?: boolean;
7177
+ /** Trailing controls slot — typically the `UiGranteeRowControls` trigger pair. */
7178
+ controls?: ReactNode;
7179
+ /** Test id forwarded to the root element. */
7180
+ dataTestId?: string;
7181
+ }
7182
+
7055
7183
  /**
7056
7184
  * @internal
7057
7185
  */
@@ -7488,6 +7616,54 @@ export declare interface IUiNavigationItem {
7488
7616
  tabIndex?: number;
7489
7617
  }
7490
7618
 
7619
+ /**
7620
+ * Visual data for a single grantee row inside the dialog. The `controls`
7621
+ * slot lets the caller plug in the per-row controls (typically
7622
+ * `UiGranteeRowControls`).
7623
+ *
7624
+ * @internal
7625
+ */
7626
+ export declare interface IUiObjectShareDialogGrantee {
7627
+ /** Stable identifier — used as the React key for the row. */
7628
+ id: string;
7629
+ /** Avatar variant. */
7630
+ kind: GranteeAvatarKind;
7631
+ /** Display name. */
7632
+ name: string;
7633
+ /** Optional email subline. */
7634
+ email?: string;
7635
+ /** When true, the row is rendered with the "Owner" tag instead of controls. */
7636
+ isOwner?: boolean;
7637
+ /** Per-row controls — usually `UiGranteeRowControls`. Owner rows leave this empty. */
7638
+ controls?: ReactNode;
7639
+ }
7640
+
7641
+ /**
7642
+ * @internal
7643
+ */
7644
+ export declare interface IUiObjectShareDialogProps {
7645
+ /** Object title shown in the header — wrapped into `Share "\{title\}"`. */
7646
+ objectTitle: string;
7647
+ /** Fires when the user clicks the header X button OR the footer Close button. */
7648
+ onClose: () => void;
7649
+ /** Grantee rows shown inside the SHARED WITH section, in render order. */
7650
+ grantees: IUiObjectShareDialogGrantee[];
7651
+ /** Fires when the user clicks the + Add link in the SHARED WITH heading. */
7652
+ onAddClick: () => void;
7653
+ /** Selected general-access option. */
7654
+ generalAccess: GeneralAccessValue;
7655
+ /** Fires when the user picks a different general-access option. */
7656
+ onGeneralAccessChange: (value: GeneralAccessValue) => void;
7657
+ /**
7658
+ * Optional slot rendered next to the "All workspace members" row — typically a
7659
+ * `UiGranteeRowControls` pair for the workspace-wide labels picker
7660
+ * and permission level.
7661
+ */
7662
+ workspaceControls?: ReactNode;
7663
+ /** Test id forwarded to the root element. */
7664
+ dataTestId?: string;
7665
+ }
7666
+
7491
7667
  /**
7492
7668
  * @internal
7493
7669
  */
@@ -7647,6 +7823,61 @@ export declare interface IUiPopoverProps {
7647
7823
  onClose?: () => void;
7648
7824
  }
7649
7825
 
7826
+ /**
7827
+ * @internal
7828
+ */
7829
+ export declare interface IUiRadioProps {
7830
+ /** Whether this radio is selected. */
7831
+ checked: boolean;
7832
+ /** Fires when the user toggles the radio. */
7833
+ onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
7834
+ /**
7835
+ * `name` attribute shared by a group of mutually exclusive radios —
7836
+ * required by HTML radios.
7837
+ */
7838
+ name?: string;
7839
+ /** Value sent with the change event — the picked option's identifier. */
7840
+ value?: string;
7841
+ disabled?: boolean;
7842
+ accessibilityConfig?: IAccessibilityConfigBase;
7843
+ tabIndex?: number;
7844
+ /** Optional inline label rendered next to the radio circle. */
7845
+ label?: string;
7846
+ /**
7847
+ * Id set on the native input. When omitted a stable id is generated.
7848
+ * Pass an explicit id when an ancestor renders its own
7849
+ * `<label htmlFor={id}>` (e.g. `UiRadioRow`) so the two stay associated.
7850
+ */
7851
+ id?: string;
7852
+ dataTestId?: string;
7853
+ }
7854
+
7855
+ /**
7856
+ * @internal
7857
+ */
7858
+ export declare interface IUiRadioRowProps {
7859
+ /** Whether this row's radio is selected. */
7860
+ checked: boolean;
7861
+ /** Fires when the user picks this row. */
7862
+ onChange?: () => void;
7863
+ /**
7864
+ * `name` attribute shared by a group of mutually exclusive
7865
+ * radio rows.
7866
+ */
7867
+ name?: string;
7868
+ /** Value sent on the change — typically the row's option identifier. */
7869
+ value?: string;
7870
+ /** Primary label, bold complementary-8. */
7871
+ title: string;
7872
+ /** Optional descriptive subline, regular complementary-6. */
7873
+ description?: string;
7874
+ /** Optional trailing content rendered after the text (e.g. row controls). */
7875
+ trailing?: ReactNode;
7876
+ disabled?: boolean;
7877
+ /** Test id forwarded to the root element. */
7878
+ dataTestId?: string;
7879
+ }
7880
+
7650
7881
  /**
7651
7882
  * @internal
7652
7883
  */
@@ -7931,6 +8162,53 @@ export declare interface IUiTagsProps {
7931
8162
  accessibilityConfig?: IAccessibilityConfigBase;
7932
8163
  }
7933
8164
 
8165
+ /**
8166
+ * Clickable trailing icon button (e.g. a clear button). Bundles its own
8167
+ * accessible name so the button can never be rendered unnamed.
8168
+ *
8169
+ * @internal
8170
+ */
8171
+ export declare interface IUiTextInputIconAfterButton {
8172
+ /** Icon rendered inside the button. */
8173
+ icon: IconType;
8174
+ /** Fires on click. */
8175
+ onClick: () => void;
8176
+ /** Accessible name for the icon-only button. */
8177
+ ariaLabel: string;
8178
+ }
8179
+
8180
+ /**
8181
+ * @internal
8182
+ */
8183
+ export declare interface IUiTextInputProps {
8184
+ /** HTML input `type`. Defaults to `"text"`. */
8185
+ type?: "text" | "search" | "email" | "url";
8186
+ /** Current value. */
8187
+ value: string;
8188
+ /** Fires with the next value on every change. */
8189
+ onChange: (next: string) => void;
8190
+ /** Optional label rendered above the input. */
8191
+ label?: string;
8192
+ /** Placeholder shown when the input is empty. */
8193
+ placeholder?: string;
8194
+ /** Optional icon rendered inside the input at the start. */
8195
+ iconBefore?: IconType;
8196
+ /** Optional static (non-interactive) icon rendered inside the input at the end. */
8197
+ iconAfter?: IconType;
8198
+ /**
8199
+ * Optional interactive trailing icon button (e.g. a clear button). Takes
8200
+ * precedence over `iconAfter`. Carries its own `ariaLabel`, so the button
8201
+ * always has an accessible name.
8202
+ */
8203
+ onIconAfter?: IUiTextInputIconAfterButton;
8204
+ /** Accessibility config forwarded to the input element. */
8205
+ accessibilityConfig?: IAccessibilityConfigBase;
8206
+ disabled?: boolean;
8207
+ autoFocus?: boolean;
8208
+ /** Test id forwarded to the input element. */
8209
+ dataTestId?: string;
8210
+ }
8211
+
7934
8212
  /**
7935
8213
  * @internal
7936
8214
  */
@@ -9286,6 +9564,15 @@ export declare function Typography({ tagName: Tag, children, className, title, i
9286
9564
  */
9287
9565
  export declare type TypographyTagName = "h1" | "h2" | "h3" | "p";
9288
9566
 
9567
+ /**
9568
+ * Standalone dialog for adding a grantee, opened from the share dialog's
9569
+ * "+ Add" action. Lets the author search for a user or group, preview the
9570
+ * grantee they picked, and confirm adding them with the footer Add button.
9571
+ *
9572
+ * @internal
9573
+ */
9574
+ export declare function UiAddGranteeDialog({ objectTitle, searchQuery, onSearchQueryChange, selectedGrantee, onBack, onClose, onCancel, onAdd, isAddDisabled, dataTestId }: IUiAddGranteeDialogProps): JSX.Element;
9575
+
9289
9576
  /**
9290
9577
  * @internal
9291
9578
  */
@@ -9364,6 +9651,15 @@ export declare function UiAutofocus({ root, children, ...options }: {
9364
9651
  children: ReactNode;
9365
9652
  } & IUiAutofocusOptions): FunctionComponentElement<any>;
9366
9653
 
9654
+ /**
9655
+ * Circle avatar with a centered icon. Generic small "who" indicator
9656
+ * (grantees, presence, audit log, activity feed, ...). Wrap in a
9657
+ * domain-specific component to pick the right icon + label per kind.
9658
+ *
9659
+ * @internal
9660
+ */
9661
+ export declare function UiAvatar({ icon, size, backgroundColor, iconColor, iconSize, accessibilityConfig, dataTestId }: IUiAvatarProps): JSX.Element;
9662
+
9367
9663
  /**
9368
9664
  * @internal
9369
9665
  */
@@ -9539,8 +9835,8 @@ export declare function UiDialogHeader({ title, titleSize, onClose, leading }: I
9539
9835
  /**
9540
9836
  * Plain dialog card chrome — 4px radius, soft shadow, complementary-0 fill,
9541
9837
  * 20px padding. Holds whatever the caller composes inside. Set
9542
- * <code>isModal</code> for blocking dialogs (adds focus trap, autofocus,
9543
- * return-focus, ESC handling and <code>aria-modal</code>).
9838
+ * `isModal` for blocking dialogs (adds focus trap, autofocus,
9839
+ * return-focus, ESC handling and `aria-modal`).
9544
9840
  *
9545
9841
  * @internal
9546
9842
  */
@@ -9623,6 +9919,33 @@ export declare function UiFocusTrap({ root, children, focusCheckFn }: {
9623
9919
  focusCheckFn?: (element: HTMLElement) => boolean;
9624
9920
  }): FunctionComponentElement<any>;
9625
9921
 
9922
+ /**
9923
+ * Two-row radio used by the OLP share dialog to choose between restricting
9924
+ * access to the listed grantees and granting access to every workspace
9925
+ * member. Composes `UiRadioRow` for each option.
9926
+ *
9927
+ * @internal
9928
+ */
9929
+ export declare function UiGeneralAccessRadio({ value, onChange, workspaceControls, dataTestId }: IUiGeneralAccessRadioProps): JSX.Element;
9930
+
9931
+ /**
9932
+ * 32×32 circle avatar used by the OLP share-dialog grantee list. Thin wrapper
9933
+ * over `UiAvatar` that picks the right silhouette and i18n
9934
+ * accessibility label per grantee kind. Pass `decorative` when
9935
+ * the avatar is paired with a visible name in the same row.
9936
+ *
9937
+ * @internal
9938
+ */
9939
+ export declare function UiGranteeAvatar({ kind, decorative, dataTestId }: IUiGranteeAvatarProps): JSX.Element;
9940
+
9941
+ /**
9942
+ * Grantee row used by the OLP share dialog. Renders avatar + name + optional
9943
+ * email subline + optional "Owner" tag + trailing controls slot.
9944
+ *
9945
+ * @internal
9946
+ */
9947
+ export declare function UiGranteeRow({ kind, name, email, isOwner, controls, dataTestId }: IUiGranteeRowProps): JSX.Element;
9948
+
9626
9949
  /**
9627
9950
  * @internal
9628
9951
  */
@@ -9693,6 +10016,15 @@ export declare function UiMenu<T extends IUiMenuItemData = object, M extends obj
9693
10016
  */
9694
10017
  export declare function UiNavigationBypass({ label, items, onItemClick, style }: IUiNavigationBypassProps): JSX.Element;
9695
10018
 
10019
+ /**
10020
+ * Root component for the OLP share dialog — composes the header, the grantee
10021
+ * list (with its `+ Add` action), the general-access radio, and the
10022
+ * footer Close button.
10023
+ *
10024
+ * @internal
10025
+ */
10026
+ export declare function UiObjectShareDialog({ objectTitle, onClose, grantees, onAddClick, generalAccess, onGeneralAccessChange, workspaceControls, dataTestId }: IUiObjectShareDialogProps): JSX.Element;
10027
+
9696
10028
  /**
9697
10029
  * @internal
9698
10030
  */
@@ -9728,6 +10060,25 @@ export declare type UiPaginationButtonSize = "small" | "large";
9728
10060
  */
9729
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;
9730
10062
 
10063
+ /**
10064
+ * Standalone radio control — renders a native `<input type="radio">` for
10065
+ * accessibility and a custom 14px circle for the visual. The input is overlaid
10066
+ * on the circle, so clicking the circle toggles it. Renders no wrapping
10067
+ * `<label>`: an optional inline label is a sibling associated via `htmlFor`,
10068
+ * which lets `UiRadioRow` supply its own label without nesting.
10069
+ *
10070
+ * @internal
10071
+ */
10072
+ export declare function UiRadio({ checked, onChange, name, value, disabled, accessibilityConfig, tabIndex, label, id, dataTestId }: IUiRadioProps): JSX.Element;
10073
+
10074
+ /**
10075
+ * Selectable row composed of a radio + title + optional description + optional
10076
+ * trailing slot. Mirror of `UiLabelChecklistRow` for the radio case.
10077
+ *
10078
+ * @internal
10079
+ */
10080
+ export declare function UiRadioRow({ checked, onChange, name, value, title, description, trailing, disabled, dataTestId }: IUiRadioRowProps): JSX.Element;
10081
+
9731
10082
  /**
9732
10083
  * @internal
9733
10084
  */
@@ -9834,6 +10185,15 @@ export declare type UiTagProps = {
9834
10185
  */
9835
10186
  export declare function UiTags({ tags, tagOptions, addLabel, nameLabel, cancelLabel, closeLabel, saveLabel, noTagsLabel, moreLabel, removeLabel, creatableLabel, mode, canDeleteTags, canCreateTag, readOnly, onTagClick, onTagAdd, onTagRemove, accessibilityConfig }: IUiTagsProps): JSX.Element;
9836
10187
 
10188
+ /**
10189
+ * Single-line text input with optional label and leading / trailing icons.
10190
+ * The kit's canonical text-field rendering: 32px height, 1px
10191
+ * complementary-4 border, inset shadow, primary-blue focus state.
10192
+ *
10193
+ * @internal
10194
+ */
10195
+ export declare function UiTextInput({ type, value, onChange, label, placeholder, iconBefore, iconAfter, onIconAfter, accessibilityConfig, disabled, autoFocus, dataTestId }: IUiTextInputProps): JSX.Element;
10196
+
9837
10197
  /**
9838
10198
  * @internal
9839
10199
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "11.39.0-alpha.3",
3
+ "version": "11.39.0",
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.39.0-alpha.3",
79
- "@gooddata/sdk-model": "11.39.0-alpha.3",
80
- "@gooddata/sdk-ui": "11.39.0-alpha.3",
81
- "@gooddata/util": "11.39.0-alpha.3",
82
- "@gooddata/sdk-ui-theme-provider": "11.39.0-alpha.3"
78
+ "@gooddata/sdk-backend-spi": "11.39.0",
79
+ "@gooddata/sdk-ui": "11.39.0",
80
+ "@gooddata/sdk-ui-theme-provider": "11.39.0",
81
+ "@gooddata/sdk-model": "11.39.0",
82
+ "@gooddata/util": "11.39.0"
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.39.0-alpha.3",
132
- "@gooddata/oxlint-config": "11.39.0-alpha.3",
133
- "@gooddata/reference-workspace": "11.39.0-alpha.3",
134
- "@gooddata/sdk-backend-mockingbird": "11.39.0-alpha.3",
135
- "@gooddata/stylelint-config": "11.39.0-alpha.3"
131
+ "@gooddata/eslint-config": "11.39.0",
132
+ "@gooddata/oxlint-config": "11.39.0",
133
+ "@gooddata/reference-workspace": "11.39.0",
134
+ "@gooddata/sdk-backend-mockingbird": "11.39.0",
135
+ "@gooddata/stylelint-config": "11.39.0"
136
136
  },
137
137
  "peerDependencies": {
138
138
  "react": "^18.0.0 || ^19.0.0",
@@ -0,0 +1,22 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ .gd-ui-kit-add-grantee-dialog {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--gd-spacing-10px);
7
+ padding-bottom: var(--gd-spacing-5px);
8
+
9
+ &__preview {
10
+ display: flex;
11
+ align-items: center;
12
+ min-height: 50px;
13
+ }
14
+
15
+ &__empty-state {
16
+ flex: 1 1 auto;
17
+ text-align: center;
18
+ font-size: 14px;
19
+ line-height: 20px;
20
+ color: var(--gd-palette-complementary-6);
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ @use "../themeColorsMap" as themeColorsMap;
4
+
5
+ .gd-ui-kit-avatar {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ flex-shrink: 0;
10
+ border-radius: 50%;
11
+ width: var(--gd-avatar-size);
12
+ height: var(--gd-avatar-size);
13
+ background-color: var(--gd-avatar-background-color);
14
+
15
+ &--background {
16
+ @each $key, $value in themeColorsMap.$theme-colors-map {
17
+ &-#{$key} {
18
+ --gd-avatar-background-color: var(--gd-palette-#{$value});
19
+ }
20
+ }
21
+ }
22
+ }
@@ -5,7 +5,6 @@
5
5
  flex-direction: column;
6
6
  padding: var(--gd-spacing-20px);
7
7
  background-color: var(--gd-palette-complementary-0);
8
- font-family: var(--gd-font-family);
9
8
  border-radius: var(--gd-modal-borderRadius);
10
9
  box-shadow: 0 2px 8px var(--gd-shadow-color);
11
10
  }
@@ -0,0 +1,8 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ .gd-ui-kit-general-access-radio {
4
+ display: flex;
5
+ flex-direction: column;
6
+ width: 100%;
7
+ box-sizing: border-box;
8
+ }