@gooddata/sdk-ui-kit 11.43.0-alpha.0 → 11.43.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/@ui/@types/icon.d.ts +1 -1
- package/esm/@ui/@types/icon.d.ts.map +1 -1
- package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.d.ts +3 -1
- package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.d.ts.map +1 -1
- package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.js +2 -2
- 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/UiIcon/icons.d.ts.map +1 -1
- package/esm/@ui/UiIcon/icons.js +1 -0
- 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 +58 -0
- package/esm/@ui/UiLabelsList/UiLabelsList.d.ts +6 -1
- package/esm/@ui/UiLabelsList/UiLabelsList.d.ts.map +1 -1
- package/esm/@ui/UiLabelsList/UiLabelsList.js +2 -3
- 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 +14 -1
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts.map +1 -1
- package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.js +5 -3
- 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 +29 -1
- package/esm/@ui/UiPopover/UiPopover.d.ts.map +1 -1
- package/esm/@ui/UiPopover/UiPopover.js +4 -4
- 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/Datepicker/Datepicker.d.ts.map +1 -1
- package/esm/Datepicker/Datepicker.js +1 -1
- 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 +139 -85
- 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/UiLabelsChecklist/UiLabelsChecklist.scss +31 -0
- package/src/@ui/UiLabelsList/UiLabelsList.scss +3 -0
- package/src/@ui/UiModalDialog/UiModalDialog.scss +11 -1
- package/src/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.scss +10 -0
- package/src/@ui/UiObjectShareDialog/UiObjectShareDialog.scss +7 -0
- package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +0 -7
- package/src/@ui/UiPopover/UiPopover.scss +7 -0
- 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 +66 -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
- package/src/@ui/UiLabelsPicker/UiLabelsPicker.scss +0 -29
|
@@ -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
|
}
|
|
@@ -34,16 +36,27 @@ export interface IUiObjectShareDialogCardProps {
|
|
|
34
36
|
grantees: IUiObjectShareDialogGrantee[];
|
|
35
37
|
/** Fires when the user clicks the + Add link in the SHARED WITH heading. */
|
|
36
38
|
onAddClick: () => void;
|
|
39
|
+
/** Disables the + Add action — e.g. while the object's labels are still loading. */
|
|
40
|
+
isAddDisabled?: boolean;
|
|
37
41
|
/** Selected general-access option. */
|
|
38
42
|
generalAccess: GeneralAccessValue;
|
|
39
43
|
/** Fires when the user picks a different general-access option. */
|
|
40
44
|
onGeneralAccessChange: (value: GeneralAccessValue) => void;
|
|
45
|
+
/** Disables the general-access radio — e.g. while the access list is still loading. */
|
|
46
|
+
isGeneralAccessDisabled?: boolean;
|
|
41
47
|
/**
|
|
42
48
|
* Optional slot rendered next to the "All workspace members" row — typically a
|
|
43
49
|
* `UiGranteeRowControls` pair for the workspace-wide labels picker
|
|
44
50
|
* and permission level.
|
|
45
51
|
*/
|
|
46
52
|
workspaceControls?: ReactNode;
|
|
53
|
+
/**
|
|
54
|
+
* Optional error notice. When set, it replaces the grantee list and
|
|
55
|
+
* general-access sections (which can't reflect a real policy on a failed
|
|
56
|
+
* load), so the dialog shows why it's empty instead of a misleading
|
|
57
|
+
* "restricted, no one has access".
|
|
58
|
+
*/
|
|
59
|
+
error?: ReactNode;
|
|
47
60
|
/** Test id forwarded to the root element. */
|
|
48
61
|
dataTestId?: string;
|
|
49
62
|
}
|
|
@@ -55,5 +68,5 @@ export interface IUiObjectShareDialogCardProps {
|
|
|
55
68
|
*
|
|
56
69
|
* @internal
|
|
57
70
|
*/
|
|
58
|
-
export declare function UiObjectShareDialogCard({ objectTitle, onClose, grantees, onAddClick, generalAccess, onGeneralAccessChange, workspaceControls, dataTestId }: IUiObjectShareDialogCardProps): import("react/jsx-runtime").JSX.Element;
|
|
71
|
+
export declare function UiObjectShareDialogCard({ objectTitle, onClose, grantees, onAddClick, isAddDisabled, generalAccess, onGeneralAccessChange, isGeneralAccessDisabled, workspaceControls, error, dataTestId }: IUiObjectShareDialogCardProps): import("react/jsx-runtime").JSX.Element;
|
|
59
72
|
//# sourceMappingURL=UiObjectShareDialogCard.d.ts.map
|
|
@@ -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;
|
|
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;IACvB,sFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,sCAAsC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,mEAAmE;IACnE,qBAAqB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC3D,yFAAuF;IACvF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAE9B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,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,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,KAAK,EACL,UAAU,EACb,EAAE,6BAA6B,2CA8D/B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useIntl } from "react-intl";
|
|
3
3
|
import { commonDialogMessages, olpObjectShareDialogMessages } from "../../locales.js";
|
|
4
4
|
import { bem } from "../@utils/bem.js";
|
|
@@ -17,10 +17,12 @@ const { b, e } = bem("gd-ui-kit-object-share-dialog");
|
|
|
17
17
|
*
|
|
18
18
|
* @internal
|
|
19
19
|
*/
|
|
20
|
-
export function UiObjectShareDialogCard({ objectTitle, onClose, grantees, onAddClick, generalAccess, onGeneralAccessChange, workspaceControls, dataTestId, }) {
|
|
20
|
+
export function UiObjectShareDialogCard({ objectTitle, onClose, grantees, onAddClick, isAddDisabled, generalAccess, onGeneralAccessChange, isGeneralAccessDisabled, workspaceControls, error, dataTestId, }) {
|
|
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 }),
|
|
24
|
+
_jsx(UiDialogHeader, { title: dialogTitle, onClose: onClose }), error ? (_jsx("div", { className: e("error"), role: "alert", children: error })) : (_jsxs(_Fragment, { children: [
|
|
25
|
+
_jsx(UiSectionHeading, { label: intl.formatMessage(olpObjectShareDialogMessages.sharedWith), action: _jsx(UiButton, { label: intl.formatMessage(olpObjectShareDialogMessages.add), variant: "popout", size: "small", iconBefore: "plus", isDisabled: isAddDisabled, 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, disabled: isGeneralAccessDisabled, workspaceControls: workspaceControls })
|
|
26
|
+
] })), _jsx(UiDialogFooter, { divider: true, children: _jsx(UiButton, { label: intl.formatMessage(commonDialogMessages.close), variant: "secondary", size: "medium", onClick: onClose }) })
|
|
25
27
|
] }));
|
|
26
28
|
}
|
|
@@ -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
|
}),
|
|
@@ -27,10 +27,29 @@ export interface IUiPopoverProps {
|
|
|
27
27
|
content?: ReactNode | ((args: {
|
|
28
28
|
onClose: () => void;
|
|
29
29
|
}) => ReactNode);
|
|
30
|
+
/**
|
|
31
|
+
* Padding around the content surface. Defaults to `"default"`. Use `"none"`
|
|
32
|
+
* for edge-to-edge content whose own children carry their inset (e.g. a list
|
|
33
|
+
* of full-bleed rows); the surface then also stretches the content to its
|
|
34
|
+
* full width.
|
|
35
|
+
*/
|
|
36
|
+
contentPadding?: "default" | "none";
|
|
30
37
|
footer?: ReactNode | ((args: {
|
|
31
38
|
onClose: () => void;
|
|
32
39
|
}) => ReactNode);
|
|
33
40
|
triggerBy?: IUiTooltipProps["triggerBy"];
|
|
41
|
+
/**
|
|
42
|
+
* Where the popover sits relative to its anchor (the arrow side; the panel
|
|
43
|
+
* opens on the opposite side). Defaults to `"top-start"` — i.e. the panel
|
|
44
|
+
* opens below the anchor, left-aligned.
|
|
45
|
+
*/
|
|
46
|
+
arrowPlacement?: IUiTooltipProps["arrowPlacement"];
|
|
47
|
+
/**
|
|
48
|
+
* Allow the popover to flip to the opposite side when the preferred side
|
|
49
|
+
* would overflow. Defaults to `true`. Set `false` to pin it to
|
|
50
|
+
* `arrowPlacement` (e.g. an anchor that should always open downward).
|
|
51
|
+
*/
|
|
52
|
+
optimalPlacement?: boolean;
|
|
34
53
|
closeText?: string;
|
|
35
54
|
closeVisible?: boolean;
|
|
36
55
|
initialFocus?: RefObject<HTMLElement> | string;
|
|
@@ -46,11 +65,20 @@ export interface IUiPopoverProps {
|
|
|
46
65
|
* When true, uses UiFocusManager's focus trap instead of tabOutHandler
|
|
47
66
|
*/
|
|
48
67
|
enableFocusTrap?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Controls the open state. When set, the popover ignores anchor clicks and
|
|
70
|
+
* opens/closes purely from this prop; pair with `onOpenChange` to
|
|
71
|
+
* react to outside-click / Escape. When omitted the popover stays
|
|
72
|
+
* uncontrolled and opens on anchor click as before.
|
|
73
|
+
*/
|
|
74
|
+
isOpen?: boolean;
|
|
75
|
+
/** Fires when an interaction (outside-click, Escape) requests an open-state change. */
|
|
76
|
+
onOpenChange?: (open: boolean) => void;
|
|
49
77
|
onOpen?: () => void;
|
|
50
78
|
onClose?: () => void;
|
|
51
79
|
}
|
|
52
80
|
/**
|
|
53
81
|
* @internal
|
|
54
82
|
*/
|
|
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;
|
|
83
|
+
export declare function UiPopover({ id, accessibilityConfig, anchor, anchorAccessibilityConfig, width, title, tabIndex, disabled, content, contentPadding, footer, closeText, closeVisible, initialFocus, returnFocusTo, triggerBy, arrowPlacement, optimalPlacement, returnFocusAfterClose, focusCheckFn, enableFocusTrap, isOpen, onOpenChange, onOpen, onClose }: IUiPopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
56
84
|
//# 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;;;;;OAKG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,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;;;;OAIG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACnD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,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,cAA0B,EAC1B,MAAM,EACN,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,SAAqB,EACrB,cAA4B,EAC5B,gBAAuB,EACvB,qBAA4B,EAC5B,YAAkC,EAClC,eAAuB,EACvB,MAAM,EACN,YAAY,EACZ,MAAM,EACN,OAAO,EACV,EAAE,eAAe,2CA8GjB"}
|
|
@@ -23,7 +23,7 @@ function buildAnchorAriaAttrs(cfg) {
|
|
|
23
23
|
/**
|
|
24
24
|
* @internal
|
|
25
25
|
*/
|
|
26
|
-
export function UiPopover({ id, accessibilityConfig = defaultAccessibilityConfig, anchor, anchorAccessibilityConfig, width = "default", title, tabIndex, disabled, content, footer, closeText, closeVisible, initialFocus, returnFocusTo, triggerBy = ["click"], returnFocusAfterClose = true, focusCheckFn = defaultFocusCheckFn, enableFocusTrap = false, onOpen, onClose, }) {
|
|
26
|
+
export function UiPopover({ id, accessibilityConfig = defaultAccessibilityConfig, anchor, anchorAccessibilityConfig, width = "default", title, tabIndex, disabled, content, contentPadding = "default", footer, closeText, closeVisible, initialFocus, returnFocusTo, triggerBy = ["click"], arrowPlacement = "top-start", optimalPlacement = true, returnFocusAfterClose = true, focusCheckFn = defaultFocusCheckFn, enableFocusTrap = false, isOpen, onOpenChange, onOpen, onClose, }) {
|
|
27
27
|
const ref = useRef(null);
|
|
28
28
|
const returnFocus = useMemo(() => {
|
|
29
29
|
return returnFocusTo ?? ref;
|
|
@@ -35,7 +35,7 @@ export function UiPopover({ id, accessibilityConfig = defaultAccessibilityConfig
|
|
|
35
35
|
// popovers (e.g. UiPermissionMenu) emit a dangling reference. Caller-supplied
|
|
36
36
|
// ariaLabel / ariaLabelledBy in accessibilityConfig still takes precedence.
|
|
37
37
|
const titleLabelledBy = title ? titleId : undefined;
|
|
38
|
-
return (_jsx(UiTooltip, { onOpen: onOpen, onClose: onClose, accessibilityConfig: {
|
|
38
|
+
return (_jsx(UiTooltip, { isOpen: isOpen, onOpenChange: onOpenChange, onOpen: onOpen, onClose: onClose, accessibilityConfig: {
|
|
39
39
|
ariaLabelledBy: titleLabelledBy,
|
|
40
40
|
...accessibilityConfig,
|
|
41
41
|
role: "dialog",
|
|
@@ -56,8 +56,8 @@ export function UiPopover({ id, accessibilityConfig = defaultAccessibilityConfig
|
|
|
56
56
|
onClose();
|
|
57
57
|
}, children: _jsxs("div", { id: id ?? currentId, tabIndex: 0, className: b(), style: { width: width === "default" ? undefined : width }, children: [title || closeVisible ? (_jsxs("div", { className: e("header"), children: [title ? (typeof title === "string" ? (_jsx("div", { id: titleId, className: e("header-title"), children: title })) : (_jsx("div", { id: titleId, children: title }))) : null, closeVisible ? (_jsx("div", { className: e("header-close"), children: _jsx(UiButton, { label: "", size: "small", variant: "tertiary", iconBefore: "close", accessibilityConfig: {
|
|
58
58
|
ariaLabel: closeText,
|
|
59
|
-
}, onClick: onClose }) })) : null] })) : null, content ? (_jsx("div", { className: e("content"), children: typeof content === "function" ? content({ onClose }) : content })) : null, footer ? (_jsx("div", { className: e("footer"), children: typeof footer === "function" ? footer({ onClose }) : footer })) : null] }) }));
|
|
60
|
-
}, variant: "none", behaviour: "popover", triggerBy: triggerBy, showArrow: false, optimalPlacement:
|
|
59
|
+
}, onClick: onClose }) })) : null] })) : null, content ? (_jsx("div", { className: e("content", { padding: contentPadding }), children: typeof content === "function" ? content({ onClose }) : content })) : null, footer ? (_jsx("div", { className: e("footer"), children: typeof footer === "function" ? footer({ onClose }) : footer })) : null] }) }));
|
|
60
|
+
}, variant: "none", behaviour: "popover", triggerBy: triggerBy, showArrow: false, optimalPlacement: optimalPlacement, arrowPlacement: arrowPlacement, disabled: disabled }));
|
|
61
61
|
}
|
|
62
62
|
function mergeRefs(...refs) {
|
|
63
63
|
return (value) => {
|
package/esm/@ui/UiTag/UiTag.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiTag.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTag/UiTag.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAyC,MAAM,OAAO,CAAC;AAEnG,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAO3D;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,wBAAwB;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"UiTag.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTag/UiTag.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAyC,MAAM,OAAO,CAAC;AAEnG,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAO3D;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,wBAAwB;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,0GA8GhB,CAAC"}
|
package/esm/@ui/UiTag/UiTag.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2025-2026 GoodData Corporation
|
|
3
3
|
import { forwardRef, useLayoutEffect, useState } from "react";
|
|
4
4
|
import { bem } from "../@utils/bem.js";
|
|
@@ -8,7 +8,7 @@ const { b, e } = bem("gd-ui-kit-tag");
|
|
|
8
8
|
/**
|
|
9
9
|
* @internal
|
|
10
10
|
*/
|
|
11
|
-
export const UiTag = forwardRef(function UiTag({ label, size = "small", variant = "solid", iconBefore, iconBeforeColor, tabIndex, deleteTabIndex, accessibilityConfig, isDisabled, isDeletable, dataTestId, onClick, onDelete, onDeleteKeyDown, }, ref) {
|
|
11
|
+
export const UiTag = forwardRef(function UiTag({ label, size = "small", variant = "solid", iconBefore, iconBeforeColor, tabIndex, deleteTabIndex, accessibilityConfig, isDisabled, isDeletable, dataTestId, labelAs, onClick, onDelete, onDeleteKeyDown, }, ref) {
|
|
12
12
|
const [labelRef, setLabelRef] = useState(null);
|
|
13
13
|
const [hasTooltip, setHasTooltip] = useState(false);
|
|
14
14
|
const { ariaLabel, ariaLabelledBy, deleteAriaLabel } = accessibilityConfig ?? {};
|
|
@@ -23,7 +23,13 @@ export const UiTag = forwardRef(function UiTag({ label, size = "small", variant
|
|
|
23
23
|
const iconSize = size === "small" ? 14 : 16;
|
|
24
24
|
const defaultIconColor = variant === "decorated" ? "complementary-0" : "complementary-6";
|
|
25
25
|
const iconColor = iconBeforeColor ?? defaultIconColor;
|
|
26
|
-
const
|
|
26
|
+
const labelIsButton = labelAs ? labelAs === "button" : onClick !== undefined;
|
|
27
|
+
const labelClassName = e("trigger", {
|
|
28
|
+
isDeletable: isDeletable ?? false,
|
|
29
|
+
isDisabled: isDisabled ?? false,
|
|
30
|
+
});
|
|
31
|
+
const labelInner = (_jsxs(_Fragment, { children: [iconBefore ? (_jsx("span", { className: e("icon-before"), children: _jsx(UiIcon, { type: iconBefore, size: iconSize, color: iconColor }) })) : null, _jsx("span", { className: e("label"), ref: setLabelRef, children: label })
|
|
27
32
|
] }));
|
|
28
|
-
|
|
33
|
+
const labelElement = labelIsButton ? (_jsx("button", { ref: ref, tabIndex: tabIndex, "data-testid": dataTestId, className: labelClassName, disabled: isDisabled, "aria-disabled": isDisabled, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, onClick: onClick, children: labelInner })) : (_jsx("span", { className: labelClassName, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "data-testid": dataTestId, children: labelInner }));
|
|
34
|
+
return (_jsxs("div", { className: b({ size, variant }), children: [hasTooltip ? (_jsx(UiTooltip, { anchor: labelElement, content: _jsx("div", { className: e("tooltip"), children: label }), triggerBy: ["hover"], arrowPlacement: "top" })) : (labelElement), isDeletable && !isDisabled ? (_jsx("button", { tabIndex: deleteTabIndex, "data-testid": dataTestId ? `${dataTestId}-delete-button` : undefined, "aria-label": deleteAriaLabel, className: e("delete"), onClick: onDelete, onKeyDown: onDeleteKeyDown, children: _jsx("span", { className: e("icon-delete"), children: _jsx(UiIcon, { size: 14, type: "cross", color: variant === "decorated" ? "complementary-0" : "complementary-6" }) }) })) : null] }));
|
|
29
35
|
});
|
|
@@ -3,9 +3,7 @@ export interface IUiTagProps {
|
|
|
3
3
|
tag: IUiTagDef;
|
|
4
4
|
isDeletable: boolean;
|
|
5
5
|
deleteLabel?: string;
|
|
6
|
-
isReadOnly?: boolean;
|
|
7
6
|
isDisabled?: boolean;
|
|
8
|
-
isFocused?: boolean;
|
|
9
7
|
size?: "small" | "large";
|
|
10
8
|
onDelete?: (tag: IUiTagDef) => void;
|
|
11
9
|
onClick?: (tag: IUiTagDef) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiTag.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTags/UiTag.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"UiTag.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTags/UiTag.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,KAAK,2GA6ChB,CAAC"}
|
package/esm/@ui/UiTags/UiTag.js
CHANGED
|
@@ -4,16 +4,21 @@ import { forwardRef } from "react";
|
|
|
4
4
|
import { bem } from "../@utils/bem.js";
|
|
5
5
|
import { UiTag as UiTagComponent } from "../UiTag/UiTag.js";
|
|
6
6
|
const { e } = bem("gd-ui-kit-tags");
|
|
7
|
-
export const UiTag = forwardRef(function UiTag({ tag, maxWidth, isDeletable, isDisabled,
|
|
7
|
+
export const UiTag = forwardRef(function UiTag({ tag, maxWidth, isDeletable, isDisabled, size, deleteLabel, onDelete, onClick }, ref) {
|
|
8
8
|
const canBeDeleted = isDeletable && (tag.isDeletable ?? true);
|
|
9
|
-
|
|
9
|
+
const isClickable = onClick !== undefined;
|
|
10
|
+
return (_jsx("div", { className: e("tag"), style: { maxWidth }, "data-tag-id": tag.id, tabIndex: -1, "aria-label": tag.label, children: _jsx(UiTagComponent, { ref: isClickable ? ref : undefined, labelAs: isClickable ? "button" : "span", label: `${tag.label}`, size: size, iconBefore: tag.iconBefore, isDeletable: canBeDeleted, isDisabled: isDisabled, accessibilityConfig: {
|
|
10
11
|
ariaLabel: tag.label,
|
|
11
12
|
deleteAriaLabel: `${deleteLabel ?? "Delete"} ${tag.label}`,
|
|
12
|
-
}, onDelete:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
}, onDelete: canBeDeleted
|
|
14
|
+
? (e) => {
|
|
15
|
+
onDelete?.(tag);
|
|
16
|
+
e.stopPropagation();
|
|
17
|
+
}
|
|
18
|
+
: undefined, onClick: isClickable
|
|
19
|
+
? (e) => {
|
|
20
|
+
onClick(tag);
|
|
21
|
+
e.stopPropagation();
|
|
22
|
+
}
|
|
23
|
+
: undefined }) }));
|
|
19
24
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiTags.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTags/UiTags.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UiTags.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTags/UiTags.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAO/D;;GAEG;AACH,wBAAgB,MAAM,CAAC,EACnB,IAAI,EACJ,UAAU,EACV,QAAoB,EACpB,SAAkB,EAClB,WAAsB,EACtB,UAAoB,EACpB,SAAkB,EAClB,WAAuB,EACvB,SAAuB,EACvB,WAAsB,EACtB,cAA+B,EAC/B,IAAoB,EACpB,IAAc,EACd,aAAoB,EACpB,YAAmB,EACnB,QAAgB,EAChB,UAAU,EACV,QAAmB,EACnB,WAAsB,EACtB,mBAAgD,EAChD,eAAe,EAClB,EAAE,YAAY,2CAuVd"}
|
package/esm/@ui/UiTags/UiTags.js
CHANGED
|
@@ -9,6 +9,7 @@ import { UiComboboxList } from "../UiCombobox/UiComboboxList.js";
|
|
|
9
9
|
import { UiComboboxListItem, UiComboboxListItemCreatableLabel, UiComboboxListItemLabel, } from "../UiCombobox/UiComboboxListItem.js";
|
|
10
10
|
import { UiComboboxPopup } from "../UiCombobox/UiComboboxPopup.js";
|
|
11
11
|
import { UiPopover } from "../UiPopover/UiPopover.js";
|
|
12
|
+
import { UiTooltip } from "../UiTooltip/UiTooltip.js";
|
|
12
13
|
import { useResponsiveTags } from "./hooks/useResponsiveTags.js";
|
|
13
14
|
import { useTagsInteractions } from "./interactions.js";
|
|
14
15
|
import { UiTag } from "./UiTag.js";
|
|
@@ -17,7 +18,7 @@ const defaultAccessibilityConfig = {};
|
|
|
17
18
|
/**
|
|
18
19
|
* @internal
|
|
19
20
|
*/
|
|
20
|
-
export function UiTags({ tags, tagOptions, addLabel = "Add tag", nameLabel = "Name", cancelLabel = "Cancel", closeLabel = "Close", saveLabel = "Save", noTagsLabel = "No tags", moreLabel = "More tags", removeLabel = "Remove", creatableLabel = "(Create new)", mode = "single-line", size = "small", canDeleteTags = true, canCreateTag = true, readOnly = false, onTagClick
|
|
21
|
+
export function UiTags({ tags, tagOptions, addLabel = "Add tag", nameLabel = "Name", cancelLabel = "Cancel", closeLabel = "Close", saveLabel = "Save", noTagsLabel = "No tags", moreLabel = "More tags", removeLabel = "Remove", creatableLabel = "(Create new)", mode = "single-line", size = "small", canDeleteTags = true, canCreateTag = true, readOnly = false, onTagClick, onTagAdd = () => { }, onTagRemove = () => { }, accessibilityConfig = defaultAccessibilityConfig, renderAddButton, }) {
|
|
21
22
|
const inputRef = useRef(null);
|
|
22
23
|
const [popupOpen, setPopupOpen] = useState(false);
|
|
23
24
|
const popupId = useId();
|
|
@@ -27,7 +28,13 @@ export function UiTags({ tags, tagOptions, addLabel = "Add tag", nameLabel = "Na
|
|
|
27
28
|
const isAddable = canCreateTag && !readOnly && !hasCustomAddButton;
|
|
28
29
|
const { rootRef, showedTags, hiddenTags, tagsContainerRef, hiddenTagsContainerRef, tooltipTagsContainerRef, addButtonRef, allContainerRef, tooltipWidth, availableWidth, lastAvailableWidth, setTooltipContainer, } = useResponsiveTags(tags, mode, [canCreateTag, canDeleteTags, readOnly, hasCustomAddButton]);
|
|
29
30
|
const items = [...showedTags, hiddenTags];
|
|
30
|
-
const {
|
|
31
|
+
const { interactionState, onAddOpen, onAddClose, onMoreOpen, onMoreClose, tag, setTag, onTagClickHandler, onTagRemoveHandler, onTagAddHandler, } = useTagsInteractions(tagsContainerRef, tooltipTagsContainerRef, showedTags, hiddenTags, onTagAdd, onTagRemove, onTagClick);
|
|
32
|
+
const [morePopoverOpen, setMorePopoverOpen] = useState(false);
|
|
33
|
+
const morePopoverId = useId();
|
|
34
|
+
const groupLabelId = useId();
|
|
35
|
+
const hasTagClickHandler = onTagClick !== undefined;
|
|
36
|
+
const groupLabelledBy = accessibilityConfig?.ariaLabelledBy ?? groupLabelId;
|
|
37
|
+
const groupLabelText = accessibilityConfig?.ariaLabel ?? (tags.length === 1 ? "Tags, 1" : `Tags, ${tags.length}`);
|
|
31
38
|
const comboboxOptions = useMemo(() => {
|
|
32
39
|
if (!tagOptions) {
|
|
33
40
|
return [];
|
|
@@ -37,36 +44,44 @@ export function UiTags({ tags, tagOptions, addLabel = "Add tag", nameLabel = "Na
|
|
|
37
44
|
.filter((tagOption) => !tagIds.has(tagOption.id))
|
|
38
45
|
.map((tagOption) => ({ id: tagOption.id, label: tagOption.label }));
|
|
39
46
|
}, [tagOptions, tags]);
|
|
40
|
-
return (_jsxs("div", { ref: rootRef,
|
|
41
|
-
_jsx("div", { className: e("shadow-container"), ref: allContainerRef, children: tags.map((tag) => {
|
|
47
|
+
return (_jsxs("div", { ref: rootRef, className: b({ readOnly, mode }), "aria-labelledby": groupLabelledBy, "aria-describedby": accessibilityConfig?.ariaDescribedBy, role: accessibilityConfig?.role ?? "group", children: [accessibilityConfig?.ariaLabelledBy ? null : (_jsx("span", { className: "sr-only", id: groupLabelId, children: groupLabelText })), _jsx("div", { className: e("shadow-container"), ref: allContainerRef, children: tags.map((tag) => {
|
|
42
48
|
return (_jsx(UiTag, { tag: tag, isDeletable: isDeletable, size: size }, getKey(tag, isDeletable, readOnly)));
|
|
43
49
|
}) }), _jsxs("div", { className: e("tags-container"), ref: tagsContainerRef, children: [items.map((tag, i) => {
|
|
44
50
|
if (Array.isArray(tag)) {
|
|
45
51
|
if (hiddenTags.length === 0) {
|
|
46
52
|
return null;
|
|
47
53
|
}
|
|
48
|
-
return (_jsx("div", {
|
|
54
|
+
return (_jsx("div", { className: e("hidden-tags"), onClick: (e) => {
|
|
49
55
|
e.stopPropagation();
|
|
50
56
|
e.preventDefault();
|
|
51
|
-
}, children: hiddenTags.length > 0 ? (_jsx(UiPopover, {
|
|
57
|
+
}, children: hiddenTags.length > 0 ? (_jsx(UiPopover, { id: morePopoverId, onOpen: () => {
|
|
58
|
+
setMorePopoverOpen(true);
|
|
59
|
+
onMoreOpen();
|
|
60
|
+
}, onClose: () => {
|
|
61
|
+
setMorePopoverOpen(false);
|
|
62
|
+
onMoreClose();
|
|
63
|
+
}, enableFocusTrap: true, initialFocus: tooltipTagsContainerRef, returnFocusTo: hiddenTagsContainerRef, anchorAccessibilityConfig: {
|
|
64
|
+
ariaHaspopup: "dialog",
|
|
65
|
+
ariaControls: morePopoverId,
|
|
66
|
+
}, anchor: _jsx(UiButton, { label: `+${hiddenTags.length}`, size: "small", variant: "tertiary", accessibilityConfig: {
|
|
67
|
+
ariaLabel: moreLabel,
|
|
68
|
+
ariaExpanded: morePopoverOpen,
|
|
69
|
+
}, ref: (ref) => {
|
|
52
70
|
hiddenTagsContainerRef.current = ref;
|
|
53
|
-
|
|
54
|
-
} }), width: 300, title: moreLabel, content: () => (_jsx("div", { onKeyDown: handleKeyDown, className: e("tags-more-tooltip"), ref: (ref) => {
|
|
71
|
+
} }), width: 300, title: moreLabel, content: () => (_jsx("div", { className: e("tags-more-tooltip"), ref: (ref) => {
|
|
55
72
|
tooltipTagsContainerRef.current = ref;
|
|
56
73
|
setTooltipContainer(ref);
|
|
57
|
-
},
|
|
58
|
-
return (_jsx(UiTag, { tag: tag, deleteLabel: removeLabel,
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
}, children: hiddenTags.map((tag, i) => {
|
|
75
|
+
return (_jsx(UiTag, { tag: tag, deleteLabel: removeLabel, isDeletable: isDeletable, isDisabled: readOnly, size: size, maxWidth: tooltipWidth, onDelete: onTagRemoveHandler, onClick: hasTagClickHandler
|
|
76
|
+
? onTagClickHandler
|
|
77
|
+
: undefined }, i));
|
|
61
78
|
}) })), footer: ({ onClose }) => (_jsx(_Fragment, { children: _jsx(UiButton, { ref: (ref) => {
|
|
62
79
|
interactionState.current.close = ref;
|
|
63
80
|
}, label: closeLabel, variant: "secondary", onClick: () => {
|
|
64
81
|
onClose();
|
|
65
82
|
} }) })) })) : null }, i));
|
|
66
83
|
}
|
|
67
|
-
return (_jsx(UiTag, { tag: tag,
|
|
68
|
-
interactionState.current.tags[tag.id] = ref;
|
|
69
|
-
}, isDeletable: isDeletable, isDisabled: readOnly, deleteLabel: removeLabel, isFocused: showedFocusedIndex === i, size: size, onDelete: onTagRemoveHandler, onClick: onTagClickHandler, maxWidth: i === showedTags.length - 1 ? lastAvailableWidth : availableWidth }, getKey(tag, isDeletable, readOnly)));
|
|
84
|
+
return (_jsx(UiTag, { tag: tag, isDeletable: isDeletable, isDisabled: readOnly, deleteLabel: removeLabel, size: size, onDelete: onTagRemoveHandler, onClick: hasTagClickHandler ? onTagClickHandler : undefined, maxWidth: i === showedTags.length - 1 ? lastAvailableWidth : availableWidth }, getKey(tag, isDeletable, readOnly)));
|
|
70
85
|
}), hasCustomAddButton ? (_jsx("div", { className: e("add-button"), ref: addButtonRef, onClick: (e) => {
|
|
71
86
|
e.stopPropagation();
|
|
72
87
|
e.preventDefault();
|
|
@@ -82,15 +97,14 @@ export function UiTags({ tags, tagOptions, addLabel = "Add tag", nameLabel = "Na
|
|
|
82
97
|
setTag("");
|
|
83
98
|
onAddClose();
|
|
84
99
|
setPopupOpen(false);
|
|
85
|
-
}, enableFocusTrap: true, anchor: _jsx(UiButton, { label: showedTags.length > 0 ? "" : addLabel, accessibilityConfig: {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
} }), title: addLabel, initialFocus: inputRef, content: ({ onClose }) => (_jsxs(UiCombobox, { options: comboboxOptions, value: tag, onValueChange: setTag, creatable: true, children: [
|
|
100
|
+
}, enableFocusTrap: true, anchor: _jsx(UiTooltip, { content: addLabel, triggerBy: ["hover", "focus"], anchorWrapperStyles: { display: "flex", alignItems: "center" }, anchor: _jsx(UiButton, { label: showedTags.length > 0 ? "" : addLabel, accessibilityConfig: {
|
|
101
|
+
ariaHaspopup: true,
|
|
102
|
+
ariaControls: popupId,
|
|
103
|
+
ariaLabel: addLabel,
|
|
104
|
+
ariaExpanded: popupOpen,
|
|
105
|
+
}, size: "small", iconBefore: "plus", variant: "tertiary", ref: (ref) => {
|
|
106
|
+
interactionState.current.add = ref;
|
|
107
|
+
} }) }), title: addLabel, initialFocus: inputRef, content: ({ onClose }) => (_jsxs(UiCombobox, { options: comboboxOptions, value: tag, onValueChange: setTag, creatable: true, children: [
|
|
94
108
|
_jsx(UiComboboxInput, { ref: (node) => {
|
|
95
109
|
inputRef.current = node;
|
|
96
110
|
interactionState.current.input = node;
|
|
@@ -3,27 +3,22 @@ import { type IUiTagDef, type IUiTagsProps } from "./types.js";
|
|
|
3
3
|
type InteractionState = {
|
|
4
4
|
moreOpen: boolean;
|
|
5
5
|
addOpen: boolean;
|
|
6
|
-
tags: Record<string, HTMLButtonElement>;
|
|
7
|
-
more: HTMLButtonElement | null;
|
|
8
6
|
add: HTMLButtonElement | null;
|
|
9
7
|
close: HTMLButtonElement | null;
|
|
10
8
|
save: HTMLButtonElement | null;
|
|
11
9
|
input: HTMLInputElement | null;
|
|
12
10
|
};
|
|
13
|
-
export declare function useTagsInteractions(
|
|
11
|
+
export declare function useTagsInteractions(tagsContainerRef: MutableRefObject<HTMLDivElement | null>, tooltipTagsContainerRef: MutableRefObject<HTMLDivElement | null>, showedTags: IUiTagDef[], hiddenTags: IUiTagDef[], onTagAdd: IUiTagsProps["onTagAdd"], onTagRemove: IUiTagsProps["onTagRemove"], onTagClick: IUiTagsProps["onTagClick"]): {
|
|
14
12
|
tag: string;
|
|
15
13
|
setTag: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
16
14
|
onAddOpen: () => void;
|
|
17
15
|
onAddClose: () => void;
|
|
18
16
|
onMoreOpen: () => void;
|
|
19
17
|
onMoreClose: () => void;
|
|
20
|
-
handleKeyDown: (event: import("react").KeyboardEvent<Element>) => void;
|
|
21
|
-
interactionState: import("react").RefObject<InteractionState>;
|
|
22
|
-
showedFocusedIndex: number;
|
|
23
|
-
hiddenFocusedIndex: number;
|
|
24
18
|
onTagAddHandler: () => void;
|
|
25
|
-
onTagRemoveHandler: (
|
|
26
|
-
onTagClickHandler: (
|
|
19
|
+
onTagRemoveHandler: (removedTag: IUiTagDef) => void;
|
|
20
|
+
onTagClickHandler: (clickedTag: IUiTagDef) => void;
|
|
21
|
+
interactionState: import("react").RefObject<InteractionState>;
|
|
27
22
|
};
|
|
28
23
|
export {};
|
|
29
24
|
//# sourceMappingURL=interactions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTags/interactions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTags/interactions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAkD,MAAM,OAAO,CAAC;AAI9F,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/D,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAClC,CAAC;AAmBF,wBAAgB,mBAAmB,CAC/B,gBAAgB,EAAE,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,EACzD,uBAAuB,EAAE,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,EAChE,UAAU,EAAE,SAAS,EAAE,EACvB,UAAU,EAAE,SAAS,EAAE,EACvB,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAClC,WAAW,EAAE,YAAY,CAAC,aAAa,CAAC,EACxC,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC;;;;;;;;;;;EAiHzC"}
|