@gooddata/sdk-ui-kit 11.43.0-alpha.0 → 11.43.0-alpha.1

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 (73) hide show
  1. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts.map +1 -1
  2. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.js +7 -4
  3. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts +3 -1
  4. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts.map +1 -1
  5. package/esm/@ui/UiGranteeRow/UiGranteeRow.js +2 -2
  6. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts +15 -15
  7. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts.map +1 -1
  8. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.js +20 -18
  9. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts +44 -0
  10. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts.map +1 -0
  11. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.js +76 -0
  12. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts +23 -0
  13. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts.map +1 -0
  14. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.js +83 -0
  15. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts +2 -0
  16. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts.map +1 -1
  17. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.js +1 -1
  18. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +4 -15
  19. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts.map +1 -1
  20. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +11 -23
  21. package/esm/@ui/UiPopover/UiPopover.d.ts +10 -1
  22. package/esm/@ui/UiPopover/UiPopover.d.ts.map +1 -1
  23. package/esm/@ui/UiPopover/UiPopover.js +2 -2
  24. package/esm/@ui/UiTag/UiTag.d.ts +1 -0
  25. package/esm/@ui/UiTag/UiTag.d.ts.map +1 -1
  26. package/esm/@ui/UiTag/UiTag.js +10 -4
  27. package/esm/@ui/UiTags/UiTag.d.ts +0 -2
  28. package/esm/@ui/UiTags/UiTag.d.ts.map +1 -1
  29. package/esm/@ui/UiTags/UiTag.js +14 -9
  30. package/esm/@ui/UiTags/UiTags.d.ts.map +1 -1
  31. package/esm/@ui/UiTags/UiTags.js +38 -24
  32. package/esm/@ui/UiTags/interactions.d.ts +4 -9
  33. package/esm/@ui/UiTags/interactions.d.ts.map +1 -1
  34. package/esm/@ui/UiTags/interactions.js +58 -228
  35. package/esm/@ui/UiTooltip/UiTooltip.d.ts +1 -1
  36. package/esm/@ui/UiTooltip/UiTooltip.d.ts.map +1 -1
  37. package/esm/@ui/UiTooltip/UiTooltip.js +17 -9
  38. package/esm/@ui/UiTooltip/types.d.ts +10 -1
  39. package/esm/@ui/UiTooltip/types.d.ts.map +1 -1
  40. package/esm/Button/Button.d.ts.map +1 -1
  41. package/esm/Button/Button.js +2 -2
  42. package/esm/Icon/icons/InsightIcons/Radar.d.ts.map +1 -1
  43. package/esm/Icon/icons/InsightIcons/Radar.js +3 -1
  44. package/esm/List/MenuList.d.ts +2 -1
  45. package/esm/List/MenuList.d.ts.map +1 -1
  46. package/esm/List/MenuList.js +2 -2
  47. package/esm/index.d.ts +2 -1
  48. package/esm/index.d.ts.map +1 -1
  49. package/esm/index.js +2 -1
  50. package/esm/locales.d.ts +11 -4
  51. package/esm/locales.d.ts.map +1 -1
  52. package/esm/locales.js +5 -4
  53. package/esm/sdk-ui-kit.d.ts +101 -84
  54. package/esm/tsdoc-metadata.json +1 -1
  55. package/package.json +11 -11
  56. package/src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.scss +12 -0
  57. package/src/@ui/UiGranteeRow/UiGranteeRow.scss +5 -0
  58. package/src/@ui/UiGranteeRowControls/UiGranteeRowControls.scss +7 -0
  59. package/src/@ui/{UiLabelsPicker/UiLabelsPicker.scss → UiLabelsChecklist/UiLabelsChecklist.scss} +2 -7
  60. package/src/@ui/UiModalDialog/UiModalDialog.scss +11 -1
  61. package/src/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.scss +10 -0
  62. package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +0 -7
  63. package/src/@ui/UiTabs/UiTabs.scss +0 -1
  64. package/src/@ui/UiTag/UiTag.scss +4 -0
  65. package/src/@ui/UiTags/UiTags.scss +5 -1
  66. package/src/@ui/index.scss +2 -1
  67. package/styles/css/main.css +53 -21
  68. package/styles/css/main.css.map +1 -1
  69. package/styles/images/visualization-types/radar-active.svg +10 -6
  70. package/styles/images/visualization-types/radar.svg +16 -5
  71. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts +0 -64
  72. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts.map +0 -1
  73. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.js +0 -89
@@ -1 +1 @@
1
- {"version":3,"file":"UiGranteeAsyncPicker.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,yCAAyC,CAAC;AAIrG;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,yFAAuF;IACvF,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC3D,gGAAgG;IAChG,eAAe,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,gBAAqB,EACrB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACb,EAAE,0BAA0B,2CA2G5B"}
1
+ {"version":3,"file":"UiGranteeAsyncPicker.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,yCAAyC,CAAC;AAIrG;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,yFAAuF;IACvF,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC3D,gGAAgG;IAChG,eAAe,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,gBAAqB,EACrB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACb,EAAE,0BAA0B,2CAgH5B"}
@@ -55,14 +55,17 @@ export function UiGranteeAsyncPicker({ loadOptions, selectedGrantees = [], onSel
55
55
  onSelect(option.grantee);
56
56
  }, [onSelect]);
57
57
  const autocompleteMessages = useMemo(() => ({
58
- searchPlaceholder: intl.formatMessage(uiGranteeAsyncPickerMessages.searchPlaceholder),
58
+ searchPlaceholder: intl.formatMessage(olpAddGranteeDialogMessages.searchPlaceholder),
59
59
  stateError: intl.formatMessage(uiGranteeAsyncPickerMessages.stateError),
60
60
  stateNoMatch: intl.formatMessage(uiGranteeAsyncPickerMessages.stateNoMatch),
61
61
  }), [intl]);
62
+ const fieldLabel = intl.formatMessage(olpAddGranteeDialogMessages.userOrGroup);
62
63
  return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
