@gooddata/sdk-ui-filters 11.36.0-alpha.3 → 11.36.0-alpha.7
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/AttributeFilter/Components/Addons/AttributeFilterDependencyTooltip.d.ts +6 -1
- package/esm/AttributeFilter/Components/Addons/AttributeFilterDependencyTooltip.js +2 -2
- package/esm/AttributeFilter/Components/DropdownButton/AttributeFilterDropdownButton.d.ts +8 -1
- package/esm/AttributeFilter/Components/DropdownButton/AttributeFilterDropdownButton.js +2 -2
- package/esm/AttributeFilter/Components/TextFilterBody/ArbitraryValuesInput.js +8 -2
- package/esm/FilterGroup/FilterGroup.js +35 -9
- package/esm/MeasureValueFilter/MeasureValueFilterDetailsBubble.js +1 -1
- package/esm/internal.d.ts +1 -0
- package/esm/internal.js +1 -0
- package/esm/sdk-ui-filters.d.ts +14 -2
- package/package.json +12 -12
- package/styles/css/filterGroup.css +4 -4
- package/styles/css/main.css +4 -4
- package/styles/scss/filterGroup.scss +1 -1
|
@@ -4,8 +4,13 @@ import { type ReactNode } from "react";
|
|
|
4
4
|
*/
|
|
5
5
|
export interface IAttributeFilterDependencyTooltipProps {
|
|
6
6
|
tooltipContent: ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* Accessible label for the dependency icon wrapper. Already-localized string announced
|
|
9
|
+
* by screen readers in place of the visible icon.
|
|
10
|
+
*/
|
|
11
|
+
ariaLabel?: string;
|
|
7
12
|
}
|
|
8
13
|
/**
|
|
9
14
|
* @internal
|
|
10
15
|
*/
|
|
11
|
-
export declare function AttributeFilterDependencyTooltip({ tooltipContent }: IAttributeFilterDependencyTooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function AttributeFilterDependencyTooltip({ tooltipContent, ariaLabel }: IAttributeFilterDependencyTooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,8 +3,8 @@ import { Bubble, BubbleHoverTrigger, IconBoldHyperlink } from "@gooddata/sdk-ui-
|
|
|
3
3
|
/**
|
|
4
4
|
* @internal
|
|
5
5
|
*/
|
|
6
|
-
export function AttributeFilterDependencyTooltip({ tooltipContent }) {
|
|
7
|
-
return (_jsx("span", { className: "gd-attribute-filter-dropdown-button-icon-tooltip", children: _jsxs(BubbleHoverTrigger, { children: [
|
|
6
|
+
export function AttributeFilterDependencyTooltip({ tooltipContent, ariaLabel, }) {
|
|
7
|
+
return (_jsx("span", { className: "gd-attribute-filter-dropdown-button-icon-tooltip", "aria-label": ariaLabel, children: _jsxs(BubbleHoverTrigger, { children: [
|
|
8
8
|
_jsx(IconBoldHyperlink, { width: 12, height: 16 }), _jsx(Bubble, { arrowOffsets: { "bc tl": [-12, 9], "bc tr": [12, 9] }, alignPoints: [{ align: "bc tl" }, { align: "bc tr" }], children: _jsx("div", { className: "gd-attribute-filter-dropdown-button-icon-tooltip__content", children: tooltipContent }) })
|
|
9
9
|
] }) }));
|
|
10
10
|
}
|
|
@@ -134,6 +134,13 @@ export interface IAttributeFilterDropdownButtonProps {
|
|
|
134
134
|
* @beta
|
|
135
135
|
*/
|
|
136
136
|
dropdownId?: string;
|
|
137
|
+
/**
|
|
138
|
+
* Overrides the accessible name of the button. When omitted, the name is derived from the
|
|
139
|
+
* rendered title.
|
|
140
|
+
*
|
|
141
|
+
* @beta
|
|
142
|
+
*/
|
|
143
|
+
ariaLabel?: string;
|
|
137
144
|
}
|
|
138
145
|
/**
|
|
139
146
|
* Dropdown button for the AttributeFilter.
|
|
@@ -147,4 +154,4 @@ export interface IAttributeFilterDropdownButtonProps {
|
|
|
147
154
|
*
|
|
148
155
|
* @beta
|
|
149
156
|
*/
|
|
150
|
-
export declare function AttributeFilterDropdownButton({ isOpen, title, selectedItemsCount, totalItemsCount, showSelectionCount, subtitle, disabled, customIcon, isFiltering, isLoading, isLoaded, isError, isDraggable, icon, TooltipContentComponent, titleExtension, onClick, className, buttonRef, buttonId, dropdownId }: IAttributeFilterDropdownButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
157
|
+
export declare function AttributeFilterDropdownButton({ isOpen, title, selectedItemsCount, totalItemsCount, showSelectionCount, subtitle, disabled, customIcon, isFiltering, isLoading, isLoaded, isError, isDraggable, icon, TooltipContentComponent, titleExtension, onClick, className, buttonRef, buttonId, dropdownId, ariaLabel }: IAttributeFilterDropdownButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -19,7 +19,7 @@ import { AttributeFilterButtonTooltip } from "./AttributeFilterButtonTooltip.js"
|
|
|
19
19
|
*
|
|
20
20
|
* @beta
|
|
21
21
|
*/
|
|
22
|
-
export function AttributeFilterDropdownButton({ isOpen, title, selectedItemsCount, totalItemsCount, showSelectionCount = true, subtitle, disabled, customIcon, isFiltering, isLoading, isLoaded, isError, isDraggable, icon, TooltipContentComponent, titleExtension, onClick, className, buttonRef, buttonId, dropdownId, }) {
|
|
22
|
+
export function AttributeFilterDropdownButton({ isOpen, title, selectedItemsCount, totalItemsCount, showSelectionCount = true, subtitle, disabled, customIcon, isFiltering, isLoading, isLoaded, isError, isDraggable, icon, TooltipContentComponent, titleExtension, onClick, className, buttonRef, buttonId, dropdownId, ariaLabel, }) {
|
|
23
23
|
const intl = useIntl();
|
|
24
24
|
const subtitleSelectedItemsRef = useRef(null);
|
|
25
25
|
const [displayItemCount, setDisplayItemCount] = useState(false);
|
|
@@ -55,7 +55,7 @@ export function AttributeFilterDropdownButton({ isOpen, title, selectedItemsCoun
|
|
|
55
55
|
}
|
|
56
56
|
buttonRef.current = element;
|
|
57
57
|
}, [buttonRef]);
|
|
58
|
-
return (_jsx(UiControlButton, { title: `${buttonTitle ?? ""}`, titleClassName: "s-attribute-filter-button-title", subtitle: subtitleNode, subtitleExtension: subtitleExtension, icon: filterIcon, titleExtension: titleSlotExtension, isOpen: isOpen, isDraggable: isDraggable, isError: isError, disabled: disabled, disabledTooltip: disabled ? intl.formatMessage({ id: "filters.locked.filter.tooltip" }) : undefined, onClick: onClick, buttonRef: handleButtonRef, buttonId: buttonId, dropdownId: dropdownId, className: cx("gd-attribute-filter-dropdown-button__next", "s-attribute-filter", `s-${simplifyText(title ?? "")}`, {
|
|
58
|
+
return (_jsx(UiControlButton, { title: `${buttonTitle ?? ""}`, titleClassName: "s-attribute-filter-button-title", subtitle: subtitleNode, subtitleExtension: subtitleExtension, icon: filterIcon, titleExtension: titleSlotExtension, isOpen: isOpen, isDraggable: isDraggable, isError: isError, disabled: disabled, disabledTooltip: disabled ? intl.formatMessage({ id: "filters.locked.filter.tooltip" }) : undefined, onClick: onClick, buttonRef: handleButtonRef, buttonId: buttonId, dropdownId: dropdownId, ariaLabel: ariaLabel, className: cx("gd-attribute-filter-dropdown-button__next", "s-attribute-filter", `s-${simplifyText(title ?? "")}`, {
|
|
59
59
|
"gd-message error": isError,
|
|
60
60
|
"gd-is-filtering": isFiltering,
|
|
61
61
|
"gd-is-active": isOpen,
|
|
@@ -75,7 +75,10 @@ export function ArbitraryValuesInput(props) {
|
|
|
75
75
|
"gd-chips-input__container--warning": hasValuesLimitReachedWarning && !hasValuesLimitExceededError,
|
|
76
76
|
"gd-chips-input__container--with-values": hasValues,
|
|
77
77
|
"gd-chips-input__container--empty": !hasValues,
|
|
78
|
-
}), children: [hasValues ? (_jsx("div", { className: "gd-chips-input__chips-frame", onPaste: handlePaste, ref: chipsContainerRef, children: _jsx("div", { className: "gd-chips-input__chips", role: "group", "aria-labelledby": groupValuesId, ref: valuesGroupRef, onBlur: makeValuesGroupUnfocusable, children: values.map((value, index) => (_jsx(UiTag, { label: getDisplayLabel(value), isDeletable: true, isDisabled: disabled, dataTestId: `s-text-filter-value-tag-${index}`, tabIndex: -1, onDelete: () =>
|
|
78
|
+
}), children: [hasValues ? (_jsx("div", { className: "gd-chips-input__chips-frame", onPaste: handlePaste, ref: chipsContainerRef, children: _jsx("div", { className: "gd-chips-input__chips", role: "group", "aria-labelledby": groupValuesId, ref: valuesGroupRef, onBlur: makeValuesGroupUnfocusable, children: values.map((value, index) => (_jsx(UiTag, { label: getDisplayLabel(value), isDeletable: true, isDisabled: disabled, dataTestId: `s-text-filter-value-tag-${index}`, tabIndex: -1, onDelete: (e) => {
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
handleRemoveValue(value, index);
|
|
81
|
+
}, onDeleteKeyDown: (event) => {
|
|
79
82
|
if (event.key === "Enter" || event.key === " ") {
|
|
80
83
|
event.preventDefault();
|
|
81
84
|
event.stopPropagation();
|
|
@@ -96,6 +99,9 @@ export function ArbitraryValuesInput(props) {
|
|
|
96
99
|
"gd-chips-input__autocomplete-item--active": index === activeAutocompleteIndex,
|
|
97
100
|
}), role: "option", "aria-selected": index === activeAutocompleteIndex,
|
|
98
101
|
// Prevent the input from blurring when clicking a suggestion.
|
|
99
|
-
onMouseDown: (e) => e.preventDefault(), onClick: () =>
|
|
102
|
+
onMouseDown: (e) => e.preventDefault(), onClick: (e) => {
|
|
103
|
+
e.preventDefault();
|
|
104
|
+
handleSelectSuggestion(suggestion);
|
|
105
|
+
}, children: highlightMatch(suggestion, inputValue) }, suggestion))))) : null }), _jsx("div", { className: "sr-only", "aria-live": "polite", "aria-atomic": "true", role: "status", children: valuesAnnouncement })
|
|
100
106
|
] }));
|
|
101
107
|
}
|
|
@@ -94,8 +94,24 @@ export function FilterGroup(props) {
|
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
function AttributeFilterComponent(attributeFilterProps) {
|
|
97
|
+
// When the filter swaps between Loading / Error / DropdownButton renderings,
|
|
98
|
+
// the focused DOM node is unmounted. Capture focus on ref-cleanup and
|
|
99
|
+
// re-apply it when the replacement mounts, so the user doesn't visually lose focus.
|
|
100
|
+
const wasFocusedRef = useRef(false);
|
|
97
101
|
const setFilterItemRef = useCallback((element) => {
|
|
102
|
+
if (element === null) {
|
|
103
|
+
const prev = filterItemRefs.current.get(filterIdentifier);
|
|
104
|
+
wasFocusedRef.current =
|
|
105
|
+
!!prev &&
|
|
106
|
+
(prev === document.activeElement || prev.contains(document.activeElement));
|
|
107
|
+
filterItemRefs.current.set(filterIdentifier, null);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
98
110
|
filterItemRefs.current.set(filterIdentifier, element);
|
|
111
|
+
if (wasFocusedRef.current) {
|
|
112
|
+
wasFocusedRef.current = false;
|
|
113
|
+
element.focus();
|
|
114
|
+
}
|
|
99
115
|
}, []);
|
|
100
116
|
const onError = useCallback((error) => errorHandler(filterIdentifier)(error), []);
|
|
101
117
|
const onInitLoadingChanged = useCallback((loading) => {
|
|
@@ -109,8 +125,8 @@ export function FilterGroup(props) {
|
|
|
109
125
|
return (_jsx(CustomDropdownButtonComponent, { ...props, titleExtension: _jsxs(_Fragment, { children: [props.titleExtension, titleExtension, _jsx(FilterButtonCustomIcon, { customIcon: props.customIcon, disabled: props.disabled })
|
|
110
126
|
] }), buttonRef: handleButtonRef }));
|
|
111
127
|
}, [attributeFilterProps.DropdownButtonComponent, setFilterItemRef]);
|
|
112
|
-
const LoadingComponent = useCallback(() => _jsx(FilterGroupItem, { isLoading: true }), []);
|
|
113
|
-
const ErrorComponent = useCallback(() => _jsx(FilterGroupItem, { isError: true }), []);
|
|
128
|
+
const LoadingComponent = useCallback(() => _jsx(FilterGroupItem, { isLoading: true, buttonRef: setFilterItemRef }), [setFilterItemRef]);
|
|
129
|
+
const ErrorComponent = useCallback(() => _jsx(FilterGroupItem, { isError: true, buttonRef: setFilterItemRef }), [setFilterItemRef]);
|
|
114
130
|
const ElementsSearchBarComponent = useCallback((props) => (_jsx(AttributeFilterElementsSearchBar, { ...props, onKeyDown: (e) => {
|
|
115
131
|
// allow space key to be handled by filter search bar
|
|
116
132
|
// and not stolen by filter group dropdown keyboard navigation
|
|
@@ -124,10 +140,10 @@ export function FilterGroup(props) {
|
|
|
124
140
|
});
|
|
125
141
|
return result;
|
|
126
142
|
}, [availableFilterIdentifiers, getTitleExtension, errorHandler, initLoadingChangedHandler]);
|
|
127
|
-
const renderItem = useCallback(({ item
|
|
143
|
+
const renderItem = useCallback(({ item }) => {
|
|
128
144
|
const identifier = getFilterIdentifier(item);
|
|
129
145
|
const AttributeFilterComponent = attributeFilterComponentsByIdentifier.get(identifier);
|
|
130
|
-
return
|
|
146
|
+
return renderFilter(item, AttributeFilterComponent);
|
|
131
147
|
}, [attributeFilterComponentsByIdentifier, getFilterIdentifier, renderFilter]);
|
|
132
148
|
const handleKeyDownCapture = useCallback((e) => {
|
|
133
149
|
if (isSpaceKey(e) && isEditableElement(e.target)) {
|
|
@@ -148,12 +164,22 @@ export function FilterGroup(props) {
|
|
|
148
164
|
}
|
|
149
165
|
filterItem.click();
|
|
150
166
|
}, [getFilterIdentifier]);
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
167
|
+
const groupAriaLabel = intl.formatMessage({ id: "filterGroup.aria.label" }, { title });
|
|
168
|
+
const groupAriaLabelWithState = intl.formatMessage({ id: "filterGroup.aria.label.withState" }, { title, state: subtitle });
|
|
169
|
+
const renderBody = useCallback(({ isMobile, closeDropdown }) => (_jsx("div", { role: "dialog", "aria-label": groupAriaLabel, onKeyDownCapture: handleKeyDownCapture, onKeyDown: handleKeyDown, children: _jsx(DropdownList, { className: "gd-filter-group-body", items: filters, maxHeight: 450, itemHeight: 53, accessibilityConfig: {
|
|
170
|
+
role: "list",
|
|
171
|
+
ariaLabel: groupAriaLabel,
|
|
172
|
+
}, renderItem: renderItem, onKeyDownSelect: handleItemKeyboardAction, closeDropdown: closeDropdown, isMobile: isMobile }) })), [filters, renderItem, handleKeyDown, handleKeyDownCapture, handleItemKeyboardAction, groupAriaLabel]);
|
|
155
173
|
const isMobile = useMediaQuery("mobileDevice");
|
|
156
|
-
const renderButton = useCallback(({ toggleDropdown, isOpen, buttonRef, dropdownId }) => (_jsx("div", { className: cx({ "gd-is-mobile": isMobile && isOpen }), children: _jsx(AttributeFilterDropdownButton, { title: title, subtitle: subtitle, isLoaded: !isAnyFilterError, isOpen: isOpen, selectedItemsCount: selectedItemsCount, totalItemsCount: totalItemsCount, showSelectionCount: selectedItemsCount !== undefined || totalItemsCount !== undefined, icon: _jsx(UiIcon, { type: "folder", size: 12, color: "currentColor" }), dropdownId: dropdownId, buttonRef: buttonRef, onClick: toggleDropdown, isError: isAnyFilterError }) })), [
|
|
174
|
+
const renderButton = useCallback(({ toggleDropdown, isOpen, buttonRef, dropdownId }) => (_jsx("div", { className: cx({ "gd-is-mobile": isMobile && isOpen }), children: _jsx(AttributeFilterDropdownButton, { title: title, subtitle: subtitle, isLoaded: !isAnyFilterError, isOpen: isOpen, selectedItemsCount: selectedItemsCount, totalItemsCount: totalItemsCount, showSelectionCount: selectedItemsCount !== undefined || totalItemsCount !== undefined, icon: _jsx(UiIcon, { type: "folder", size: 12, color: "currentColor" }), dropdownId: dropdownId, buttonRef: buttonRef, onClick: toggleDropdown, isError: isAnyFilterError, ariaLabel: groupAriaLabelWithState }) })), [
|
|
175
|
+
title,
|
|
176
|
+
subtitle,
|
|
177
|
+
isAnyFilterError,
|
|
178
|
+
selectedItemsCount,
|
|
179
|
+
totalItemsCount,
|
|
180
|
+
isMobile,
|
|
181
|
+
groupAriaLabelWithState,
|
|
182
|
+
]);
|
|
157
183
|
return (_jsx(Dropdown, { isOpen: isOpen, className: "gd-filter-group", closeOnParentScroll: true, closeOnMouseDrag: true, closeOnOutsideClick: true, closeOnEscape: true, ignoreClicksOnByClass: IGNORE_CLICKS_ON_BY_CLASS, enableEventPropagation: true, alignPoints: GROUP_ALIGN_POINTS, fullscreenOnMobile: true, autofocusOnOpen: true, renderButton: renderButton, renderBody: renderBody, onOpenStateChanged: setIsOpen }));
|
|
158
184
|
}
|
|
159
185
|
/**
|
|
@@ -28,7 +28,7 @@ export function MeasureValueFilterDetailsBubble({ title, requestHandler, }) {
|
|
|
28
28
|
return (_jsx("span", { className: "gd-mvf-details-bubble__trigger", children: _jsx(UiTooltip, { anchor: _jsx("span", { className: "s-mvf-details-trigger", children: _jsx(UiIconButton, { icon: "question", size: "xsmall", variant: "tertiary", iconColor: "complementary-7", label: intl.formatMessage(messages["measureValueFilterDetailsInfoButtonLabel"]), accessibilityConfig: {
|
|
29
29
|
ariaLabel: intl.formatMessage(messages["measureValueFilterDetailsInfoButtonLabel"]),
|
|
30
30
|
ariaExpanded: isOpen,
|
|
31
|
-
}, dataTestId: "mvf-details-trigger" }) }), content: tooltipContent, triggerBy: ["hover", "focus"], onOpen: handleOpen, onClose: handleClose, arrowPlacement: "left", showArrow: false, behaviour: "tooltip", variant: "none", accessibilityConfig: {
|
|
31
|
+
}, dataTestId: "mvf-details-trigger" }) }), content: tooltipContent, triggerBy: ["hover", "focus"], hoverCloseDelay: 0, onOpen: handleOpen, onClose: handleClose, arrowPlacement: "left", showArrow: false, behaviour: "tooltip", variant: "none", accessibilityConfig: {
|
|
32
32
|
ariaLabel: intl.formatMessage(messages["measureValueFilterDetailsInfoButtonLabel"]),
|
|
33
33
|
} }) }));
|
|
34
34
|
}
|
package/esm/internal.d.ts
CHANGED
|
@@ -7,3 +7,4 @@ export { CalendarTypeTabs } from "./DateFilter/DateFilterBody/CalendarTypeTabs.j
|
|
|
7
7
|
export { normalizeSelectedFilterOption } from "./DateFilter/utils/FilterOptionNormalization.js";
|
|
8
8
|
export { ListItem } from "./DateFilter/ListItem/ListItem.js";
|
|
9
9
|
export { ListItemTooltip } from "./DateFilter/ListItemTooltip/ListItemTooltip.js";
|
|
10
|
+
export { MeasureValueFilterDetailsBubble } from "./MeasureValueFilter/MeasureValueFilterDetailsBubble.js";
|
package/esm/internal.js
CHANGED
|
@@ -9,3 +9,4 @@ export { CalendarTypeTabs } from "./DateFilter/DateFilterBody/CalendarTypeTabs.j
|
|
|
9
9
|
export { normalizeSelectedFilterOption } from "./DateFilter/utils/FilterOptionNormalization.js";
|
|
10
10
|
export { ListItem } from "./DateFilter/ListItem/ListItem.js";
|
|
11
11
|
export { ListItemTooltip } from "./DateFilter/ListItemTooltip/ListItemTooltip.js";
|
|
12
|
+
export { MeasureValueFilterDetailsBubble } from "./MeasureValueFilter/MeasureValueFilterDetailsBubble.js";
|
package/esm/sdk-ui-filters.d.ts
CHANGED
|
@@ -184,7 +184,7 @@ export declare function AttributeFilterDeleteButton({ onDelete }: IAttributeFilt
|
|
|
184
184
|
/**
|
|
185
185
|
* @internal
|
|
186
186
|
*/
|
|
187
|
-
export declare function AttributeFilterDependencyTooltip({ tooltipContent }: IAttributeFilterDependencyTooltipProps): JSX.Element;
|
|
187
|
+
export declare function AttributeFilterDependencyTooltip({ tooltipContent, ariaLabel }: IAttributeFilterDependencyTooltipProps): JSX.Element;
|
|
188
188
|
|
|
189
189
|
/**
|
|
190
190
|
* This component displays two buttons Apply and Cancel.
|
|
@@ -218,7 +218,7 @@ export declare function AttributeFilterDropdownBody({ onApplyButtonClick, onCanc
|
|
|
218
218
|
*
|
|
219
219
|
* @beta
|
|
220
220
|
*/
|
|
221
|
-
export declare function AttributeFilterDropdownButton({ isOpen, title, selectedItemsCount, totalItemsCount, showSelectionCount, subtitle, disabled, customIcon, isFiltering, isLoading, isLoaded, isError, isDraggable, icon, TooltipContentComponent, titleExtension, onClick, className, buttonRef, buttonId, dropdownId }: IAttributeFilterDropdownButtonProps): JSX.Element;
|
|
221
|
+
export declare function AttributeFilterDropdownButton({ isOpen, title, selectedItemsCount, totalItemsCount, showSelectionCount, subtitle, disabled, customIcon, isFiltering, isLoading, isLoaded, isError, isDraggable, icon, TooltipContentComponent, titleExtension, onClick, className, buttonRef, buttonId, dropdownId, ariaLabel }: IAttributeFilterDropdownButtonProps): JSX.Element;
|
|
222
222
|
|
|
223
223
|
/**
|
|
224
224
|
* It displays three state a checkbox and allow select all or none elements that respect current search criteria.
|
|
@@ -2008,6 +2008,11 @@ export declare interface IAttributeFilterDeleteButtonProps {
|
|
|
2008
2008
|
*/
|
|
2009
2009
|
export declare interface IAttributeFilterDependencyTooltipProps {
|
|
2010
2010
|
tooltipContent: ReactNode;
|
|
2011
|
+
/**
|
|
2012
|
+
* Accessible label for the dependency icon wrapper. Already-localized string announced
|
|
2013
|
+
* by screen readers in place of the visible icon.
|
|
2014
|
+
*/
|
|
2015
|
+
ariaLabel?: string;
|
|
2011
2016
|
}
|
|
2012
2017
|
|
|
2013
2018
|
/**
|
|
@@ -2213,6 +2218,13 @@ export declare interface IAttributeFilterDropdownButtonProps {
|
|
|
2213
2218
|
* @beta
|
|
2214
2219
|
*/
|
|
2215
2220
|
dropdownId?: string;
|
|
2221
|
+
/**
|
|
2222
|
+
* Overrides the accessible name of the button. When omitted, the name is derived from the
|
|
2223
|
+
* rendered title.
|
|
2224
|
+
*
|
|
2225
|
+
* @beta
|
|
2226
|
+
*/
|
|
2227
|
+
ariaLabel?: string;
|
|
2216
2228
|
}
|
|
2217
2229
|
|
|
2218
2230
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-filters",
|
|
3
|
-
"version": "11.36.0-alpha.
|
|
3
|
+
"version": "11.36.0-alpha.7",
|
|
4
4
|
"description": "GoodData.UI SDK - Filter Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"ts-invariant": "0.10.3",
|
|
48
48
|
"tslib": "2.8.1",
|
|
49
49
|
"uuid": "11.1.0",
|
|
50
|
-
"@gooddata/sdk-backend-spi": "11.36.0-alpha.
|
|
51
|
-
"@gooddata/sdk-model": "11.36.0-alpha.
|
|
52
|
-
"@gooddata/sdk-ui
|
|
53
|
-
"@gooddata/
|
|
54
|
-
"@gooddata/
|
|
50
|
+
"@gooddata/sdk-backend-spi": "11.36.0-alpha.7",
|
|
51
|
+
"@gooddata/sdk-model": "11.36.0-alpha.7",
|
|
52
|
+
"@gooddata/sdk-ui": "11.36.0-alpha.7",
|
|
53
|
+
"@gooddata/sdk-ui-kit": "11.36.0-alpha.7",
|
|
54
|
+
"@gooddata/util": "11.36.0-alpha.7"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@microsoft/api-documenter": "^7.17.0",
|
|
@@ -93,12 +93,12 @@
|
|
|
93
93
|
"typescript": "5.9.3",
|
|
94
94
|
"vitest": "4.1.0",
|
|
95
95
|
"vitest-dom": "0.1.1",
|
|
96
|
-
"@gooddata/eslint-config": "11.36.0-alpha.
|
|
97
|
-
"@gooddata/oxlint-config": "11.36.0-alpha.
|
|
98
|
-
"@gooddata/reference-workspace": "11.36.0-alpha.
|
|
99
|
-
"@gooddata/sdk-ui-theme-provider": "11.36.0-alpha.
|
|
100
|
-
"@gooddata/sdk-backend-mockingbird": "11.36.0-alpha.
|
|
101
|
-
"@gooddata/stylelint-config": "11.36.0-alpha.
|
|
96
|
+
"@gooddata/eslint-config": "11.36.0-alpha.7",
|
|
97
|
+
"@gooddata/oxlint-config": "11.36.0-alpha.7",
|
|
98
|
+
"@gooddata/reference-workspace": "11.36.0-alpha.7",
|
|
99
|
+
"@gooddata/sdk-ui-theme-provider": "11.36.0-alpha.7",
|
|
100
|
+
"@gooddata/sdk-backend-mockingbird": "11.36.0-alpha.7",
|
|
101
|
+
"@gooddata/stylelint-config": "11.36.0-alpha.7"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
104
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
overscroll-behavior: contain;
|
|
17
17
|
margin: 0;
|
|
18
18
|
}
|
|
19
|
-
.dropdown-body .gd-infinite-list.gd-filter-group-body .
|
|
20
|
-
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .
|
|
19
|
+
.dropdown-body .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item .gd-filter-group-item,
|
|
20
|
+
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item .gd-filter-group-item {
|
|
21
21
|
border-bottom: 1px solid var(--gd-palette-complementary-3, #dde4eb);
|
|
22
22
|
}
|
|
23
|
-
.dropdown-body .gd-infinite-list.gd-filter-group-body .
|
|
24
|
-
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .
|
|
23
|
+
.dropdown-body .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item:last-child .gd-filter-group-item,
|
|
24
|
+
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item:last-child .gd-filter-group-item {
|
|
25
25
|
border-bottom: none;
|
|
26
26
|
}
|
|
27
27
|
.dropdown-body .gd-infinite-list.gd-filter-group-body .gd-attribute-filter__next,
|
package/styles/css/main.css
CHANGED
|
@@ -9541,12 +9541,12 @@ div.gd-empty-item-bubble {
|
|
|
9541
9541
|
overscroll-behavior: contain;
|
|
9542
9542
|
margin: 0;
|
|
9543
9543
|
}
|
|
9544
|
-
.dropdown-body .gd-infinite-list.gd-filter-group-body .
|
|
9545
|
-
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .
|
|
9544
|
+
.dropdown-body .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item .gd-filter-group-item,
|
|
9545
|
+
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item .gd-filter-group-item {
|
|
9546
9546
|
border-bottom: 1px solid var(--gd-palette-complementary-3, #dde4eb);
|
|
9547
9547
|
}
|
|
9548
|
-
.dropdown-body .gd-infinite-list.gd-filter-group-body .
|
|
9549
|
-
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .
|
|
9548
|
+
.dropdown-body .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item:last-child .gd-filter-group-item,
|
|
9549
|
+
.gd-mobile-dropdown-content .gd-infinite-list.gd-filter-group-body .gd-ui-kit-paged-virtual-list__item:last-child .gd-filter-group-item {
|
|
9550
9550
|
border-bottom: none;
|
|
9551
9551
|
}
|
|
9552
9552
|
.dropdown-body .gd-infinite-list.gd-filter-group-body .gd-attribute-filter__next,
|