@bspk/ui 1.3.2 → 1.3.3
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/dist/components/DateInput/DateInput.js +1 -0
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/ListItem/ListItem.d.ts +2 -2
- package/dist/components/ListItem/ListItem.js +11 -7
- package/dist/components/ListItem/ListItem.js.map +1 -1
- package/dist/components/ListItem/ListItemExample.d.ts +1 -1
- package/dist/components/ListItem/ListItemExample.js +72 -3
- package/dist/components/ListItem/ListItemExample.js.map +1 -1
- package/dist/components/ListItem/list-item.css +8 -6
- package/dist/components/ListItem/list-item.css.js +8 -6
- package/dist/components/ListItemMenu/ListItemMenu.d.ts +1 -1
- package/dist/components/ListItemMenu/ListItemMenu.js.map +1 -1
- package/dist/components/NumberInput/NumberInput.d.ts +2 -2
- package/dist/components/NumberInput/NumberInput.js +7 -20
- package/dist/components/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/Popover/Popover.js +1 -0
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/ProgressionStepper/ProgressionStepper.d.ts +3 -7
- package/dist/components/ProgressionStepper/ProgressionStepper.js +9 -5
- package/dist/components/ProgressionStepper/ProgressionStepper.js.map +1 -1
- package/dist/components/ProgressionStepper/ProgressionStepperExample.js +20 -4
- package/dist/components/ProgressionStepper/ProgressionStepperExample.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.d.ts +36 -35
- package/dist/components/SearchBar/SearchBar.js +100 -49
- package/dist/components/SearchBar/SearchBar.js.map +1 -1
- package/dist/components/SearchBar/SearchBarExample.js +2 -1
- package/dist/components/SearchBar/SearchBarExample.js.map +1 -1
- package/dist/components/Select/Select.d.ts +2 -2
- package/dist/components/Select/Select.js +3 -5
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/TabList/TabList.js +2 -1
- package/dist/components/TabList/TabList.js.map +1 -1
- package/dist/components/TabList/tab-list.css +6 -0
- package/dist/components/TabList/tab-list.css.js +6 -0
- package/dist/hooks/useArrowNavigation.js +6 -1
- package/dist/hooks/useArrowNavigation.js.map +1 -1
- package/dist/hooks/useOutsideClick.d.ts +4 -3
- package/dist/hooks/useOutsideClick.js +13 -2
- package/dist/hooks/useOutsideClick.js.map +1 -1
- package/package.json +1 -1
- package/src/components/DateInput/DateInput.tsx +1 -0
- package/src/components/ListItem/ListItem.rtl.test.tsx +4 -1
- package/src/components/ListItem/ListItem.tsx +19 -12
- package/src/components/ListItem/ListItemExample.tsx +74 -4
- package/src/components/ListItem/list-item.scss +21 -17
- package/src/components/ListItemMenu/ListItemMenu.tsx +4 -3
- package/src/components/NumberInput/NumberInput.tsx +14 -27
- package/src/components/Popover/Popover.tsx +1 -0
- package/src/components/ProgressionStepper/ProgressionStepper.tsx +24 -15
- package/src/components/ProgressionStepper/ProgressionStepperExample.tsx +20 -4
- package/src/components/SearchBar/SearchBar.rtl.test.tsx +0 -1
- package/src/components/SearchBar/SearchBar.tsx +192 -115
- package/src/components/SearchBar/SearchBarExample.tsx +2 -1
- package/src/components/Select/Select.tsx +6 -12
- package/src/components/TabList/TabList.tsx +2 -1
- package/src/components/TabList/tab-list.scss +12 -0
- package/src/hooks/useArrowNavigation.ts +6 -1
- package/src/hooks/useOutsideClick.ts +16 -3
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import './search-bar.scss';
|
|
2
|
-
import {
|
|
2
|
+
import { ListItemProps } from '-/components/ListItem';
|
|
3
3
|
import { TextInputProps } from '-/components/TextInput';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { ScrollListItemsStyleProps } from '-/utils/scrollListItemsStyle';
|
|
5
|
+
/**
|
|
6
|
+
* An option in a SearchBar component.
|
|
7
|
+
*
|
|
8
|
+
* Essentially the props for a ListItem.
|
|
9
|
+
*/
|
|
10
|
+
export type SearchBarOption = Pick<ListItemProps, 'label' | 'leading' | 'trailing'>;
|
|
11
|
+
export type SearchBarProps<O extends SearchBarOption = SearchBarOption> = Pick<TextInputProps, 'aria-label' | 'disabled' | 'id' | 'inputRef' | 'name' | 'size'> & ScrollListItemsStyleProps & {
|
|
8
12
|
/** The current value of the search bar. */
|
|
9
13
|
value?: string;
|
|
10
14
|
/**
|
|
@@ -16,33 +20,33 @@ export type SearchBarProps = Pick<ListItemMenuProps, 'scrollLimit'> & Pick<TextI
|
|
|
16
20
|
*/
|
|
17
21
|
placeholder: string;
|
|
18
22
|
/**
|
|
19
|
-
* Handler for
|
|
23
|
+
* Handler for input value change. This is called on every key press in the input field and when a menu item is
|
|
24
|
+
* selected.
|
|
20
25
|
*
|
|
21
|
-
* @type (value: String) => void
|
|
26
|
+
* @type (value: String, item?: SearchBarOption) => void
|
|
22
27
|
* @required
|
|
23
28
|
*/
|
|
24
|
-
onChange: (value: string) => void;
|
|
25
|
-
onSelect: (item?: MenuListItem) => void;
|
|
29
|
+
onChange: (value: string, item?: O) => void;
|
|
26
30
|
/**
|
|
27
31
|
* Content to display in the menu.
|
|
28
32
|
*
|
|
29
33
|
* @example
|
|
30
34
|
* [
|
|
31
|
-
* {
|
|
32
|
-
* {
|
|
33
|
-
* {
|
|
34
|
-
* {
|
|
35
|
-
* {
|
|
36
|
-
* {
|
|
37
|
-
* {
|
|
38
|
-
* {
|
|
39
|
-
* {
|
|
40
|
-
* {
|
|
35
|
+
* { label: 'Apple Pie' },
|
|
36
|
+
* { label: 'Banana Split' },
|
|
37
|
+
* { label: 'Cherry Tart' },
|
|
38
|
+
* { label: 'Dragonfruit Sorbet' },
|
|
39
|
+
* { label: 'Elderberry Jam' },
|
|
40
|
+
* { label: 'Fig Newton' },
|
|
41
|
+
* { label: 'Grape Soda' },
|
|
42
|
+
* { label: 'Honeydew Smoothie' },
|
|
43
|
+
* { label: 'Ice Cream Sandwich' },
|
|
44
|
+
* { label: 'Jackfruit Pudding' },
|
|
41
45
|
* ];
|
|
42
46
|
*
|
|
43
|
-
* @type Array<
|
|
47
|
+
* @type Array<SearchBarOption>
|
|
44
48
|
*/
|
|
45
|
-
items?:
|
|
49
|
+
items?: O[];
|
|
46
50
|
/**
|
|
47
51
|
* Message to display when no results are found
|
|
48
52
|
*
|
|
@@ -60,28 +64,25 @@ export type SearchBarProps = Pick<ListItemMenuProps, 'scrollLimit'> & Pick<TextI
|
|
|
60
64
|
* export function Example() {
|
|
61
65
|
* const [searchText, setSearchText] = useState<string>('');
|
|
62
66
|
*
|
|
63
|
-
* const handleItemSelect = (item) => console.log('Selected item:', item);
|
|
64
|
-
*
|
|
65
67
|
* return (
|
|
66
68
|
* <SearchBar
|
|
67
69
|
* aria-label="Example aria-label"
|
|
68
70
|
* items={[
|
|
69
|
-
* {
|
|
70
|
-
* {
|
|
71
|
-
* {
|
|
72
|
-
* {
|
|
73
|
-
* {
|
|
74
|
-
* {
|
|
75
|
-
* {
|
|
76
|
-
* {
|
|
77
|
-
* {
|
|
78
|
-
* {
|
|
71
|
+
* { label: 'Apple Pie' },
|
|
72
|
+
* { label: 'Banana Split' },
|
|
73
|
+
* { label: 'Cherry Tart' },
|
|
74
|
+
* { label: 'Dragonfruit Sorbet' },
|
|
75
|
+
* { label: 'Elderberry Jam' },
|
|
76
|
+
* { label: 'Fig Newton' },
|
|
77
|
+
* { label: 'Grape Soda' },
|
|
78
|
+
* { label: 'Honeydew Smoothie' },
|
|
79
|
+
* { label: 'Ice Cream Sandwich' },
|
|
80
|
+
* { label: 'Jackfruit Pudding' },
|
|
79
81
|
* ]}
|
|
80
82
|
* name="Example name"
|
|
81
83
|
* placeholder="Search"
|
|
82
84
|
* value={searchText}
|
|
83
85
|
* onChange={setSearchText}
|
|
84
|
-
* onSelect={handleItemSelect}
|
|
85
86
|
* />
|
|
86
87
|
* );
|
|
87
88
|
* }
|
|
@@ -89,5 +90,5 @@ export type SearchBarProps = Pick<ListItemMenuProps, 'scrollLimit'> & Pick<TextI
|
|
|
89
90
|
* @name SearchBar
|
|
90
91
|
* @phase UXReview
|
|
91
92
|
*/
|
|
92
|
-
export declare function SearchBar({ items: itemsProp, noResultsMessage, placeholder, 'aria-label': ariaLabel,
|
|
93
|
+
export declare function SearchBar<O extends SearchBarOption>({ items: itemsProp, noResultsMessage, placeholder, 'aria-label': ariaLabel, id: idProp, inputRef, name, size, value, onChange, disabled, scrollLimit, }: SearchBarProps<O>): import("react/jsx-runtime").JSX.Element;
|
|
93
94
|
/** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import './search-bar.css.js';
|
|
3
3
|
import { SvgSearch } from '@bspk/icons/Search';
|
|
4
|
-
import { useEffect,
|
|
5
|
-
import {
|
|
4
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import { ListItem } from '../ListItem';
|
|
6
|
+
import { Menu } from '../Menu';
|
|
6
7
|
import { TextInput } from '../TextInput';
|
|
7
8
|
import { Txt } from '../Txt';
|
|
9
|
+
import { useArrowNavigation } from '../../hooks/useArrowNavigation';
|
|
10
|
+
import { useFloating } from '../../hooks/useFloating';
|
|
8
11
|
import { useId } from '../../hooks/useId';
|
|
12
|
+
import { useOutsideClick } from '../../hooks/useOutsideClick';
|
|
9
13
|
import { useUIContext } from '../../hooks/useUIContext';
|
|
14
|
+
import { getElementById } from '../../utils/dom';
|
|
15
|
+
import { handleKeyDown } from '../../utils/handleKeyDown';
|
|
16
|
+
import { scrollListItemsStyle } from '../../utils/scrollListItemsStyle';
|
|
10
17
|
import { useIds } from '../../utils/useIds';
|
|
11
18
|
/**
|
|
12
19
|
* An input field that allows customers to input search queries and retrieve results.
|
|
@@ -18,28 +25,25 @@ import { useIds } from '../../utils/useIds';
|
|
|
18
25
|
* export function Example() {
|
|
19
26
|
* const [searchText, setSearchText] = useState<string>('');
|
|
20
27
|
*
|
|
21
|
-
* const handleItemSelect = (item) => console.log('Selected item:', item);
|
|
22
|
-
*
|
|
23
28
|
* return (
|
|
24
29
|
* <SearchBar
|
|
25
30
|
* aria-label="Example aria-label"
|
|
26
31
|
* items={[
|
|
27
|
-
* {
|
|
28
|
-
* {
|
|
29
|
-
* {
|
|
30
|
-
* {
|
|
31
|
-
* {
|
|
32
|
-
* {
|
|
33
|
-
* {
|
|
34
|
-
* {
|
|
35
|
-
* {
|
|
36
|
-
* {
|
|
32
|
+
* { label: 'Apple Pie' },
|
|
33
|
+
* { label: 'Banana Split' },
|
|
34
|
+
* { label: 'Cherry Tart' },
|
|
35
|
+
* { label: 'Dragonfruit Sorbet' },
|
|
36
|
+
* { label: 'Elderberry Jam' },
|
|
37
|
+
* { label: 'Fig Newton' },
|
|
38
|
+
* { label: 'Grape Soda' },
|
|
39
|
+
* { label: 'Honeydew Smoothie' },
|
|
40
|
+
* { label: 'Ice Cream Sandwich' },
|
|
41
|
+
* { label: 'Jackfruit Pudding' },
|
|
37
42
|
* ]}
|
|
38
43
|
* name="Example name"
|
|
39
44
|
* placeholder="Search"
|
|
40
45
|
* value={searchText}
|
|
41
46
|
* onChange={setSearchText}
|
|
42
|
-
* onSelect={handleItemSelect}
|
|
43
47
|
* />
|
|
44
48
|
* );
|
|
45
49
|
* }
|
|
@@ -47,50 +51,97 @@ import { useIds } from '../../utils/useIds';
|
|
|
47
51
|
* @name SearchBar
|
|
48
52
|
* @phase UXReview
|
|
49
53
|
*/
|
|
50
|
-
export function SearchBar({ items: itemsProp, noResultsMessage, placeholder = 'Search', 'aria-label': ariaLabel,
|
|
54
|
+
export function SearchBar({ items: itemsProp, noResultsMessage, placeholder = 'Search', 'aria-label': ariaLabel, id: idProp, inputRef, name, size = 'medium', value, onChange, disabled = false, scrollLimit, }) {
|
|
51
55
|
const id = useId(idProp);
|
|
56
|
+
const menuId = `${id}-menu`;
|
|
52
57
|
const items = useIds(`search-bar-${id}`, itemsProp || []);
|
|
53
|
-
const
|
|
58
|
+
const [hasFocus, setHasFocus] = useState(false);
|
|
59
|
+
const filteredItems = useMemo(() => {
|
|
60
|
+
const valueStr = value?.toString().trim().toLowerCase() || '';
|
|
61
|
+
return items.filter((item) => !valueStr || item.label.toLowerCase().includes(valueStr));
|
|
62
|
+
}, [items, value]);
|
|
54
63
|
const { sendAriaLiveMessage } = useUIContext();
|
|
55
64
|
useEffect(() => {
|
|
56
65
|
if (!items.length)
|
|
57
66
|
sendAriaLiveMessage('No results found', 'assertive');
|
|
58
67
|
}, [items.length, sendAriaLiveMessage, value]);
|
|
59
|
-
const
|
|
68
|
+
const { activeElementId, setActiveElementId, arrowKeyCallbacks } = useArrowNavigation({
|
|
69
|
+
ids: filteredItems.map((i) => i.id),
|
|
70
|
+
});
|
|
71
|
+
const closeMenu = () => setActiveElementId(null);
|
|
72
|
+
const open = Boolean(activeElementId);
|
|
73
|
+
const { elements, floatingStyles } = useFloating({
|
|
74
|
+
hide: !open,
|
|
75
|
+
offsetOptions: 4,
|
|
76
|
+
refWidth: true,
|
|
77
|
+
});
|
|
78
|
+
useOutsideClick({
|
|
79
|
+
elements: [elements.floating, elements.reference],
|
|
80
|
+
callback: () => {
|
|
81
|
+
setHasFocus(false);
|
|
82
|
+
closeMenu();
|
|
83
|
+
},
|
|
84
|
+
disabled: !open,
|
|
85
|
+
handleTabs: true,
|
|
86
|
+
});
|
|
87
|
+
const spaceEnter = () => {
|
|
88
|
+
if (!open) {
|
|
89
|
+
elements.reference?.click();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (activeElementId)
|
|
93
|
+
getElementById(activeElementId)?.click();
|
|
94
|
+
};
|
|
60
95
|
useEffect(() => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
'aria-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return;
|
|
82
|
-
inputElementRef.current.focus();
|
|
83
|
-
inputElementRef.current.setSelectionRange(0, inputElementRef.current.value.length);
|
|
84
|
-
}, 100);
|
|
85
|
-
}, owner: "search-bar", role: "listbox", scrollLimit: scrollLimit, children: (toggleProps, { setRef, toggleMenu }) => (_jsx(TextInput, { "aria-label": (items.length === 0 ? 'No results found' : '') + ariaLabel, autoComplete: "off", containerRef: setRef, disabled: disabled, id: id, inputProps: { ...toggleProps }, inputRef: (node) => {
|
|
96
|
+
if (!hasFocus) {
|
|
97
|
+
setActiveElementId(null);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (activeElementId)
|
|
101
|
+
return;
|
|
102
|
+
// If we have focus but no active element, set the first item as active (if there is one)
|
|
103
|
+
if (filteredItems.length) {
|
|
104
|
+
setActiveElementId(value?.trim().length ? filteredItems[0].id : null);
|
|
105
|
+
}
|
|
106
|
+
}, [hasFocus, filteredItems, activeElementId, setActiveElementId, value]);
|
|
107
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { "data-bspk": "search-bar", children: _jsx(TextInput, { "aria-label": ariaLabel, autoComplete: "off", containerRef: elements.setReference, disabled: disabled, id: id, inputProps: {
|
|
108
|
+
'aria-controls': open ? menuId : undefined,
|
|
109
|
+
'aria-expanded': open,
|
|
110
|
+
'aria-haspopup': 'listbox',
|
|
111
|
+
'aria-activedescendant': activeElementId || undefined,
|
|
112
|
+
'aria-autocomplete': 'list',
|
|
113
|
+
role: 'combobox',
|
|
114
|
+
spellCheck: 'false',
|
|
115
|
+
}, inputRef: (node) => {
|
|
86
116
|
if (!node)
|
|
87
117
|
return;
|
|
88
118
|
inputRef?.(node);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
119
|
+
}, leading: _jsx(SvgSearch, {}), name: name, onChange: (str) => onChange(str), onFocus: () => setHasFocus(true), onKeyDown: handleKeyDown({
|
|
120
|
+
...arrowKeyCallbacks,
|
|
121
|
+
ArrowDown: (event) => {
|
|
122
|
+
if (!open)
|
|
123
|
+
spaceEnter();
|
|
124
|
+
arrowKeyCallbacks.ArrowDown?.(event);
|
|
125
|
+
},
|
|
126
|
+
Space: spaceEnter,
|
|
127
|
+
Enter: spaceEnter,
|
|
128
|
+
'Ctrl+Option+Space': spaceEnter,
|
|
129
|
+
}, { preventDefault: true, stopPropagation: true }), owner: "search-bar", placeholder: placeholder, size: size, value: value }) }), _jsxs(Menu, { "aria-autocomplete": undefined, as: "div", id: menuId, innerRef: elements.setFloating, label: "Search results", onClickCapture: () => {
|
|
130
|
+
// Prevent the menu from closing when clicking inside it
|
|
131
|
+
// maintain focus on the select control
|
|
132
|
+
elements.reference?.focus();
|
|
133
|
+
}, onFocus: () => {
|
|
134
|
+
elements.reference?.focus();
|
|
135
|
+
}, owner: "select", role: "listbox", style: {
|
|
136
|
+
...(open ? scrollListItemsStyle(scrollLimit, items.length) : {}),
|
|
137
|
+
...floatingStyles,
|
|
138
|
+
}, tabIndex: -1, children: [!!value?.length && !items?.length && (_jsxs("div", { "data-bspk": "no-items-found", children: [_jsx(Txt, { as: "div", variant: "heading-h5", children: "No results found" }), noResultsMessage && (_jsx(Txt, { as: "div", variant: "body-base", children: noResultsMessage }))] })), filteredItems.map((item) => {
|
|
139
|
+
const isActive = activeElementId === item.id;
|
|
140
|
+
const isSelected = value == item.label;
|
|
141
|
+
return (_jsx(ListItem, { ...item, active: isActive || undefined, "aria-label": undefined, "aria-selected": isSelected, as: "li", onClick: () => {
|
|
142
|
+
onChange(item.label, item);
|
|
143
|
+
closeMenu();
|
|
144
|
+
}, owner: "select", role: "option", tabIndex: -1, value: undefined }, item.id));
|
|
145
|
+
})] })] }));
|
|
95
146
|
}
|
|
96
147
|
//# sourceMappingURL=SearchBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["../../../src/components/SearchBar/SearchBar.tsx"],"names":[],"mappings":";AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["../../../src/components/SearchBar/SearchBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { randomString } from '../../utils/random';
|
|
2
3
|
export const SearchBarExample = {
|
|
3
4
|
render: ({ props, Component }) => {
|
|
4
|
-
return _jsx(Component, { ...props });
|
|
5
|
+
return _jsx(Component, { ...props, id: `search-bar-${randomString(8)}` });
|
|
5
6
|
},
|
|
6
7
|
};
|
|
7
8
|
//# sourceMappingURL=SearchBarExample.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBarExample.js","sourceRoot":"","sources":["../../../src/components/SearchBar/SearchBarExample.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"SearchBarExample.js","sourceRoot":"","sources":["../../../src/components/SearchBar/SearchBarExample.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,gBAAgB,GAAqC;IAC9D,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC7B,OAAO,KAAC,SAAS,OAAK,KAAK,EAAE,EAAE,EAAE,cAAc,YAAY,CAAC,CAAC,CAAC,EAAE,GAAI,CAAC;IACzE,CAAC;CACJ,CAAC"}
|
|
@@ -6,9 +6,9 @@ import { ScrollListItemsStyleProps } from '-/utils/scrollListItemsStyle';
|
|
|
6
6
|
/**
|
|
7
7
|
* An option in a Select component.
|
|
8
8
|
*
|
|
9
|
-
* Essentially the props of ListItemProps.
|
|
9
|
+
* Essentially the props of ListItemProps.
|
|
10
10
|
*/
|
|
11
|
-
export type SelectOption = Omit<ListItemProps, 'id' | 'onClick' | 'subText' | 'value'> & {
|
|
11
|
+
export type SelectOption = CommonProps<'disabled'> & Omit<ListItemProps, 'id' | 'onClick' | 'subText' | 'value'> & {
|
|
12
12
|
value: string;
|
|
13
13
|
};
|
|
14
14
|
export type SelectItem = SelectOption & {
|
|
@@ -59,13 +59,11 @@ export function Select({ options: optionsProp = [], value = '', onChange, label,
|
|
|
59
59
|
}));
|
|
60
60
|
return { items: nextItems, availableItems: nextItems.filter((item) => !item.disabled) };
|
|
61
61
|
}, [optionsProp, id, value]);
|
|
62
|
-
const
|
|
63
|
-
setActiveElementId(null);
|
|
64
|
-
};
|
|
65
|
-
const selectedItem = useMemo(() => items.find((o) => o.value === value?.[0]), [items, value]);
|
|
62
|
+
const selectedItem = useMemo(() => items.find((o) => o.value === value), [items, value]);
|
|
66
63
|
const { activeElementId, setActiveElementId, arrowKeyCallbacks } = useArrowNavigation({
|
|
67
64
|
ids: availableItems.map((i) => i.id),
|
|
68
65
|
});
|
|
66
|
+
const closeMenu = () => setActiveElementId(null);
|
|
69
67
|
const open = Boolean(activeElementId);
|
|
70
68
|
const { elements, floatingStyles } = useFloating({
|
|
71
69
|
hide: !open,
|
|
@@ -121,7 +119,7 @@ export function Select({ options: optionsProp = [], value = '', onChange, label,
|
|
|
121
119
|
const isActive = activeElementId === item.id;
|
|
122
120
|
const isSelected = value.includes(item.value);
|
|
123
121
|
return (_jsx(ListItem, { ...item, active: isActive || undefined, "aria-label": undefined, "aria-selected": isSelected, as: "li", onClick: () => {
|
|
124
|
-
if (item.disabled
|
|
122
|
+
if (item.disabled)
|
|
125
123
|
return;
|
|
126
124
|
onChange(item.value);
|
|
127
125
|
closeMenu();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":";AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,OAAO,EAA6B,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAiB,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAA6B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -82,9 +82,10 @@ onChange, value: valueProp, size = 'medium', options: optionsProp, width = 'hug'
|
|
|
82
82
|
const isSelected = item.value === value;
|
|
83
83
|
const icon = isSelected ? item.iconSelected : item.icon;
|
|
84
84
|
const isActive = (activeElementId && activeElementId === item.id) || undefined;
|
|
85
|
+
const focusable = (isSelected && !activeElementId) || isActive;
|
|
85
86
|
return (_jsx(Fragment, { children: _jsx(Tooltip, { disabled: !iconsOnly, label: item.label, placement: "top", children: (triggerProps) => (
|
|
86
87
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events
|
|
87
|
-
_jsxs("li", { ...triggerProps, "aria-controls": id, "aria-disabled": item.disabled || undefined, "aria-selected": isSelected, "data-active": isActive, "data-value": item.value, id: item.id, onClick: item.disabled ? undefined : handleClick(item), role: "tab", tabIndex:
|
|
88
|
+
_jsxs("li", { ...triggerProps, "aria-controls": id, "aria-disabled": item.disabled || undefined, "aria-selected": isSelected, "data-active": isActive, "data-value": item.value, id: item.id, onClick: item.disabled ? undefined : handleClick(item), role: "tab", tabIndex: focusable ? 0 : -1, children: [icon && _jsx("span", { "aria-hidden": "true", children: icon }), !iconsOnly && _jsx(Truncated, { "data-label": true, children: item.label }), item.badge && !item.disabled && (_jsx(Badge, { count: item.badge, size: TAB_BADGE_SIZES[size] }))] })) }) }, item.id));
|
|
88
89
|
}) }));
|
|
89
90
|
}
|
|
90
91
|
//# sourceMappingURL=TabList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../../src/components/TabList/TabList.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../../src/components/TabList/TabList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -57,5 +57,11 @@ ul[data-bspk-utility=tab-list] li [data-label][style] {
|
|
|
57
57
|
ul[data-bspk-utility=tab-list] li svg {
|
|
58
58
|
width: var(--icon-size);
|
|
59
59
|
}
|
|
60
|
+
ul[data-bspk-utility=tab-list]:not([data-bspk]):focus-within li:not([aria-disabled])[data-active] {
|
|
61
|
+
background-color: var(--interactions-neutral-hover-opacity);
|
|
62
|
+
}
|
|
63
|
+
ul[data-bspk-utility=tab-list]:not([data-bspk]):focus-within li:not([aria-disabled])[aria-selected=true] {
|
|
64
|
+
background-color: var(--surface-brand-primary-highlight);
|
|
65
|
+
}
|
|
60
66
|
|
|
61
67
|
/** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
|
|
@@ -60,6 +60,12 @@ ul[data-bspk-utility=tab-list] li [data-label][style] {
|
|
|
60
60
|
ul[data-bspk-utility=tab-list] li svg {
|
|
61
61
|
width: var(--icon-size);
|
|
62
62
|
}
|
|
63
|
+
ul[data-bspk-utility=tab-list]:not([data-bspk]):focus-within li:not([aria-disabled])[data-active] {
|
|
64
|
+
background-color: var(--interactions-neutral-hover-opacity);
|
|
65
|
+
}
|
|
66
|
+
ul[data-bspk-utility=tab-list]:not([data-bspk]):focus-within li:not([aria-disabled])[aria-selected=true] {
|
|
67
|
+
background-color: var(--surface-brand-primary-highlight);
|
|
68
|
+
}
|
|
63
69
|
|
|
64
70
|
/** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
|
|
65
71
|
`));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
2
|
import { getElementById } from '../utils/dom';
|
|
3
3
|
const ARROW_KEYS = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];
|
|
4
4
|
/**
|
|
@@ -22,6 +22,11 @@ export function useArrowNavigation({ ids = [], callback, increments = {
|
|
|
22
22
|
ArrowDown: 1,
|
|
23
23
|
}, defaultActiveId, }) {
|
|
24
24
|
const [activeElementId, setActiveElementIdBase] = useState(defaultActiveId || null);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
// If the active element is not in the list, reset the first ID as active
|
|
27
|
+
if (activeElementId && !ids.includes(activeElementId))
|
|
28
|
+
setActiveElementIdBase(ids[0]);
|
|
29
|
+
}, [ids, activeElementId]);
|
|
25
30
|
const setActiveElementId = (id) => {
|
|
26
31
|
setActiveElementIdBase(id);
|
|
27
32
|
getElementById(id)?.scrollIntoView({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useArrowNavigation.js","sourceRoot":"","sources":["../../src/hooks/useArrowNavigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useArrowNavigation.js","sourceRoot":"","sources":["../../src/hooks/useArrowNavigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM7C,MAAM,UAAU,GAAoB,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AA8BxF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAC/B,GAAG,GAAG,EAAE,EACR,QAAQ,EACR,UAAU,GAAG;IACT,SAAS,EAAE,CAAC,CAAC;IACb,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,CAAC;CACf,EACD,eAAe,GACO;IAKtB,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAgB,eAAe,IAAI,IAAI,CAAC,CAAC;IAEnG,SAAS,CAAC,GAAG,EAAE;QACX,yEAAyE;QACzE,IAAI,eAAe,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;YAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;IAE3B,MAAM,kBAAkB,GAAG,CAAC,EAAiB,EAAE,EAAE;QAC7C,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAC3B,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC;YAC/B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,SAAS;SACpB,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO;QACH,eAAe;QACf,kBAAkB;QAClB,iBAAiB,EAAE,MAAM,CAAC,WAAW,CACjC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACpB,GAAG;YACH,CAAC,KAAoB,EAAE,EAAE;gBACrB,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,IAAI,YAAY,GAAG,CAAC,CAAC;gBACrB,IAAI,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAElC,IAAI,eAAe,EAAE,CAAC;oBAClB,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;oBAC5C,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;oBACjE,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5B,CAAC;gBAED,IACI,OAAO,QAAQ,KAAK,UAAU;oBAC9B,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK;oBAEtE,OAAO;gBACX,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;SACJ,CAAC,CACW;KACpB,CAAC;AACN,CAAC"}
|
|
@@ -27,9 +27,10 @@
|
|
|
27
27
|
* @param callback - The callback to call when a click occurs outside of the ref.
|
|
28
28
|
* @param disabled - Whether the hook should be disabled. Defaults to false.
|
|
29
29
|
*/
|
|
30
|
-
export declare function useOutsideClick({ elements, callback, disabled, }: {
|
|
30
|
+
export declare function useOutsideClick({ elements, callback, disabled, handleTabs, }: {
|
|
31
31
|
elements: (HTMLElement | null)[] | null;
|
|
32
|
-
callback: (event?: MouseEvent) => void;
|
|
33
|
-
disabled
|
|
32
|
+
callback: (event?: KeyboardEvent | MouseEvent) => void;
|
|
33
|
+
disabled: boolean;
|
|
34
|
+
handleTabs?: boolean;
|
|
34
35
|
}): void;
|
|
35
36
|
/** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
|
|
@@ -28,7 +28,7 @@ import { useEffect } from 'react';
|
|
|
28
28
|
* @param callback - The callback to call when a click occurs outside of the ref.
|
|
29
29
|
* @param disabled - Whether the hook should be disabled. Defaults to false.
|
|
30
30
|
*/
|
|
31
|
-
export function useOutsideClick({ elements, callback, disabled, }) {
|
|
31
|
+
export function useOutsideClick({ elements, callback, disabled, handleTabs = false, }) {
|
|
32
32
|
useEffect(() => {
|
|
33
33
|
if (!elements?.length || disabled)
|
|
34
34
|
return;
|
|
@@ -37,11 +37,22 @@ export function useOutsideClick({ elements, callback, disabled, }) {
|
|
|
37
37
|
return;
|
|
38
38
|
callback(event);
|
|
39
39
|
};
|
|
40
|
+
const handleOutsideTab = (event) => {
|
|
41
|
+
if (!handleTabs || event.key !== 'Tab' || disabled)
|
|
42
|
+
return;
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
if (elements?.some?.((element) => element?.contains?.(document.activeElement)))
|
|
45
|
+
return;
|
|
46
|
+
callback(event);
|
|
47
|
+
}, 0);
|
|
48
|
+
};
|
|
40
49
|
document.addEventListener('mousedown', handleClickOutside);
|
|
50
|
+
document.addEventListener('keydown', handleOutsideTab);
|
|
41
51
|
return () => {
|
|
42
52
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
53
|
+
document.removeEventListener('keydown', handleOutsideTab);
|
|
43
54
|
};
|
|
44
|
-
}, [callback, disabled, elements]);
|
|
55
|
+
}, [callback, disabled, elements, handleTabs]);
|
|
45
56
|
}
|
|
46
57
|
/** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
|
|
47
58
|
//# sourceMappingURL=useOutsideClick.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOutsideClick.js","sourceRoot":"","sources":["../../src/hooks/useOutsideClick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,eAAe,CAAC,EAC5B,QAAQ,EACR,QAAQ,EACR,QAAQ,
|
|
1
|
+
{"version":3,"file":"useOutsideClick.js","sourceRoot":"","sources":["../../src/hooks/useOutsideClick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,eAAe,CAAC,EAC5B,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,GAAG,KAAK,GAMrB;IACG,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,QAAQ;YAAE,OAAO;QAE1C,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC7C,IAAI,QAAQ,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAc,CAAC,CAAC;gBAAE,OAAO;YACjG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC9C,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,QAAQ;gBAAE,OAAO;YAE3D,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;oBAAE,OAAO;gBACvF,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC,EAAE,CAAC,CAAC,CAAC;QACV,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE;YACR,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YAC9D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC9D,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,sDAAsD"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ListItem } from './ListItem';
|
|
2
|
-
import { presets } from './ListItemExample';
|
|
2
|
+
import { presets as presentsFn } from './ListItemExample';
|
|
3
3
|
import { hasNoBasicA11yIssues } from '-/rtl/hasNoBasicA11yIssues';
|
|
4
4
|
import { render } from '-/rtl/util';
|
|
5
5
|
|
|
6
|
+
// eslint-disable-next-line no-console
|
|
7
|
+
const presets = presentsFn(console.log);
|
|
8
|
+
|
|
6
9
|
describe('ListItem (RTL)', () => {
|
|
7
10
|
presets.forEach((preset) => {
|
|
8
11
|
it(`has no basic a11y issues - ${preset.label}`, hasNoBasicA11yIssues(<ListItem {...preset.propState} />));
|