63
- _jsx(UiAutocomplete, { loadOptions: adaptedLoadOptions, selectedIds: selectedIds, onSelect: handleSelect, messages: autocompleteMessages, accessibilityConfig: {
64
- ariaLabel: intl.formatMessage(olpAddGranteeDialogMessages.userOrGroup),
65
- } }), selectedGrantees.length === 0 ? (_jsx("div", { className: e("empty-state"), children: intl.formatMessage(olpAddGranteeDialogMessages.emptyState) })) : null, selectedGrantees.length > 0 ? (_jsx("ul", { className: e("picked-list"), children: selectedGrantees.map((g) => {
64
+ _jsxs("div", { className: e("field"), children: [
65
+ _jsx("div", { className: e("field-label"), children: fieldLabel }), _jsx(UiAutocomplete, { loadOptions: adaptedLoadOptions, selectedIds: selectedIds, onSelect: handleSelect, messages: autocompleteMessages, accessibilityConfig: {
66
+ ariaLabel: fieldLabel,
67
+ } })
68
+ ] }), selectedGrantees.length === 0 ? (_jsx("div", { className: e("empty-state"), children: intl.formatMessage(olpAddGranteeDialogMessages.emptyState) })) : null, selectedGrantees.length > 0 ? (_jsx("ul", { className: e("picked-list"), children: selectedGrantees.map((g) => {
66
69
  const triggerLabel = g.permissionLevel === "SHARE" ? canShareLabel : canViewLabel;
67
70
  return (_jsx("li", { className: e("picked-item"), children: _jsx(UiGranteeRow, { kind: g.kind, name: g.name, email: g.email, controls: _jsx(UiPermissionMenu, { selectedLevel: g.permissionLevel, onPermissionChange: (next) => onPermissionChange?.(g, next), onRemoveAccess: onRemove ? () => onRemove(g) : undefined, anchor: _jsx(UiButton, { label: triggerLabel, variant: "dropdownInline", size: "small", iconAfter: "navigateDown" }) }) }) }, g.id));
68
71
  }) })) : null] }));
@@ -12,6 +12,8 @@ export interface IUiGranteeRowProps {
12
12
  email?: string;
13
13
  /** When true, an "Owner" tag is rendered between the text block and the controls slot. */
14
14
  isOwner?: boolean;
15
+ /** When true, the row is visually muted to signal an in-flight save. */
16
+ isPending?: boolean;
15
17
  /** Trailing controls slot — typically the `UiGranteeRowControls` trigger pair. */
16
18
  controls?: ReactNode;
17
19
  /** Test id forwarded to the root element. */
@@ -23,5 +25,5 @@ export interface IUiGranteeRowProps {
23
25
  *
24
26
  * @internal
25
27
  */
26
- export declare function UiGranteeRow({ kind, name, email, isOwner, controls, dataTestId }: IUiGranteeRowProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function UiGranteeRow({ kind, name, email, isOwner, isPending, controls, dataTestId }: IUiGranteeRowProps): import("react/jsx-runtime").JSX.Element;
27
29
  //# sourceMappingURL=UiGranteeRow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiGranteeRow.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeRow/UiGranteeRow.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,uCAAuC,CAAC;AAKhG;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,oDAAkD;IAClD,IAAI,EAAE,iBAAiB,CAAC;IACxB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oFAAkF;IAClF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,kBAAkB,2CAyBpG"}
1
+ {"version":3,"file":"UiGranteeRow.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeRow/UiGranteeRow.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,uCAAuC,CAAC;AAKhG;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,oDAAkD;IAClD,IAAI,EAAE,iBAAiB,CAAC;IACxB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oFAAkF;IAClF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,UAAU,EACb,EAAE,kBAAkB,2CAyBpB"}
@@ -11,9 +11,9 @@ const { b, e } = bem("gd-ui-kit-grantee-row");
11
11
  *
12
12
  * @internal
13
13
  */
14
- export function UiGranteeRow({ kind, name, email, isOwner, controls, dataTestId }) {
14
+ export function UiGranteeRow({ kind, name, email, isOwner, isPending, controls, dataTestId, }) {
15
15
  const intl = useIntl();
16
- return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
16
+ return (_jsxs("div", { className: b({ pending: Boolean(isPending) }), "data-testid": dataTestId, children: [
17
17
  _jsx(UiGranteeAvatar, { kind: kind, decorative: true }), _jsxs("div", { className: e("text"), children: [
18
18
  _jsx("span", { className: e("name"), title: name, children: name }), email ? (_jsx("span", { className: e("email"), title: email, children: email })) : null] }), isOwner ? (_jsx(UiTag, { label: intl.formatMessage(olpGranteeRowMessages.ownerTag), size: "small", variant: "solid" })) : null, controls] }));
19
19
  }
@@ -1,33 +1,33 @@
1
- import { type IUiLabelsPickerItem } from "../UiLabelsPicker/UiLabelsPicker.js";
1
+ import { type IUiLabelsChecklistItem } from "../UiLabelsChecklist/UiLabelsChecklist.js";
2
2
  import { type PermissionMenuLevel } from "../UiPermissionMenu/UiPermissionMenu.js";
3
3
  /**
4
4
  * @internal
5
5
  */
6
6
  export interface IUiGranteeRowControlsProps {
7
- /** All labels available on the parent attribute. */
8
- labels: ReadonlyArray<IUiLabelsPickerItem>;
9
- /** Currently selected label ids. Locked items are always treated as selected. */
7
+ /** Locked items are always treated as selected. */
8
+ labels: ReadonlyArray<IUiLabelsChecklistItem>;
10
9
  selectedLabelIds: ReadonlyArray<string>;
11
- /** Current permission level for the grantee. */
12
10
  permissionLevel: PermissionMenuLevel;
13
- /** Fires when the labels picker commits a new selection. */
11
+ /**
12
+ * Set only when the grantee inherits a higher permission than `permissionLevel`
13
+ * (e.g. from a group); drives the warning badge. Undefined when not elevated.
14
+ */
15
+ effectivePermission?: PermissionMenuLevel;
14
16
  onLabelsChange: (selectedIds: string[]) => void;
15
- /** Fires when the user picks a new permission level. */
16
17
  onPermissionChange: (level: PermissionMenuLevel) => void;
17
- /** Fires when the user picks Transfer ownership in the permission menu. */
18
18
  onTransferOwnership?: () => void;
19
- /** Fires when the user picks Remove access in the permission menu. */
20
19
  onRemoveAccess?: () => void;
21
- /** Test id forwarded to the root element. */
20
+ /** Disables both triggers, e.g. while the row's change is saving. */
21
+ isDisabled?: boolean;
22
22
  dataTestId?: string;
23
23
  }
24
24
  /**
25
- * Pair of controls shown on every grantee row in the OLP share dialog:
26
- * a labels-picker trigger and a permission-menu trigger. Both triggers are
27
- * Tertiary `small` `UiButton`s with `chevronDown`
28
- * and open their respective popovers on click.
25
+ * Per-row controls in the OLP share dialog: a permission trigger
26
+ * ({@link UiPermissionMenu}) plus a "⋯" menu ({@link UiMoreOptionsMenu}) for
27
+ * labels access and Transfer ownership, with an optional inherited-permission
28
+ * warning badge.
29
29
  *
30
30
  * @internal
31
31
  */
32
- export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, dataTestId }: IUiGranteeRowControlsProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, isDisabled, dataTestId }: IUiGranteeRowControlsProps): import("react/jsx-runtime").JSX.Element;
33
33
  //# sourceMappingURL=UiGranteeRowControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiGranteeRowControls.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeRowControls/UiGranteeRowControls.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,mBAAmB,EAG3B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,yCAAyC,CAAC;AAIrG;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,oDAAoD;IACpD,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,iFAAiF;IACjF,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,gDAAgD;IAChD,eAAe,EAAE,mBAAmB,CAAC;IACrC,4DAA4D;IAC5D,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAChD,wDAAwD;IACxD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACb,EAAE,0BAA0B,2CA6C5B"}
1
+ {"version":3,"file":"UiGranteeRowControls.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeRowControls/UiGranteeRowControls.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAExF,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,yCAAyC,CAAC;AAKrG;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,mDAAmD;IACnD,MAAM,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC9C,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,eAAe,EAAE,mBAAmB,CAAC;IACrC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAChD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,UAAU,EACb,EAAE,0BAA0B,2CAgE5B"}
@@ -1,31 +1,33 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
3
  import { useIntl } from "react-intl";
4
- import { olpGranteeControlsMessages, olpPermissionMessages } from "../../locales.js";
4
+ import { olpPermissionMessages } from "../../locales.js";
5
5
  import { bem } from "../@utils/bem.js";
6
6
  import { UiButton } from "../UiButton/UiButton.js";
7
- import { UiLabelsPicker, isLabelsPickerItemChecked, } from "../UiLabelsPicker/UiLabelsPicker.js";
7
+ import { UiIcon } from "../UiIcon/UiIcon.js";
8
+ import { UiMoreOptionsMenu } from "../UiMoreOptionsMenu/UiMoreOptionsMenu.js";
8
9
  import { UiPermissionMenu } from "../UiPermissionMenu/UiPermissionMenu.js";
9
- const { b } = bem("gd-ui-kit-grantee-row-controls");
10
+ import { UiTooltip } from "../UiTooltip/UiTooltip.js";
11
+ const { b, e } = bem("gd-ui-kit-grantee-row-controls");
10
12
  /**
11
- * Pair of controls shown on every grantee row in the OLP share dialog:
12
- * a labels-picker trigger and a permission-menu trigger. Both triggers are
13
- * Tertiary `small` `UiButton`s with `chevronDown`
14
- * and open their respective popovers on click.
13
+ * Per-row controls in the OLP share dialog: a permission trigger
14
+ * ({@link UiPermissionMenu}) plus a "⋯" menu ({@link UiMoreOptionsMenu}) for
15
+ * labels access and Transfer ownership, with an optional inherited-permission
16
+ * warning badge.
15
17
  *
16
18
  * @internal
17
19
  */
18
- export function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, dataTestId, }) {
20
+ export function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, onLabelsChange, onPermissionChange, onTransferOwnership, onRemoveAccess, isDisabled, dataTestId, }) {
19
21
  const intl = useIntl();
20
- const total = labels.length;
21
- // Locked labels always count as selected. Reuse the picker's predicate so the
22
- // trigger never shows "N-1 of N" when a locked id is omitted from selectedLabelIds.
23
- const selected = labels.filter((label) => isLabelsPickerItemChecked(label, selectedLabelIds)).length;
24
- const labelsTriggerText = selected === total
25
- ? intl.formatMessage(olpGranteeControlsMessages.allLabels)
26
- : intl.formatMessage(olpGranteeControlsMessages.labelsCount, { selected, total });
22
+ const hasLabels = labels.length > 0;
27
23
  const permissionTriggerText = intl.formatMessage(permissionLevel === "SHARE" ? olpPermissionMessages.canViewAndShare : olpPermissionMessages.canView);
28
- return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
29
- _jsx(UiLabelsPicker, { anchor: _jsx(UiButton, { label: labelsTriggerText, size: "small", variant: "dropdownInline", iconAfter: "navigateDown" }), items: labels, defaultSelectedIds: selectedLabelIds, onApply: onLabelsChange }), _jsx(UiPermissionMenu, { anchor: _jsx(UiButton, { label: permissionTriggerText, size: "small", variant: "dropdownInline", iconAfter: "navigateDown" }), selectedLevel: permissionLevel, onPermissionChange: onPermissionChange, onTransferOwnership: onTransferOwnership, onRemoveAccess: onRemoveAccess })
30
- ] }));
24
+ // No labels and no transfer → nothing in the ⋯ menu, so drop it.
25
+ const hasMoreOptions = hasLabels || !!onTransferOwnership;
26
+ // Guard on permissionLevel too, so the badge can't show when the assigned
27
+ // level already matches the inherited one.
28
+ const isInheritedHigherPermission = permissionLevel === "VIEW" && effectivePermission === "SHARE";
29
+ const effectiveTooltip = isInheritedHigherPermission
30
+ ? intl.formatMessage(olpPermissionMessages.effectivePermissionTooltipShare)
31
+ : undefined;
32
+ return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [effectiveTooltip ? (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], content: effectiveTooltip, anchor: _jsx("span", { className: e("effective-warning"), role: "img", "aria-label": intl.formatMessage(olpPermissionMessages.effectivePermissionAriaLabel), tabIndex: 0, children: _jsx(UiIcon, { type: "warning", size: 16, color: "warning" }) }) })) : null, _jsx(UiPermissionMenu, { anchor: _jsx(UiButton, { label: permissionTriggerText, size: "small", variant: "dropdownInline", iconAfter: "navigateDown", isDisabled: isDisabled }), selectedLevel: permissionLevel, onPermissionChange: onPermissionChange, onRemoveAccess: onRemoveAccess }), hasMoreOptions ? (_jsx(UiMoreOptionsMenu, { labels: hasLabels ? labels : undefined, selectedLabelIds: selectedLabelIds, onLabelsChange: onLabelsChange, onTransferOwnership: onTransferOwnership, isDisabled: isDisabled })) : null] }));
31
33
  }
