@gooddata/sdk-ui-kit 10.29.0-alpha.4 → 10.29.0-alpha.40
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/UiChip/UiChip.d.ts +2 -1
- package/esm/@ui/UiChip/UiChip.d.ts.map +1 -1
- package/esm/@ui/UiChip/UiChip.js +8 -7
- package/esm/@ui/UiChip/UiChip.js.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts +4 -0
- package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js +13 -34
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
- package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -1
- package/esm/@ui/UiMenu/UiMenu.js +4 -3
- package/esm/@ui/UiMenu/UiMenu.js.map +1 -1
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.d.ts +2 -1
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.d.ts.map +1 -1
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.js +24 -9
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.js.map +1 -1
- package/esm/AddButton/AddButton.d.ts +1 -0
- package/esm/AddButton/AddButton.d.ts.map +1 -1
- package/esm/AddButton/AddButton.js +4 -4
- package/esm/AddButton/AddButton.js.map +1 -1
- package/esm/Bubble/BubbleHoverTrigger.d.ts +1 -0
- package/esm/Bubble/BubbleHoverTrigger.d.ts.map +1 -1
- package/esm/Bubble/BubbleHoverTrigger.js +5 -1
- package/esm/Bubble/BubbleHoverTrigger.js.map +1 -1
- package/esm/Datepicker/Datepicker.d.ts.map +1 -1
- package/esm/Datepicker/Datepicker.js +3 -2
- package/esm/Datepicker/Datepicker.js.map +1 -1
- package/esm/Dropdown/DropdownList.d.ts +1 -0
- package/esm/Dropdown/DropdownList.d.ts.map +1 -1
- package/esm/Dropdown/DropdownList.js +2 -2
- package/esm/Dropdown/DropdownList.js.map +1 -1
- package/esm/Header/HeaderChatButton.d.ts.map +1 -1
- package/esm/Header/HeaderChatButton.js +3 -1
- package/esm/Header/HeaderChatButton.js.map +1 -1
- package/esm/List/List.d.ts +1 -0
- package/esm/List/List.d.ts.map +1 -1
- package/esm/List/List.js +3 -3
- package/esm/List/List.js.map +1 -1
- package/esm/RecurrenceForm/DateTime.d.ts +1 -0
- package/esm/RecurrenceForm/DateTime.d.ts.map +1 -1
- package/esm/RecurrenceForm/DateTime.js +2 -2
- package/esm/RecurrenceForm/DateTime.js.map +1 -1
- package/esm/RecurrenceForm/Recurrence.d.ts.map +1 -1
- package/esm/RecurrenceForm/Recurrence.js +2 -2
- package/esm/RecurrenceForm/Recurrence.js.map +1 -1
- package/esm/RecurrenceForm/RecurrenceForm.d.ts +1 -0
- package/esm/RecurrenceForm/RecurrenceForm.d.ts.map +1 -1
- package/esm/RecurrenceForm/RecurrenceForm.js +2 -2
- package/esm/RecurrenceForm/RecurrenceForm.js.map +1 -1
- package/esm/RecurrenceForm/RepeatTypeSelect.d.ts +1 -0
- package/esm/RecurrenceForm/RepeatTypeSelect.d.ts.map +1 -1
- package/esm/RecurrenceForm/RepeatTypeSelect.js +9 -3
- package/esm/RecurrenceForm/RepeatTypeSelect.js.map +1 -1
- package/esm/Timepicker/Timepicker.d.ts.map +1 -1
- package/esm/Timepicker/Timepicker.js +7 -1
- package/esm/Timepicker/Timepicker.js.map +1 -1
- package/esm/sdk-ui-kit.d.ts +66 -6
- package/esm/utils/domUtilities.d.ts +1 -1
- package/esm/utils/domUtilities.d.ts.map +1 -1
- package/esm/utils/domUtilities.js +4 -3
- package/esm/utils/domUtilities.js.map +1 -1
- package/esm/utils/events.d.ts +27 -0
- package/esm/utils/events.d.ts.map +1 -1
- package/esm/utils/events.js +33 -0
- package/esm/utils/events.js.map +1 -1
- package/esm/utils/useAutofocusOnMount.d.ts +20 -3
- package/esm/utils/useAutofocusOnMount.d.ts.map +1 -1
- package/esm/utils/useAutofocusOnMount.js +31 -24
- package/esm/utils/useAutofocusOnMount.js.map +1 -1
- package/package.json +8 -8
@@ -126,13 +126,14 @@ const focusableElementsSelector = [
|
|
126
126
|
"a[href]",
|
127
127
|
"area[href]",
|
128
128
|
// Custom elements with tabindex
|
129
|
-
'[tabindex]:not(
|
129
|
+
'[tabindex]:not(:disabled):not([aria-disabled="true"])',
|
130
130
|
// Media with controls
|
131
131
|
"audio[controls]",
|
132
132
|
"video[controls]",
|
133
133
|
// Editable content
|
134
134
|
'[contenteditable]:not([contenteditable="false"])',
|
135
135
|
].join(",");
|
136
|
+
const isNotNegativeTabIndex = (element) => !element.tabIndex || element.tabIndex >= 0;
|
136
137
|
/**
|
137
138
|
* @internal
|
138
139
|
* Returns the focusable elements of the given element
|
@@ -140,7 +141,7 @@ const focusableElementsSelector = [
|
|
140
141
|
* @returns an object containing the focusable elements, the first focusable element, and the last focusable element
|
141
142
|
*/
|
142
143
|
export const getFocusableElements = (element) => {
|
143
|
-
const focusableElements = element?.querySelectorAll(focusableElementsSelector);
|
144
|
+
const focusableElements = Array.from(element?.querySelectorAll(focusableElementsSelector) ?? []).filter(isNotNegativeTabIndex);
|
144
145
|
const firstElement = focusableElements?.[0];
|
145
146
|
const lastElement = focusableElements?.[focusableElements.length - 1];
|
146
147
|
return { focusableElements, firstElement, lastElement };
|
@@ -151,6 +152,6 @@ export const getFocusableElements = (element) => {
|
|
151
152
|
* @returns whether or not the supplied element is focusable
|
152
153
|
*/
|
153
154
|
export const isElementFocusable = (element) => {
|
154
|
-
return element?.matches(focusableElementsSelector);
|
155
|
+
return element?.matches(focusableElementsSelector) && isNotNegativeTabIndex(element);
|
155
156
|
};
|
156
157
|
//# sourceMappingURL=domUtilities.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"domUtilities.js","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"domUtilities.js","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"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"}
|
package/esm/utils/events.d.ts
CHANGED
@@ -17,4 +17,31 @@ export declare const isActionKey: (event: KeyboardEvent) => boolean;
|
|
17
17
|
* @internal
|
18
18
|
*/
|
19
19
|
export declare const isSpaceKey: (event: KeyboardEvent) => boolean;
|
20
|
+
/**
|
21
|
+
* Checks if the given keyboard event is triggered by an Enter key.
|
22
|
+
*
|
23
|
+
* @param event - The keyboard event to check.
|
24
|
+
* @returns `true` if the event has been triggered by an Enter key, `false` otherwise.
|
25
|
+
*
|
26
|
+
* @internal
|
27
|
+
*/
|
28
|
+
export declare const isEnterKey: (event: KeyboardEvent) => boolean;
|
29
|
+
/**
|
30
|
+
* Checks if the given keyboard event is triggered by one of the Arrow keys.
|
31
|
+
*
|
32
|
+
* @param event - The keyboard event to check.
|
33
|
+
* @returns `true` if the event has been triggered by one of the Arrow keys, `false` otherwise.
|
34
|
+
*
|
35
|
+
* @internal
|
36
|
+
*/
|
37
|
+
export declare const isArrowKey: (event: KeyboardEvent) => boolean;
|
38
|
+
/**
|
39
|
+
* Checks if the given keyboard event is triggered by an Escape key.
|
40
|
+
*
|
41
|
+
* @param event - The keyboard event to check.
|
42
|
+
* @returns `true` if the event has been triggered by an Escape key, `false` otherwise.
|
43
|
+
*
|
44
|
+
* @internal
|
45
|
+
*/
|
46
|
+
export declare const isEscapeKey: (event: KeyboardEvent) => boolean;
|
20
47
|
//# sourceMappingURL=events.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,UAAW,aAAa,KAAG,OAElD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,OAEjD,CAAC"}
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,UAAW,aAAa,KAAG,OAElD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,OAEjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,OAEjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,OAEjD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,UAAW,aAAa,KAAG,OAElD,CAAC"}
|
package/esm/utils/events.js
CHANGED
@@ -20,4 +20,37 @@ export const isActionKey = (event) => {
|
|
20
20
|
export const isSpaceKey = (event) => {
|
21
21
|
return event.key === " ";
|
22
22
|
};
|
23
|
+
/**
|
24
|
+
* Checks if the given keyboard event is triggered by an Enter key.
|
25
|
+
*
|
26
|
+
* @param event - The keyboard event to check.
|
27
|
+
* @returns `true` if the event has been triggered by an Enter key, `false` otherwise.
|
28
|
+
*
|
29
|
+
* @internal
|
30
|
+
*/
|
31
|
+
export const isEnterKey = (event) => {
|
32
|
+
return event.key === "Enter";
|
33
|
+
};
|
34
|
+
/**
|
35
|
+
* Checks if the given keyboard event is triggered by one of the Arrow keys.
|
36
|
+
*
|
37
|
+
* @param event - The keyboard event to check.
|
38
|
+
* @returns `true` if the event has been triggered by one of the Arrow keys, `false` otherwise.
|
39
|
+
*
|
40
|
+
* @internal
|
41
|
+
*/
|
42
|
+
export const isArrowKey = (event) => {
|
43
|
+
return event.key.startsWith("Arrow");
|
44
|
+
};
|
45
|
+
/**
|
46
|
+
* Checks if the given keyboard event is triggered by an Escape key.
|
47
|
+
*
|
48
|
+
* @param event - The keyboard event to check.
|
49
|
+
* @returns `true` if the event has been triggered by an Escape key, `false` otherwise.
|
50
|
+
*
|
51
|
+
* @internal
|
52
|
+
*/
|
53
|
+
export const isEscapeKey = (event) => {
|
54
|
+
return event.key === "Escape";
|
55
|
+
};
|
23
56
|
//# sourceMappingURL=events.js.map
|
package/esm/utils/events.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAW,EAAE;IACzD,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AACtD,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAoB,EAAW,EAAE;IACxD,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AAC7B,CAAC,CAAC"}
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAW,EAAE;IACzD,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AACtD,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAoB,EAAW,EAAE;IACxD,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAoB,EAAW,EAAE;IACxD,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAoB,EAAW,EAAE;IACxD,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAW,EAAE;IACzD,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;AAClC,CAAC,CAAC"}
|
@@ -1,12 +1,29 @@
|
|
1
1
|
import React from "react";
|
2
2
|
/**
|
3
|
-
*
|
3
|
+
* @internal
|
4
|
+
*/
|
5
|
+
export interface IAutofocusOptions {
|
6
|
+
isDisabled?: boolean;
|
7
|
+
refocusKey?: unknown;
|
8
|
+
}
|
9
|
+
/**
|
10
|
+
* Provides a ref that will autofocus the element when it is mounted, or when `refocusKey` changes.
|
11
|
+
*
|
12
|
+
* @internal
|
13
|
+
*/
|
14
|
+
export declare const useAutofocusOnMountRef: ({ isDisabled, refocusKey }?: IAutofocusOptions) => (node: HTMLElement | null) => void;
|
15
|
+
/**
|
16
|
+
* Focuses the element on mount or when `refocusKey` changes.
|
4
17
|
*
|
5
18
|
* @internal
|
6
19
|
*/
|
7
|
-
export declare const useAutofocusOnMount: (
|
20
|
+
export declare const useAutofocusOnMount: (element: HTMLElement | null | undefined, { isDisabled, refocusKey }?: IAutofocusOptions) => void;
|
8
21
|
/**
|
22
|
+
* Wrapper that focuses the first focusable child when it mounts, or when `refocusKey` changes.
|
23
|
+
*
|
9
24
|
* @internal
|
10
25
|
*/
|
11
|
-
export declare const AutofocusOnMount: React.FC<
|
26
|
+
export declare const AutofocusOnMount: React.FC<{
|
27
|
+
children: React.ReactNode;
|
28
|
+
} & IAutofocusOptions>;
|
12
29
|
//# sourceMappingURL=useAutofocusOnMount.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useAutofocusOnMount.d.ts","sourceRoot":"","sources":["../../src/utils/useAutofocusOnMount.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;;GAIG;AACH,eAAO,MAAM,
|
1
|
+
{"version":3,"file":"useAutofocusOnMount.d.ts","sourceRoot":"","sources":["../../src/utils/useAutofocusOnMount.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,gCAAgC,iBAAiB,YAKhD,WAAW,GAAG,IAAI,SAGrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,YACnB,WAAW,GAAG,IAAI,GAAG,SAAS,+BACX,iBAAiB,SA+BhD,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CACnC;IACI,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,GAAG,iBAAiB,CASxB,CAAC"}
|
@@ -1,51 +1,58 @@
|
|
1
1
|
// (C) 2025 GoodData Corporation
|
2
2
|
import React from "react";
|
3
|
-
import { getFocusableElements, isElementFocusable } from "./domUtilities.js";
|
3
|
+
import { getFocusableElements, isElementFocusable, isElementTextInput } from "./domUtilities.js";
|
4
4
|
/**
|
5
|
-
*
|
5
|
+
* Provides a ref that will autofocus the element when it is mounted, or when `refocusKey` changes.
|
6
6
|
*
|
7
7
|
* @internal
|
8
8
|
*/
|
9
|
-
export const
|
9
|
+
export const useAutofocusOnMountRef = ({ isDisabled, refocusKey } = {}) => {
|
10
10
|
const [element, setElement] = React.useState(null);
|
11
|
-
|
11
|
+
useAutofocusOnMount(element, { isDisabled, refocusKey });
|
12
|
+
return React.useCallback((node) => {
|
13
|
+
setElement(node);
|
14
|
+
}, []);
|
15
|
+
};
|
16
|
+
/**
|
17
|
+
* Focuses the element on mount or when `refocusKey` changes.
|
18
|
+
*
|
19
|
+
* @internal
|
20
|
+
*/
|
21
|
+
export const useAutofocusOnMount = (element, { isDisabled, refocusKey } = {}) => {
|
12
22
|
// If the element is outside of the viewport, calling focus() will not work.
|
13
23
|
// This can happen for example with floating elements, that are repositioned after they mount
|
14
24
|
React.useEffect(() => {
|
15
|
-
|
25
|
+
const elementToFocus = getElementToFocus(element);
|
26
|
+
if (isDisabled || !elementToFocus) {
|
16
27
|
return undefined;
|
17
28
|
}
|
18
|
-
const observer = new IntersectionObserver(() => {
|
19
|
-
if (
|
29
|
+
const observer = new IntersectionObserver(([{ target }]) => {
|
30
|
+
if (target.contains(document.activeElement) || isElementTextInput(document.activeElement)) {
|
31
|
+
observer.disconnect();
|
20
32
|
return;
|
21
33
|
}
|
22
|
-
const elementToFocus = isElementFocusable(element)
|
23
|
-
? element
|
24
|
-
: getFocusableElements(element).firstElement;
|
25
34
|
// Focusing a newly created element sometimes fails if not done through requestAnimationFrame()
|
26
35
|
window.requestAnimationFrame(() => {
|
27
|
-
|
28
|
-
if (document.activeElement ===
|
36
|
+
target.focus();
|
37
|
+
if (document.activeElement === target) {
|
29
38
|
observer.disconnect();
|
30
39
|
}
|
31
40
|
});
|
32
41
|
});
|
33
|
-
observer.observe(
|
42
|
+
observer.observe(elementToFocus);
|
34
43
|
return () => observer.disconnect();
|
35
|
-
}, [element]);
|
36
|
-
return React.useCallback((node) => {
|
37
|
-
if (hasFiredRef.current || !node) {
|
38
|
-
return;
|
39
|
-
}
|
40
|
-
hasFiredRef.current = true;
|
41
|
-
setElement(node);
|
42
|
-
}, []);
|
44
|
+
}, [refocusKey, isDisabled, element]);
|
43
45
|
};
|
46
|
+
function getElementToFocus(element) {
|
47
|
+
return isElementFocusable(element) ? element : getFocusableElements(element).firstElement;
|
48
|
+
}
|
44
49
|
/**
|
50
|
+
* Wrapper that focuses the first focusable child when it mounts, or when `refocusKey` changes.
|
51
|
+
*
|
45
52
|
* @internal
|
46
53
|
*/
|
47
|
-
export const AutofocusOnMount = ({
|
48
|
-
const ref =
|
49
|
-
return React.createElement("div", { ref: ref,
|
54
|
+
export const AutofocusOnMount = ({ isDisabled, refocusKey, children }) => {
|
55
|
+
const ref = useAutofocusOnMountRef({ isDisabled, refocusKey });
|
56
|
+
return (React.createElement("div", { ref: ref, style: { display: "contents" } }, children));
|
50
57
|
};
|
51
58
|
//# sourceMappingURL=useAutofocusOnMount.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useAutofocusOnMount.js","sourceRoot":"","sources":["../../src/utils/useAutofocusOnMount.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
1
|
+
{"version":3,"file":"useAutofocusOnMount.js","sourceRoot":"","sources":["../../src/utils/useAutofocusOnMount.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAUjG;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,KAAwB,EAAE,EAAE,EAAE;IACzF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAEvE,mBAAmB,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAEzD,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,IAAwB,EAAE,EAAE;QAClD,UAAU,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,OAAuC,EACvC,EAAE,UAAU,EAAE,UAAU,KAAwB,EAAE,EACpD,EAAE;IACA,4EAA4E;IAC5E,6FAA6F;IAC7F,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,UAAU,IAAI,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;YACvD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACxF,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACtB,OAAO;YACX,CAAC;YAED,+FAA+F;YAC/F,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;gBAC7B,MAAsB,CAAC,KAAK,EAAE,CAAC;gBAEhC,IAAI,QAAQ,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;oBACpC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEjC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,SAAS,iBAAiB,CAAC,OAAuC;IAC9D,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC;AAC9F,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAIzB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzC,MAAM,GAAG,GAAG,sBAAsB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAE/D,OAAO,CACH,6BAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IACxC,QAAQ,CACP,CACT,CAAC;AACN,CAAC,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@gooddata/sdk-ui-kit",
|
3
|
-
"version": "10.29.0-alpha.
|
3
|
+
"version": "10.29.0-alpha.40",
|
4
4
|
"description": "GoodData SDK - UI Building Components",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -75,11 +75,11 @@
|
|
75
75
|
"@codemirror/autocomplete": "^6.18.6",
|
76
76
|
"@lezer/highlight": "~1.2.1",
|
77
77
|
"@codemirror/commands": "~6.8.1",
|
78
|
-
"@gooddata/sdk-backend-spi": "10.29.0-alpha.
|
79
|
-
"@gooddata/sdk-
|
80
|
-
"@gooddata/sdk-
|
81
|
-
"@gooddata/
|
82
|
-
"@gooddata/
|
78
|
+
"@gooddata/sdk-backend-spi": "10.29.0-alpha.40",
|
79
|
+
"@gooddata/sdk-model": "10.29.0-alpha.40",
|
80
|
+
"@gooddata/sdk-ui": "10.29.0-alpha.40",
|
81
|
+
"@gooddata/util": "10.29.0-alpha.40",
|
82
|
+
"@gooddata/sdk-ui-theme-provider": "10.29.0-alpha.40"
|
83
83
|
},
|
84
84
|
"peerDependencies": {
|
85
85
|
"react": "^16.10.0 || ^17.0.0 || ^18.0.0",
|
@@ -137,8 +137,8 @@
|
|
137
137
|
"typescript": "5.3.3",
|
138
138
|
"vitest": "3.0.8",
|
139
139
|
"vitest-dom": "0.1.1",
|
140
|
-
"@gooddata/reference-workspace": "10.29.0-alpha.
|
141
|
-
"@gooddata/sdk-backend-mockingbird": "10.29.0-alpha.
|
140
|
+
"@gooddata/reference-workspace": "10.29.0-alpha.40",
|
141
|
+
"@gooddata/sdk-backend-mockingbird": "10.29.0-alpha.40"
|
142
142
|
},
|
143
143
|
"scripts": {
|
144
144
|
"clean": "rm -rf ci dist esm coverage styles/css *.log tsconfig.tsbuildinfo",
|