@gooddata/sdk-ui-kit 11.42.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.
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts.map +1 -1
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.js +7 -4
- package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts +3 -1
- package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts.map +1 -1
- package/esm/@ui/UiGranteeRow/UiGranteeRow.js +2 -2
- package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts +15 -15
- package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts.map +1 -1
- package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.js +20 -18
- package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts +44 -0
- package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts.map +1 -0
- package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.js +76 -0
- package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts +23 -0
- package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts.map +1 -0
- package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.js +83 -0
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts +2 -0
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts.map +1 -1
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.js +1 -1
- package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +4 -15
- package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts.map +1 -1
- package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +11 -23
- package/esm/@ui/UiPopover/UiPopover.d.ts +10 -1
- package/esm/@ui/UiPopover/UiPopover.d.ts.map +1 -1
- package/esm/@ui/UiPopover/UiPopover.js +2 -2
- package/esm/@ui/UiTag/UiTag.d.ts +1 -0
- package/esm/@ui/UiTag/UiTag.d.ts.map +1 -1
- package/esm/@ui/UiTag/UiTag.js +10 -4
- package/esm/@ui/UiTags/UiTag.d.ts +0 -2
- package/esm/@ui/UiTags/UiTag.d.ts.map +1 -1
- package/esm/@ui/UiTags/UiTag.js +14 -9
- package/esm/@ui/UiTags/UiTags.d.ts.map +1 -1
- package/esm/@ui/UiTags/UiTags.js +38 -24
- package/esm/@ui/UiTags/interactions.d.ts +4 -9
- package/esm/@ui/UiTags/interactions.d.ts.map +1 -1
- package/esm/@ui/UiTags/interactions.js +58 -228
- package/esm/@ui/UiTooltip/UiTooltip.d.ts +1 -1
- package/esm/@ui/UiTooltip/UiTooltip.d.ts.map +1 -1
- package/esm/@ui/UiTooltip/UiTooltip.js +17 -9
- package/esm/@ui/UiTooltip/types.d.ts +10 -1
- package/esm/@ui/UiTooltip/types.d.ts.map +1 -1
- package/esm/Button/Button.d.ts.map +1 -1
- package/esm/Button/Button.js +2 -2
- package/esm/Icon/icons/InsightIcons/Radar.d.ts.map +1 -1
- package/esm/Icon/icons/InsightIcons/Radar.js +3 -1
- package/esm/List/MenuList.d.ts +2 -1
- package/esm/List/MenuList.d.ts.map +1 -1
- package/esm/List/MenuList.js +2 -2
- package/esm/index.d.ts +2 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -1
- package/esm/locales.d.ts +11 -4
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +5 -4
- package/esm/sdk-ui-kit.d.ts +101 -84
- package/esm/tsdoc-metadata.json +1 -1
- package/package.json +11 -11
- package/src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.scss +12 -0
- package/src/@ui/UiGranteeRow/UiGranteeRow.scss +5 -0
- package/src/@ui/UiGranteeRowControls/UiGranteeRowControls.scss +7 -0
- package/src/@ui/{UiLabelsPicker/UiLabelsPicker.scss → UiLabelsChecklist/UiLabelsChecklist.scss} +2 -7
- package/src/@ui/UiModalDialog/UiModalDialog.scss +11 -1
- package/src/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.scss +10 -0
- package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +0 -7
- package/src/@ui/UiTabs/UiTabs.scss +0 -1
- package/src/@ui/UiTag/UiTag.scss +4 -0
- package/src/@ui/UiTags/UiTags.scss +5 -1
- package/src/@ui/index.scss +2 -1
- package/styles/css/main.css +53 -21
- package/styles/css/main.css.map +1 -1
- package/styles/images/visualization-types/radar-active.svg +10 -6
- package/styles/images/visualization-types/radar.svg +16 -5
- package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts +0 -64
- package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts.map +0 -1
- 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,
|
|
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(
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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,
|
|
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
|
|
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
|
-
/**
|
|
8
|
-
labels: ReadonlyArray<
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
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":"
|
|
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 {
|
|
4
|
+
import { olpPermissionMessages } from "../../locales.js";
|
|
5
5
|
import { bem } from "../@utils/bem.js";
|
|
6
6
|
import { UiButton } from "../UiButton/UiButton.js";
|
|
7
|
-
import {
|
|
7
|
+
import { UiIcon } from "../UiIcon/UiIcon.js";
|
|
8
|
+
import { UiMoreOptionsMenu } from "../UiMoreOptionsMenu/UiMoreOptionsMenu.js";
|
|
8
9
|
import { UiPermissionMenu } from "../UiPermissionMenu/UiPermissionMenu.js";
|
|
9
|
-
|
|
10
|
+
import { UiTooltip } from "../UiTooltip/UiTooltip.js";
|
|
11
|
+
const { b, e } = bem("gd-ui-kit-grantee-row-controls");
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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
|
|
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
|
-
|
|
29
|
-
|
|
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,
|
|
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
|
|
39
|
-
*
|
|
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,
|
|
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;
|
|
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
|
|
15
|
-
*
|
|
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,
|
|
20
|
-
return (_jsx(UiPopover, { anchor: anchor, anchorAccessibilityConfig: { ariaHaspopup: "menu" }, width: 180, content: ({ onClose }) => (_jsx(MenuBody, { selectedLevel: selectedLevel, onPermissionChange: onPermissionChange,
|
|
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,
|
|
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
|
|
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
|
-
|
|
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,
|
|
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"}
|