@@ -0,0 +1,44 @@
1
+ import { type LabelRowKind } from "../UiLabelRow/UiLabelRow.js";
2
+ /**
3
+ * One label entry in the checklist.
4
+ *
5
+ * @internal
6
+ */
7
+ export interface IUiLabelsChecklistItem {
8
+ id: string;
9
+ label: string;
10
+ kind?: LabelRowKind;
11
+ /** Locked rows render checked + disabled and are always included (the primary key). */
12
+ locked?: boolean;
13
+ }
14
+ /**
15
+ * Whether an item counts as selected: locked items always do, otherwise
16
+ * membership in `selectedIds`. Exported so callers apply the same rule.
17
+ *
18
+ * @internal
19
+ */
20
+ export declare const isLabelsChecklistItemChecked: (item: IUiLabelsChecklistItem, selectedIds: readonly string[]) => boolean;
21
+ /**
22
+ * @internal
23
+ */
24
+ export interface IUiLabelsChecklistProps {
25
+ items: ReadonlyArray<IUiLabelsChecklistItem>;
26
+ /** Locked items are always selected regardless of this. */
27
+ defaultSelectedIds: ReadonlyArray<string>;
28
+ /** Fires on Apply with the locked-augmented selection (staged internally until then). */
29
+ onApply: (selectedIds: string[]) => void;
30
+ /** Back arrow — returns to the parent view. */
31
+ onBack: () => void;
32
+ /** Dismisses the menu; Cancel and (post-commit) Apply both call it. */
33
+ onClose: () => void;
34
+ dataTestId?: string;
35
+ }
36
+ /**
37
+ * Per-label checklist drill-in for the grantee "⋯" menu. Stages selection
38
+ * internally, commits via `onApply`, and renders its own back-only header so it
39
+ * slots into {@link UiMenu} as a `showComponentOnly` content item.
40
+ *
41
+ * @internal
42
+ */
43
+ export declare function UiLabelsChecklist({ items, defaultSelectedIds, onApply, onBack, onClose, dataTestId }: IUiLabelsChecklistProps): import("react/jsx-runtime").JSX.Element;
44
+ //# sourceMappingURL=UiLabelsChecklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiLabelsChecklist.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiLabelsChecklist/UiLabelsChecklist.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,uFAAuF;IACvF,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,2EAG0B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC7C,2DAA2D;IAC3D,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,yFAAyF;IACzF,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACzC,iDAA+C;IAC/C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,uEAAuE;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,KAAK,EACL,kBAAkB,EAClB,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACb,EAAE,uBAAuB,2CA6FzB"}
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useCallback, useId, useMemo, useState } from "react";
4
+ import { useIntl } from "react-intl";
5
+ import { commonDialogMessages, olpLabelMessages } from "../../locales.js";
6
+ import { bem } from "../@utils/bem.js";
7
+ import { UiButton } from "../UiButton/UiButton.js";
8
+ import { UiLabelChecklistRow } from "../UiLabelChecklistRow/UiLabelChecklistRow.js";
9
+ import { UiSubmenuHeader } from "../UiSubmenuHeader/UiSubmenuHeader.js";
10
+ const { b, e } = bem("gd-ui-kit-labels-checklist");
11
+ /**
12
+ * Whether an item counts as selected: locked items always do, otherwise
13
+ * membership in `selectedIds`. Exported so callers apply the same rule.
14
+ *
15
+ * @internal
16
+ */
17
+ export const isLabelsChecklistItemChecked = (item, selectedIds) => item.locked === true || selectedIds.includes(item.id);
18
+ /**
19
+ * Per-label checklist drill-in for the grantee "⋯" menu. Stages selection
20
+ * internally, commits via `onApply`, and renders its own back-only header so it
21
+ * slots into {@link UiMenu} as a `showComponentOnly` content item.
22
+ *
23
+ * @internal
24
+ */
25
+ export function UiLabelsChecklist({ items, defaultSelectedIds, onApply, onBack, onClose, dataTestId, }) {
26
+ const intl = useIntl();
27
+ const groupId = useId();
28
+ // Staged toggles only; locked ids are folded in by the predicate, not stored here.
29
+ const [selected, setSelected] = useState(() => [...defaultSelectedIds]);
30
+ const toggle = useCallback((id, next) => {
31
+ setSelected((prev) => next ? (prev.includes(id) ? prev : [...prev, id]) : prev.filter((x) => x !== id));
32
+ }, []);
33
+ const handleApply = useCallback(() => {
34
+ onApply(items.filter((item) => isLabelsChecklistItemChecked(item, selected)).map((item) => item.id));
35
+ onClose();
36
+ }, [items, selected, onApply, onClose]);
37
+ const isDirty = useMemo(() => {
38
+ // Compare against the locked-augmented initial set, so an unchanged
39
+ // selection stays non-dirty even when defaultSelectedIds omits a locked id.
40
+ const initial = new Set();
41
+ for (const id of defaultSelectedIds)
42
+ initial.add(id);
43
+ for (const item of items)
44
+ if (item.locked)
45
+ initial.add(item.id);
46
+ const current = new Set();
47
+ for (const item of items) {
48
+ if (isLabelsChecklistItemChecked(item, selected))
49
+ current.add(item.id);
50
+ }
51
+ if (initial.size !== current.size)
52
+ return true;
53
+ for (const id of initial) {
54
+ if (!current.has(id))
55
+ return true;
56
+ }
57
+ return false;
58
+ }, [items, defaultSelectedIds, selected]);
59
+ const handleKeyDown = (event) => {
60
+ // Enter commits — scoped to the rows so the footer buttons keep native Enter.
61
+ if (event.key === "Enter" && isDirty) {
62
+ event.preventDefault();
63
+ handleApply();
64
+ }
65
+ };
66
+ const suffixFor = (kind) => {
67
+ if (!kind)
68
+ return undefined;
69
+ return intl.formatMessage(kind === "primary" ? olpLabelMessages.suffixPrimary : olpLabelMessages.suffixDefault);
70
+ };
71
+ return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
72
+ _jsx(UiSubmenuHeader, { title: intl.formatMessage(olpLabelMessages.popoverTitle), backAriaLabel: intl.formatMessage(olpLabelMessages.backAriaLabel), height: "medium", onBack: onBack }), _jsx("div", { id: groupId, className: e("items"), role: "group", "aria-label": intl.formatMessage(olpLabelMessages.popoverTitle), onKeyDown: handleKeyDown, children: items.map((item) => (_jsx(UiLabelChecklistRow, { label: item.label, kind: item.kind, suffix: suffixFor(item.kind), checked: isLabelsChecklistItemChecked(item, selected), disabled: item.locked, onChange: (next) => toggle(item.id, next) }, item.id))) }), _jsxs("div", { className: e("actions"), children: [
73
+ _jsx(UiButton, { variant: "secondary", size: "small", label: intl.formatMessage(commonDialogMessages.cancel), onClick: onClose }), _jsx(UiButton, { variant: "primary", size: "small", label: intl.formatMessage(commonDialogMessages.apply), onClick: handleApply, isDisabled: !isDirty })
74
+ ] })
75
+ ] }));
76
+ }
@@ -0,0 +1,23 @@
1
+ import { type IUiLabelsChecklistItem } from "../UiLabelsChecklist/UiLabelsChecklist.js";
2
+ /**
3
+ * @internal
4
+ */
5
+ export interface IUiMoreOptionsMenuProps {
6
+ /** Empty/omitted hides the "Manage labels access" row (e.g. facts have no labels). */
7
+ labels?: ReadonlyArray<IUiLabelsChecklistItem>;
8
+ /** Locked items are always treated as selected. */
9
+ selectedLabelIds?: ReadonlyArray<string>;
10
+ onLabelsChange?: (selectedIds: string[]) => void;
11
+ /** Omit to hide the row (Transfer ownership is gated until wired). */
12
+ onTransferOwnership?: () => void;
13
+ isDisabled?: boolean;
14
+ dataTestId?: string;
15
+ }
16
+ /**
17
+ * Per-grantee "⋯" menu: "Manage labels access" (drills into {@link UiLabelsChecklist})
18
+ * and "Transfer ownership". Each row shows only when its data/handler is given.
19
+ *
20
+ * @internal
21
+ */
22
+ export declare function UiMoreOptionsMenu({ labels, selectedLabelIds, onLabelsChange, onTransferOwnership, isDisabled, dataTestId }: IUiMoreOptionsMenuProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=UiMoreOptionsMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiMoreOptionsMenu.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,sBAAsB,EAAqB,MAAM,2CAA2C,CAAC;AAO3G;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,sFAAsF;IACtF,MAAM,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/C,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAuCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,UAAU,EACb,EAAE,uBAAuB,2CAwFzB"}
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useId, useMemo, useRef } from "react";
4
+ import { useIntl } from "react-intl";
5
+ import { olpPermissionMessages } from "../../locales.js";
6
+ import { bem } from "../@utils/bem.js";
7
+ import { UiIcon } from "../UiIcon/UiIcon.js";
8
+ import { UiIconButton } from "../UiIconButton/UiIconButton.js";
9
+ import { UiLabelsChecklist } from "../UiLabelsChecklist/UiLabelsChecklist.js";
10
+ import { UiMenu } from "../UiMenu/UiMenu.js";
11
+ import { UiPopover } from "../UiPopover/UiPopover.js";
12
+ const { b } = bem("gd-ui-kit-more-options-menu");
13
+ // Defined at module scope, and reading data through a ref, so its identity never
14
+ // changes across renders — UiMenu remounts the drill-in on a new component type,
15
+ // which would drop the checklist's staged edits.
16
+ function LabelsChecklistContent({ onBack, onClose, dataRef }) {
17
+ const data = dataRef.current;
18
+ return (_jsx(UiLabelsChecklist, { items: data.labels, defaultSelectedIds: data.selectedLabelIds, onApply: (ids) => data.onLabelsChange?.(ids), onBack: onBack, onClose: onClose, dataTestId: data.dataTestId }));
19
+ }
20
+ /**
21
+ * Per-grantee "⋯" menu: "Manage labels access" (drills into {@link UiLabelsChecklist})
22
+ * and "Transfer ownership". Each row shows only when its data/handler is given.
23
+ *
24
+ * @internal
25
+ */
26
+ export function UiMoreOptionsMenu({ labels, selectedLabelIds, onLabelsChange, onTransferOwnership, isDisabled, dataTestId, }) {
27
+ const intl = useIntl();
28
+ const menuId = useId();
29
+ const hasLabels = (labels?.length ?? 0) > 0;
30
+ // Feed the live inputs to the stable content component through a ref so the
31
+ // component itself never has to change (see LabelsChecklistContent).
32
+ const dataRef = useRef({
33
+ labels: labels ?? [],
34
+ selectedLabelIds: selectedLabelIds ?? [],
35
+ onLabelsChange,
36
+ dataTestId,
37
+ });
38
+ dataRef.current = {
39
+ labels: labels ?? [],
40
+ selectedLabelIds: selectedLabelIds ?? [],
41
+ onLabelsChange,
42
+ dataTestId,
43
+ };
44
+ const labelsContentRef = useRef(undefined);
45
+ if (!labelsContentRef.current) {
46
+ labelsContentRef.current = (props) => _jsx(LabelsChecklistContent, { ...props, dataRef: dataRef });
47
+ }
48
+ const items = useMemo(() => {
49
+ const result = [];
50
+ if (hasLabels) {
51
+ result.push({
52
+ type: "content",
53
+ id: "labels",
54
+ stringTitle: intl.formatMessage(olpPermissionMessages.labels),
55
+ showComponentOnly: true,
56
+ // UiMenu adds the trailing drill-in chevron itself; we only set the leading icon.
57
+ iconLeft: _jsx(UiIcon, { type: "ldmLabel", size: 16, color: "complementary-7" }),
58
+ data: undefined,
59
+ Component: labelsContentRef.current,
60
+ });
61
+ }
62
+ if (onTransferOwnership) {
63
+ result.push({
64
+ type: "interactive",
65
+ id: "transfer",
66
+ stringTitle: intl.formatMessage(olpPermissionMessages.transferOwnership),
67
+ iconLeft: _jsx(UiIcon, { type: "sync", size: 16, color: "complementary-7" }),
68
+ data: undefined,
69
+ });
70
+ }
71
+ return result;
72
+ }, [hasLabels, onTransferOwnership, intl]);
73
+ return (_jsx(UiPopover, { anchor: _jsx(UiIconButton, { icon: "ellipsis", variant: "tertiary", size: "large", iconColor: "complementary-6", isDisabled: isDisabled, accessibilityConfig: {
74
+ ariaLabel: intl.formatMessage(olpPermissionMessages.moreOptionsAriaLabel),
75
+ } }), anchorAccessibilityConfig: { ariaHaspopup: "menu" }, width: 200, content: ({ onClose }) => (_jsx("div", { className: b(), "data-testid": dataTestId, children: _jsx(UiMenu, { items: items, size: "small", onSelect: (item) => {
76
+ if (item.id === "transfer") {
77
+ onTransferOwnership?.();
78
+ }
79
+ }, onClose: onClose, ariaAttributes: {
80
+ id: menuId,
81
+ "aria-label": intl.formatMessage(olpPermissionMessages.moreOptionsMenuLabel),
82
+ } }) })) }));
83
+ }
@@ -19,6 +19,8 @@ export interface IUiObjectShareDialogGrantee {
19
19
  email?: string;
20
20
  /** When true, the row is rendered with the "Owner" tag instead of controls. */
21
21
  isOwner?: boolean;
22
+ /** When true, the row is visually muted to signal an in-flight save. */
23
+ isPending?: boolean;
22
24
  /** Per-row controls — usually `UiGranteeRowControls`. Owner rows leave this empty. */
23
25
  controls?: ReactNode;
24
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UiObjectShareDialogCard.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiObjectShareDialog/UiObjectShareDialogCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,EACH,KAAK,kBAAkB,EAE1B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAQ/E;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IACxC,+DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wFAAsF;IACtF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,6EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,0EAA0E;IAC1E,QAAQ,EAAE,2BAA2B,EAAE,CAAC;IACxC,4EAA4E;IAC5E,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,sCAAsC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,mEAAmE;IACnE,qBAAqB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC3D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAE9B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,WAAW,EACX,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACb,EAAE,6BAA6B,2CAiD/B"}
1
+ {"version":3,"file":"UiObjectShareDialogCard.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiObjectShareDialog/UiObjectShareDialogCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,EACH,KAAK,kBAAkB,EAE1B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAQ/E;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IACxC,+DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wFAAsF;IACtF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,6EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,0EAA0E;IAC1E,QAAQ,EAAE,2BAA2B,EAAE,CAAC;IACxC,4EAA4E;IAC5E,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,sCAAsC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,mEAAmE;IACnE,qBAAqB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC3D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAE9B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,WAAW,EACX,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACb,EAAE,6BAA6B,2CAkD/B"}
@@ -21,6 +21,6 @@ export function UiObjectShareDialogCard({ objectTitle, onClose, grantees, onAddC
21
21
  const intl = useIntl();
22
22
  const dialogTitle = intl.formatMessage(olpObjectShareDialogMessages.title, { title: objectTitle });
23
23
  return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
24
- _jsx(UiDialogHeader, { title: dialogTitle, onClose: onClose }), _jsx(UiSectionHeading, { label: intl.formatMessage(olpObjectShareDialogMessages.sharedWith), action: _jsx(UiButton, { label: intl.formatMessage(olpObjectShareDialogMessages.add), variant: "popout", size: "small", iconBefore: "plus", onClick: onAddClick }) }), _jsx("div", { className: e("grantees"), children: grantees.map((grantee) => (_jsx(UiGranteeRow, { kind: grantee.kind, name: grantee.name, email: grantee.email, isOwner: grantee.isOwner, controls: grantee.controls }, grantee.id))) }), _jsx(UiSectionHeading, { label: intl.formatMessage(olpObjectShareDialogMessages.generalAccess) }), _jsx(UiGeneralAccessRadio, { value: generalAccess, onChange: onGeneralAccessChange, workspaceControls: workspaceControls }), _jsx(UiDialogFooter, { divider: true, children: _jsx(UiButton, { label: intl.formatMessage(commonDialogMessages.close), variant: "secondary", size: "medium", onClick: onClose }) })
24
+ _jsx(UiDialogHeader, { title: dialogTitle, onClose: onClose }), _jsx(UiSectionHeading, { label: intl.formatMessage(olpObjectShareDialogMessages.sharedWith), action: _jsx(UiButton, { label: intl.formatMessage(olpObjectShareDialogMessages.add), variant: "popout", size: "small", iconBefore: "plus", onClick: onAddClick }) }), _jsx("div", { className: e("grantees"), children: grantees.map((grantee) => (_jsx(UiGranteeRow, { kind: grantee.kind, name: grantee.name, email: grantee.email, isOwner: grantee.isOwner, isPending: grantee.isPending, controls: grantee.controls }, grantee.id))) }), _jsx(UiSectionHeading, { label: intl.formatMessage(olpObjectShareDialogMessages.generalAccess) }), _jsx(UiGeneralAccessRadio, { value: generalAccess, onChange: onGeneralAccessChange, workspaceControls: workspaceControls }), _jsx(UiDialogFooter, { divider: true, children: _jsx(UiButton, { label: intl.formatMessage(commonDialogMessages.close), variant: "secondary", size: "medium", onClick: onClose }) })
25
25
  ] }));
