@gooddata/sdk-ui-kit 10.27.0-alpha.1 → 10.27.0-alpha.11
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/@utils/keyboardNavigation.d.ts +23 -12
- package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -1
- package/esm/@ui/@utils/keyboardNavigation.js +58 -16
- package/esm/@ui/@utils/keyboardNavigation.js.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts +9 -0
- package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js +74 -71
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
- package/esm/Dialog/ConfirmDialogBase.d.ts.map +1 -1
- package/esm/Dialog/ConfirmDialogBase.js +1 -1
- package/esm/Dialog/ConfirmDialogBase.js.map +1 -1
- package/esm/Dialog/DialogBase.d.ts.map +1 -1
- package/esm/Dialog/DialogBase.js +2 -2
- package/esm/Dialog/DialogBase.js.map +1 -1
- package/esm/Dialog/DialogCloseButton.d.ts +1 -1
- package/esm/Dialog/DialogCloseButton.d.ts.map +1 -1
- package/esm/Dialog/DialogCloseButton.js +11 -2
- package/esm/Dialog/DialogCloseButton.js.map +1 -1
- package/esm/Dialog/ExportDialogBase.d.ts.map +1 -1
- package/esm/Dialog/ExportDialogBase.js +8 -3
- package/esm/Dialog/ExportDialogBase.js.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.d.ts.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.js +1 -5
- package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.js.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/GranteeItem.js +2 -2
- package/esm/Dialog/ShareDialog/ShareDialogBase/GranteeItem.js.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.d.ts.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.js +1 -5
- package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.js.map +1 -1
- package/esm/Dialog/typings.d.ts +1 -0
- package/esm/Dialog/typings.d.ts.map +1 -1
- package/esm/Form/Checkbox.d.ts +1 -0
- package/esm/Form/Checkbox.d.ts.map +1 -1
- package/esm/Form/Checkbox.js +3 -3
- package/esm/Form/Checkbox.js.map +1 -1
- package/esm/Header/Header.d.ts.map +1 -1
- package/esm/Header/Header.js +1 -1
- package/esm/Header/Header.js.map +1 -1
- package/esm/Header/HeaderAccount.d.ts.map +1 -1
- package/esm/Header/HeaderAccount.js +2 -3
- package/esm/Header/HeaderAccount.js.map +1 -1
- package/esm/Header/HeaderChatButton.d.ts +2 -0
- package/esm/Header/HeaderChatButton.d.ts.map +1 -1
- package/esm/Header/HeaderChatButton.js +3 -3
- package/esm/Header/HeaderChatButton.js.map +1 -1
- package/esm/Header/HeaderHelp.d.ts.map +1 -1
- package/esm/Header/HeaderHelp.js +2 -3
- package/esm/Header/HeaderHelp.js.map +1 -1
- package/esm/Header/HeaderSearchButton.d.ts.map +1 -1
- package/esm/Header/HeaderSearchButton.js +2 -3
- package/esm/Header/HeaderSearchButton.js.map +1 -1
- package/esm/List/ListItem.d.ts +8 -21
- package/esm/List/ListItem.d.ts.map +1 -1
- package/esm/List/ListItem.js +69 -70
- package/esm/List/ListItem.js.map +1 -1
- package/esm/List/MenuList.d.ts +3 -0
- package/esm/List/MenuList.d.ts.map +1 -1
- package/esm/List/MenuList.js +3 -3
- package/esm/List/MenuList.js.map +1 -1
- package/esm/List/index.d.ts +1 -1
- package/esm/List/index.d.ts.map +1 -1
- package/esm/List/index.js.map +1 -1
- package/esm/RecurrenceForm/DateTime.js +2 -2
- package/esm/RecurrenceForm/DateTime.js.map +1 -1
- package/esm/RecurrenceForm/Recurrence.js +3 -3
- package/esm/RecurrenceForm/Recurrence.js.map +1 -1
- package/esm/index.d.ts +3 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -1
- package/esm/sdk-ui-kit.d.ts +74 -21
- package/esm/typings/accessibility.d.ts +17 -0
- package/esm/typings/accessibility.d.ts.map +1 -1
- package/esm/typings/accessibility.js +1 -1
- package/esm/typings/accessibility.js.map +1 -1
- package/esm/utils/domUtilities.d.ts +11 -0
- package/esm/utils/domUtilities.d.ts.map +1 -1
- package/esm/utils/domUtilities.js +29 -0
- package/esm/utils/domUtilities.js.map +1 -1
- package/esm/utils/useId.d.ts +6 -0
- package/esm/utils/useId.d.ts.map +1 -1
- package/esm/utils/useId.js +9 -0
- package/esm/utils/useId.js.map +1 -1
- package/package.json +10 -9
- package/styles/css/dialog.css +3 -2
- package/styles/css/dialog.css.map +1 -1
- package/styles/css/list.css +7 -0
- package/styles/css/list.css.map +1 -1
- package/styles/css/main.css +10 -2
- package/styles/css/main.css.map +1 -1
- package/styles/css/menu.css +7 -0
- package/styles/css/menu.css.map +1 -1
- package/styles/scss/dialog.scss +3 -2
- package/styles/scss/list.scss +7 -0
@@ -1,18 +1,29 @@
|
|
1
|
-
|
1
|
+
/// <reference types="react" />
|
2
2
|
/**
|
3
3
|
* @internal
|
4
4
|
*/
|
5
|
-
export declare const makeMenuKeyboardNavigation: ({ onFocusPrevious, onFocusNext, onFocusFirst, onFocusLast, onEnterLevel, onLeaveLevel, onSelect, onClose, onUnhandledKeyDown, shouldPreventDefault, shouldStopPropagation, }: {
|
6
|
-
onFocusNext?: (event:
|
7
|
-
onFocusPrevious?: (event:
|
8
|
-
onFocusFirst?: (event:
|
9
|
-
onFocusLast?: (event:
|
10
|
-
onEnterLevel?: (event:
|
11
|
-
onLeaveLevel?: (event:
|
12
|
-
onSelect?: (event:
|
13
|
-
onClose?: (event:
|
14
|
-
onUnhandledKeyDown?: (event:
|
5
|
+
export declare const makeMenuKeyboardNavigation: <T extends KeyboardEvent | import("react").KeyboardEvent<Element> = import("react").KeyboardEvent<Element>>({ onFocusPrevious, onFocusNext, onFocusFirst, onFocusLast, onEnterLevel, onLeaveLevel, onSelect, onClose, onUnhandledKeyDown, shouldPreventDefault, shouldStopPropagation, }: {
|
6
|
+
onFocusNext?: (event: T) => void;
|
7
|
+
onFocusPrevious?: (event: T) => void;
|
8
|
+
onFocusFirst?: (event: T) => void;
|
9
|
+
onFocusLast?: (event: T) => void;
|
10
|
+
onEnterLevel?: (event: T) => void;
|
11
|
+
onLeaveLevel?: (event: T) => void;
|
12
|
+
onSelect?: (event: T) => void;
|
13
|
+
onClose?: (event: T) => void;
|
14
|
+
onUnhandledKeyDown?: (event: T) => void;
|
15
15
|
shouldPreventDefault?: boolean;
|
16
16
|
shouldStopPropagation?: boolean;
|
17
|
-
}) => (event:
|
17
|
+
}) => (event: T) => void;
|
18
|
+
/**
|
19
|
+
* @internal
|
20
|
+
*/
|
21
|
+
export declare const makeDialogKeyboardNavigation: <T extends KeyboardEvent | import("react").KeyboardEvent<Element> = import("react").KeyboardEvent<Element>>({ onFocusPrevious, onFocusNext, onClose, onUnhandledKeyDown, shouldPreventDefault, shouldStopPropagation, }: {
|
22
|
+
onFocusNext?: (event: T) => void;
|
23
|
+
onFocusPrevious?: (event: T) => void;
|
24
|
+
onClose?: (event: T) => void;
|
25
|
+
onUnhandledKeyDown?: (event: T) => void;
|
26
|
+
shouldPreventDefault?: boolean;
|
27
|
+
shouldStopPropagation?: boolean;
|
28
|
+
}) => (event: T) => void;
|
18
29
|
//# sourceMappingURL=keyboardNavigation.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"keyboardNavigation.d.ts","sourceRoot":"","sources":["../../../src/@ui/@utils/keyboardNavigation.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"keyboardNavigation.d.ts","sourceRoot":"","sources":["../../../src/@ui/@utils/keyboardNavigation.ts"],"names":[],"mappings":";AAoCA;;GAEG;AACH,eAAO,MAAM,0BAA0B;gCAgBP,IAAI;oCACA,IAAI;iCACP,IAAI;gCACL,IAAI;iCACH,IAAI;iCACJ,IAAI;6BACR,IAAI;4BACL,IAAI;uCACO,IAAI;2BAEhB,OAAO;4BACN,OAAO;wBAmClC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B;gCAWT,IAAI;oCACA,IAAI;4BACZ,IAAI;uCACO,IAAI;2BAEhB,OAAO;4BACN,OAAO;wBA4BlC,CAAC"}
|
@@ -1,42 +1,84 @@
|
|
1
1
|
// (C) 2025 GoodData Corporation
|
2
|
+
const handleAction = (event, action, { shouldPreventDefault = true, shouldStopPropagation = true } = {}) => {
|
3
|
+
if (!action) {
|
4
|
+
return;
|
5
|
+
}
|
6
|
+
if (shouldPreventDefault) {
|
7
|
+
event.preventDefault();
|
8
|
+
}
|
9
|
+
if (shouldStopPropagation) {
|
10
|
+
event.stopPropagation();
|
11
|
+
}
|
12
|
+
action(event);
|
13
|
+
};
|
14
|
+
const handleActionEvent = (event, shouldPreventDefault, shouldStopPropagation) => {
|
15
|
+
return (action) => {
|
16
|
+
handleAction(event, action, { shouldPreventDefault, shouldStopPropagation });
|
17
|
+
};
|
18
|
+
};
|
2
19
|
/**
|
3
20
|
* @internal
|
4
21
|
*/
|
5
22
|
export const makeMenuKeyboardNavigation = ({ onFocusPrevious, onFocusNext, onFocusFirst, onFocusLast, onEnterLevel, onLeaveLevel, onSelect, onClose, onUnhandledKeyDown, shouldPreventDefault = true, shouldStopPropagation = true, }) => {
|
6
|
-
function handleAction(event, action) {
|
7
|
-
if (!action) {
|
8
|
-
return;
|
9
|
-
}
|
10
|
-
shouldPreventDefault && event.preventDefault();
|
11
|
-
shouldStopPropagation && event.stopPropagation();
|
12
|
-
action(event);
|
13
|
-
}
|
14
23
|
return (event) => {
|
24
|
+
const handleAction = handleActionEvent(event, shouldPreventDefault, shouldStopPropagation);
|
15
25
|
switch (event.code) {
|
16
26
|
case "ArrowDown":
|
17
|
-
handleAction(
|
27
|
+
handleAction(onFocusNext);
|
18
28
|
break;
|
19
29
|
case "ArrowUp":
|
20
|
-
handleAction(
|
30
|
+
handleAction(onFocusPrevious);
|
21
31
|
break;
|
22
32
|
case "ArrowLeft":
|
23
|
-
handleAction(
|
33
|
+
handleAction(onLeaveLevel);
|
24
34
|
break;
|
25
35
|
case "ArrowRight":
|
26
|
-
handleAction(
|
36
|
+
handleAction(onEnterLevel);
|
27
37
|
break;
|
28
38
|
case "Home":
|
29
|
-
handleAction(
|
39
|
+
handleAction(onFocusFirst);
|
30
40
|
break;
|
31
41
|
case "End":
|
32
|
-
handleAction(
|
42
|
+
handleAction(onFocusLast);
|
33
43
|
break;
|
34
44
|
case "Enter":
|
35
45
|
case "Space":
|
36
|
-
handleAction(
|
46
|
+
handleAction(onSelect);
|
47
|
+
break;
|
48
|
+
case "Escape":
|
49
|
+
handleAction(onClose);
|
50
|
+
break;
|
51
|
+
default:
|
52
|
+
onUnhandledKeyDown?.(event);
|
53
|
+
break;
|
54
|
+
}
|
55
|
+
};
|
56
|
+
};
|
57
|
+
/**
|
58
|
+
* @internal
|
59
|
+
*/
|
60
|
+
export const makeDialogKeyboardNavigation = ({ onFocusPrevious, onFocusNext, onClose, onUnhandledKeyDown, shouldPreventDefault = true, shouldStopPropagation = true, }) => {
|
61
|
+
return (event) => {
|
62
|
+
switch (event.code) {
|
63
|
+
case "Tab":
|
64
|
+
if (event.shiftKey) {
|
65
|
+
handleAction(event, onFocusPrevious, {
|
66
|
+
shouldPreventDefault,
|
67
|
+
shouldStopPropagation,
|
68
|
+
});
|
69
|
+
}
|
70
|
+
else {
|
71
|
+
handleAction(event, onFocusNext, {
|
72
|
+
shouldPreventDefault,
|
73
|
+
shouldStopPropagation,
|
74
|
+
});
|
75
|
+
}
|
37
76
|
break;
|
38
77
|
case "Escape":
|
39
|
-
handleAction(event, onClose
|
78
|
+
handleAction(event, onClose, {
|
79
|
+
shouldPreventDefault,
|
80
|
+
shouldStopPropagation,
|
81
|
+
});
|
40
82
|
break;
|
41
83
|
default:
|
42
84
|
onUnhandledKeyDown?.(event);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"keyboardNavigation.js","sourceRoot":"","sources":["../../../src/@ui/@utils/keyboardNavigation.ts"],"names":[],"mappings":"AAAA,gCAAgC;
|
1
|
+
{"version":3,"file":"keyboardNavigation.js","sourceRoot":"","sources":["../../../src/@ui/@utils/keyboardNavigation.ts"],"names":[],"mappings":"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"}
|
@@ -12,11 +12,20 @@ export interface UiFocusTrapProps {
|
|
12
12
|
* If a ref is provided, the focus will be returned to the element referenced by the ref.
|
13
13
|
*/
|
14
14
|
returnFocusTo?: React.RefObject<HTMLElement> | string;
|
15
|
+
/**
|
16
|
+
* If true, the focus will be returned to the element referenced by the returnFocusTo prop when the trap is unmounted.
|
17
|
+
*/
|
18
|
+
returnFocusOnUnmount?: boolean;
|
15
19
|
/**
|
16
20
|
* Specify the element that should receive focus when the trap is activated.
|
17
21
|
* If not provided, the first focusable element will be focused.
|
18
22
|
*/
|
19
23
|
initialFocus?: React.RefObject<HTMLElement> | string;
|
24
|
+
/**
|
25
|
+
* Specify a custom keyboard navigation handler.
|
26
|
+
* If not provided, the default keyboard navigation handler will be used.
|
27
|
+
*/
|
28
|
+
customKeyboardNavigationHandler?: (event: KeyboardEvent) => void;
|
20
29
|
}
|
21
30
|
/**
|
22
31
|
* @internal
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"UiFocusTrap.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiFocusTrap/UiFocusTrap.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
1
|
+
{"version":3,"file":"UiFocusTrap.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiFocusTrap/UiFocusTrap.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAM9D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAEtD;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IACrD;;;OAGG;IACH,+BAA+B,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CACpE;AA8FD;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAgFlD,CAAC"}
|
@@ -1,33 +1,12 @@
|
|
1
1
|
// (C) 2025 GoodData Corporation
|
2
|
-
import React, { useEffect, useRef } from "react";
|
3
|
-
|
4
|
-
|
5
|
-
'button:not(:disabled):not([aria-disabled="true"])',
|
6
|
-
'input:not(:disabled):not([aria-disabled="true"])',
|
7
|
-
'select:not(:disabled):not([aria-disabled="true"])',
|
8
|
-
'textarea:not(:disabled):not([aria-disabled="true"])',
|
9
|
-
// Links and areas
|
10
|
-
"a[href]",
|
11
|
-
"area[href]",
|
12
|
-
// Custom elements with tabindex
|
13
|
-
'[tabindex]:not([tabindex="-1"]):not(:disabled):not([aria-disabled="true"])',
|
14
|
-
// Media with controls
|
15
|
-
"audio[controls]",
|
16
|
-
"video[controls]",
|
17
|
-
// Editable content
|
18
|
-
'[contenteditable]:not([contenteditable="false"])',
|
19
|
-
].join(",");
|
20
|
-
const getFocusableElements = (element) => {
|
21
|
-
const focusableElements = element?.querySelectorAll(focusableElementsSelector);
|
22
|
-
const firstElement = focusableElements?.[0];
|
23
|
-
const lastElement = focusableElements?.[focusableElements.length - 1];
|
24
|
-
return { focusableElements, firstElement, lastElement };
|
25
|
-
};
|
2
|
+
import React, { useEffect, useRef, useCallback } from "react";
|
3
|
+
import { makeDialogKeyboardNavigation } from "../@utils/keyboardNavigation.js";
|
4
|
+
import { getFocusableElements } from "../../utils/domUtilities.js";
|
26
5
|
/**
|
27
6
|
* Attempts to find a truly focusable element by trying subsequent elements in the focusable elements collection
|
28
7
|
* This is useful when some elements are focusable but not reachable (e.g., out of viewport or disabled)
|
29
8
|
*/
|
30
|
-
const focusAndEnsureReachableElement = (initialElement, focusableElements,
|
9
|
+
const focusAndEnsureReachableElement = (initialElement, focusableElements, direction) => {
|
31
10
|
let nextElement = initialElement;
|
32
11
|
let attempts = 0;
|
33
12
|
const maxAttempts = focusableElements.length;
|
@@ -35,66 +14,88 @@ const focusAndEnsureReachableElement = (initialElement, focusableElements, shift
|
|
35
14
|
while (nextElement !== document.activeElement && attempts < maxAttempts) {
|
36
15
|
attempts++;
|
37
16
|
const currentIndex = Array.from(focusableElements).indexOf(nextElement);
|
38
|
-
const nextIndex =
|
17
|
+
const nextIndex = direction === "backward"
|
39
18
|
? (currentIndex - 1 + focusableElements.length) % focusableElements.length
|
40
19
|
: (currentIndex + 1) % focusableElements.length;
|
41
20
|
nextElement = focusableElements[nextIndex];
|
42
21
|
nextElement?.focus();
|
43
22
|
}
|
44
23
|
};
|
24
|
+
const useDialogKeyboardNavigation = (trapRef, returnFocus, onDeactivate) => {
|
25
|
+
const handleFocusNavigation = useCallback((focusableElements, direction) => {
|
26
|
+
const elements = Array.from(focusableElements);
|
27
|
+
const currentIndex = elements.indexOf(document.activeElement);
|
28
|
+
const firstElement = elements[0];
|
29
|
+
const lastElement = elements[elements.length - 1];
|
30
|
+
let nextElement;
|
31
|
+
if (direction === "backward") {
|
32
|
+
// Shift + Tab - moving backwards
|
33
|
+
nextElement = currentIndex <= 0 ? lastElement : elements[currentIndex - 1];
|
34
|
+
}
|
35
|
+
else {
|
36
|
+
// Tab - moving forwards
|
37
|
+
nextElement =
|
38
|
+
currentIndex === elements.length - 1 ? firstElement : elements[currentIndex + 1];
|
39
|
+
}
|
40
|
+
if (nextElement) {
|
41
|
+
focusAndEnsureReachableElement(nextElement, focusableElements, direction);
|
42
|
+
}
|
43
|
+
}, []);
|
44
|
+
const keyboardNavigationHandler = useCallback((event) => {
|
45
|
+
if (!trapRef.current?.contains(event.target)) {
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
return makeDialogKeyboardNavigation({
|
49
|
+
onFocusNext: () => {
|
50
|
+
const { focusableElements } = getFocusableElements(trapRef.current);
|
51
|
+
if (!focusableElements?.length) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
handleFocusNavigation(focusableElements, "forward");
|
55
|
+
},
|
56
|
+
onFocusPrevious: () => {
|
57
|
+
const { focusableElements } = getFocusableElements(trapRef.current);
|
58
|
+
if (!focusableElements?.length) {
|
59
|
+
return;
|
60
|
+
}
|
61
|
+
handleFocusNavigation(focusableElements, "backward");
|
62
|
+
},
|
63
|
+
onClose: () => {
|
64
|
+
onDeactivate?.();
|
65
|
+
returnFocus();
|
66
|
+
},
|
67
|
+
})(event);
|
68
|
+
}, [handleFocusNavigation, onDeactivate, returnFocus, trapRef]);
|
69
|
+
return {
|
70
|
+
keyboardNavigationHandler,
|
71
|
+
};
|
72
|
+
};
|
45
73
|
/**
|
46
74
|
* @internal
|
47
75
|
*/
|
48
|
-
export const UiFocusTrap = ({ children, onDeactivate, returnFocusTo, autofocusOnOpen = false, initialFocus, }) => {
|
76
|
+
export const UiFocusTrap = ({ children, onDeactivate, returnFocusTo: returnFocusToProp, autofocusOnOpen = false, returnFocusOnUnmount = false, initialFocus, customKeyboardNavigationHandler, }) => {
|
49
77
|
const trapRef = useRef(null);
|
50
|
-
const defaultReturnFocusToRef = useRef(
|
51
|
-
const
|
78
|
+
const defaultReturnFocusToRef = useRef(document.activeElement);
|
79
|
+
const returnFocusTo = returnFocusToProp ?? defaultReturnFocusToRef;
|
80
|
+
const returnFocus = useCallback(() => {
|
52
81
|
if (typeof returnFocusTo === "string") {
|
53
82
|
const element = document.getElementById(returnFocusTo);
|
54
|
-
|
55
|
-
element.focus();
|
56
|
-
}
|
83
|
+
element?.focus();
|
57
84
|
}
|
58
85
|
else if (returnFocusTo?.current) {
|
59
86
|
returnFocusTo.current.focus();
|
60
87
|
}
|
61
|
-
else if (defaultReturnFocusToRef.current) {
|
62
|
-
defaultReturnFocusToRef.current.focus();
|
63
|
-
}
|
64
88
|
}, [returnFocusTo]);
|
89
|
+
const { keyboardNavigationHandler } = useDialogKeyboardNavigation(trapRef, returnFocus, onDeactivate);
|
90
|
+
const keyboardHandler = customKeyboardNavigationHandler ?? keyboardNavigationHandler;
|
65
91
|
useEffect(() => {
|
66
|
-
|
67
|
-
|
68
|
-
const currentIndex = elements.indexOf(document.activeElement);
|
69
|
-
if (shiftKey) {
|
70
|
-
// Shift + Tab - moving backwards
|
71
|
-
return currentIndex <= 0 ? lastElement : elements[currentIndex - 1];
|
72
|
-
}
|
73
|
-
else {
|
74
|
-
// Tab - moving forwards
|
75
|
-
return currentIndex === elements.length - 1 ? firstElement : elements[currentIndex + 1];
|
76
|
-
}
|
77
|
-
};
|
78
|
-
const handleKeyDown = (event) => {
|
79
|
-
// get fresh focusable elements set as they could change in meantime
|
80
|
-
const { firstElement, lastElement, focusableElements } = getFocusableElements(trapRef.current);
|
81
|
-
if (event.key === "Tab" && trapRef.current?.contains(event.target)) {
|
82
|
-
const nextElement = getNextElement(focusableElements, firstElement, lastElement, event.shiftKey);
|
83
|
-
if (nextElement) {
|
84
|
-
event.preventDefault();
|
85
|
-
event.stopPropagation();
|
86
|
-
focusAndEnsureReachableElement(nextElement, focusableElements, event.shiftKey);
|
87
|
-
}
|
88
|
-
}
|
89
|
-
else if (event.key === "Escape") {
|
90
|
-
if (onDeactivate) {
|
91
|
-
onDeactivate();
|
92
|
-
}
|
92
|
+
return () => {
|
93
|
+
if (returnFocusOnUnmount) {
|
93
94
|
returnFocus();
|
94
95
|
}
|
95
96
|
};
|
96
|
-
|
97
|
-
|
97
|
+
}, [returnFocusOnUnmount, returnFocus]);
|
98
|
+
useEffect(() => {
|
98
99
|
const focusTrapTimeout = setTimeout(() => {
|
99
100
|
if (!autofocusOnOpen) {
|
100
101
|
return;
|
@@ -106,10 +107,8 @@ export const UiFocusTrap = ({ children, onDeactivate, returnFocusTo, autofocusOn
|
|
106
107
|
if (initialFocus) {
|
107
108
|
if (typeof initialFocus === "string") {
|
108
109
|
const element = document.getElementById(initialFocus);
|
109
|
-
|
110
|
-
|
111
|
-
return;
|
112
|
-
}
|
110
|
+
element?.focus();
|
111
|
+
return;
|
113
112
|
}
|
114
113
|
else if (initialFocus.current) {
|
115
114
|
initialFocus.current.focus();
|
@@ -121,11 +120,15 @@ export const UiFocusTrap = ({ children, onDeactivate, returnFocusTo, autofocusOn
|
|
121
120
|
firstElement?.focus();
|
122
121
|
}, 100);
|
123
122
|
return () => {
|
124
|
-
document.removeEventListener("keydown", handleKeyDown);
|
125
123
|
clearTimeout(focusTrapTimeout);
|
126
|
-
returnFocus();
|
127
124
|
};
|
128
|
-
}, [
|
125
|
+
}, [autofocusOnOpen, initialFocus, returnFocus, keyboardHandler, returnFocusOnUnmount]);
|
126
|
+
useEffect(() => {
|
127
|
+
document.addEventListener("keydown", keyboardHandler);
|
128
|
+
return () => {
|
129
|
+
document.removeEventListener("keydown", keyboardHandler);
|
130
|
+
};
|
131
|
+
}, [keyboardHandler]);
|
129
132
|
return (React.createElement("div", { className: "gd-focus-trap", ref: trapRef }, children));
|
130
133
|
};
|
131
134
|
//# sourceMappingURL=UiFocusTrap.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"UiFocusTrap.js","sourceRoot":"","sources":["../../../src/@ui/UiFocusTrap/UiFocusTrap.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"UiFocusTrap.js","sourceRoot":"","sources":["../../../src/@ui/UiFocusTrap/UiFocusTrap.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAkCnE;;;GAGG;AACH,MAAM,8BAA8B,GAAG,CACnC,cAA2B,EAC3B,iBAA0C,EAC1C,SAA8B,EAC1B,EAAE;IACN,IAAI,WAAW,GAAG,cAAc,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAE7C,WAAW,CAAC,KAAK,EAAE,CAAC;IAEpB,OAAO,WAAW,KAAK,QAAQ,CAAC,aAAa,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;QACtE,QAAQ,EAAE,CAAC;QACX,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,SAAS,GACX,SAAS,KAAK,UAAU;YACpB,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM;YAC1E,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC;QACxD,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC3C,WAAW,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAChC,OAAwC,EACxC,WAAW,EACX,YAAyB,EAC3B,EAAE;IACA,MAAM,qBAAqB,GAAG,WAAW,CACrC,CAAC,iBAA0C,EAAE,SAA8B,EAAE,EAAE;QAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAElD,IAAI,WAAW,CAAC;QAEhB,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3B,iCAAiC;YACjC,WAAW,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACJ,wBAAwB;YACxB,WAAW;gBACP,YAAY,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YACd,8BAA8B,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC,EACD,EAAE,CACL,CAAC;IAEF,MAAM,yBAAyB,GAAG,WAAW,CACzC,CAAC,KAAoB,EAAE,EAAE;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE,CAAC;YACnD,OAAO;QACX,CAAC;QAED,OAAO,4BAA4B,CAAgB;YAC/C,WAAW,EAAE,GAAG,EAAE;gBACd,MAAM,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;oBAC7B,OAAO;gBACX,CAAC;gBACD,qBAAqB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YACxD,CAAC;YACD,eAAe,EAAE,GAAG,EAAE;gBAClB,MAAM,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;oBAC7B,OAAO;gBACX,CAAC;gBACD,qBAAqB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACV,YAAY,EAAE,EAAE,CAAC;gBACjB,WAAW,EAAE,CAAC;YAClB,CAAC;SACJ,CAAC,CAAC,KAAK,CAAC,CAAC;IACd,CAAC,EACD,CAAC,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,CAC9D,CAAC;IAEF,OAAO;QACH,yBAAyB;KAC5B,CAAC;AACN,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACpD,QAAQ,EACR,YAAY,EACZ,aAAa,EAAE,iBAAiB,EAChC,eAAe,GAAG,KAAK,EACvB,oBAAoB,GAAG,KAAK,EAC5B,YAAY,EACZ,+BAA+B,GAClC,EAAE,EAAE;IACD,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,uBAAuB,GAAG,MAAM,CAAqB,QAAQ,CAAC,aAA4B,CAAC,CAAC;IAElG,MAAM,aAAa,GAAG,iBAAiB,IAAI,uBAAuB,CAAC;IAEnE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACvD,OAAO,EAAE,KAAK,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,aAAa,EAAE,OAAO,EAAE,CAAC;YAChC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,EAAE,yBAAyB,EAAE,GAAG,2BAA2B,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAEtG,MAAM,eAAe,GAAG,+BAA+B,IAAI,yBAAyB,CAAC;IAErF,SAAS,CAAC,GAAG,EAAE;QACX,OAAO,GAAG,EAAE;YACR,IAAI,oBAAoB,EAAE,CAAC;gBACvB,WAAW,EAAE,CAAC;YAClB,CAAC;QACL,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;YACrC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACnB,OAAO;YACX,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACpD,yEAAyE;gBACzE,OAAO;YACX,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACf,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;oBACtD,OAAO,EAAE,KAAK,EAAE,CAAC;oBACjB,OAAO;gBACX,CAAC;qBAAM,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC9B,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC7B,OAAO;gBACX,CAAC;YACL,CAAC;YAED,uDAAuD;YACvD,MAAM,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,YAAY,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE;YACR,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACnC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAExF,SAAS,CAAC,GAAG,EAAE;QACX,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAEtD,OAAO,GAAG,EAAE;YACR,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC7D,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,OAAO,CACH,6BAAK,SAAS,EAAC,eAAe,EAAC,GAAG,EAAE,OAAO,IACtC,QAAQ,CACP,CACT,CAAC;AACN,CAAC,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ConfirmDialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAMvD;;GAEG;AACH,eAAO,MAAM,iBAAiB,
|
1
|
+
{"version":3,"file":"ConfirmDialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAMvD;;GAEG;AACH,eAAO,MAAM,iBAAiB,qDA6G5B,CAAC"}
|
@@ -31,7 +31,7 @@ export const ConfirmDialogBase = React.memo(function ConfirmDialogBase({ display
|
|
31
31
|
isModal: true,
|
32
32
|
};
|
33
33
|
}, [dialogBaseProps.accessibilityConfig, headline, titleElementIdWhenNotSet]);
|
34
|
-
return (React.createElement(DialogBase, { ...dialogBaseProps, className: dialogClasses, displayCloseButton: displayCloseButton, accessibilityConfig: accessibilityConfig, initialFocus: initialFocus, returnFocusTo: returnFocusTo },
|
34
|
+
return (React.createElement(DialogBase, { ...dialogBaseProps, className: dialogClasses, displayCloseButton: displayCloseButton, accessibilityConfig: accessibilityConfig, initialFocus: initialFocus, returnFocusTo: returnFocusTo, returnFocusAfterClose: true },
|
35
35
|
React.createElement("div", { className: "gd-dialog-header-wrapper" },
|
36
36
|
headerLeftButtonRenderer?.(),
|
37
37
|
React.createElement("div", { className: headerClassNames },
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ConfirmDialogBase.js","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAA0B,SAAS,iBAAiB,CAAC,EAC5F,kBAAkB,GAAG,IAAI,EACzB,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAC/B,OAAO,EACP,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,sBAAsB,EAEtB,GAAG,eAAe,EACrB;IACG,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAElE,MAAM,mBAAmB,GAAG,EAAE,CAAC;QAC3B,wBAAwB,EAAE,IAAI;QAC9B,kBAAkB,EAAE,UAAU;QAC9B,oBAAoB,EAAE,CAAC,UAAU;KACpC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IAEvE,MAAM,wBAAwB,GAAG,KAAK,EAAE,CAAC;IACzC,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3C,IAAI,cAAc,GAAG,eAAe,CAAC,mBAAmB,EAAE,cAAc,CAAC;QACzE,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9B,cAAc,GAAG,wBAAwB,CAAC;QAC9C,CAAC;QAED,OAAO;YACH,GAAG,CAAC,eAAe,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC9C,cAAc;YACd,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC,EAAE,CAAC,eAAe,CAAC,mBAAmB,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAE9E,OAAO,CACH,oBAAC,UAAU,OACH,eAAe,EACnB,SAAS,EAAE,aAAa,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,mBAAmB,EACxC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa;
|
1
|
+
{"version":3,"file":"ConfirmDialogBase.js","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgBhD;;GAEG;AACH,eAAO,MAAM,UAAU,
|
1
|
+
{"version":3,"file":"DialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgBhD;;GAEG;AACH,eAAO,MAAM,UAAU,8CA+DrB,CAAC"}
|
package/esm/Dialog/DialogBase.js
CHANGED
@@ -15,7 +15,7 @@ const checkKeyHandler = (event, key, handler) => {
|
|
15
15
|
/**
|
16
16
|
* @internal
|
17
17
|
*/
|
18
|
-
export const DialogBase = React.memo(function DialogBase({ submitOnEnterKey, onCancel, onSubmit, displayCloseButton, onClose, accessibilityConfig, className, autofocusOnOpen = true, children, CloseButton = DialogCloseButton, initialFocus, returnFocusTo, shouldCloseOnEscape = false, }) {
|
18
|
+
export const DialogBase = React.memo(function DialogBase({ submitOnEnterKey, onCancel, onSubmit, displayCloseButton, onClose, accessibilityConfig, className, autofocusOnOpen = true, children, CloseButton = DialogCloseButton, initialFocus, returnFocusTo, shouldCloseOnEscape = false, returnFocusAfterClose = false, }) {
|
19
19
|
const handleKeyDown = React.useCallback((event) => {
|
20
20
|
// don't call onSubmit when pressing enter key on input fields
|
21
21
|
const isEnterKeyDownOnInputField = event.key === "Enter" && isElementTextInput(event.target);
|
@@ -29,7 +29,7 @@ export const DialogBase = React.memo(function DialogBase({ submitOnEnterKey, onC
|
|
29
29
|
checkKeyHandler(event, "Escape", shouldCloseOnEscape ? onClose : onCancel);
|
30
30
|
}, [onCancel, onSubmit, onClose, submitOnEnterKey, shouldCloseOnEscape]);
|
31
31
|
const dialogClasses = cx("overlay", "gd-dialog", className);
|
32
|
-
return (React.createElement(UiFocusTrap, { initialFocus: initialFocus, returnFocusTo: returnFocusTo, autofocusOnOpen: autofocusOnOpen },
|
32
|
+
return (React.createElement(UiFocusTrap, { initialFocus: initialFocus, returnFocusTo: returnFocusTo, autofocusOnOpen: autofocusOnOpen, returnFocusOnUnmount: returnFocusAfterClose },
|
33
33
|
React.createElement("div", { onKeyDown: handleKeyDown, role: "dialog", "aria-modal": accessibilityConfig?.isModal, "aria-labelledby": accessibilityConfig?.titleElementId, "aria-describedby": accessibilityConfig?.descriptionElementId },
|
34
34
|
React.createElement("div", { className: dialogClasses },
|
35
35
|
displayCloseButton ? (React.createElement(CloseButton, { onClose: onClose ?? onCancel, accessibilityConfig: accessibilityConfig })) : null,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DialogBase.js","sourceRoot":"","sources":["../../src/Dialog/DialogBase.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAErF,MAAM,eAAe,GAAG,CAAC,KAA0B,EAAE,GAAW,EAAE,OAAoB,EAAQ,EAAE;IAC5F,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO;IACX,CAAC;IAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,eAAe,EAAE,CAAC;IAExB,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAmB,SAAS,UAAU,CAAC,EACvE,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,SAAS,EACT,eAAe,GAAG,IAAI,EACtB,QAAQ,EACR,WAAW,GAAG,iBAAiB,EAC/B,YAAY,EACZ,aAAa,EACb,mBAAmB,GAAG,KAAK,
|
1
|
+
{"version":3,"file":"DialogBase.js","sourceRoot":"","sources":["../../src/Dialog/DialogBase.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAErF,MAAM,eAAe,GAAG,CAAC,KAA0B,EAAE,GAAW,EAAE,OAAoB,EAAQ,EAAE;IAC5F,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO;IACX,CAAC;IAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,eAAe,EAAE,CAAC;IAExB,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAmB,SAAS,UAAU,CAAC,EACvE,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,SAAS,EACT,eAAe,GAAG,IAAI,EACtB,QAAQ,EACR,WAAW,GAAG,iBAAiB,EAC/B,YAAY,EACZ,aAAa,EACb,mBAAmB,GAAG,KAAK,EAC3B,qBAAqB,GAAG,KAAK,GAChC;IACG,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACnC,CAAC,KAAK,EAAE,EAAE;QACN,8DAA8D;QAC9D,MAAM,0BAA0B,GAAG,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7F,IAAI,gBAAgB,KAAK,KAAK,IAAI,0BAA0B,EAAE,CAAC;YAC3D,OAAO;QACX,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9F,OAAO;QACX,CAAC;QAED,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC,EACD,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CACvE,CAAC;IAEF,MAAM,aAAa,GAAG,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAE5D,OAAO,CACH,oBAAC,WAAW,IACR,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,qBAAqB;QAE3C,6BACI,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,QAAQ,gBACF,mBAAmB,EAAE,OAAO,qBACvB,mBAAmB,EAAE,cAAc,sBAClC,mBAAmB,EAAE,oBAAoB;YAE3D,6BAAK,SAAS,EAAE,aAAa;gBACxB,kBAAkB,CAAC,CAAC,CAAC,CAClB,oBAAC,WAAW,IACR,OAAO,EAAE,OAAO,IAAI,QAAQ,EAC5B,mBAAmB,EAAE,mBAAmB,GAC1C,CACL,CAAC,CAAC,CAAC,IAAI;gBAEP,QAAQ,CACP,CACJ,CACI,CACjB,CAAC;AACN,CAAC,CAAC,CAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import { IDialogCloseButtonProps } from "./typings.js";
|
3
|
-
export declare const DialogCloseButton: React.
|
3
|
+
export declare const DialogCloseButton: React.FC<IDialogCloseButtonProps>;
|
4
4
|
//# sourceMappingURL=DialogCloseButton.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DialogCloseButton.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogCloseButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"DialogCloseButton.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogCloseButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AA0BvD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAI/D,CAAC"}
|
@@ -1,8 +1,17 @@
|
|
1
1
|
// (C) 2022-2025 GoodData Corporation
|
2
2
|
import React from "react";
|
3
3
|
import { Button } from "../Button/index.js";
|
4
|
-
|
4
|
+
import { useIntl } from "react-intl";
|
5
|
+
import { IntlWrapper } from "@gooddata/sdk-ui";
|
6
|
+
const DialogCloseButtonCore = React.memo(function DialogCloseButton({ accessibilityConfig, onClose, }) {
|
7
|
+
const intl = useIntl();
|
8
|
+
const closeButtonAccessibilityConfig = {
|
9
|
+
ariaLabel: intl.formatMessage({ id: "dialogs.closeLabel" }),
|
10
|
+
...accessibilityConfig?.closeButton,
|
11
|
+
};
|
5
12
|
return (React.createElement("div", { className: "gd-dialog-close" },
|
6
|
-
React.createElement(Button, { className: "gd-button-link gd-button-icon-only gd-icon-cross s-dialog-close-button", value: "", onClick: onClose, accessibilityConfig:
|
13
|
+
React.createElement(Button, { className: "gd-button-link gd-button-icon-only gd-icon-cross s-dialog-close-button", value: "", onClick: onClose, accessibilityConfig: closeButtonAccessibilityConfig })));
|
7
14
|
});
|
15
|
+
export const DialogCloseButton = (props) => (React.createElement(IntlWrapper, null,
|
16
|
+
React.createElement(DialogCloseButtonCore, { ...props })));
|
8
17
|
//# sourceMappingURL=DialogCloseButton.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DialogCloseButton.js","sourceRoot":"","sources":["../../src/Dialog/DialogCloseButton.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
1
|
+
{"version":3,"file":"DialogCloseButton.js","sourceRoot":"","sources":["../../src/Dialog/DialogCloseButton.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAA0B,SAAS,iBAAiB,CAAC,EACzF,mBAAmB,EACnB,OAAO,GACV;IACG,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,8BAA8B,GAAG;QACnC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC;QAC3D,GAAG,mBAAmB,EAAE,WAAW;KACtC,CAAC;IAEF,OAAO,CACH,6BAAK,SAAS,EAAC,iBAAiB;QAC5B,oBAAC,MAAM,IACH,SAAS,EAAC,wEAAwE,EAClF,KAAK,EAAC,EAAE,EACR,OAAO,EAAE,OAAO,EAChB,mBAAmB,EAAE,8BAA8B,GACrD,CACA,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAsC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3E,oBAAC,WAAW;IACR,oBAAC,qBAAqB,OAAK,KAAK,GAAI,CAC1B,CACjB,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ExportDialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/ExportDialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"ExportDialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/ExportDialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAMtD;;GAEG;AACH,eAAO,MAAM,gBAAgB,oDAuE3B,CAAC"}
|
@@ -5,20 +5,25 @@ import noop from "lodash/noop.js";
|
|
5
5
|
import { Checkbox } from "../Form/index.js";
|
6
6
|
import { ConfirmDialogBase } from "./ConfirmDialogBase.js";
|
7
7
|
import { usePropState } from "@gooddata/sdk-ui";
|
8
|
+
import { useIdPrefixed } from "../utils/useId.js";
|
8
9
|
/**
|
9
10
|
* @internal
|
10
11
|
*/
|
11
12
|
export const ExportDialogBase = React.memo(function ExportDialogBase({ className, displayCloseButton = true, isPositive = true, isSubmitDisabled = false, headline = "Export to XLSX", cancelButtonText = "Cancel", submitButtonText = "Export", onCancel = noop, onSubmit = noop, filterContextText = "Include applied filters", filterContextTitle = "INSIGHT CONTEXT", filterContextVisible = true, mergeHeadersDisabled = false, mergeHeadersText = "Keep attribute cells merged", mergeHeadersTitle = "CELLS", includeFilterContext = true, mergeHeaders = true, }) {
|
12
13
|
const [isFilterContextIncluded, setIsFilterContextIncluded] = usePropState(includeFilterContext);
|
13
14
|
const [shouldMergeHeaders, setShouldMergeHeaders] = usePropState(mergeHeaders);
|
15
|
+
const mergeHeadersId = useIdPrefixed("mergeHeaders");
|
14
16
|
const handleSubmit = React.useCallback(() => {
|
15
17
|
onSubmit({
|
16
18
|
includeFilterContext: isFilterContextIncluded,
|
17
19
|
mergeHeaders: shouldMergeHeaders,
|
18
20
|
});
|
19
21
|
}, [isFilterContextIncluded, onSubmit, shouldMergeHeaders]);
|
20
|
-
return (React.createElement(ConfirmDialogBase, { className: cx("gd-export-dialog", className), displayCloseButton: displayCloseButton, isPositive: isPositive, isSubmitDisabled: isSubmitDisabled, headline: headline, cancelButtonText: cancelButtonText, submitButtonText: submitButtonText, onCancel: onCancel, onSubmit: handleSubmit },
|
21
|
-
React.createElement(
|
22
|
-
|
22
|
+
return (React.createElement(ConfirmDialogBase, { className: cx("gd-export-dialog", className), displayCloseButton: displayCloseButton, isPositive: isPositive, isSubmitDisabled: isSubmitDisabled, headline: headline, cancelButtonText: cancelButtonText, submitButtonText: submitButtonText, onCancel: onCancel, onSubmit: handleSubmit, initialFocus: mergeHeadersId },
|
23
|
+
React.createElement("h4", null, mergeHeadersTitle),
|
24
|
+
React.createElement(Checkbox, { id: mergeHeadersId, disabled: mergeHeadersDisabled, name: "gs.dialog.export.checkbox.mergeHeaders", text: mergeHeadersText, value: shouldMergeHeaders, onChange: setShouldMergeHeaders }),
|
25
|
+
filterContextVisible ? (React.createElement(React.Fragment, null,
|
26
|
+
React.createElement("h4", null, filterContextTitle),
|
27
|
+
React.createElement(Checkbox, { name: "gs.dialog.export.checkbox.includeFilterContext", text: filterContextText, value: isFilterContextIncluded, onChange: setIsFilterContextIncluded }))) : null));
|
23
28
|
});
|
24
29
|
//# sourceMappingURL=ExportDialogBase.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ExportDialogBase.js","sourceRoot":"","sources":["../../src/Dialog/ExportDialogBase.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
1
|
+
{"version":3,"file":"ExportDialogBase.js","sourceRoot":"","sources":["../../src/Dialog/ExportDialogBase.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAyB,SAAS,gBAAgB,CAAC,EACzF,SAAS,EACT,kBAAkB,GAAG,IAAI,EACzB,UAAU,GAAG,IAAI,EACjB,gBAAgB,GAAG,KAAK,EAExB,QAAQ,GAAG,gBAAgB,EAC3B,gBAAgB,GAAG,QAAQ,EAC3B,gBAAgB,GAAG,QAAQ,EAE3B,QAAQ,GAAG,IAAI,EACf,QAAQ,GAAG,IAAI,EAEf,iBAAiB,GAAG,yBAAyB,EAC7C,kBAAkB,GAAG,iBAAiB,EACtC,oBAAoB,GAAG,IAAI,EAE3B,oBAAoB,GAAG,KAAK,EAC5B,gBAAgB,GAAG,6BAA6B,EAChD,iBAAiB,GAAG,OAAO,EAE3B,oBAAoB,GAAG,IAAI,EAC3B,YAAY,GAAG,IAAI,GACtB;IACG,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACjG,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAE/E,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACxC,QAAQ,CAAC;YACL,oBAAoB,EAAE,uBAAuB;YAC7C,YAAY,EAAE,kBAAkB;SACnC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,uBAAuB,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE5D,OAAO,CACH,oBAAC,iBAAiB,IACd,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAC5C,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,cAAc;QAE5B,gCAAK,iBAAiB,CAAM;QAC5B,oBAAC,QAAQ,IACL,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAC,wCAAwC,EAC7C,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,qBAAqB,GACjC;QACD,oBAAoB,CAAC,CAAC,CAAC,CACpB;YACI,gCAAK,kBAAkB,CAAM;YAC7B,oBAAC,QAAQ,IACL,IAAI,EAAC,gDAAgD,EACrD,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,0BAA0B,GACtC,CACH,CACN,CAAC,CAAC,CAAC,IAAI,CACQ,CACvB,CAAC;AACN,CAAC,CAAC,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AddGranteeBase.d.ts","sourceRoot":"","sources":["../../../../src/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,
|
1
|
+
{"version":3,"file":"AddGranteeBase.d.ts","sourceRoot":"","sources":["../../../../src/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA2DzD,CAAC"}
|
@@ -15,11 +15,7 @@ export const AddGranteeBase = (props) => {
|
|
15
15
|
const backButtonRenderer = useCallback(() => {
|
16
16
|
return React.createElement(BackButton, { onClick: onBackClick, className: "s-share-dialog-navigate-back" });
|
17
17
|
}, [onBackClick]);
|
18
|
-
return (React.createElement(ConfirmDialogBase, { className: "gd-share-dialog gd-share-dialog-add-users s-gd-share-add-grantees", displayCloseButton: true, isPositive: true, isSubmitDisabled: !isDirty, headline: intl.formatMessage({ id: "shareDialog.share.grantee.add.info" }), cancelButtonText: intl.formatMessage({ id: "cancel" }), submitButtonText: intl.formatMessage({ id: "shareDialog.share.grantee.share" }), submitOnEnterKey: false, shouldCloseOnEscape: true, returnFocusTo: previouslyFocusedRef, onCancel: onBackClick, onSubmit: onSubmit, onClose: onCancel, headerLeftButtonRenderer: backButtonRenderer,
|
19
|
-
closeButton: {
|
20
|
-
ariaLabel: intl.formatMessage({ id: "dialogs.closeLabel" }),
|
21
|
-
},
|
22
|
-
} },
|
18
|
+
return (React.createElement(ConfirmDialogBase, { className: "gd-share-dialog gd-share-dialog-add-users s-gd-share-add-grantees", displayCloseButton: true, isPositive: true, isSubmitDisabled: !isDirty, headline: intl.formatMessage({ id: "shareDialog.share.grantee.add.info" }), cancelButtonText: intl.formatMessage({ id: "cancel" }), submitButtonText: intl.formatMessage({ id: "shareDialog.share.grantee.share" }), submitOnEnterKey: false, shouldCloseOnEscape: true, returnFocusTo: previouslyFocusedRef, onCancel: onBackClick, onSubmit: onSubmit, onClose: onCancel, headerLeftButtonRenderer: backButtonRenderer },
|
23
19
|
React.createElement(AddGranteeContent, { currentUserPermissions: currentUserPermissions, isSharedObjectLocked: isSharedObjectLocked, currentUser: currentUser, addedGrantees: addedGrantees, appliedGrantees: appliedGrantees, areGranularPermissionsSupported: areGranularPermissionsSupported, sharedObjectRef: sharedObjectRef, onAddUserOrGroups: onAddUserOrGroups, onDelete: onDelete, onGranularGranteeChange: onGranularGranteeChange }),
|
24
20
|
React.createElement(ContentDivider, null)));
|
25
21
|
};
|