@linzjs/lui 21.52.0 → 21.53.0
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/CHANGELOG.md +7 -0
- package/dist/components/LuiListBox/LuiListBox.d.ts +11 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +17 -5
- package/dist/index.js.map +1 -1
- package/dist/lui.esm.js +18 -6
- package/dist/lui.esm.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [21.53.0](https://github.com/linz/lui/compare/v21.52.0...v21.53.0) (2024-11-04)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Adding an imperative API to LuiListBox to allow selecting or focusing the first item ([#1169](https://github.com/linz/lui/issues/1169)) ([fd56d9c](https://github.com/linz/lui/commit/fd56d9c520e4523820bd22567a0bf8e420b3a455))
|
|
7
|
+
|
|
1
8
|
# [21.52.0](https://github.com/linz/lui/compare/v21.51.1...v21.52.0) (2024-11-03)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './LuiListBox.scss';
|
|
2
2
|
import 'react-loading-skeleton/dist/skeleton.css';
|
|
3
|
-
import { HTMLAttributes, Key, ReactNode } from 'react';
|
|
3
|
+
import { HTMLAttributes, Key, ReactNode, MutableRefObject } from 'react';
|
|
4
4
|
import { SelectionBehavior, SelectionMode } from '@react-types/shared';
|
|
5
5
|
import { AriaListBoxOptions } from '@react-aria/listbox';
|
|
6
6
|
export declare type KeyGetter<T> = (item: T) => Key;
|
|
@@ -46,4 +46,13 @@ export interface ILuiListBoxProps<T = ILuiListBoxItem> extends Omit<HTMLAttribut
|
|
|
46
46
|
emptyIndicator?: () => ReactNode;
|
|
47
47
|
onNavigateOutOfBounds?: (bound: 'start' | 'end') => void;
|
|
48
48
|
}
|
|
49
|
-
export
|
|
49
|
+
export interface ILuiListBoxHandle {
|
|
50
|
+
focusFirstItem: () => void;
|
|
51
|
+
selectFirstItem: () => void;
|
|
52
|
+
}
|
|
53
|
+
declare type ForwardedRef<T> = ((instance: T | null) => void) | MutableRefObject<T | null> | null;
|
|
54
|
+
export declare const LuiListBox: <T extends object = ILuiListBoxItem>(props: ILuiListBoxProps<T> & {
|
|
55
|
+
ref?: ForwardedRef<ILuiListBoxHandle> | undefined;
|
|
56
|
+
}) => ReturnType<typeof LuiListBoxWithRef>;
|
|
57
|
+
declare function LuiListBoxWithRef<T extends object = ILuiListBoxItem>(props: ILuiListBoxProps<T>, ref: ForwardedRef<ILuiListBoxHandle>): JSX.Element;
|
|
58
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ export { LuiAccordicard } from './components/LuiAccordicard/LuiAccordicard';
|
|
|
59
59
|
export { LuiAccordicardStatic } from './components/LuiAccordicardStatic/LuiAccordicardStatic';
|
|
60
60
|
export { LuiAccordion } from './components/LuiAccordion/LuiAccordion';
|
|
61
61
|
export * from './components/LuiMultiSwitch/LuiMultiSwitch';
|
|
62
|
-
export { LuiListBox, type ILuiListBoxItem, type ILuiListBoxProps, type IItemRendererProps, } from './components/LuiListBox/LuiListBox';
|
|
62
|
+
export { LuiListBox, type ILuiListBoxItem, type ILuiListBoxProps, type IItemRendererProps, type ILuiListBoxHandle, } from './components/LuiListBox/LuiListBox';
|
|
63
63
|
export { RadioItemRenderer } from './components/LuiListBox/Renderers/RadioItemRenderer';
|
|
64
64
|
export { CheckboxItemRenderer } from './components/LuiListBox/Renderers/CheckboxItemRenderer';
|
|
65
65
|
export { LuiSideMenu, type ILuiSideMenuProps, } from './components/LuiSideMenu/LuiSideMenu';
|
package/dist/index.js
CHANGED
|
@@ -58330,8 +58330,9 @@ function LuiListBoxGroup(_a) {
|
|
|
58330
58330
|
React__default["default"].createElement("ul", __assign({ className: "LuiListBoxGroup-items" }, groupProps), (group.childNodes || []).map(function (node) { return (React__default["default"].createElement(LuiListBoxItem, { key: node.key, node: node, state: state, renderer: itemRenderer })); }))));
|
|
58331
58331
|
}
|
|
58332
58332
|
|
|
58333
|
-
|
|
58334
|
-
|
|
58333
|
+
var LuiListBox = React.forwardRef(LuiListBoxWithRef);
|
|
58334
|
+
function LuiListBoxWithRef(props, ref) {
|
|
58335
|
+
var ariaLabel = props.ariaLabel, ariaLabelledBy = props.ariaLabelledBy, _a = props.itemRenderer, itemRenderer = _a === void 0 ? DefaultItemRenderer : _a, _b = props.groupHeadingRenderer, groupHeadingRenderer = _b === void 0 ? DefaultGroupHeadingRenderer : _b, _c = props.loadingIndicator, loadingIndicator = _c === void 0 ? DefaultLoadingIndicator : _c, _d = props.emptyIndicator, emptyIndicator = _d === void 0 ? DefaultEmptyIndicator : _d, _e = props.selectionMode, selectionMode = _e === void 0 ? 'single' : _e, _f = props.selectionBehavior, selectionBehavior = _f === void 0 ? 'toggle' : _f, _g = props.disabled, disabled = _g === void 0 ? false : _g, _h = props.disabledKeys, disabledKeys = _h === void 0 ? [] : _h, items = props.items, value = props.value, onChange = props.onChange, getKey = props.getKey, getGroup = props.getGroup, getLabel = props.getLabel, ariaProps = props.ariaProps, className = props.className, onNavigateOutOfBounds = props.onNavigateOutOfBounds, ulProps = __rest(props, ["ariaLabel", "ariaLabelledBy", "itemRenderer", "groupHeadingRenderer", "loadingIndicator", "emptyIndicator", "selectionMode", "selectionBehavior", "disabled", "disabledKeys", "items", "value", "onChange", "getKey", "getGroup", "getLabel", "ariaProps", "className", "onNavigateOutOfBounds"]);
|
|
58335
58336
|
var listProps = useLuiListBox({
|
|
58336
58337
|
selectionMode: selectionMode,
|
|
58337
58338
|
selectionBehavior: selectionBehavior,
|
|
@@ -58346,9 +58347,20 @@ function LuiListBox(_a) {
|
|
|
58346
58347
|
disabledKeys: disabledKeys
|
|
58347
58348
|
});
|
|
58348
58349
|
var ariaListBoxProps = React.useMemo(function () { return (__assign({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy }, listProps)); }, [listProps, ariaLabel, ariaLabelledBy]);
|
|
58349
|
-
var
|
|
58350
|
+
var listRef = React.useRef(null);
|
|
58350
58351
|
var state = $e72dd72e1c76a225$export$2f645645f7bca764(listProps);
|
|
58351
|
-
var listBoxProps = $c132121280ec012d$export$50eacbbf140a3141(ariaListBoxProps, state,
|
|
58352
|
+
var listBoxProps = $c132121280ec012d$export$50eacbbf140a3141(ariaListBoxProps, state, listRef).listBoxProps;
|
|
58353
|
+
var getFirstItem = function () { var _a; return (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('li[data-key]:first-of-type'); };
|
|
58354
|
+
React.useImperativeHandle(ref, function () { return ({
|
|
58355
|
+
focusFirstItem: function () {
|
|
58356
|
+
var _a;
|
|
58357
|
+
(_a = getFirstItem()) === null || _a === void 0 ? void 0 : _a.focus();
|
|
58358
|
+
},
|
|
58359
|
+
selectFirstItem: function () {
|
|
58360
|
+
var _a;
|
|
58361
|
+
(_a = getFirstItem()) === null || _a === void 0 ? void 0 : _a.click();
|
|
58362
|
+
}
|
|
58363
|
+
}); });
|
|
58352
58364
|
var onKeyDown = function (e) {
|
|
58353
58365
|
var _a, _b;
|
|
58354
58366
|
var lastFocusedKey = state.selectionManager.focusedKey;
|
|
@@ -58366,7 +58378,7 @@ function LuiListBox(_a) {
|
|
|
58366
58378
|
onNavigateOutOfBounds === null || onNavigateOutOfBounds === void 0 ? void 0 : onNavigateOutOfBounds('end');
|
|
58367
58379
|
}
|
|
58368
58380
|
};
|
|
58369
|
-
return (React__default["default"].createElement("ul", __assign({}, ulProps, listBoxProps, { onKeyDown: onKeyDown, ref:
|
|
58381
|
+
return (React__default["default"].createElement("ul", __assign({}, ulProps, listBoxProps, { onKeyDown: onKeyDown, ref: listRef, className: clsx('LuiListBox', className) }),
|
|
58370
58382
|
!items && loadingIndicator(),
|
|
58371
58383
|
(items === null || items === void 0 ? void 0 : items.length) === 0 && emptyIndicator(),
|
|
58372
58384
|
Array.from(state.collection).map(function (node) {
|