26
26
  }
@@ -15,18 +15,6 @@ export interface IUiPermissionMenuProps {
15
15
  selectedLevel?: PermissionMenuLevel;
16
16
  /** Fires when the user picks a permission level. */
17
17
  onPermissionChange: (level: PermissionMenuLevel) => void;
18
- /** Fires when the user picks Transfer ownership. */
19
- onTransferOwnership?: () => void;
20
- /**
21
- * Fires when the user picks the Labels entry. Display the count via
22
- * `labelsCounter`.
23
- */
24
- onLabelsClick?: () => void;
25
- /**
26
- * Counter shown next to the Labels row (e.g. `"4/4"`). Hidden
27
- * if omitted.
28
- */
29
- labelsCounter?: string;
30
18
  /** Fires when the user picks Remove access. */
31
19
  onRemoveAccess?: () => void;
32
20
  /** Test id forwarded to the menu body. */
@@ -35,10 +23,11 @@ export interface IUiPermissionMenuProps {
35
23
  /**
36
24
  * Per-grantee permission popover. Renders a fixed set of rows — two
37
25
  * permission levels (Can view & share / Can view), an optional divider,
38
- * and optional Transfer ownership / Labels / Remove access action rows.
39
- * Each level row carries an `infoCircle` tooltip.
26
+ * and an optional Remove access action row. Each level row carries an
27
+ * `infoCircle` tooltip. Labels and Transfer ownership live in the separate
28
+ * {@link UiMoreOptionsMenu}.
40
29
  *
41
30
  * @internal
42
31
  */
43
- export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onTransferOwnership, onLabelsClick, labelsCounter, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): import("react/jsx-runtime").JSX.Element;
44
33
  //# sourceMappingURL=UiPermissionMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiPermissionMenu.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiPermissionMenu/UiPermissionMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAU,MAAM,OAAO,CAAC;AAYtE;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,4CAA4C;IAC5C,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1B,qEAAmE;IACnE,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,oDAAoD;IACpD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAiBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACb,EAAE,sBAAsB,2CAoBxB"}
1
+ {"version":3,"file":"UiPermissionMenu.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiPermissionMenu/UiPermissionMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAU,MAAM,OAAO,CAAC;AActE;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,4CAA4C;IAC5C,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1B,qEAAmE;IACnE,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,oDAAoD;IACpD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAkBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,UAAU,EACb,EAAE,sBAAsB,2CAiBxB"}
@@ -4,6 +4,7 @@ import { useRef } from "react";
4
4
  import { useIntl } from "react-intl";
5
5
  import { olpPermissionMessages } from "../../locales.js";
6
6
  import { bem } from "../@utils/bem.js";
7
+ import { UiIcon } from "../UiIcon/UiIcon.js";
7
8
  import { UiIconButton } from "../UiIconButton/UiIconButton.js";
8
9
  import { UiPopover } from "../UiPopover/UiPopover.js";
9
10
  import { UiTooltip } from "../UiTooltip/UiTooltip.js";
@@ -11,15 +12,16 @@ const { b, e } = bem("gd-ui-kit-permission-menu");
11
12
  /**
12
13
  * Per-grantee permission popover. Renders a fixed set of rows — two
13
14
  * permission levels (Can view & share / Can view), an optional divider,
14
- * and optional Transfer ownership / Labels / Remove access action rows.
15
- * Each level row carries an `infoCircle` tooltip.
15
+ * and an optional Remove access action row. Each level row carries an
16
+ * `infoCircle` tooltip. Labels and Transfer ownership live in the separate
17
+ * {@link UiMoreOptionsMenu}.
16
18
  *
17
19
  * @internal
18
20
  */
19
- export function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onTransferOwnership, onLabelsClick, labelsCounter, onRemoveAccess, dataTestId, }) {
20
- return (_jsx(UiPopover, { anchor: anchor, anchorAccessibilityConfig: { ariaHaspopup: "menu" }, width: 180, content: ({ onClose }) => (_jsx(MenuBody, { selectedLevel: selectedLevel, onPermissionChange: onPermissionChange, onTransferOwnership: onTransferOwnership, onLabelsClick: onLabelsClick, labelsCounter: labelsCounter, onRemoveAccess: onRemoveAccess, onClose: onClose, dataTestId: dataTestId })) }));
21
+ export function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, onRemoveAccess, dataTestId, }) {
22
+ return (_jsx(UiPopover, { anchor: anchor, anchorAccessibilityConfig: { ariaHaspopup: "menu" }, width: 180, content: ({ onClose }) => (_jsx(MenuBody, { selectedLevel: selectedLevel, onPermissionChange: onPermissionChange, onRemoveAccess: onRemoveAccess, onClose: onClose, dataTestId: dataTestId })) }));
21
23
  }
