@gooddata/sdk-ui-kit 11.42.0-alpha.3 → 11.42.0-alpha.4
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/UiAddGranteeDialog/UiAddGranteeDialog.d.ts +6 -31
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialog.d.ts.map +1 -1
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialog.js +8 -24
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.d.ts +56 -0
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.d.ts.map +1 -0
- package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.js +40 -0
- package/esm/@ui/UiAddGranteeDialog/useGranteeSelection.d.ts +35 -0
- package/esm/@ui/UiAddGranteeDialog/useGranteeSelection.d.ts.map +1 -0
- package/esm/@ui/UiAddGranteeDialog/useGranteeSelection.js +29 -0
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts +73 -0
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts.map +1 -0
- package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.js +69 -0
- package/esm/@ui/UiIcon/icons.d.ts.map +1 -1
- package/esm/@ui/UiIcon/icons.js +2 -0
- package/esm/Dialog/StylingEditorDialog/StylingEditorDialog.d.ts +8 -0
- package/esm/Dialog/StylingEditorDialog/StylingEditorDialog.d.ts.map +1 -1
- package/esm/Dialog/StylingEditorDialog/StylingEditorDialog.js +28 -3
- package/esm/Dropdown/Dropdown.d.ts +4 -2
- package/esm/Dropdown/Dropdown.d.ts.map +1 -1
- package/esm/Dropdown/Dropdown.js +2 -2
- package/esm/index.d.ts +2 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -0
- package/esm/locales.d.ts +17 -0
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +7 -0
- package/esm/sdk-ui-kit.d.ts +139 -24
- package/package.json +11 -11
- package/src/@ui/UiAddGranteeDialog/UiAddGranteeDialog.scss +0 -14
- package/src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.scss +28 -0
- package/src/@ui/index.scss +1 -0
- package/styles/css/main.css +19 -5
- package/styles/css/main.css.map +1 -1
package/esm/@ui/@types/icon.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @internal
|
|
3
3
|
*/
|
|
4
|
-
export type IconType = "aiAgent" | "aiAgentDisabled" | "brain" | "brainDisabled" | "check" | "checkCircle" | "certification" | "plus" | "plusCircle" | "sync" | "alert" | "alertPaused" | "close" | "cross" | "edit" | "crossCircle" | "question" | "chevronUp" | "chevronRight" | "chevronDown" | "chevronLeft" | "date" | "navigateUp" | "navigateDown" | "navigateRight" | "navigateLeft" | "download" | "slack" | "expand" | "exclamationCircle" | "infoCircle" | "book" | "visible" | "invisible" | "lock" | "unlock" | "ai" | "aiFill" | "drawer" | "drawerEmpty" | "prohibited" | "dropDown" | "dropRight" | "clock" | "clockPaused" | "questionMark" | "upload" | "expandRectangle" | "file" | "number" | "code" | "user" | "userPlus" | "users" | "magic" | "tab" | "pauseCircle" | "filter" | "timer" | "mail" | "envelope" | "copy" | "rain" | "earth" | "geoCollection" | "geoCollectionUpload" | "minimize" | "shrink" | "copyright" | "ellipsis" | "pencil" | "folder" | "folderSmall" | "folderPlus" | "trash" | "arrowUp" | "arrowRight" | "arrowDown" | "arrowLeft" | "undo" | "redo" | "trendDown" | "trendUp" | "save" | "minus" | "minusCircle" | "percent" | "enter" | "enterRight" | "money" | "ghost" | "warning" | "home" | "settings" | "search" | "university" | "printer" | "picture" | "visualization" | "dashboard" | "metric" | "fact" | "ldmAttribute" | "ldmKey" | "ldmLabel" | "sharp" | "attribute" | "horn" | "cw" | "ccw" | "table" | "directionColumn" | "directionRow" | "header" | "genai" | "genai2" | "explainai" | "hiddenForAi" | "box" | "ellipsisVertical" | "list" | "drillTo" | "hierarchy" | "history" | "history2" | "thumbsUp" | "thumbsDown" | "send" | "visualizationArea" | "visualizationTable" | "visualizationTreemap" | "visualizationScatter" | "visualizationDonut" | "visualizationHeadline" | "visualizationColumn" | "visualizationLine" | "visualizationPyramid" | "visualizationFunnel" | "visualizationHeatmap" | "visualizationBubble" | "visualizationPie" | "visualizationBar" | "visualizationCombo" | "visualizationBullet" | "visualizationWaterfall" | "visualizationDependencywheel" | "visualizationSankey" | "visualizationPushpin" | "visualizationRepeater" | "visualizationXirr" | "link" | "externalLink" | "click" | "fileXlsx" | "filePptx" | "filePdf" | "fileImage" | "fileCsvFormatted" | "fileCsvRaw" | "aiDocument" | "recommendation" | "streamUp" | "streamDown" | "stream" | "density" | "parameter" | "pin" | "unpin";
|
|
4
|
+
export type IconType = "aiAgent" | "aiAgentDisabled" | "brain" | "brainDisabled" | "check" | "checkCircle" | "certification" | "plus" | "plusCircle" | "sync" | "alert" | "alertPaused" | "close" | "cross" | "edit" | "crossCircle" | "question" | "chevronUp" | "chevronRight" | "chevronDown" | "chevronLeft" | "date" | "navigateUp" | "navigateDown" | "navigateRight" | "navigateLeft" | "download" | "slack" | "expand" | "exclamationCircle" | "infoCircle" | "book" | "visible" | "invisible" | "lock" | "unlock" | "ai" | "aiFill" | "drawer" | "drawerEmpty" | "prohibited" | "dropDown" | "dropRight" | "clock" | "clockPaused" | "questionMark" | "upload" | "expandRectangle" | "file" | "number" | "code" | "user" | "userPlus" | "users" | "magic" | "tab" | "pauseCircle" | "filter" | "timer" | "mail" | "envelope" | "copy" | "rain" | "earth" | "geoCollection" | "geoCollectionUpload" | "minimize" | "shrink" | "copyright" | "ellipsis" | "pencil" | "folder" | "folderSmall" | "folderPlus" | "trash" | "arrowUp" | "arrowRight" | "arrowDown" | "arrowLeft" | "undo" | "redo" | "trendDown" | "trendUp" | "save" | "minus" | "minusCircle" | "percent" | "enter" | "enterRight" | "money" | "ghost" | "warning" | "home" | "settings" | "search" | "university" | "printer" | "picture" | "visualization" | "dashboard" | "metric" | "fact" | "ldmAttribute" | "ldmKey" | "ldmLabel" | "sharp" | "attribute" | "horn" | "cw" | "ccw" | "table" | "directionColumn" | "directionRow" | "header" | "genai" | "genai2" | "explainai" | "hiddenForAi" | "box" | "ellipsisVertical" | "list" | "drillTo" | "hierarchy" | "history" | "history2" | "thumbsUp" | "thumbsDown" | "send" | "visualizationArea" | "visualizationTable" | "visualizationTreemap" | "visualizationScatter" | "visualizationDonut" | "visualizationHeadline" | "visualizationColumn" | "visualizationLine" | "visualizationPyramid" | "visualizationFunnel" | "visualizationHeatmap" | "visualizationBubble" | "visualizationPie" | "visualizationBar" | "visualizationCombo" | "visualizationBullet" | "visualizationWaterfall" | "visualizationDependencywheel" | "visualizationSankey" | "visualizationPushpin" | "visualizationRepeater" | "visualizationXirr" | "link" | "externalLink" | "click" | "fileXlsx" | "filePptx" | "filePdf" | "fileImage" | "fileCsvFormatted" | "fileCsvRaw" | "aiDocument" | "recommendation" | "streamUp" | "streamDown" | "stream" | "density" | "parameter" | "pin" | "unpin" | "speechBubble" | "pieChart";
|
|
5
5
|
//# sourceMappingURL=icon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/@ui/@types/icon.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,QAAQ,GACd,SAAS,GACT,iBAAiB,GACjB,OAAO,GACP,eAAe,GACf,OAAO,GACP,aAAa,GACb,eAAe,GACf,MAAM,GACN,YAAY,GACZ,MAAM,GACN,OAAO,GACP,aAAa,GACb,OAAO,GACP,OAAO,GACP,MAAM,GACN,aAAa,GACb,UAAU,GACV,WAAW,GACX,cAAc,GACd,aAAa,GACb,aAAa,GACb,MAAM,GACN,YAAY,GACZ,cAAc,GACd,eAAe,GACf,cAAc,GACd,UAAU,GACV,OAAO,GACP,QAAQ,GACR,mBAAmB,GACnB,YAAY,GACZ,MAAM,GACN,SAAS,GACT,WAAW,GACX,MAAM,GACN,QAAQ,GACR,IAAI,GACJ,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,UAAU,GACV,WAAW,GACX,OAAO,GACP,aAAa,GACb,cAAc,GACd,QAAQ,GACR,iBAAiB,GACjB,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,UAAU,GACV,OAAO,GACP,OAAO,GACP,KAAK,GACL,aAAa,GACb,QAAQ,GACR,OAAO,GACP,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,GACP,eAAe,GACf,qBAAqB,GACrB,UAAU,GACV,QAAQ,GACR,WAAW,GACX,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,OAAO,GACP,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,GACX,MAAM,GACN,MAAM,GACN,WAAW,GACX,SAAS,GACT,MAAM,GACN,OAAO,GACP,aAAa,GACb,SAAS,GACT,OAAO,GACP,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,SAAS,GACT,eAAe,GACf,WAAW,GACX,QAAQ,GACR,MAAM,GACN,cAAc,GACd,QAAQ,GACR,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,IAAI,GACJ,KAAK,GACL,OAAO,GACP,iBAAiB,GACjB,cAAc,GACd,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,WAAW,GACX,aAAa,GACb,KAAK,GACL,kBAAkB,GAClB,MAAM,GACN,SAAS,GACT,WAAW,GACX,SAAS,GACT,UAAU,GACV,UAAU,GACV,YAAY,GACZ,MAAM,GACN,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,qBAAqB,GACrB,sBAAsB,GACtB,qBAAqB,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,qBAAqB,GACrB,wBAAwB,GACxB,8BAA8B,GAC9B,qBAAqB,GACrB,sBAAsB,GACtB,uBAAuB,GACvB,mBAAmB,GACnB,MAAM,GACN,cAAc,GACd,OAAO,GACP,UAAU,GACV,UAAU,GACV,SAAS,GACT,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,WAAW,GACX,KAAK,GACL,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/@ui/@types/icon.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,QAAQ,GACd,SAAS,GACT,iBAAiB,GACjB,OAAO,GACP,eAAe,GACf,OAAO,GACP,aAAa,GACb,eAAe,GACf,MAAM,GACN,YAAY,GACZ,MAAM,GACN,OAAO,GACP,aAAa,GACb,OAAO,GACP,OAAO,GACP,MAAM,GACN,aAAa,GACb,UAAU,GACV,WAAW,GACX,cAAc,GACd,aAAa,GACb,aAAa,GACb,MAAM,GACN,YAAY,GACZ,cAAc,GACd,eAAe,GACf,cAAc,GACd,UAAU,GACV,OAAO,GACP,QAAQ,GACR,mBAAmB,GACnB,YAAY,GACZ,MAAM,GACN,SAAS,GACT,WAAW,GACX,MAAM,GACN,QAAQ,GACR,IAAI,GACJ,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,UAAU,GACV,WAAW,GACX,OAAO,GACP,aAAa,GACb,cAAc,GACd,QAAQ,GACR,iBAAiB,GACjB,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,UAAU,GACV,OAAO,GACP,OAAO,GACP,KAAK,GACL,aAAa,GACb,QAAQ,GACR,OAAO,GACP,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,GACP,eAAe,GACf,qBAAqB,GACrB,UAAU,GACV,QAAQ,GACR,WAAW,GACX,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,OAAO,GACP,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,GACX,MAAM,GACN,MAAM,GACN,WAAW,GACX,SAAS,GACT,MAAM,GACN,OAAO,GACP,aAAa,GACb,SAAS,GACT,OAAO,GACP,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,SAAS,GACT,eAAe,GACf,WAAW,GACX,QAAQ,GACR,MAAM,GACN,cAAc,GACd,QAAQ,GACR,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,IAAI,GACJ,KAAK,GACL,OAAO,GACP,iBAAiB,GACjB,cAAc,GACd,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,WAAW,GACX,aAAa,GACb,KAAK,GACL,kBAAkB,GAClB,MAAM,GACN,SAAS,GACT,WAAW,GACX,SAAS,GACT,UAAU,GACV,UAAU,GACV,YAAY,GACZ,MAAM,GACN,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,qBAAqB,GACrB,sBAAsB,GACtB,qBAAqB,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,qBAAqB,GACrB,wBAAwB,GACxB,8BAA8B,GAC9B,qBAAqB,GACrB,sBAAsB,GACtB,uBAAuB,GACvB,mBAAmB,GACnB,MAAM,GACN,cAAc,GACd,OAAO,GACP,UAAU,GACV,UAAU,GACV,SAAS,GACT,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,WAAW,GACX,KAAK,GACL,OAAO,GACP,cAAc,GACd,UAAU,CAAC"}
|
|
@@ -1,42 +1,17 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type IUiAddGranteeDialogCardProps } from "./UiAddGranteeDialogCard.js";
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
4
|
*/
|
|
5
|
-
export interface IUiAddGranteeDialogProps {
|
|
5
|
+
export interface IUiAddGranteeDialogProps extends IUiAddGranteeDialogCardProps {
|
|
6
6
|
/** Whether the dialog is shown. */
|
|
7
7
|
isOpen: boolean;
|
|
8
|
-
/** Object title shown in the header — wrapped into `Share "\{title\}"`. */
|
|
9
|
-
objectTitle: string;
|
|
10
|
-
/** Current search query. */
|
|
11
|
-
searchQuery: string;
|
|
12
|
-
/** Fires when the user edits the search query. */
|
|
13
|
-
onSearchQueryChange: (next: string) => void;
|
|
14
|
-
/**
|
|
15
|
-
* Optional slot rendered between the search input and the bottom divider.
|
|
16
|
-
* When empty, the screen falls back to a "No user or group selected"
|
|
17
|
-
* placeholder. Callers typically render a single `UiGranteeRow`
|
|
18
|
-
* here to preview the grantee they've picked from the search dropdown.
|
|
19
|
-
*/
|
|
20
|
-
selectedGrantee?: ReactNode;
|
|
21
|
-
/** Fires when the user clicks the header back-arrow button. */
|
|
22
|
-
onBack: () => void;
|
|
23
|
-
/** Fires when the user clicks the header X close button or dismisses the modal. */
|
|
24
|
-
onClose: () => void;
|
|
25
|
-
/** Fires when the user clicks Cancel in the footer. */
|
|
26
|
-
onCancel: () => void;
|
|
27
|
-
/** Fires when the user clicks the primary Add button in the footer. */
|
|
28
|
-
onAdd: () => void;
|
|
29
|
-
/** When true, the primary Add button is disabled. */
|
|
30
|
-
isAddDisabled?: boolean;
|
|
31
|
-
/** Test id forwarded to the modal overlay. */
|
|
32
|
-
dataTestId?: string;
|
|
33
8
|
}
|
|
34
9
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
10
|
+
* Add-grantee dialog — wraps `UiAddGranteeDialogCard` in `UiModalDialog`
|
|
11
|
+
* for the full modal contract (portal, dimmed backdrop, focus trap, Esc
|
|
12
|
+
* and backdrop dismiss).
|
|
38
13
|
*
|
|
39
14
|
* @internal
|
|
40
15
|
*/
|
|
41
|
-
export declare function UiAddGranteeDialog({ isOpen,
|
|
16
|
+
export declare function UiAddGranteeDialog({ isOpen, ...cardProps }: IUiAddGranteeDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
42
17
|
//# sourceMappingURL=UiAddGranteeDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiAddGranteeDialog.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/UiAddGranteeDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UiAddGranteeDialog.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/UiAddGranteeDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,4BAA4B,EAA0B,MAAM,6BAA6B,CAAC;AAExG;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,4BAA4B;IAC1E,mCAAmC;IACnC,MAAM,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE,wBAAwB,2CAMpF"}
|
|
@@ -1,30 +1,14 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
|
|
3
|
-
import { commonDialogMessages, olpAddGranteeDialogMessages, olpObjectShareDialogMessages, } from "../../locales.js";
|
|
4
|
-
import { bem } from "../@utils/bem.js";
|
|
5
|
-
import { UiButton } from "../UiButton/UiButton.js";
|
|
6
|
-
import { UiIconButton } from "../UiIconButton/UiIconButton.js";
|
|
7
|
-
import { UiDialogFooter } from "../UiModalDialog/UiDialogFooter.js";
|
|
8
|
-
import { UiDialogHeader } from "../UiModalDialog/UiDialogHeader.js";
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
9
3
|
import { UiModalDialog } from "../UiModalDialog/UiModalDialog.js";
|
|
10
|
-
import {
|
|
11
|
-
const { b, e } = bem("gd-ui-kit-add-grantee-dialog");
|
|
4
|
+
import { UiAddGranteeDialogCard } from "./UiAddGranteeDialogCard.js";
|
|
12
5
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
6
|
+
* Add-grantee dialog — wraps `UiAddGranteeDialogCard` in `UiModalDialog`
|
|
7
|
+
* for the full modal contract (portal, dimmed backdrop, focus trap, Esc
|
|
8
|
+
* and backdrop dismiss).
|
|
16
9
|
*
|
|
17
10
|
* @internal
|
|
18
11
|
*/
|
|
19
|
-
export function UiAddGranteeDialog({ isOpen,
|
|
20
|
-
|
|
21
|
-
const dialogTitle = intl.formatMessage(olpObjectShareDialogMessages.title, { title: objectTitle });
|
|
22
|
-
const backButton = (_jsx(UiIconButton, { icon: "chevronLeft", variant: "tertiary", size: "small", onClick: onBack, accessibilityConfig: { ariaLabel: intl.formatMessage(olpAddGranteeDialogMessages.back) } }));
|
|
23
|
-
return (_jsxs(UiModalDialog, { isOpen: isOpen, onClose: onClose, dataTestId: dataTestId, children: [
|
|
24
|
-
_jsx(UiDialogHeader, { title: dialogTitle, titleSize: "large", onClose: onClose, leading: backButton }), _jsxs("div", { className: b(), children: [
|
|
25
|
-
_jsx(UiTextInput, { type: "search", value: searchQuery, onChange: onSearchQueryChange, label: intl.formatMessage(olpAddGranteeDialogMessages.userOrGroup), placeholder: intl.formatMessage(olpAddGranteeDialogMessages.searchPlaceholder) }), _jsx("div", { className: e("preview"), children: selectedGrantee ?? (_jsx("span", { className: e("empty-state"), children: intl.formatMessage(olpAddGranteeDialogMessages.emptyState) })) })
|
|
26
|
-
] }), _jsxs(UiDialogFooter, { divider: true, children: [
|
|
27
|
-
_jsx(UiButton, { label: intl.formatMessage(commonDialogMessages.cancel), variant: "secondary", size: "medium", onClick: onCancel }), _jsx(UiButton, { label: intl.formatMessage(olpAddGranteeDialogMessages.add), variant: "primary", size: "medium", onClick: onAdd, isDisabled: isAddDisabled })
|
|
28
|
-
] })
|
|
29
|
-
] }));
|
|
12
|
+
export function UiAddGranteeDialog({ isOpen, ...cardProps }) {
|
|
13
|
+
return (_jsx(UiModalDialog, { isOpen: isOpen, onClose: cardProps.onClose, children: _jsx(UiAddGranteeDialogCard, { ...cardProps }) }));
|
|
30
14
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type IUiGranteeAsyncOptions, type IUiPickedGrantee } from "../UiGranteeAsyncPicker/UiGranteeAsyncPicker.js";
|
|
2
|
+
import { type PermissionMenuLevel } from "../UiPermissionMenu/UiPermissionMenu.js";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export interface IUiAddGranteeDialogCardProps {
|
|
7
|
+
/** Object title shown in the header — wrapped into `Share "\{title\}"`. */
|
|
8
|
+
objectTitle: string;
|
|
9
|
+
/** Loader passed straight through to the embedded `UiGranteeAsyncPicker`. */
|
|
10
|
+
loadOptions: (search: string) => Promise<IUiGranteeAsyncOptions>;
|
|
11
|
+
/**
|
|
12
|
+
* Grantees currently picked. Single source of truth — the card derives all
|
|
13
|
+
* row state from it and emits the next list via `onSelectedGranteesChange`.
|
|
14
|
+
*/
|
|
15
|
+
selectedGrantees: ReadonlyArray<IUiPickedGrantee>;
|
|
16
|
+
/**
|
|
17
|
+
* Fires with the next list when the user picks a grantee, changes a row's
|
|
18
|
+
* permission level, or removes a row. Consumers store the result in their
|
|
19
|
+
* own state.
|
|
20
|
+
*/
|
|
21
|
+
onSelectedGranteesChange: (next: IUiPickedGrantee[]) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Permission level used when a grantee is added from the dropdown.
|
|
24
|
+
* Defaults to `"VIEW"`. Consumers that need a different default (e.g.
|
|
25
|
+
* "SHARE" for owners) override here.
|
|
26
|
+
*/
|
|
27
|
+
initialPermissionLevel?: PermissionMenuLevel;
|
|
28
|
+
/** Fires when the user clicks the header back-arrow button. */
|
|
29
|
+
onBack: () => void;
|
|
30
|
+
/** Fires when the user clicks the header X close button. */
|
|
31
|
+
onClose: () => void;
|
|
32
|
+
/** Fires when the user clicks Cancel in the footer. */
|
|
33
|
+
onCancel: () => void;
|
|
34
|
+
/**
|
|
35
|
+
* Fires when the user clicks the primary Share button in the footer. The
|
|
36
|
+
* button is disabled while no grantee has been picked.
|
|
37
|
+
*/
|
|
38
|
+
onShare: () => void;
|
|
39
|
+
/** Test id forwarded to the root element. */
|
|
40
|
+
dataTestId?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Add-grantee dialog card — header + grantee picker (search input with
|
|
44
|
+
* sectioned Groups/Users dropdown and picked-rows list) + footer with Cancel
|
|
45
|
+
* and Share. Renders inline as a plain card. For modal behavior (portal,
|
|
46
|
+
* backdrop, focus trap, dismiss), use `UiAddGranteeDialog` which wraps this
|
|
47
|
+
* in `UiModalDialog`.
|
|
48
|
+
*
|
|
49
|
+
* The card owns the visual composition (picker layout) but no policy. The
|
|
50
|
+
* caller controls the picked list via `selectedGrantees` / `onSelectedGranteesChange`,
|
|
51
|
+
* and may override the initial permission level via `initialPermissionLevel`.
|
|
52
|
+
*
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
export declare function UiAddGranteeDialogCard({ objectTitle, loadOptions, selectedGrantees, onSelectedGranteesChange, initialPermissionLevel, onBack, onClose, onCancel, onShare, dataTestId }: IUiAddGranteeDialogCardProps): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
//# sourceMappingURL=UiAddGranteeDialogCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiAddGranteeDialogCard.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.tsx"],"names":[],"mappings":"AAWA,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAExB,MAAM,iDAAiD,CAAC;AAIzD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAMnF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC,6EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IAEpB,6EAA6E;IAC7E,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;OAGG;IACH,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD;;;;OAIG;IACH,wBAAwB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC7D;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,mBAAmB,CAAC;IAE7C,+DAA+D;IAC/D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,sBAA+B,EAC/B,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,EACP,UAAU,EACb,EAAE,4BAA4B,2CAgD9B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
4
|
+
import { commonDialogMessages, olpAddGranteeDialogMessages, olpObjectShareDialogMessages, } from "../../locales.js";
|
|
5
|
+
import { bem } from "../@utils/bem.js";
|
|
6
|
+
import { UiButton } from "../UiButton/UiButton.js";
|
|
7
|
+
import { UiGranteeAsyncPicker, } from "../UiGranteeAsyncPicker/UiGranteeAsyncPicker.js";
|
|
8
|
+
import { UiIconButton } from "../UiIconButton/UiIconButton.js";
|
|
9
|
+
import { UiDialogFooter } from "../UiModalDialog/UiDialogFooter.js";
|
|
10
|
+
import { UiDialogHeader } from "../UiModalDialog/UiDialogHeader.js";
|
|
11
|
+
import { useGranteeSelection } from "./useGranteeSelection.js";
|
|
12
|
+
const { b } = bem("gd-ui-kit-add-grantee-dialog");
|
|
13
|
+
/**
|
|
14
|
+
* Add-grantee dialog card — header + grantee picker (search input with
|
|
15
|
+
* sectioned Groups/Users dropdown and picked-rows list) + footer with Cancel
|
|
16
|
+
* and Share. Renders inline as a plain card. For modal behavior (portal,
|
|
17
|
+
* backdrop, focus trap, dismiss), use `UiAddGranteeDialog` which wraps this
|
|
18
|
+
* in `UiModalDialog`.
|
|
19
|
+
*
|
|
20
|
+
* The card owns the visual composition (picker layout) but no policy. The
|
|
21
|
+
* caller controls the picked list via `selectedGrantees` / `onSelectedGranteesChange`,
|
|
22
|
+
* and may override the initial permission level via `initialPermissionLevel`.
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export function UiAddGranteeDialogCard({ objectTitle, loadOptions, selectedGrantees, onSelectedGranteesChange, initialPermissionLevel = "VIEW", onBack, onClose, onCancel, onShare, dataTestId, }) {
|
|
27
|
+
const intl = useIntl();
|
|
28
|
+
const dialogTitle = intl.formatMessage(olpObjectShareDialogMessages.title, { title: objectTitle });
|
|
29
|
+
const backButton = (_jsx(UiIconButton, { icon: "chevronLeft", variant: "tertiary", size: "small", onClick: onBack, accessibilityConfig: { ariaLabel: intl.formatMessage(olpAddGranteeDialogMessages.back) } }));
|
|
30
|
+
const { select, changePermission, remove } = useGranteeSelection({
|
|
31
|
+
selectedGrantees,
|
|
32
|
+
onSelectedGranteesChange,
|
|
33
|
+
initialPermissionLevel,
|
|
34
|
+
});
|
|
35
|
+
return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
|
|
36
|
+
_jsx(UiDialogHeader, { title: dialogTitle, titleSize: "large", onClose: onClose, leading: backButton }), _jsx(UiGranteeAsyncPicker, { loadOptions: loadOptions, selectedGrantees: selectedGrantees, onSelect: select, onPermissionChange: changePermission, onRemove: remove }), _jsxs(UiDialogFooter, { divider: true, children: [
|
|
37
|
+
_jsx(UiButton, { label: intl.formatMessage(commonDialogMessages.cancel), variant: "secondary", size: "medium", onClick: onCancel }), _jsx(UiButton, { label: intl.formatMessage(olpAddGranteeDialogMessages.add), variant: "primary", size: "medium", onClick: onShare, isDisabled: selectedGrantees.length === 0 })
|
|
38
|
+
] })
|
|
39
|
+
] }));
|
|
40
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type IUiGranteeAsyncOption, type IUiPickedGrantee } from "../UiGranteeAsyncPicker/UiGranteeAsyncPicker.js";
|
|
2
|
+
import { type PermissionMenuLevel } from "../UiPermissionMenu/UiPermissionMenu.js";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export interface IUseGranteeSelectionOptions {
|
|
7
|
+
/** Current picked list — caller owns the state. */
|
|
8
|
+
selectedGrantees: ReadonlyArray<IUiPickedGrantee>;
|
|
9
|
+
/** Fires with the next list whenever the hook produces a change. */
|
|
10
|
+
onSelectedGranteesChange: (next: IUiPickedGrantee[]) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Permission level used when a grantee is added from the picker.
|
|
13
|
+
* Defaults to `"VIEW"`.
|
|
14
|
+
*/
|
|
15
|
+
initialPermissionLevel?: PermissionMenuLevel;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export interface IUseGranteeSelectionResult {
|
|
21
|
+
/** Pick a grantee from the picker — no-op if already in the list. */
|
|
22
|
+
select: (option: IUiGranteeAsyncOption) => void;
|
|
23
|
+
/** Change a row's permission level. */
|
|
24
|
+
changePermission: (grantee: IUiPickedGrantee, next: PermissionMenuLevel) => void;
|
|
25
|
+
/** Remove a row. */
|
|
26
|
+
remove: (grantee: IUiPickedGrantee) => void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Selection callbacks for the add-grantee dialog. Caller owns the list and
|
|
30
|
+
* receives the next list via `onSelectedGranteesChange`.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export declare function useGranteeSelection({ selectedGrantees, onSelectedGranteesChange, initialPermissionLevel }: IUseGranteeSelectionOptions): IUseGranteeSelectionResult;
|
|
35
|
+
//# sourceMappingURL=useGranteeSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGranteeSelection.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/useGranteeSelection.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACxB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,qDAAmD;IACnD,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD,oEAAoE;IACpE,wBAAwB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC7D;;;OAGG;IACH,sBAAsB,CAAC,EAAE,mBAAmB,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,uEAAqE;IACrE,MAAM,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAChD,uCAAuC;IACvC,gBAAgB,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjF,oBAAoB;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,gBAAgB,EAChB,wBAAwB,EACxB,sBAA+B,EAClC,EAAE,2BAA2B,GAAG,0BAA0B,CAkC1D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Selection callbacks for the add-grantee dialog. Caller owns the list and
|
|
5
|
+
* receives the next list via `onSelectedGranteesChange`.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export function useGranteeSelection({ selectedGrantees, onSelectedGranteesChange, initialPermissionLevel = "VIEW", }) {
|
|
10
|
+
const select = useCallback((option) => {
|
|
11
|
+
// The picker already filters out picked ids, but a quick double-click
|
|
12
|
+
// can land a second select call before the parent re-renders — guard
|
|
13
|
+
// against the duplicate row here.
|
|
14
|
+
if (selectedGrantees.some((g) => g.id === option.id)) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
onSelectedGranteesChange([
|
|
18
|
+
...selectedGrantees,
|
|
19
|
+
{ ...option, permissionLevel: initialPermissionLevel },
|
|
20
|
+
]);
|
|
21
|
+
}, [selectedGrantees, onSelectedGranteesChange, initialPermissionLevel]);
|
|
22
|
+
const changePermission = useCallback((grantee, next) => {
|
|
23
|
+
onSelectedGranteesChange(selectedGrantees.map((g) => (g.id === grantee.id ? { ...g, permissionLevel: next } : g)));
|
|
24
|
+
}, [selectedGrantees, onSelectedGranteesChange]);
|
|
25
|
+
const remove = useCallback((grantee) => {
|
|
26
|
+
onSelectedGranteesChange(selectedGrantees.filter((g) => g.id !== grantee.id));
|
|
27
|
+
}, [selectedGrantees, onSelectedGranteesChange]);
|
|
28
|
+
return { select, changePermission, remove };
|
|
29
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type GranteeAvatarKind } from "../UiGranteeAvatar/UiGranteeAvatar.js";
|
|
2
|
+
import { type PermissionMenuLevel } from "../UiPermissionMenu/UiPermissionMenu.js";
|
|
3
|
+
/**
|
|
4
|
+
* One pickable user or group entry.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface IUiGranteeAsyncOption {
|
|
9
|
+
/** Stable identifier — used as the React key and as the value passed to `onSelect`. */
|
|
10
|
+
id: string;
|
|
11
|
+
/** Avatar variant. */
|
|
12
|
+
kind: GranteeAvatarKind;
|
|
13
|
+
/** Display name shown on the row. */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Optional email subline (users only). */
|
|
16
|
+
email?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A previously-picked grantee with its current permission level.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export interface IUiPickedGrantee extends IUiGranteeAsyncOption {
|
|
24
|
+
/** Permission level chosen for this grantee. Drives the row's permission menu trigger label. */
|
|
25
|
+
permissionLevel: PermissionMenuLevel;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Result returned by the consumer's loader: separate `groups` and `users` arrays
|
|
29
|
+
* so the dropdown can render the two sections independently. Either may be empty.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export interface IUiGranteeAsyncOptions {
|
|
34
|
+
groups: IUiGranteeAsyncOption[];
|
|
35
|
+
users: IUiGranteeAsyncOption[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export interface IUiGranteeAsyncPickerProps {
|
|
41
|
+
/**
|
|
42
|
+
* Loader called whenever the (debounced) search query changes. The empty
|
|
43
|
+
* string is passed on mount to populate the initial dropdown. Pagination
|
|
44
|
+
* is intentionally not exposed at this layer — the loader returns the
|
|
45
|
+
* full search result and the consumer caps backend results elsewhere.
|
|
46
|
+
*/
|
|
47
|
+
loadOptions: (search: string) => Promise<IUiGranteeAsyncOptions>;
|
|
48
|
+
/**
|
|
49
|
+
* Grantees already picked. Rendered below the search input as `UiGranteeRow`s
|
|
50
|
+
* with a `UiPermissionMenu` trigger and a Remove action. Also filtered out
|
|
51
|
+
* of the dropdown so the user cannot pick the same grantee twice.
|
|
52
|
+
*/
|
|
53
|
+
selectedGrantees?: ReadonlyArray<IUiPickedGrantee>;
|
|
54
|
+
/** Fires when the user picks an option from the dropdown. */
|
|
55
|
+
onSelect: (option: IUiGranteeAsyncOption) => void;
|
|
56
|
+
/** Fires when the user changes the permission level on a picked row. */
|
|
57
|
+
onPermissionChange?: (grantee: IUiPickedGrantee, next: PermissionMenuLevel) => void;
|
|
58
|
+
/** Fires when the user picks Remove access in the row's permission menu. */
|
|
59
|
+
onRemove?: (grantee: IUiPickedGrantee) => void;
|
|
60
|
+
/** Test id forwarded to the root element. */
|
|
61
|
+
dataTestId?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Sectioned async grantee picker — specialization of `UiAutocomplete` for the
|
|
65
|
+
* share/access-control domain. Renders a search input with a dropdown split
|
|
66
|
+
* into `Groups` and `Users` sections, and a list of picked grantees below
|
|
67
|
+
* (each as a `UiGranteeRow` with a `UiPermissionMenu` trigger). The
|
|
68
|
+
* permission menu carries the Remove action; consumers wire it via `onRemove`.
|
|
69
|
+
*
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
export declare function UiGranteeAsyncPicker({ loadOptions, selectedGrantees, onSelect, onPermissionChange, onRemove, dataTestId }: IUiGranteeAsyncPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
73
|
+
//# sourceMappingURL=UiGranteeAsyncPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiGranteeAsyncPicker.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,yCAAyC,CAAC;AAIrG;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,yFAAuF;IACvF,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC3D,gGAAgG;IAChG,eAAe,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,gBAAqB,EACrB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACb,EAAE,0BAA0B,2CA2G5B"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useCallback, useMemo } from "react";
|
|
4
|
+
import { useIntl } from "react-intl";
|
|
5
|
+
import { olpAddGranteeDialogMessages, olpPermissionMessages, uiGranteeAsyncPickerMessages, } from "../../locales.js";
|
|
6
|
+
import { bem } from "../@utils/bem.js";
|
|
7
|
+
import { UiAutocomplete } from "../UiAutocomplete/UiAutocomplete.js";
|
|
8
|
+
import { UiButton } from "../UiButton/UiButton.js";
|
|
9
|
+
import { UiGranteeRow } from "../UiGranteeRow/UiGranteeRow.js";
|
|
10
|
+
import { UiPermissionMenu } from "../UiPermissionMenu/UiPermissionMenu.js";
|
|
11
|
+
const { b, e } = bem("gd-ui-kit-grantee-async-picker");
|
|
12
|
+
/**
|
|
13
|
+
* Sectioned async grantee picker — specialization of `UiAutocomplete` for the
|
|
14
|
+
* share/access-control domain. Renders a search input with a dropdown split
|
|
15
|
+
* into `Groups` and `Users` sections, and a list of picked grantees below
|
|
16
|
+
* (each as a `UiGranteeRow` with a `UiPermissionMenu` trigger). The
|
|
17
|
+
* permission menu carries the Remove action; consumers wire it via `onRemove`.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export function UiGranteeAsyncPicker({ loadOptions, selectedGrantees = [], onSelect, onPermissionChange, onRemove, dataTestId, }) {
|
|
22
|
+
const intl = useIntl();
|
|
23
|
+
const groupsLabel = intl.formatMessage(uiGranteeAsyncPickerMessages.sectionGroups);
|
|
24
|
+
const usersLabel = intl.formatMessage(uiGranteeAsyncPickerMessages.sectionUsers);
|
|
25
|
+
const canViewLabel = intl.formatMessage(olpPermissionMessages.canView);
|
|
26
|
+
const canShareLabel = intl.formatMessage(olpPermissionMessages.canViewAndShare);
|
|
27
|
+
const selectedIds = useMemo(() => selectedGrantees.map((g) => g.id), [selectedGrantees]);
|
|
28
|
+
const adaptedLoadOptions = useCallback(async (search) => {
|
|
29
|
+
const { groups, users } = await loadOptions(search);
|
|
30
|
+
const sections = [];
|
|
31
|
+
if (groups.length > 0) {
|
|
32
|
+
sections.push({
|
|
33
|
+
id: "groups",
|
|
34
|
+
label: groupsLabel,
|
|
35
|
+
options: groups.map((g) => ({ id: g.id, label: g.name, grantee: g })),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (users.length > 0) {
|
|
39
|
+
sections.push({
|
|
40
|
+
id: "users",
|
|
41
|
+
label: usersLabel,
|
|
42
|
+
options: users.map((u) => ({
|
|
43
|
+
id: u.id,
|
|
44
|
+
label: u.name,
|
|
45
|
+
secondaryText: u.email,
|
|
46
|
+
grantee: u,
|
|
47
|
+
})),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// The grantee picker doesn't paginate at the kit level — backend
|
|
51
|
+
// pagination, if any, is hidden inside the consumer's loader.
|
|
52
|
+
return { sections };
|
|
53
|
+
}, [loadOptions, groupsLabel, usersLabel]);
|
|
54
|
+
const handleSelect = useCallback((option) => {
|
|
55
|
+
onSelect(option.grantee);
|
|
56
|
+
}, [onSelect]);
|
|
57
|
+
const autocompleteMessages = useMemo(() => ({
|
|
58
|
+
searchPlaceholder: intl.formatMessage(uiGranteeAsyncPickerMessages.searchPlaceholder),
|
|
59
|
+
stateError: intl.formatMessage(uiGranteeAsyncPickerMessages.stateError),
|
|
60
|
+
stateNoMatch: intl.formatMessage(uiGranteeAsyncPickerMessages.stateNoMatch),
|
|
61
|
+
}), [intl]);
|
|
62
|
+
return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
|
|
63
|
+
_jsx(UiAutocomplete, { loadOptions: adaptedLoadOptions, selectedIds: selectedIds, onSelect: handleSelect, messages: autocompleteMessages, accessibilityConfig: {
|
|
64
|
+
ariaLabel: intl.formatMessage(olpAddGranteeDialogMessages.userOrGroup),
|
|
65
|
+
} }), selectedGrantees.length === 0 ? (_jsx("div", { className: e("empty-state"), children: intl.formatMessage(olpAddGranteeDialogMessages.emptyState) })) : null, selectedGrantees.length > 0 ? (_jsx("ul", { className: e("picked-list"), children: selectedGrantees.map((g) => {
|
|
66
|
+
const triggerLabel = g.permissionLevel === "SHARE" ? canShareLabel : canViewLabel;
|
|
67
|
+
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
|
+
}) })) : null] }));
|
|
69
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiIcon/icons.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiIcon/icons.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAk/BjD,CAAC"}
|
package/esm/@ui/UiIcon/icons.js
CHANGED
|
@@ -266,4 +266,6 @@ export const iconPaths = {
|
|
|
266
266
|
unpin: (_jsxs("g", { children: [
|
|
267
267
|
_jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M14.2605 8.56738C14.2628 8.56836 14.2651 8.56931 14.2674 8.57031C14.3715 8.60935 14.4497 8.65499 14.5017 8.70703L14.7947 9L9.50174 14.293L9.20877 14C9.15673 13.9479 9.11109 13.8697 9.07205 13.7656C9.07098 13.7632 9.07114 13.7602 9.0701 13.7578L8.33084 14.4971C8.38206 14.5727 8.43536 14.6426 8.49588 14.7031L8.78885 14.9961C8.88646 15.0937 8.99725 15.1686 9.12088 15.2207C9.23801 15.2663 9.3651 15.289 9.50174 15.2891C9.63188 15.2891 9.75896 15.2662 9.8826 15.2207C10.0063 15.1686 10.1137 15.0937 10.2049 14.9961L11.7576 13.4434L18.1931 18.3945C18.2387 18.4335 18.2876 18.4629 18.3396 18.4824C18.3916 18.4954 18.4439 18.5019 18.4959 18.502C18.5609 18.502 18.6261 18.4889 18.6912 18.4629C18.7497 18.4369 18.8052 18.401 18.8572 18.3555C18.9418 18.2643 18.9907 18.1569 19.0037 18.0332C19.0102 17.9095 18.9744 17.7956 18.8963 17.6914L13.9451 11.2559L15.4978 9.70312C15.6931 9.50781 15.7908 9.27344 15.7908 9C15.7908 8.72656 15.6931 8.49219 15.4978 8.29688L15.2049 8.00391C15.1439 7.94015 15.0742 7.88321 14.9978 7.83008L14.2605 8.56738ZM15.7615 15.2695L12.4705 12.7305L13.2322 11.9688L15.7615 15.2695Z" }), _jsx("path", { d: "M7.99783 1.20703C7.8677 1.20706 7.74061 1.2331 7.61697 1.28516C7.49335 1.33723 7.38581 1.4089 7.29471 1.5L2.00174 6.79297C1.90414 6.88409 1.83245 6.99158 1.7869 7.11523C1.73483 7.23891 1.70877 7.36591 1.70877 7.49609C1.70877 7.63279 1.73483 7.76304 1.7869 7.88672C1.83245 8.00386 1.90414 8.11136 2.00174 8.20898L2.29471 8.50195C2.4379 8.64515 2.62356 8.76564 2.85135 8.86328C3.07914 8.9544 3.29412 8.99997 3.49588 9H4.50174C4.57331 9 4.66132 9.02284 4.76541 9.06836C4.86951 9.1074 4.9477 9.15304 4.99979 9.20508L6.48318 10.6885L7.18631 9.98535L5.70291 8.50195C5.5597 8.35877 5.37408 8.24151 5.14627 8.15039C4.91847 8.05278 4.70351 8.00391 4.50174 8.00391H3.49588C3.4243 8.00386 3.33627 7.98108 3.23221 7.93555C3.12813 7.89 3.04989 7.84112 2.99783 7.78906L2.70486 7.49609L7.99783 2.20312L8.2908 2.49609C8.34287 2.54817 8.39172 2.62959 8.43729 2.74023C8.47635 2.8444 8.49588 2.93229 8.49588 3.00391V4C8.49588 4.2018 8.54473 4.41669 8.64236 4.64453C8.73349 4.87234 8.854 5.06121 9.00369 5.21094L10.4822 6.68945L11.1902 5.98145L9.70682 4.49805C9.65478 4.44596 9.60914 4.36777 9.5701 4.26367C9.52455 4.15954 9.50174 4.0716 9.50174 4V3.00391C9.50174 2.79557 9.45617 2.57747 9.36502 2.34961C9.26737 2.12178 9.14691 1.93618 9.00369 1.79297L8.71072 1.5C8.6131 1.4089 8.5056 1.33722 8.38846 1.28516C8.26481 1.23312 8.13449 1.20703 7.99783 1.20703Z" }), _jsx("path", { d: "M17.1465 2.14648C17.3418 1.95122 17.6583 1.95122 17.8535 2.14648C18.0488 2.34175 18.0488 2.65825 17.8535 2.85352L2.85353 17.8535C2.65827 18.0488 2.34176 18.0488 2.1465 17.8535C1.95123 17.6583 1.95123 17.3417 2.1465 17.1465L17.1465 2.14648Z" })
|
|
268
268
|
] })),
|
|
269
|
+
speechBubble: (_jsx("path", { d: "M0.50071 19C0.390033 19 0.289122 18.9674 0.197976 18.9023C0.10683 18.8307 0.0482363 18.7396 0.0221946 18.6289C-0.0103575 18.5247 -0.00710227 18.4206 0.0319602 18.3164C0.0775331 18.2122 0.149148 18.1309 0.246804 18.0723C0.669981 17.8184 1.03131 17.5417 1.33079 17.2422C1.63678 16.9427 1.89394 16.6497 2.10227 16.3633C2.31712 16.0703 2.48639 15.7969 2.61009 15.543C2.73378 15.2826 2.82493 15.0645 2.88352 14.8887C2.42779 14.5371 2.02089 14.1562 1.66282 13.7461C1.30475 13.3294 1.00201 12.8932 0.754616 12.4375C0.507221 11.9753 0.318419 11.4967 0.18821 11.002C0.0645123 10.5072 0.00266335 10.0059 0.00266335 9.49805C0.00266335 8.98372 0.0677675 8.47917 0.197976 7.98438C0.328184 7.48958 0.520241 7.00781 0.774148 6.53906C0.891335 6.3112 1.0248 6.0931 1.17454 5.88477C1.32428 5.66992 1.48378 5.46484 1.65305 5.26953C1.82232 5.06771 2.00462 4.87565 2.19993 4.69336C2.40175 4.50456 2.61334 4.32552 2.83469 4.15625C3.2774 3.8112 3.75592 3.50521 4.27024 3.23828C4.79107 2.96484 5.33144 2.73698 5.89134 2.55469C6.45774 2.3724 7.04368 2.23568 7.64915 2.14453C8.25462 2.04688 8.87311 1.99805 9.50462 1.99805C10.1296 1.99805 10.7449 2.04688 11.3503 2.14453C11.9558 2.23568 12.5417 2.3724 13.1081 2.55469C13.6745 2.73698 14.2149 2.96484 14.7292 3.23828C15.2435 3.50521 15.7253 3.8112 16.1745 4.15625C16.3959 4.32552 16.6042 4.50456 16.7995 4.69336C16.9949 4.87565 17.1771 5.06771 17.3464 5.26953C17.5222 5.46484 17.6817 5.66992 17.8249 5.88477C17.9747 6.0931 18.1114 6.3112 18.2351 6.53906C18.489 7.00781 18.681 7.48958 18.8113 7.98438C18.9415 8.47917 19.0066 8.98372 19.0066 9.49805C19.0066 10.0124 18.9415 10.5202 18.8113 11.0215C18.681 11.5163 18.489 11.998 18.2351 12.4668C18.1114 12.6882 17.9747 12.9062 17.8249 13.1211C17.6817 13.3294 17.5222 13.5345 17.3464 13.7363C17.1771 13.9316 16.9949 14.1237 16.7995 14.3125C16.6042 14.4948 16.3959 14.6706 16.1745 14.8398C15.7253 15.1914 15.2435 15.5007 14.7292 15.7676C14.2149 16.0345 13.6745 16.2591 13.1081 16.4414C12.5482 16.6237 11.9623 16.7637 11.3503 16.8613C10.7449 16.9525 10.1296 16.998 9.50462 16.998C8.98378 16.998 8.46946 16.9655 7.96165 16.9004C7.46035 16.8353 6.96881 16.7409 6.48704 16.6172C6.27219 16.7604 5.97272 16.9492 5.5886 17.1836C5.20449 17.4115 4.7748 17.6458 4.29954 17.8867C3.92844 18.069 3.57037 18.2318 3.22532 18.375C2.88027 18.5117 2.54824 18.6289 2.22923 18.7266C1.91022 18.8177 1.60748 18.8861 1.32102 18.9316C1.03456 18.9772 0.761127 19 0.50071 19ZM9.50462 3.00391C8.33274 3.00391 7.22923 3.17318 6.19407 3.51172C5.16542 3.85026 4.26373 4.31576 3.48899 4.9082C2.72076 5.49414 2.11204 6.18424 1.66282 6.97852C1.22011 7.76628 0.998757 8.60612 0.998757 9.49805C0.998757 9.95378 1.06061 10.403 1.1843 10.8457C1.308 11.2819 1.48704 11.7051 1.72141 12.1152C1.95579 12.5254 2.24225 12.916 2.58079 13.2871C2.92584 13.6517 3.31972 13.987 3.76243 14.293C3.84706 14.3516 3.90566 14.4329 3.93821 14.5371C3.97727 14.6348 3.98378 14.7324 3.95774 14.8301C3.92519 14.9408 3.87311 15.0938 3.80149 15.2891C3.73639 15.4844 3.64199 15.7057 3.51829 15.9531C3.39459 16.2005 3.23834 16.4674 3.04954 16.7539C2.86725 17.0404 2.64264 17.3301 2.37571 17.623C2.70123 17.5059 3.03001 17.3724 3.36204 17.2227C3.69407 17.0729 4.01959 16.9134 4.3386 16.7441C4.66412 16.5684 4.97662 16.3893 5.2761 16.207C5.57558 16.0182 5.85553 15.8359 6.11594 15.6602C6.17454 15.6146 6.23964 15.5885 6.31126 15.582C6.38938 15.569 6.46425 15.5723 6.53587 15.5918C7.01113 15.7285 7.49615 15.8327 7.99094 15.9043C8.48574 15.9694 8.99029 16.002 9.50462 16.002C10.6765 16.002 11.7768 15.8327 12.8054 15.4941C13.8406 15.1491 14.7422 14.6836 15.5105 14.0977C16.2787 13.5052 16.8842 12.8151 17.3269 12.0273C17.7761 11.2396 18.0007 10.3965 18.0007 9.49805C18.0007 8.60612 17.7761 7.76628 17.3269 6.97852C16.8842 6.18424 16.2787 5.49414 15.5105 4.9082C14.7422 4.31576 13.8406 3.85026 12.8054 3.51172C11.7768 3.17318 10.6765 3.00391 9.50462 3.00391Z" })),
|
|
270
|
+
pieChart: (_jsx("path", { d: "M8.49609 19.9961C7.92969 19.9961 7.37305 19.9408 6.82617 19.8301C6.2793 19.7259 5.75195 19.5664 5.24414 19.3516C4.73633 19.1432 4.2513 18.8861 3.78906 18.5801C3.32682 18.2676 2.89388 17.9095 2.49023 17.5059C2.08659 17.1087 1.72852 16.679 1.41602 16.2168C1.11003 15.748 0.849609 15.2598 0.634766 14.752C0.426432 14.2441 0.266927 13.7168 0.15625 13.1699C0.0520833 12.623 0 12.0664 0 11.5C0 10.9336 0.0520833 10.377 0.15625 9.83008C0.266927 9.2832 0.426432 8.75586 0.634766 8.24805C0.849609 7.74023 1.11003 7.25521 1.41602 6.79297C1.72852 6.32422 2.08659 5.89128 2.49023 5.49414C2.89388 5.09049 3.32682 4.73568 3.78906 4.42969C4.2513 4.11719 4.73633 3.85677 5.24414 3.64844C5.75195 3.43359 6.2793 3.27409 6.82617 3.16992C7.37305 3.05924 7.92969 3.00391 8.49609 3.00391C8.63932 3.00391 8.75977 3.05273 8.85742 3.15039C8.95508 3.24805 9.00391 3.36523 9.00391 3.50195C9.00391 3.63867 8.95508 3.75586 8.85742 3.85352C8.75977 3.95117 8.63932 4 8.49609 4C7.46745 4 6.4974 4.19857 5.58594 4.5957C4.67448 4.98633 3.87695 5.52018 3.19336 6.19727C2.51628 6.87435 1.97917 7.66862 1.58203 8.58008C1.19141 9.49154 0.996094 10.4648 0.996094 11.5C0.996094 12.5352 1.19141 13.5085 1.58203 14.4199C1.97917 15.3314 2.51628 16.1257 3.19336 16.8027C3.87695 17.4798 4.67448 18.0169 5.58594 18.4141C6.4974 18.8047 7.46745 19 8.49609 19C9.53125 19 10.5046 18.8047 11.416 18.4141C12.3275 18.0169 13.1217 17.4798 13.7988 16.8027C14.4824 16.1257 15.0195 15.3314 15.4102 14.4199C15.8008 13.5085 15.9961 12.5352 15.9961 11.5C15.9961 11.3633 16.0449 11.2461 16.1426 11.1484C16.2402 11.0508 16.3607 11.002 16.5039 11.002C16.6406 11.002 16.7578 11.0508 16.8555 11.1484C16.9531 11.2461 17.002 11.3633 17.002 11.5C17.002 12.0664 16.9466 12.623 16.8359 13.1699C16.7253 13.7168 16.5658 14.2441 16.3574 14.752C16.1491 15.2598 15.8887 15.748 15.5762 16.2168C15.2702 16.679 14.9154 17.1087 14.5117 17.5059C14.1081 17.9095 13.6751 18.2676 13.2129 18.5801C12.7507 18.8861 12.2624 19.1432 11.748 19.3516C11.2402 19.5664 10.7129 19.7259 10.166 19.8301C9.62565 19.9408 9.06901 19.9961 8.49609 19.9961ZM18.4961 9.99609H10.498C10.3613 9.99609 10.2441 9.94727 10.1465 9.84961C10.0488 9.75195 10 9.63477 10 9.49805V1.5C10 1.36328 10.0488 1.24609 10.1465 1.14844C10.2441 1.05078 10.3613 1.00195 10.498 1.00195C11.0645 1.00195 11.6211 1.05729 12.168 1.16797C12.7148 1.27214 13.2422 1.43164 13.75 1.64648C14.2643 1.85482 14.7526 2.11523 15.2148 2.42773C15.6771 2.73372 16.11 3.08854 16.5137 3.49219C16.9108 3.88932 17.2624 4.32227 17.5684 4.79102C17.8809 5.25326 18.1413 5.73828 18.3496 6.24609C18.5645 6.75391 18.7272 7.28125 18.8379 7.82812C18.9486 8.375 19.0039 8.93164 19.0039 9.49805C19.0039 9.63477 18.9551 9.75195 18.8574 9.84961C18.7598 9.94727 18.6393 9.99609 18.4961 9.99609ZM10.9961 9H17.9883C17.9232 8.0625 17.6986 7.18359 17.3145 6.36328C16.9303 5.54297 16.4258 4.82357 15.8008 4.20508C15.1758 3.58008 14.4531 3.07552 13.6328 2.69141C12.8125 2.30078 11.9336 2.07617 10.9961 2.01758V9Z" })),
|
|
269
271
|
};
|
|
@@ -26,6 +26,14 @@ export interface IStylingEditorDialogProps<T extends StylingPickerItemContent> e
|
|
|
26
26
|
onExit?: (name: string, definition: string) => void;
|
|
27
27
|
onInvalidDefinition?: (ref: ObjRef) => void;
|
|
28
28
|
showBackButton?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Optional validation of the parsed definition content (e.g. checking theme color values).
|
|
31
|
+
*
|
|
32
|
+
* @remarks
|
|
33
|
+
* Called only when the definition is valid JSON. Return a localized error message to block
|
|
34
|
+
* submission and display it, or undefined when the content is valid.
|
|
35
|
+
*/
|
|
36
|
+
validateDefinition?: (content: T) => string | undefined;
|
|
29
37
|
}
|
|
30
38
|
/**
|
|
31
39
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StylingEditorDialog.d.ts","sourceRoot":"","sources":["../../../src/Dialog/StylingEditorDialog/StylingEditorDialog.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAOnF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAEH,KAAK,+BAA+B,EACvC,MAAM,gCAAgC,CAAC;AAGxC;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,aAAa,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,wBAAwB;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,CAAC,SAAS,wBAAwB,CACzE,SAAQ,+BAA+B,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,WAAW,CAAC;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"StylingEditorDialog.d.ts","sourceRoot":"","sources":["../../../src/Dialog/StylingEditorDialog/StylingEditorDialog.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAOnF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAEH,KAAK,+BAA+B,EACvC,MAAM,gCAAgC,CAAC;AAGxC;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,aAAa,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,wBAAwB;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,CAAC,SAAS,wBAAwB,CACzE,SAAQ,+BAA+B,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,WAAW,CAAC;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;CAC3D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,wBAAwB,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,2CAM1G"}
|
|
@@ -17,7 +17,7 @@ import { StylingExample } from "./StylingExample.js";
|
|
|
17
17
|
export function StylingEditorDialog(props) {
|
|
18
18
|
return (_jsx(IntlWrapper, { locale: props.locale, children: _jsx(StylingEditorDialogCore, { ...props }) }));
|
|
19
19
|
}
|
|
20
|
-
function StylingEditorDialogCore({ title, tooltip, link, stylingItem, examples, exampleToColorPreview, onClose, onSubmit, onCancel, disableSubmit, showProgressIndicator, showBackButton, onHelpClick, onExit = () => { }, className, onInvalidDefinition = () => { }, }) {
|
|
20
|
+
function StylingEditorDialogCore({ title, tooltip, link, stylingItem, examples, exampleToColorPreview, onClose, onSubmit, onCancel, disableSubmit, showProgressIndicator, showBackButton, onHelpClick, onExit = () => { }, className, onInvalidDefinition = () => { }, validateDefinition, }) {
|
|
21
21
|
const intl = useIntl();
|
|
22
22
|
const providedExamples = !!examples && examples.length !== 0 && !!exampleToColorPreview;
|
|
23
23
|
const initialNameField = stylingItem?.name ?? "";
|
|
@@ -46,7 +46,21 @@ function StylingEditorDialogCore({ title, tooltip, link, stylingItem, examples,
|
|
|
46
46
|
return false;
|
|
47
47
|
}
|
|
48
48
|
}, [definitionField]);
|
|
49
|
-
|
|
49
|
+
// Content-level validation (e.g. theme color values) runs only on well-formed JSON.
|
|
50
|
+
const definitionContentError = useMemo(() => {
|
|
51
|
+
if (!validateDefinition || !validDefinition) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return validateDefinition(JSON.parse(definitionField));
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// a buggy validator must not crash the dialog; degrade gracefully and let the user proceed
|
|
59
|
+
console.error("StylingEditorDialog: the provided validateDefinition callback threw.", error);
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}, [validateDefinition, validDefinition, definitionField]);
|
|
63
|
+
const validFields = useMemo(() => validName && validDefinition && !definitionContentError, [validName, validDefinition, definitionContentError]);
|
|
50
64
|
const isSubmitDisabled = useMemo(() => !validFields || !fieldsChanged || disableSubmit, [validFields, fieldsChanged, disableSubmit]);
|
|
51
65
|
const emptyDefinition = useMemo(() => definitionField === "", [definitionField]);
|
|
52
66
|
const errorMessage = useMemo(() => {
|
|
@@ -62,8 +76,19 @@ function StylingEditorDialogCore({ title, tooltip, link, stylingItem, examples,
|
|
|
62
76
|
}
|
|
63
77
|
return intl.formatMessage({ id: "stylingEditor.dialog.definition.invalid" });
|
|
64
78
|
}
|
|
79
|
+
if (definitionContentError) {
|
|
80
|
+
return definitionContentError;
|
|
81
|
+
}
|
|
65
82
|
return undefined;
|
|
66
|
-
}, [
|
|
83
|
+
}, [
|
|
84
|
+
validName,
|
|
85
|
+
emptyDefinition,
|
|
86
|
+
validDefinition,
|
|
87
|
+
definitionContentError,
|
|
88
|
+
onInvalidDefinition,
|
|
89
|
+
stylingItem?.ref,
|
|
90
|
+
intl,
|
|
91
|
+
]);
|
|
67
92
|
const getFinalStylingItem = (original, definition, name) => {
|
|
68
93
|
return {
|
|
69
94
|
...(original || {}),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AriaAttributes, type AriaRole, type MutableRefObject, type ReactNode, type RefObject } from "react";
|
|
2
2
|
import { type IButtonAccessibilityConfig } from "../Button/typings.js";
|
|
3
|
-
import { type OverlayPositionType } from "../typings/overlay.js";
|
|
3
|
+
import { type Alignment, type OverlayPositionType } from "../typings/overlay.js";
|
|
4
4
|
import { type IAlignPoint } from "../typings/positioning.js";
|
|
5
5
|
export declare const DROPDOWN_BODY_CLASS = "dropdown-body";
|
|
6
6
|
/**
|
|
@@ -57,6 +57,8 @@ export interface IDropdownProps {
|
|
|
57
57
|
closeOnParentScroll?: boolean;
|
|
58
58
|
ignoreClicksOnByClass?: string[];
|
|
59
59
|
onOpenStateChanged?: (isOpen: boolean) => void;
|
|
60
|
+
/** Reports the align point the Overlay chose whenever it (re)positions the body. */
|
|
61
|
+
onAlign?: (alignment: Alignment) => void;
|
|
60
62
|
overlayPositionType?: OverlayPositionType;
|
|
61
63
|
overlayZIndex?: number;
|
|
62
64
|
/**
|
|
@@ -78,5 +80,5 @@ export interface IDropdownProps {
|
|
|
78
80
|
/**
|
|
79
81
|
* @internal
|
|
80
82
|
*/
|
|
81
|
-
export declare function Dropdown({ isOpen: isOpenProp, onToggle, className, openOnInit, closeOnParentScroll, closeOnMouseDrag, closeOnOutsideClick, overlayPositionType, alignPoints, overlayZIndex, ignoreClicksOnByClass, renderBody, renderButton, onOpenStateChanged, fullscreenOnMobile, enableEventPropagation, enableAutoToggle, closeOnEscape, autofocusOnOpen, initialFocus, returnFocusTo, accessibilityConfig, shouldTrapFocus }: IDropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
83
|
+
export declare function Dropdown({ isOpen: isOpenProp, onToggle, className, openOnInit, closeOnParentScroll, closeOnMouseDrag, closeOnOutsideClick, overlayPositionType, alignPoints, overlayZIndex, ignoreClicksOnByClass, renderBody, renderButton, onOpenStateChanged, onAlign, fullscreenOnMobile, enableEventPropagation, enableAutoToggle, closeOnEscape, autofocusOnOpen, initialFocus, returnFocusTo, accessibilityConfig, shouldTrapFocus }: IDropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
82
84
|
//# sourceMappingURL=Dropdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../src/Dropdown/Dropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,SAAS,EAKjB,MAAM,OAAO,CAAC;AAQf,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAIvE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../src/Dropdown/Dropdown.tsx"],"names":[],"mappings":"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"}
|