@basic-ui/core 0.0.38 → 0.0.41
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/build/cjs/index.js +1 -1
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Accordion/Accordion.d.ts +7 -7
- package/build/esm/Accordion/Accordion.js +22 -17
- package/build/esm/Accordion/Accordion.js.map +1 -1
- package/build/esm/Accordion/AccordionBody.d.ts +5 -5
- package/build/esm/Accordion/AccordionBody.js +23 -15
- package/build/esm/Accordion/AccordionBody.js.map +1 -1
- package/build/esm/Accordion/AccordionHeader.d.ts +6 -6
- package/build/esm/Accordion/AccordionHeader.js +45 -31
- package/build/esm/Accordion/AccordionHeader.js.map +1 -1
- package/build/esm/Accordion/AccordionItem.d.ts +7 -7
- package/build/esm/Accordion/AccordionItem.js +16 -16
- package/build/esm/Accordion/AccordionItem.js.map +1 -1
- package/build/esm/Accordion/context.d.ts +4 -4
- package/build/esm/Accordion/context.js +12 -10
- package/build/esm/Accordion/context.js.map +1 -1
- package/build/esm/CheckBox/CheckBox.d.ts +6 -6
- package/build/esm/CheckBox/CheckBox.js +19 -12
- package/build/esm/CheckBox/CheckBox.js.map +1 -1
- package/build/esm/ComboBox/Combobox.d.ts +10 -10
- package/build/esm/ComboBox/Combobox.js +52 -46
- package/build/esm/ComboBox/Combobox.js.map +1 -1
- package/build/esm/ComboBox/ComboboxButton.d.ts +8 -8
- package/build/esm/ComboBox/ComboboxButton.js +19 -20
- package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
- package/build/esm/ComboBox/ComboboxInput.d.ts +10 -10
- package/build/esm/ComboBox/ComboboxInput.js +52 -50
- package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
- package/build/esm/ComboBox/ComboboxLabel.d.ts +5 -5
- package/build/esm/ComboBox/ComboboxLabel.js +11 -12
- package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
- package/build/esm/ComboBox/ComboboxList.d.ts +6 -6
- package/build/esm/ComboBox/ComboboxList.js +15 -17
- package/build/esm/ComboBox/ComboboxList.js.map +1 -1
- package/build/esm/ComboBox/ComboboxOption.d.ts +7 -7
- package/build/esm/ComboBox/ComboboxOption.js +31 -34
- package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
- package/build/esm/ComboBox/ComboboxPopover.d.ts +8 -8
- package/build/esm/ComboBox/ComboboxPopover.js +15 -17
- package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
- package/build/esm/ComboBox/context.d.ts +13 -13
- package/build/esm/ComboBox/context.js +6 -5
- package/build/esm/ComboBox/context.js.map +1 -1
- package/build/esm/ComboBox/hooks.d.ts +4 -4
- package/build/esm/ComboBox/hooks.js +82 -115
- package/build/esm/ComboBox/hooks.js.map +1 -1
- package/build/esm/ComboBox/makeHash.js +3 -3
- package/build/esm/ComboBox/makeHash.js.map +1 -1
- package/build/esm/FocusLock/FocusLock.d.ts +7 -7
- package/build/esm/FocusLock/FocusLock.js +17 -16
- package/build/esm/FocusLock/FocusLock.js.map +1 -1
- package/build/esm/FocusLock/tabUtils.js +4 -4
- package/build/esm/FocusLock/tabUtils.js.map +1 -1
- package/build/esm/FocusLock/useFocusLock.d.ts +4 -4
- package/build/esm/FocusLock/useFocusLock.js +10 -11
- package/build/esm/FocusLock/useFocusLock.js.map +1 -1
- package/build/esm/List/List.d.ts +6 -6
- package/build/esm/List/List.js +5 -6
- package/build/esm/List/List.js.map +1 -1
- package/build/esm/List/ListItem.d.ts +6 -6
- package/build/esm/List/ListItem.js +5 -6
- package/build/esm/List/ListItem.js.map +1 -1
- package/build/esm/List/context.js +3 -3
- package/build/esm/List/context.js.map +1 -1
- package/build/esm/Menu/Menu.d.ts +6 -6
- package/build/esm/Menu/Menu.js +29 -21
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/MenuButton.d.ts +10 -10
- package/build/esm/Menu/MenuButton.js +27 -24
- package/build/esm/Menu/MenuButton.js.map +1 -1
- package/build/esm/Menu/MenuItem.d.ts +6 -6
- package/build/esm/Menu/MenuItem.js +23 -24
- package/build/esm/Menu/MenuItem.js.map +1 -1
- package/build/esm/Menu/MenuList.d.ts +5 -5
- package/build/esm/Menu/MenuList.js +61 -45
- package/build/esm/Menu/MenuList.js.map +1 -1
- package/build/esm/Menu/MenuPopover.d.ts +6 -6
- package/build/esm/Menu/MenuPopover.js +8 -10
- package/build/esm/Menu/MenuPopover.js.map +1 -1
- package/build/esm/Menu/context.d.ts +2 -2
- package/build/esm/Menu/context.js +11 -8
- package/build/esm/Menu/context.js.map +1 -1
- package/build/esm/Modal/Modal.d.ts +6 -7
- package/build/esm/Modal/Modal.js +11 -10
- package/build/esm/Modal/Modal.js.map +1 -1
- package/build/esm/Modal/ModalBackdrop.d.ts +6 -6
- package/build/esm/Modal/ModalBackdrop.js +20 -19
- package/build/esm/Modal/ModalBackdrop.js.map +1 -1
- package/build/esm/Popper/Popper.d.ts +8 -8
- package/build/esm/Popper/Popper.js +46 -37
- package/build/esm/Popper/Popper.js.map +1 -1
- package/build/esm/Popper/PopperArrow.d.ts +5 -5
- package/build/esm/Popper/PopperArrow.js +8 -9
- package/build/esm/Popper/PopperArrow.js.map +1 -1
- package/build/esm/Popper/context.d.ts +1 -1
- package/build/esm/Popper/context.js +5 -3
- package/build/esm/Popper/context.js.map +1 -1
- package/build/esm/Portal/Portal.d.ts +1 -1
- package/build/esm/Portal/Portal.js +6 -5
- package/build/esm/Portal/Portal.js.map +1 -1
- package/build/esm/RadioButton/RadioButton.d.ts +7 -7
- package/build/esm/RadioButton/RadioButton.js +12 -13
- package/build/esm/RadioButton/RadioButton.js.map +1 -1
- package/build/esm/RadioButton/RadioGroup.d.ts +8 -8
- package/build/esm/RadioButton/RadioGroup.js +22 -16
- package/build/esm/RadioButton/RadioGroup.js.map +1 -1
- package/build/esm/RadioButton/context.d.ts +2 -2
- package/build/esm/RadioButton/context.js +6 -5
- package/build/esm/RadioButton/context.js.map +1 -1
- package/build/esm/SkipNav/SkipNav.d.ts +6 -6
- package/build/esm/SkipNav/SkipNav.js +5 -6
- package/build/esm/SkipNav/SkipNav.js.map +1 -1
- package/build/esm/Spinner/Spinner.d.ts +7 -7
- package/build/esm/Spinner/Spinner.js +41 -31
- package/build/esm/Spinner/Spinner.js.map +1 -1
- package/build/esm/Spinner/SpinnerButton.d.ts +6 -6
- package/build/esm/Spinner/SpinnerButton.js +11 -12
- package/build/esm/Spinner/SpinnerButton.js.map +1 -1
- package/build/esm/Spinner/context.d.ts +2 -2
- package/build/esm/Spinner/context.js +6 -5
- package/build/esm/Spinner/context.js.map +1 -1
- package/build/esm/Tabs/Tab.d.ts +6 -6
- package/build/esm/Tabs/Tab.js +29 -29
- package/build/esm/Tabs/Tab.js.map +1 -1
- package/build/esm/Tabs/TabList.d.ts +6 -6
- package/build/esm/Tabs/TabList.js +24 -21
- package/build/esm/Tabs/TabList.js.map +1 -1
- package/build/esm/Tabs/TabPanel.d.ts +6 -6
- package/build/esm/Tabs/TabPanel.js +12 -12
- package/build/esm/Tabs/TabPanel.js.map +1 -1
- package/build/esm/Tabs/TabPanels.d.ts +5 -5
- package/build/esm/Tabs/TabPanels.js +13 -12
- package/build/esm/Tabs/TabPanels.js.map +1 -1
- package/build/esm/Tabs/Tabs.d.ts +6 -6
- package/build/esm/Tabs/Tabs.js +27 -14
- package/build/esm/Tabs/Tabs.js.map +1 -1
- package/build/esm/Tabs/context.d.ts +3 -3
- package/build/esm/Tabs/context.js +12 -10
- package/build/esm/Tabs/context.js.map +1 -1
- package/build/esm/Tooltip/Tooltip.d.ts +7 -7
- package/build/esm/Tooltip/Tooltip.js +18 -16
- package/build/esm/Tooltip/Tooltip.js.map +1 -1
- package/build/esm/Tooltip/stateMachine.js +56 -80
- package/build/esm/Tooltip/stateMachine.js.map +1 -1
- package/build/esm/Tooltip/useTooltip.d.ts +7 -7
- package/build/esm/Tooltip/useTooltip.js +32 -30
- package/build/esm/Tooltip/useTooltip.js.map +1 -1
- package/build/esm/hooks/useAutoFocus.d.ts +2 -2
- package/build/esm/hooks/useAutoFocus.js +1 -1
- package/build/esm/hooks/useAutoFocus.js.map +1 -1
- package/build/esm/hooks/useChildrenCounter.d.ts +1 -1
- package/build/esm/hooks/useChildrenCounter.js +6 -4
- package/build/esm/hooks/useChildrenCounter.js.map +1 -1
- package/build/esm/hooks/useControlledState.d.ts +3 -7
- package/build/esm/hooks/useControlledState.js +7 -2
- package/build/esm/hooks/useControlledState.js.map +1 -1
- package/build/esm/hooks/useFocusReturn.d.ts +1 -1
- package/build/esm/hooks/useFocusReturn.js +6 -6
- package/build/esm/hooks/useFocusReturn.js.map +1 -1
- package/build/esm/hooks/useFocusState.d.ts +3 -3
- package/build/esm/hooks/useFocusState.js +13 -9
- package/build/esm/hooks/useFocusState.js.map +1 -1
- package/build/esm/hooks/useGestureHandlers.d.ts +5 -5
- package/build/esm/hooks/useGestureHandlers.js +59 -63
- package/build/esm/hooks/useGestureHandlers.js.map +1 -1
- package/build/esm/hooks/useMeasure.d.ts +2 -2
- package/build/esm/hooks/useMeasure.js +13 -7
- package/build/esm/hooks/useMeasure.js.map +1 -1
- package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
- package/build/esm/hooks/useOnClickOutside.js +5 -4
- package/build/esm/hooks/useOnClickOutside.js.map +1 -1
- package/build/esm/hooks/useOnKeyDown.js +4 -3
- package/build/esm/hooks/useOnKeyDown.js.map +1 -1
- package/build/esm/hooks/useReducerMachine.d.ts +1 -1
- package/build/esm/hooks/useReducerMachine.js +13 -10
- package/build/esm/hooks/useReducerMachine.js.map +1 -1
- package/build/esm/hooks/useRemoveBodyScroll.js +4 -4
- package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
- package/build/esm/hooks/useScope.d.ts +1 -1
- package/build/esm/hooks/useScope.js +10 -12
- package/build/esm/hooks/useScope.js.map +1 -1
- package/build/esm/hooks/useThrottle.js +10 -5
- package/build/esm/hooks/useThrottle.js.map +1 -1
- package/build/esm/utils/assignRef.d.ts +1 -1
- package/build/esm/utils/assignRef.js +7 -3
- package/build/esm/utils/assignRef.js.map +1 -1
- package/build/esm/utils/createSubscription.js +7 -5
- package/build/esm/utils/createSubscription.js.map +1 -1
- package/build/esm/utils/rubberBandClamp.js +5 -2
- package/build/esm/utils/rubberBandClamp.js.map +1 -1
- package/build/esm/utils/wrapEvent.d.ts +3 -3
- package/build/esm/utils/wrapEvent.js +7 -3
- package/build/esm/utils/wrapEvent.js.map +1 -1
- package/build/tsconfig-build.tsbuildinfo +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/Accordion/Accordion.story.tsx +1 -0
- package/src/Accordion/Accordion.tsx +15 -7
- package/src/Accordion/AccordionBody.tsx +7 -8
- package/src/Accordion/AccordionHeader.tsx +35 -33
- package/src/Accordion/AccordionItem.tsx +15 -7
- package/src/Accordion/context.ts +5 -3
- package/src/CheckBox/CheckBox.tsx +6 -6
- package/src/ComboBox/ComboBox.story.tsx +5 -5
- package/src/ComboBox/Combobox.tsx +12 -17
- package/src/ComboBox/ComboboxButton.tsx +16 -15
- package/src/ComboBox/ComboboxInput.tsx +19 -10
- package/src/ComboBox/ComboboxLabel.tsx +5 -4
- package/src/ComboBox/ComboboxList.tsx +6 -6
- package/src/ComboBox/ComboboxOption.tsx +11 -7
- package/src/ComboBox/ComboboxPopover.tsx +14 -8
- package/src/ComboBox/context.ts +14 -12
- package/src/ComboBox/hooks.tsx +9 -11
- package/src/FocusLock/FocusLock.tsx +14 -7
- package/src/FocusLock/useFocusLock.ts +5 -3
- package/src/List/List.tsx +5 -5
- package/src/List/ListItem.tsx +5 -5
- package/src/Menu/Menu.story.tsx +7 -6
- package/src/Menu/Menu.tsx +16 -8
- package/src/Menu/MenuButton.tsx +15 -16
- package/src/Menu/MenuItem.tsx +15 -10
- package/src/Menu/MenuList.tsx +8 -12
- package/src/Menu/MenuPopover.tsx +7 -5
- package/src/Menu/context.ts +10 -4
- package/src/Modal/Modal.story.tsx +1 -0
- package/src/Modal/Modal.tsx +12 -6
- package/src/Modal/ModalBackdrop.tsx +15 -9
- package/src/Modal/NavDrawer.story.tsx +3 -3
- package/src/Popper/Popper.story.tsx +3 -4
- package/src/Popper/Popper.tsx +13 -12
- package/src/Popper/PopperArrow.tsx +5 -4
- package/src/Popper/context.ts +2 -1
- package/src/Portal/Portal.tsx +1 -1
- package/src/RadioButton/RadioButton.story.tsx +1 -0
- package/src/RadioButton/RadioButton.tsx +14 -7
- package/src/RadioButton/RadioGroup.tsx +14 -10
- package/src/RadioButton/context.ts +2 -4
- package/src/SkipNav/SkipNav.tsx +5 -5
- package/src/Spinner/Spinner.story.tsx +1 -0
- package/src/Spinner/Spinner.tsx +14 -9
- package/src/Spinner/SpinnerButton.tsx +12 -6
- package/src/Spinner/context.ts +2 -3
- package/src/Tabs/Tab.story.tsx +1 -0
- package/src/Tabs/Tab.tsx +16 -11
- package/src/Tabs/TabList.tsx +6 -5
- package/src/Tabs/TabPanel.tsx +6 -5
- package/src/Tabs/TabPanels.tsx +4 -4
- package/src/Tabs/Tabs.tsx +6 -7
- package/src/Tabs/context.ts +4 -4
- package/src/Tooltip/Tooltip.story.tsx +3 -2
- package/src/Tooltip/Tooltip.tsx +11 -9
- package/src/Tooltip/stateMachine.ts +1 -1
- package/src/Tooltip/useTooltip.ts +19 -10
- package/src/hooks/useAutoFocus.ts +3 -1
- package/src/hooks/useChildrenCounter.ts +2 -1
- package/src/hooks/useControlledState.ts +7 -8
- package/src/hooks/useFocusReturn.ts +2 -1
- package/src/hooks/useFocusState.ts +4 -2
- package/src/hooks/useGestureHandlers.ts +11 -7
- package/src/hooks/useMeasure.ts +2 -1
- package/src/hooks/useOnClickOutside.ts +2 -2
- package/src/hooks/useReducerMachine.ts +2 -1
- package/src/hooks/useScope.ts +2 -1
- package/src/utils/assignRef.ts +1 -1
- package/src/utils/wrapEvent.ts +4 -5
|
@@ -1,14 +1,21 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
HTMLAttributes,
|
|
3
|
+
ElementType,
|
|
4
|
+
ReactNode,
|
|
5
|
+
MouseEvent,
|
|
6
|
+
KeyboardEvent,
|
|
7
|
+
FocusEvent,
|
|
8
|
+
} from 'react';
|
|
1
9
|
import { forwardRef, useRef, useState, useEffect } from 'react';
|
|
2
|
-
|
|
10
|
+
|
|
3
11
|
import { wrapEvent, assignMultipleRefs, getCircularIndex } from '../utils';
|
|
4
12
|
import { useAccordionContext, useAccordionItemContext } from './context';
|
|
5
13
|
import { headerScopeQuery as scopeQuery } from './scopeQuery';
|
|
6
14
|
|
|
7
|
-
export interface AccordionHeaderProps
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
children?: React.ReactNode;
|
|
15
|
+
export interface AccordionHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
16
|
+
as?: ElementType<any>;
|
|
17
|
+
innerAs?: ElementType<any>;
|
|
18
|
+
children?: ReactNode;
|
|
12
19
|
}
|
|
13
20
|
|
|
14
21
|
export const AccordionHeader = forwardRef<HTMLDivElement, AccordionHeaderProps>(
|
|
@@ -40,33 +47,30 @@ export const AccordionHeader = forwardRef<HTMLDivElement, AccordionHeaderProps>(
|
|
|
40
47
|
}
|
|
41
48
|
}, [accordionContext]);
|
|
42
49
|
|
|
43
|
-
const onClick = wrapEvent(
|
|
44
|
-
|
|
45
|
-
(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const allHeaders =
|
|
51
|
-
accordionContext.scope.current.queryAllNodes(scopeQuery) || [];
|
|
50
|
+
const onClick = wrapEvent(onClickProp, (e: MouseEvent<HTMLDivElement>) => {
|
|
51
|
+
let index = 0;
|
|
52
|
+
if (accordionItemContext.expanded) {
|
|
53
|
+
index = -1;
|
|
54
|
+
} else if (accordionContext) {
|
|
55
|
+
const allHeaders =
|
|
56
|
+
accordionContext.scope.current.queryAllNodes(scopeQuery) || [];
|
|
52
57
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
accordionContext.onChange && accordionContext.onChange(e, index);
|
|
58
|
+
index = allHeaders.findIndex((e) => e === ref.current);
|
|
59
|
+
if (index === accordionContext.expandedIndex) {
|
|
60
|
+
index = -1;
|
|
58
61
|
}
|
|
59
|
-
|
|
60
|
-
accordionItemContext.onChange &&
|
|
61
|
-
accordionItemContext.onChange(e, index >= 0);
|
|
62
|
+
accordionContext.onChange && accordionContext.onChange(e, index);
|
|
62
63
|
}
|
|
63
|
-
);
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
accordionItemContext.onChange &&
|
|
66
|
+
accordionItemContext.onChange(e, index >= 0);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {
|
|
66
70
|
switch (e.key) {
|
|
67
71
|
case 'Enter':
|
|
68
72
|
case ' ': {
|
|
69
|
-
onClick(
|
|
73
|
+
onClick(e as unknown as MouseEvent<HTMLDivElement>);
|
|
70
74
|
e.preventDefault();
|
|
71
75
|
break;
|
|
72
76
|
}
|
|
@@ -77,9 +81,8 @@ export const AccordionHeader = forwardRef<HTMLDivElement, AccordionHeaderProps>(
|
|
|
77
81
|
if (!accordionContext) {
|
|
78
82
|
return;
|
|
79
83
|
}
|
|
80
|
-
const allHeaders =
|
|
81
|
-
scopeQuery
|
|
82
|
-
);
|
|
84
|
+
const allHeaders =
|
|
85
|
+
accordionContext.scope.current.queryAllNodes(scopeQuery);
|
|
83
86
|
|
|
84
87
|
e.preventDefault();
|
|
85
88
|
|
|
@@ -124,11 +127,10 @@ export const AccordionHeader = forwardRef<HTMLDivElement, AccordionHeaderProps>(
|
|
|
124
127
|
}
|
|
125
128
|
};
|
|
126
129
|
|
|
127
|
-
const handleBlur = (e:
|
|
130
|
+
const handleBlur = (e: FocusEvent<HTMLDivElement>) => {
|
|
128
131
|
if (accordionContext) {
|
|
129
|
-
const allHeaders =
|
|
130
|
-
scopeQuery
|
|
131
|
-
);
|
|
132
|
+
const allHeaders =
|
|
133
|
+
accordionContext.scope.current.queryAllNodes(scopeQuery);
|
|
132
134
|
const newFocusIsHeader =
|
|
133
135
|
allHeaders.findIndex((header) => header === e.relatedTarget) >= 0;
|
|
134
136
|
|
|
@@ -1,15 +1,23 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
HTMLAttributes,
|
|
3
|
+
ElementType,
|
|
4
|
+
ReactNode,
|
|
5
|
+
KeyboardEvent,
|
|
6
|
+
MouseEvent,
|
|
7
|
+
} from 'react';
|
|
1
8
|
import { Fragment, forwardRef, useId } from 'react';
|
|
2
|
-
|
|
3
|
-
import { AccordionItemContextProps
|
|
9
|
+
|
|
10
|
+
import type { AccordionItemContextProps } from './context';
|
|
11
|
+
import { AccordionItemProvider } from './context';
|
|
4
12
|
|
|
5
13
|
export interface AccordionItemProps
|
|
6
|
-
extends Omit<
|
|
7
|
-
as?:
|
|
8
|
-
innerAs?:
|
|
9
|
-
children?:
|
|
14
|
+
extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
15
|
+
as?: ElementType<any>;
|
|
16
|
+
innerAs?: ElementType<any>;
|
|
17
|
+
children?: ReactNode;
|
|
10
18
|
expanded?: boolean;
|
|
11
19
|
onChange?: (
|
|
12
|
-
e:
|
|
20
|
+
e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>,
|
|
13
21
|
value: boolean
|
|
14
22
|
) => void;
|
|
15
23
|
}
|
package/src/Accordion/context.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { KeyboardEvent, MouseEvent } from 'react';
|
|
1
2
|
import { useContext, createContext } from 'react';
|
|
2
|
-
|
|
3
|
+
|
|
4
|
+
import type { Scope } from '../hooks/useScope';
|
|
3
5
|
|
|
4
6
|
// AccordionGroup Component
|
|
5
7
|
export interface AccordionContextProps {
|
|
@@ -8,7 +10,7 @@ export interface AccordionContextProps {
|
|
|
8
10
|
scope: Scope<HTMLElement>;
|
|
9
11
|
expandedIndex: number;
|
|
10
12
|
onChange?: (
|
|
11
|
-
e:
|
|
13
|
+
e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>,
|
|
12
14
|
index: number
|
|
13
15
|
) => void;
|
|
14
16
|
}
|
|
@@ -23,7 +25,7 @@ export interface AccordionItemContextProps {
|
|
|
23
25
|
bodyId: string | undefined;
|
|
24
26
|
expanded: boolean;
|
|
25
27
|
onChange?: (
|
|
26
|
-
e:
|
|
28
|
+
e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>,
|
|
27
29
|
value: boolean
|
|
28
30
|
) => void;
|
|
29
31
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import type { ElementType, InputHTMLAttributes, ReactNode } from 'react';
|
|
1
2
|
import { forwardRef } from 'react';
|
|
2
|
-
|
|
3
|
+
|
|
3
4
|
import { useControlledState } from '../hooks';
|
|
4
5
|
|
|
5
|
-
export interface CheckBoxProps
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
children?: React.ReactNode;
|
|
6
|
+
export interface CheckBoxProps extends InputHTMLAttributes<HTMLInputElement> {
|
|
7
|
+
as?: ElementType<any>;
|
|
8
|
+
innerAs?: ElementType<any>;
|
|
9
|
+
children?: ReactNode;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const CheckBox = forwardRef<HTMLInputElement, CheckBoxProps>(
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { ChangeEvent } from 'react';
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
|
|
3
4
|
import { ComboboxOption } from './ComboboxOption';
|
|
4
5
|
import { ComboboxList } from './ComboboxList';
|
|
5
6
|
import { ComboboxPopover } from './ComboboxPopover';
|
|
6
7
|
import { ComboboxInput } from './ComboboxInput';
|
|
7
8
|
import { ComboboxLabel } from './ComboboxLabel';
|
|
8
9
|
import { Combobox } from './Combobox';
|
|
9
|
-
import { Popper } from '../Popper';
|
|
10
10
|
import cities from './cities';
|
|
11
11
|
import './styles.css';
|
|
12
12
|
|
|
@@ -32,7 +32,7 @@ export function UncontrolledClientSideExample({ initialValue = '' }) {
|
|
|
32
32
|
const [selected, setSelected] = useState(initialValue);
|
|
33
33
|
const results = useCityMatch(term);
|
|
34
34
|
|
|
35
|
-
const handleChange = (event:
|
|
35
|
+
const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
|
|
36
36
|
setTerm(event.target.value);
|
|
37
37
|
};
|
|
38
38
|
|
|
@@ -73,7 +73,7 @@ export function ControlledClientSideExample({ initialValue = '' }) {
|
|
|
73
73
|
const [selected, setSelected] = useState(initialValue);
|
|
74
74
|
const results = useCityMatch(term);
|
|
75
75
|
|
|
76
|
-
const handleChange = (event:
|
|
76
|
+
const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
|
|
77
77
|
setTerm(event.target.value);
|
|
78
78
|
setSelected('');
|
|
79
79
|
};
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode, ElementType } from 'react';
|
|
1
2
|
import { forwardRef, useRef, useMemo, useId } from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
INIT,
|
|
8
|
-
ActionTypes,
|
|
9
|
-
} from './hooks';
|
|
10
|
-
import { ComboBoxProvider, ComboBoxContextProps } from './context';
|
|
3
|
+
|
|
4
|
+
import type { ActionTypes } from './hooks';
|
|
5
|
+
import { stateChart, comboboxReducer, isVisible, INIT } from './hooks';
|
|
6
|
+
import type { ComboBoxContextProps } from './context';
|
|
7
|
+
import { ComboBoxProvider } from './context';
|
|
11
8
|
import { useReducerMachine } from '../hooks/useReducerMachine';
|
|
12
|
-
import { Scope
|
|
9
|
+
import type { Scope } from '../hooks';
|
|
10
|
+
import { getScope } from '../hooks';
|
|
13
11
|
|
|
14
12
|
export type SelectEventHandler = (
|
|
15
13
|
text: string,
|
|
@@ -17,16 +15,13 @@ export type SelectEventHandler = (
|
|
|
17
15
|
obj: any
|
|
18
16
|
) => void;
|
|
19
17
|
|
|
20
|
-
export type ComboboxProps = Omit<
|
|
21
|
-
React.HTMLAttributes<HTMLDivElement>,
|
|
22
|
-
'onSelect'
|
|
23
|
-
> & {
|
|
18
|
+
export type ComboboxProps = Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> & {
|
|
24
19
|
onSelect?: SelectEventHandler;
|
|
25
20
|
openOnFocus?: boolean;
|
|
26
21
|
selectOnBlur?: boolean;
|
|
27
|
-
children?:
|
|
28
|
-
as?:
|
|
29
|
-
innerAs?:
|
|
22
|
+
children?: ReactNode;
|
|
23
|
+
as?: ElementType<any>;
|
|
24
|
+
innerAs?: ElementType<any>;
|
|
30
25
|
};
|
|
31
26
|
|
|
32
27
|
export const Combobox = forwardRef<HTMLDivElement, ComboboxProps>(
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ButtonHTMLAttributes,
|
|
3
|
+
ElementType,
|
|
4
|
+
KeyboardEventHandler,
|
|
5
|
+
MouseEventHandler,
|
|
6
|
+
ReactNode,
|
|
7
|
+
} from 'react';
|
|
1
8
|
import { forwardRef } from 'react';
|
|
2
|
-
|
|
9
|
+
|
|
3
10
|
import { useComboBoxContext } from './context';
|
|
4
11
|
import { useKeyDown, IDLE, OPEN_WITH_BUTTON, CLOSE_WITH_BUTTON } from './hooks';
|
|
5
12
|
import { wrapEvent } from '../utils/wrapEvent';
|
|
6
13
|
import { assignMultipleRefs } from '../utils/assignRef';
|
|
7
14
|
|
|
8
15
|
export interface ComboboxButtonProps
|
|
9
|
-
extends
|
|
10
|
-
as?:
|
|
11
|
-
innerAs?:
|
|
12
|
-
onClick?:
|
|
13
|
-
onKeyDown?:
|
|
14
|
-
children?:
|
|
16
|
+
extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
17
|
+
as?: ElementType<any>;
|
|
18
|
+
innerAs?: ElementType<any>;
|
|
19
|
+
onClick?: MouseEventHandler<HTMLButtonElement>;
|
|
20
|
+
onKeyDown?: KeyboardEventHandler<HTMLButtonElement>;
|
|
21
|
+
children?: ReactNode;
|
|
15
22
|
}
|
|
16
23
|
|
|
17
24
|
export const ComboboxButton = forwardRef<
|
|
@@ -21,14 +28,8 @@ export const ComboboxButton = forwardRef<
|
|
|
21
28
|
{ as: Comp = 'button', innerAs, onClick, onKeyDown, ...props },
|
|
22
29
|
ref
|
|
23
30
|
) {
|
|
24
|
-
const {
|
|
25
|
-
|
|
26
|
-
data,
|
|
27
|
-
state,
|
|
28
|
-
buttonRef,
|
|
29
|
-
listboxIdRef,
|
|
30
|
-
isVisible,
|
|
31
|
-
} = useComboBoxContext();
|
|
31
|
+
const { transition, data, state, buttonRef, listboxIdRef, isVisible } =
|
|
32
|
+
useComboBoxContext();
|
|
32
33
|
|
|
33
34
|
const handleKeyDown = useKeyDown();
|
|
34
35
|
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ChangeEvent,
|
|
3
|
+
ChangeEventHandler,
|
|
4
|
+
ElementType,
|
|
5
|
+
FocusEventHandler,
|
|
6
|
+
InputHTMLAttributes,
|
|
7
|
+
KeyboardEventHandler,
|
|
8
|
+
MouseEventHandler,
|
|
9
|
+
} from 'react';
|
|
1
10
|
import { forwardRef, useEffect, useRef } from 'react';
|
|
2
|
-
|
|
11
|
+
|
|
3
12
|
import {
|
|
4
13
|
useBlur,
|
|
5
14
|
CLEAR,
|
|
@@ -15,7 +24,7 @@ import { assignMultipleRefs, wrapEvent } from '../utils';
|
|
|
15
24
|
import { useComboBoxContext } from './context';
|
|
16
25
|
|
|
17
26
|
export interface ComboboxInputProps
|
|
18
|
-
extends
|
|
27
|
+
extends InputHTMLAttributes<HTMLInputElement> {
|
|
19
28
|
// clear on ESC
|
|
20
29
|
clearOnEscape?: boolean;
|
|
21
30
|
// highlights all the text in the box on click when true
|
|
@@ -26,13 +35,13 @@ export interface ComboboxInputProps
|
|
|
26
35
|
defaultValue?: string;
|
|
27
36
|
// value for controlled mode
|
|
28
37
|
value?: string;
|
|
29
|
-
onClick?:
|
|
30
|
-
onChange?:
|
|
31
|
-
onKeyDown?:
|
|
32
|
-
onBlur?:
|
|
33
|
-
onFocus?:
|
|
34
|
-
as?:
|
|
35
|
-
innerAs?:
|
|
38
|
+
onClick?: MouseEventHandler<HTMLInputElement>;
|
|
39
|
+
onChange?: ChangeEventHandler<HTMLInputElement>;
|
|
40
|
+
onKeyDown?: KeyboardEventHandler<HTMLInputElement>;
|
|
41
|
+
onBlur?: FocusEventHandler<HTMLInputElement>;
|
|
42
|
+
onFocus?: FocusEventHandler<HTMLInputElement>;
|
|
43
|
+
as?: ElementType<any>;
|
|
44
|
+
innerAs?: ElementType<any>;
|
|
36
45
|
id?: string;
|
|
37
46
|
}
|
|
38
47
|
|
|
@@ -95,7 +104,7 @@ export const ComboboxInput = forwardRef<HTMLInputElement, ComboboxInputProps>(
|
|
|
95
104
|
// [*]... and when controlled, we don't trigger handleValueChange as the user
|
|
96
105
|
// types, instead the developer controls it with the normal input onChange
|
|
97
106
|
// prop
|
|
98
|
-
const handleChange = (e:
|
|
107
|
+
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
|
|
99
108
|
// After the user started typing, lets forget the defaultValue
|
|
100
109
|
hasStartedInteracting.current = true;
|
|
101
110
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import type { ElementType, LabelHTMLAttributes } from 'react';
|
|
1
2
|
import { forwardRef } from 'react';
|
|
2
|
-
|
|
3
|
+
|
|
3
4
|
import { useComboBoxContext } from './context';
|
|
4
5
|
|
|
5
6
|
export interface ComboboxLabelProps
|
|
6
|
-
extends
|
|
7
|
-
as?:
|
|
8
|
-
innerAs?:
|
|
7
|
+
extends LabelHTMLAttributes<HTMLLabelElement> {
|
|
8
|
+
as?: ElementType<any>;
|
|
9
|
+
innerAs?: ElementType<any>;
|
|
9
10
|
id?: string;
|
|
10
11
|
}
|
|
11
12
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import type { HTMLAttributes, ElementType, ReactNode } from 'react';
|
|
1
2
|
import { forwardRef, useRef, useEffect } from 'react';
|
|
2
|
-
|
|
3
|
+
|
|
3
4
|
import { useComboBoxContext } from './context';
|
|
4
5
|
import { getScope } from '../hooks';
|
|
5
6
|
import { assignMultipleRefs } from '../utils';
|
|
6
7
|
|
|
7
|
-
export interface ComboboxListProps
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
innerAs?: React.ElementType<any>;
|
|
8
|
+
export interface ComboboxListProps extends HTMLAttributes<HTMLUListElement> {
|
|
9
|
+
as?: ElementType<any>;
|
|
10
|
+
innerAs?: ElementType<any>;
|
|
11
11
|
persistSelection?: boolean;
|
|
12
|
-
children?:
|
|
12
|
+
children?: ReactNode;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export const ComboboxList = forwardRef<HTMLUListElement, ComboboxListProps>(
|
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
2
|
+
import type {
|
|
3
|
+
ElementType,
|
|
4
|
+
LiHTMLAttributes,
|
|
5
|
+
MouseEventHandler,
|
|
6
|
+
ReactNode,
|
|
7
|
+
} from 'react';
|
|
2
8
|
import { forwardRef, useEffect, useRef } from 'react';
|
|
3
9
|
|
|
4
|
-
import type * as React from 'react';
|
|
5
10
|
import { SELECT_WITH_CLICK, CLEAR_SELECTION } from './hooks';
|
|
6
11
|
import { wrapEvent } from '../utils/wrapEvent';
|
|
7
12
|
import { useComboBoxContext } from './context';
|
|
8
13
|
import { makeHash } from './makeHash';
|
|
9
14
|
|
|
10
|
-
export interface ComboboxOptionProps
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
innerAs?: React.ElementType<any>;
|
|
15
|
+
export interface ComboboxOptionProps extends LiHTMLAttributes<HTMLLIElement> {
|
|
16
|
+
as?: ElementType<any>;
|
|
17
|
+
innerAs?: ElementType<any>;
|
|
14
18
|
id: string;
|
|
15
19
|
value: any;
|
|
16
20
|
text?: string;
|
|
17
|
-
onClick?:
|
|
18
|
-
children?:
|
|
21
|
+
onClick?: MouseEventHandler<HTMLLIElement>;
|
|
22
|
+
children?: ReactNode;
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
export const ComboboxOption = forwardRef<HTMLLIElement, ComboboxOptionProps>(
|
|
@@ -1,17 +1,23 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ElementType,
|
|
3
|
+
FocusEventHandler,
|
|
4
|
+
HTMLAttributes,
|
|
5
|
+
KeyboardEventHandler,
|
|
6
|
+
ReactNode,
|
|
7
|
+
} from 'react';
|
|
1
8
|
import { forwardRef } from 'react';
|
|
2
|
-
|
|
9
|
+
|
|
3
10
|
import { useKeyDown, useBlur } from './hooks';
|
|
4
11
|
import { wrapEvent } from '../utils/wrapEvent';
|
|
5
12
|
import { assignMultipleRefs } from '../utils/assignRef';
|
|
6
13
|
import { useComboBoxContext } from './context';
|
|
7
14
|
|
|
8
|
-
export interface ComboboxPopoverProps
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
children?: React.ReactNode;
|
|
15
|
+
export interface ComboboxPopoverProps extends HTMLAttributes<HTMLDivElement> {
|
|
16
|
+
as?: ElementType<any>;
|
|
17
|
+
innerAs?: ElementType<any>;
|
|
18
|
+
onBlur?: FocusEventHandler<HTMLDivElement>;
|
|
19
|
+
onKeyDown?: KeyboardEventHandler<HTMLDivElement>;
|
|
20
|
+
children?: ReactNode;
|
|
15
21
|
}
|
|
16
22
|
|
|
17
23
|
export const ComboboxPopover = forwardRef<HTMLDivElement, ComboboxPopoverProps>(
|
package/src/ComboBox/context.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
1
2
|
import { createContext, useContext } from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
|
|
4
|
+
import type { ActionTypes, StateTypes, ReducerState } from './hooks';
|
|
5
|
+
import type { SelectEventHandler } from './Combobox';
|
|
6
|
+
import type { Scope } from '../hooks';
|
|
5
7
|
|
|
6
8
|
export interface ComboBoxContextProps {
|
|
7
9
|
data: Omit<ReducerState, 'state'>;
|
|
8
|
-
inputRef:
|
|
9
|
-
popoverRef:
|
|
10
|
-
buttonRef:
|
|
10
|
+
inputRef: MutableRefObject<HTMLInputElement | null>;
|
|
11
|
+
popoverRef: MutableRefObject<HTMLDivElement | null>;
|
|
12
|
+
buttonRef: MutableRefObject<HTMLButtonElement | null>;
|
|
11
13
|
onSelect?: SelectEventHandler;
|
|
12
|
-
optionsRef:
|
|
14
|
+
optionsRef: MutableRefObject<{
|
|
13
15
|
[itemId: string]: {
|
|
14
16
|
value: string | unknown;
|
|
15
17
|
text: string;
|
|
@@ -18,11 +20,11 @@ export interface ComboBoxContextProps {
|
|
|
18
20
|
listScope: Scope<HTMLElement>;
|
|
19
21
|
state: StateTypes;
|
|
20
22
|
transition: (action: ActionTypes, payload?: any) => void;
|
|
21
|
-
listboxIdRef:
|
|
22
|
-
labelIdRef:
|
|
23
|
-
autocompletePropRef:
|
|
24
|
-
persistSelectionRef:
|
|
25
|
-
clearOnEscapeRef:
|
|
23
|
+
listboxIdRef: MutableRefObject<string | undefined>;
|
|
24
|
+
labelIdRef: MutableRefObject<string | undefined>;
|
|
25
|
+
autocompletePropRef: MutableRefObject<boolean>;
|
|
26
|
+
persistSelectionRef: MutableRefObject<boolean>;
|
|
27
|
+
clearOnEscapeRef: MutableRefObject<boolean>;
|
|
26
28
|
isVisible: boolean;
|
|
27
29
|
openOnFocus: boolean;
|
|
28
30
|
selectOnBlur: boolean;
|
package/src/ComboBox/hooks.tsx
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
2
2
|
/* eslint-disable default-case */
|
|
3
|
+
import type { KeyboardEvent, MutableRefObject } from 'react';
|
|
3
4
|
import { useEffect } from 'react';
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
import type {
|
|
5
7
|
StateChart as GenericStateChart,
|
|
6
8
|
StateMachineState,
|
|
7
9
|
} from '../hooks/useReducerMachine';
|
|
@@ -220,7 +222,7 @@ export const isVisible = (state: any) => visibleStates.indexOf(state) >= 0;
|
|
|
220
222
|
// the popup.
|
|
221
223
|
export function useFocusManagement(
|
|
222
224
|
lastActionType: ActionTypes,
|
|
223
|
-
inputRef:
|
|
225
|
+
inputRef: MutableRefObject<HTMLInputElement | null>
|
|
224
226
|
) {
|
|
225
227
|
// useEffect so that the cursor goes to the end of the input instead
|
|
226
228
|
// of awkwardly at the beginning, unclear to me why ...
|
|
@@ -288,7 +290,7 @@ export function useKeyDown() {
|
|
|
288
290
|
listScope,
|
|
289
291
|
} = useComboBoxContext();
|
|
290
292
|
|
|
291
|
-
return function handleKeyDown(event:
|
|
293
|
+
return function handleKeyDown(event: KeyboardEvent<any>) {
|
|
292
294
|
const optionNodes = listScope.current.queryAllNodes(scopeQuery);
|
|
293
295
|
|
|
294
296
|
switch (event.key) {
|
|
@@ -357,10 +359,8 @@ export function useKeyDown() {
|
|
|
357
359
|
}
|
|
358
360
|
case 'Enter': {
|
|
359
361
|
if (state === NAVIGATING && navigationItem !== '') {
|
|
360
|
-
const {
|
|
361
|
-
|
|
362
|
-
text: navigationText,
|
|
363
|
-
} = optionsRef.current[navigationItem];
|
|
362
|
+
const { value: navigationValue, text: navigationText } =
|
|
363
|
+
optionsRef.current[navigationItem];
|
|
364
364
|
|
|
365
365
|
// don't want to submit forms
|
|
366
366
|
event.preventDefault();
|
|
@@ -408,10 +408,8 @@ export function useBlur() {
|
|
|
408
408
|
transition(BLUR, { text: stateText, item: '' });
|
|
409
409
|
} else {
|
|
410
410
|
// select the currently selected item
|
|
411
|
-
const {
|
|
412
|
-
|
|
413
|
-
text: navigationText,
|
|
414
|
-
} = optionsRef.current[navigationItem];
|
|
411
|
+
const { value: navigationValue, text: navigationText } =
|
|
412
|
+
optionsRef.current[navigationItem];
|
|
415
413
|
|
|
416
414
|
onSelect &&
|
|
417
415
|
onSelect(navigationText, navigationItem, navigationValue);
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ElementType,
|
|
3
|
+
FC,
|
|
4
|
+
HTMLAttributes,
|
|
5
|
+
MutableRefObject,
|
|
6
|
+
ReactNode,
|
|
7
|
+
} from 'react';
|
|
1
8
|
import { useRef } from 'react';
|
|
2
|
-
|
|
9
|
+
|
|
3
10
|
import { useFocusLock } from './useFocusLock';
|
|
4
11
|
|
|
5
|
-
export interface FocusLockProps extends
|
|
6
|
-
as?:
|
|
7
|
-
innerAs?:
|
|
8
|
-
children?:
|
|
9
|
-
childRef:
|
|
12
|
+
export interface FocusLockProps extends HTMLAttributes<HTMLDivElement> {
|
|
13
|
+
as?: ElementType<any>;
|
|
14
|
+
innerAs?: ElementType<any>;
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
childRef: MutableRefObject<HTMLElement | null>;
|
|
10
17
|
enabled?: boolean;
|
|
11
18
|
}
|
|
12
19
|
|
|
13
|
-
export const FocusLock:
|
|
20
|
+
export const FocusLock: FC<FocusLockProps> = function FocusLock(props) {
|
|
14
21
|
const {
|
|
15
22
|
as: Comp = 'div',
|
|
16
23
|
childRef,
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
1
2
|
import { useEffect } from 'react';
|
|
3
|
+
|
|
2
4
|
import { focusOnChildNode } from './tabUtils';
|
|
3
5
|
|
|
4
6
|
export interface FocusLockOptions {
|
|
5
7
|
enabled: boolean;
|
|
6
|
-
lockStartRef:
|
|
7
|
-
lockEndRef:
|
|
8
|
+
lockStartRef: MutableRefObject<HTMLElement | null>;
|
|
9
|
+
lockEndRef: MutableRefObject<HTMLElement | null>;
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
const focusLockStack: HTMLElement[] = [];
|
|
11
13
|
export function useFocusLock(
|
|
12
|
-
ref:
|
|
14
|
+
ref: MutableRefObject<HTMLElement | null>,
|
|
13
15
|
opts: FocusLockOptions
|
|
14
16
|
) {
|
|
15
17
|
const { enabled = true, lockStartRef, lockEndRef } = opts;
|
package/src/List/List.tsx
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes, ReactNode } from 'react';
|
|
1
2
|
import { forwardRef } from 'react';
|
|
2
|
-
import type * as React from 'react';
|
|
3
3
|
|
|
4
|
-
export interface ListProps extends
|
|
5
|
-
as?:
|
|
6
|
-
innerAs?:
|
|
7
|
-
children?:
|
|
4
|
+
export interface ListProps extends HTMLAttributes<HTMLUListElement> {
|
|
5
|
+
as?: ElementType<any>;
|
|
6
|
+
innerAs?: ElementType<any>;
|
|
7
|
+
children?: ReactNode;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export const List = forwardRef<HTMLUListElement, ListProps>(function List(
|
package/src/List/ListItem.tsx
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes, ReactNode } from 'react';
|
|
1
2
|
import { forwardRef } from 'react';
|
|
2
|
-
import type * as React from 'react';
|
|
3
3
|
|
|
4
|
-
export interface ListItemProps extends
|
|
5
|
-
as?:
|
|
6
|
-
innerAs?:
|
|
7
|
-
children?:
|
|
4
|
+
export interface ListItemProps extends HTMLAttributes<HTMLLIElement> {
|
|
5
|
+
as?: ElementType<any>;
|
|
6
|
+
innerAs?: ElementType<any>;
|
|
7
|
+
children?: ReactNode;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export const ListItem = forwardRef<HTMLLIElement, ListItemProps>(
|