22
- function MenuBody({ selectedLevel, onPermissionChange, onTransferOwnership, onLabelsClick, labelsCounter, onRemoveAccess, onClose, dataTestId, }) {
24
+ function MenuBody({ selectedLevel, onPermissionChange, onRemoveAccess, onClose, dataTestId, }) {
23
25
  const intl = useIntl();
24
26
  const choose = (next) => () => {
25
27
  next();
@@ -42,25 +44,11 @@ function MenuBody({ selectedLevel, onPermissionChange, onTransferOwnership, onLa
42
44
  },
43
45
  ];
44
46
  const actionItems = [];
45
- if (onTransferOwnership) {
46
- actionItems.push({
47
- key: "transfer",
48
- label: intl.formatMessage(olpPermissionMessages.transferOwnership),
49
- onClick: choose(onTransferOwnership),
50
- });
51
- }
52
- if (onLabelsClick) {
53
- actionItems.push({
54
- key: "labels",
55
- label: intl.formatMessage(olpPermissionMessages.labels),
56
- counter: labelsCounter,
57
- onClick: choose(onLabelsClick),
58
- });
59
- }
60
47
  if (onRemoveAccess) {
61
48
  actionItems.push({
62
49
  key: "remove",
63
50
  label: intl.formatMessage(olpPermissionMessages.removeAccess),
51
+ icon: "trash",
64
52
  onClick: choose(onRemoveAccess),
65
53
  });
66
54
  }
@@ -99,13 +87,13 @@ function PermissionMenuItem({ item, selectedLevel }) {
99
87
  const intl = useIntl();
100
88
  // Tooltip anchor must live OUTSIDE the menu-item button so we don't nest an
101
89
  // interactive element inside a button (invalid HTML, breaks focus). The row
102
- // wrapper provides the flex layout; the button covers label + counter; the
90
+ // wrapper provides the flex layout; the button covers the label; the
103
91
  // tooltip sits next to the button.
104
92
  const isRadio = !!item.radioValue;
105
93
  const isChecked = isRadio && item.radioValue === selectedLevel;
106
94
  return (_jsxs("div", { className: e("item-row"), children: [
107
- _jsxs("button", { type: "button", role: isRadio ? "menuitemradio" : "menuitem", "aria-checked": isRadio ? isChecked : undefined, className: e("item"), onClick: item.onClick, children: [
108
- _jsx("span", { className: e("item-label"), children: item.label }), item.counter ? _jsx("span", { className: e("item-counter"), children: item.counter }) : null] }), item.tooltip ? (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], content: item.tooltip, anchor: _jsx(UiIconButton, { icon: "infoCircle", variant: "tertiary", size: "small", accessibilityConfig: {
95
+ _jsxs("button", { type: "button", role: isRadio ? "menuitemradio" : "menuitem", "aria-checked": isRadio ? isChecked : undefined, className: e("item"), onClick: item.onClick, children: [item.icon ? _jsx(UiIcon, { type: item.icon, size: 16, color: "complementary-7" }) : null, _jsx("span", { className: e("item-label"), children: item.label })
96
+ ] }), item.tooltip ? (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], content: item.tooltip, anchor: _jsx(UiIconButton, { icon: "infoCircle", variant: "tertiary", size: "small", accessibilityConfig: {
109
97
  ariaLabel: intl.formatMessage(olpPermissionMessages.moreInfoAriaLabel, {
110
98
  label: item.label,
111
99
  }),
@@ -46,11 +46,20 @@ export interface IUiPopoverProps {
46
46
  * When true, uses UiFocusManager's focus trap instead of tabOutHandler
47
47
  */
48
48
  enableFocusTrap?: boolean;
49
+ /**
50
+ * Controls the open state. When set, the popover ignores anchor clicks and
51
+ * opens/closes purely from this prop; pair with `onOpenChange` to
52
+ * react to outside-click / Escape. When omitted the popover stays
53
+ * uncontrolled and opens on anchor click as before.
54
+ */
55
+ isOpen?: boolean;
56
+ /** Fires when an interaction (outside-click, Escape) requests an open-state change. */
57
+ onOpenChange?: (open: boolean) => void;
49
58
  onOpen?: () => void;
50
59
  onClose?: () => void;
51
60
  }
52
61
  /**
53
62
  * @internal
54
63
  */
55
- 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): import("react/jsx-runtime").JSX.Element;
64
+ export declare function UiPopover({ id, accessibilityConfig, anchor, anchorAccessibilityConfig, width, title, tabIndex, disabled, content, footer, closeText, closeVisible, initialFocus, returnFocusTo, triggerBy, returnFocusAfterClose, focusCheckFn, enableFocusTrap, isOpen, onOpenChange, onOpen, onClose }: IUiPopoverProps): import("react/jsx-runtime").JSX.Element;
56
65
  //# sourceMappingURL=UiPopover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiPopover.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiPopover/UiPopover.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,cAAc,EAEnB,KAAK,YAAY,EACjB,KAAK,SAAS,EAGd,KAAK,SAAS,EAIjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAM/E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAqB7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1B;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE;QACxB,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QACvE,YAAY,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;KAClD,CAAC;IACF,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IACpE,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAChD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IACjD;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACtB,EAAE,EACF,mBAAgD,EAChD,MAAM,EACN,yBAAyB,EACzB,KAAiB,EACjB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,SAAqB,EACrB,qBAA4B,EAC5B,YAAkC,EAClC,eAAuB,EACvB,MAAM,EACN,OAAO,EACV,EAAE,eAAe,2CA4GjB"}
1
+ {"version":3,"file":"UiPopover.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiPopover/UiPopover.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,cAAc,EAEnB,KAAK,YAAY,EACjB,KAAK,SAAS,EAGd,KAAK,SAAS,EAIjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAM/E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAqB7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1B;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE;QACxB,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QACvE,YAAY,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;KAClD,CAAC;IACF,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IACpE,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAChD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IACjD;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACtB,EAAE,EACF,mBAAgD,EAChD,MAAM,EACN,yBAAyB,EACzB,KAAiB,EACjB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,SAAqB,EACrB,qBAA4B,EAC5B,YAAkC,EAClC,eAAuB,EACvB,MAAM,EACN,YAAY,EACZ,MAAM,EACN,OAAO,EACV,EAAE,eAAe,2CA8GjB"}