@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.
Files changed (266) hide show
  1. package/build/cjs/index.js +1 -1
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Accordion/Accordion.d.ts +7 -7
  4. package/build/esm/Accordion/Accordion.js +22 -17
  5. package/build/esm/Accordion/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/AccordionBody.d.ts +5 -5
  7. package/build/esm/Accordion/AccordionBody.js +23 -15
  8. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  9. package/build/esm/Accordion/AccordionHeader.d.ts +6 -6
  10. package/build/esm/Accordion/AccordionHeader.js +45 -31
  11. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  12. package/build/esm/Accordion/AccordionItem.d.ts +7 -7
  13. package/build/esm/Accordion/AccordionItem.js +16 -16
  14. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  15. package/build/esm/Accordion/context.d.ts +4 -4
  16. package/build/esm/Accordion/context.js +12 -10
  17. package/build/esm/Accordion/context.js.map +1 -1
  18. package/build/esm/CheckBox/CheckBox.d.ts +6 -6
  19. package/build/esm/CheckBox/CheckBox.js +19 -12
  20. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  21. package/build/esm/ComboBox/Combobox.d.ts +10 -10
  22. package/build/esm/ComboBox/Combobox.js +52 -46
  23. package/build/esm/ComboBox/Combobox.js.map +1 -1
  24. package/build/esm/ComboBox/ComboboxButton.d.ts +8 -8
  25. package/build/esm/ComboBox/ComboboxButton.js +19 -20
  26. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  27. package/build/esm/ComboBox/ComboboxInput.d.ts +10 -10
  28. package/build/esm/ComboBox/ComboboxInput.js +52 -50
  29. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  30. package/build/esm/ComboBox/ComboboxLabel.d.ts +5 -5
  31. package/build/esm/ComboBox/ComboboxLabel.js +11 -12
  32. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  33. package/build/esm/ComboBox/ComboboxList.d.ts +6 -6
  34. package/build/esm/ComboBox/ComboboxList.js +15 -17
  35. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  36. package/build/esm/ComboBox/ComboboxOption.d.ts +7 -7
  37. package/build/esm/ComboBox/ComboboxOption.js +31 -34
  38. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  39. package/build/esm/ComboBox/ComboboxPopover.d.ts +8 -8
  40. package/build/esm/ComboBox/ComboboxPopover.js +15 -17
  41. package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
  42. package/build/esm/ComboBox/context.d.ts +13 -13
  43. package/build/esm/ComboBox/context.js +6 -5
  44. package/build/esm/ComboBox/context.js.map +1 -1
  45. package/build/esm/ComboBox/hooks.d.ts +4 -4
  46. package/build/esm/ComboBox/hooks.js +82 -115
  47. package/build/esm/ComboBox/hooks.js.map +1 -1
  48. package/build/esm/ComboBox/makeHash.js +3 -3
  49. package/build/esm/ComboBox/makeHash.js.map +1 -1
  50. package/build/esm/FocusLock/FocusLock.d.ts +7 -7
  51. package/build/esm/FocusLock/FocusLock.js +17 -16
  52. package/build/esm/FocusLock/FocusLock.js.map +1 -1
  53. package/build/esm/FocusLock/tabUtils.js +4 -4
  54. package/build/esm/FocusLock/tabUtils.js.map +1 -1
  55. package/build/esm/FocusLock/useFocusLock.d.ts +4 -4
  56. package/build/esm/FocusLock/useFocusLock.js +10 -11
  57. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  58. package/build/esm/List/List.d.ts +6 -6
  59. package/build/esm/List/List.js +5 -6
  60. package/build/esm/List/List.js.map +1 -1
  61. package/build/esm/List/ListItem.d.ts +6 -6
  62. package/build/esm/List/ListItem.js +5 -6
  63. package/build/esm/List/ListItem.js.map +1 -1
  64. package/build/esm/List/context.js +3 -3
  65. package/build/esm/List/context.js.map +1 -1
  66. package/build/esm/Menu/Menu.d.ts +6 -6
  67. package/build/esm/Menu/Menu.js +29 -21
  68. package/build/esm/Menu/Menu.js.map +1 -1
  69. package/build/esm/Menu/MenuButton.d.ts +10 -10
  70. package/build/esm/Menu/MenuButton.js +27 -24
  71. package/build/esm/Menu/MenuButton.js.map +1 -1
  72. package/build/esm/Menu/MenuItem.d.ts +6 -6
  73. package/build/esm/Menu/MenuItem.js +23 -24
  74. package/build/esm/Menu/MenuItem.js.map +1 -1
  75. package/build/esm/Menu/MenuList.d.ts +5 -5
  76. package/build/esm/Menu/MenuList.js +61 -45
  77. package/build/esm/Menu/MenuList.js.map +1 -1
  78. package/build/esm/Menu/MenuPopover.d.ts +6 -6
  79. package/build/esm/Menu/MenuPopover.js +8 -10
  80. package/build/esm/Menu/MenuPopover.js.map +1 -1
  81. package/build/esm/Menu/context.d.ts +2 -2
  82. package/build/esm/Menu/context.js +11 -8
  83. package/build/esm/Menu/context.js.map +1 -1
  84. package/build/esm/Modal/Modal.d.ts +6 -7
  85. package/build/esm/Modal/Modal.js +11 -10
  86. package/build/esm/Modal/Modal.js.map +1 -1
  87. package/build/esm/Modal/ModalBackdrop.d.ts +6 -6
  88. package/build/esm/Modal/ModalBackdrop.js +20 -19
  89. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  90. package/build/esm/Popper/Popper.d.ts +8 -8
  91. package/build/esm/Popper/Popper.js +46 -37
  92. package/build/esm/Popper/Popper.js.map +1 -1
  93. package/build/esm/Popper/PopperArrow.d.ts +5 -5
  94. package/build/esm/Popper/PopperArrow.js +8 -9
  95. package/build/esm/Popper/PopperArrow.js.map +1 -1
  96. package/build/esm/Popper/context.d.ts +1 -1
  97. package/build/esm/Popper/context.js +5 -3
  98. package/build/esm/Popper/context.js.map +1 -1
  99. package/build/esm/Portal/Portal.d.ts +1 -1
  100. package/build/esm/Portal/Portal.js +6 -5
  101. package/build/esm/Portal/Portal.js.map +1 -1
  102. package/build/esm/RadioButton/RadioButton.d.ts +7 -7
  103. package/build/esm/RadioButton/RadioButton.js +12 -13
  104. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  105. package/build/esm/RadioButton/RadioGroup.d.ts +8 -8
  106. package/build/esm/RadioButton/RadioGroup.js +22 -16
  107. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  108. package/build/esm/RadioButton/context.d.ts +2 -2
  109. package/build/esm/RadioButton/context.js +6 -5
  110. package/build/esm/RadioButton/context.js.map +1 -1
  111. package/build/esm/SkipNav/SkipNav.d.ts +6 -6
  112. package/build/esm/SkipNav/SkipNav.js +5 -6
  113. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  114. package/build/esm/Spinner/Spinner.d.ts +7 -7
  115. package/build/esm/Spinner/Spinner.js +41 -31
  116. package/build/esm/Spinner/Spinner.js.map +1 -1
  117. package/build/esm/Spinner/SpinnerButton.d.ts +6 -6
  118. package/build/esm/Spinner/SpinnerButton.js +11 -12
  119. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  120. package/build/esm/Spinner/context.d.ts +2 -2
  121. package/build/esm/Spinner/context.js +6 -5
  122. package/build/esm/Spinner/context.js.map +1 -1
  123. package/build/esm/Tabs/Tab.d.ts +6 -6
  124. package/build/esm/Tabs/Tab.js +29 -29
  125. package/build/esm/Tabs/Tab.js.map +1 -1
  126. package/build/esm/Tabs/TabList.d.ts +6 -6
  127. package/build/esm/Tabs/TabList.js +24 -21
  128. package/build/esm/Tabs/TabList.js.map +1 -1
  129. package/build/esm/Tabs/TabPanel.d.ts +6 -6
  130. package/build/esm/Tabs/TabPanel.js +12 -12
  131. package/build/esm/Tabs/TabPanel.js.map +1 -1
  132. package/build/esm/Tabs/TabPanels.d.ts +5 -5
  133. package/build/esm/Tabs/TabPanels.js +13 -12
  134. package/build/esm/Tabs/TabPanels.js.map +1 -1
  135. package/build/esm/Tabs/Tabs.d.ts +6 -6
  136. package/build/esm/Tabs/Tabs.js +27 -14
  137. package/build/esm/Tabs/Tabs.js.map +1 -1
  138. package/build/esm/Tabs/context.d.ts +3 -3
  139. package/build/esm/Tabs/context.js +12 -10
  140. package/build/esm/Tabs/context.js.map +1 -1
  141. package/build/esm/Tooltip/Tooltip.d.ts +7 -7
  142. package/build/esm/Tooltip/Tooltip.js +18 -16
  143. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  144. package/build/esm/Tooltip/stateMachine.js +56 -80
  145. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  146. package/build/esm/Tooltip/useTooltip.d.ts +7 -7
  147. package/build/esm/Tooltip/useTooltip.js +32 -30
  148. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  149. package/build/esm/hooks/useAutoFocus.d.ts +2 -2
  150. package/build/esm/hooks/useAutoFocus.js +1 -1
  151. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  152. package/build/esm/hooks/useChildrenCounter.d.ts +1 -1
  153. package/build/esm/hooks/useChildrenCounter.js +6 -4
  154. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  155. package/build/esm/hooks/useControlledState.d.ts +3 -7
  156. package/build/esm/hooks/useControlledState.js +7 -2
  157. package/build/esm/hooks/useControlledState.js.map +1 -1
  158. package/build/esm/hooks/useFocusReturn.d.ts +1 -1
  159. package/build/esm/hooks/useFocusReturn.js +6 -6
  160. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  161. package/build/esm/hooks/useFocusState.d.ts +3 -3
  162. package/build/esm/hooks/useFocusState.js +13 -9
  163. package/build/esm/hooks/useFocusState.js.map +1 -1
  164. package/build/esm/hooks/useGestureHandlers.d.ts +5 -5
  165. package/build/esm/hooks/useGestureHandlers.js +59 -63
  166. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  167. package/build/esm/hooks/useMeasure.d.ts +2 -2
  168. package/build/esm/hooks/useMeasure.js +13 -7
  169. package/build/esm/hooks/useMeasure.js.map +1 -1
  170. package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
  171. package/build/esm/hooks/useOnClickOutside.js +5 -4
  172. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  173. package/build/esm/hooks/useOnKeyDown.js +4 -3
  174. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  175. package/build/esm/hooks/useReducerMachine.d.ts +1 -1
  176. package/build/esm/hooks/useReducerMachine.js +13 -10
  177. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  178. package/build/esm/hooks/useRemoveBodyScroll.js +4 -4
  179. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  180. package/build/esm/hooks/useScope.d.ts +1 -1
  181. package/build/esm/hooks/useScope.js +10 -12
  182. package/build/esm/hooks/useScope.js.map +1 -1
  183. package/build/esm/hooks/useThrottle.js +10 -5
  184. package/build/esm/hooks/useThrottle.js.map +1 -1
  185. package/build/esm/utils/assignRef.d.ts +1 -1
  186. package/build/esm/utils/assignRef.js +7 -3
  187. package/build/esm/utils/assignRef.js.map +1 -1
  188. package/build/esm/utils/createSubscription.js +7 -5
  189. package/build/esm/utils/createSubscription.js.map +1 -1
  190. package/build/esm/utils/rubberBandClamp.js +5 -2
  191. package/build/esm/utils/rubberBandClamp.js.map +1 -1
  192. package/build/esm/utils/wrapEvent.d.ts +3 -3
  193. package/build/esm/utils/wrapEvent.js +7 -3
  194. package/build/esm/utils/wrapEvent.js.map +1 -1
  195. package/build/tsconfig-build.tsbuildinfo +1 -0
  196. package/build/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +3 -3
  198. package/src/Accordion/Accordion.story.tsx +1 -0
  199. package/src/Accordion/Accordion.tsx +15 -7
  200. package/src/Accordion/AccordionBody.tsx +7 -8
  201. package/src/Accordion/AccordionHeader.tsx +35 -33
  202. package/src/Accordion/AccordionItem.tsx +15 -7
  203. package/src/Accordion/context.ts +5 -3
  204. package/src/CheckBox/CheckBox.tsx +6 -6
  205. package/src/ComboBox/ComboBox.story.tsx +5 -5
  206. package/src/ComboBox/Combobox.tsx +12 -17
  207. package/src/ComboBox/ComboboxButton.tsx +16 -15
  208. package/src/ComboBox/ComboboxInput.tsx +19 -10
  209. package/src/ComboBox/ComboboxLabel.tsx +5 -4
  210. package/src/ComboBox/ComboboxList.tsx +6 -6
  211. package/src/ComboBox/ComboboxOption.tsx +11 -7
  212. package/src/ComboBox/ComboboxPopover.tsx +14 -8
  213. package/src/ComboBox/context.ts +14 -12
  214. package/src/ComboBox/hooks.tsx +9 -11
  215. package/src/FocusLock/FocusLock.tsx +14 -7
  216. package/src/FocusLock/useFocusLock.ts +5 -3
  217. package/src/List/List.tsx +5 -5
  218. package/src/List/ListItem.tsx +5 -5
  219. package/src/Menu/Menu.story.tsx +7 -6
  220. package/src/Menu/Menu.tsx +16 -8
  221. package/src/Menu/MenuButton.tsx +15 -16
  222. package/src/Menu/MenuItem.tsx +15 -10
  223. package/src/Menu/MenuList.tsx +8 -12
  224. package/src/Menu/MenuPopover.tsx +7 -5
  225. package/src/Menu/context.ts +10 -4
  226. package/src/Modal/Modal.story.tsx +1 -0
  227. package/src/Modal/Modal.tsx +12 -6
  228. package/src/Modal/ModalBackdrop.tsx +15 -9
  229. package/src/Modal/NavDrawer.story.tsx +3 -3
  230. package/src/Popper/Popper.story.tsx +3 -4
  231. package/src/Popper/Popper.tsx +13 -12
  232. package/src/Popper/PopperArrow.tsx +5 -4
  233. package/src/Popper/context.ts +2 -1
  234. package/src/Portal/Portal.tsx +1 -1
  235. package/src/RadioButton/RadioButton.story.tsx +1 -0
  236. package/src/RadioButton/RadioButton.tsx +14 -7
  237. package/src/RadioButton/RadioGroup.tsx +14 -10
  238. package/src/RadioButton/context.ts +2 -4
  239. package/src/SkipNav/SkipNav.tsx +5 -5
  240. package/src/Spinner/Spinner.story.tsx +1 -0
  241. package/src/Spinner/Spinner.tsx +14 -9
  242. package/src/Spinner/SpinnerButton.tsx +12 -6
  243. package/src/Spinner/context.ts +2 -3
  244. package/src/Tabs/Tab.story.tsx +1 -0
  245. package/src/Tabs/Tab.tsx +16 -11
  246. package/src/Tabs/TabList.tsx +6 -5
  247. package/src/Tabs/TabPanel.tsx +6 -5
  248. package/src/Tabs/TabPanels.tsx +4 -4
  249. package/src/Tabs/Tabs.tsx +6 -7
  250. package/src/Tabs/context.ts +4 -4
  251. package/src/Tooltip/Tooltip.story.tsx +3 -2
  252. package/src/Tooltip/Tooltip.tsx +11 -9
  253. package/src/Tooltip/stateMachine.ts +1 -1
  254. package/src/Tooltip/useTooltip.ts +19 -10
  255. package/src/hooks/useAutoFocus.ts +3 -1
  256. package/src/hooks/useChildrenCounter.ts +2 -1
  257. package/src/hooks/useControlledState.ts +7 -8
  258. package/src/hooks/useFocusReturn.ts +2 -1
  259. package/src/hooks/useFocusState.ts +4 -2
  260. package/src/hooks/useGestureHandlers.ts +11 -7
  261. package/src/hooks/useMeasure.ts +2 -1
  262. package/src/hooks/useOnClickOutside.ts +2 -2
  263. package/src/hooks/useReducerMachine.ts +2 -1
  264. package/src/hooks/useScope.ts +2 -1
  265. package/src/utils/assignRef.ts +1 -1
  266. 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
- import type * as React from 'react';
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
- extends React.HTMLAttributes<HTMLDivElement> {
9
- as?: React.ElementType<any>;
10
- innerAs?: React.ElementType<any>;
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
- onClickProp,
45
- (e: React.MouseEvent<HTMLDivElement>) => {
46
- let index = 0;
47
- if (accordionItemContext.expanded) {
48
- index = -1;
49
- } else if (accordionContext) {
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
- index = allHeaders.findIndex((e) => e === ref.current);
54
- if (index === accordionContext.expandedIndex) {
55
- index = -1;
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
- const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {
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((e as unknown) as React.MouseEvent<HTMLDivElement>);
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 = accordionContext.scope.current.queryAllNodes(
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: React.FocusEvent<HTMLDivElement>) => {
130
+ const handleBlur = (e: FocusEvent<HTMLDivElement>) => {
128
131
  if (accordionContext) {
129
- const allHeaders = accordionContext.scope.current.queryAllNodes(
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
- import type * as React from 'react';
3
- import { AccordionItemContextProps, AccordionItemProvider } from './context';
9
+
10
+ import type { AccordionItemContextProps } from './context';
11
+ import { AccordionItemProvider } from './context';
4
12
 
5
13
  export interface AccordionItemProps
6
- extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
7
- as?: React.ElementType<any>;
8
- innerAs?: React.ElementType<any>;
9
- children?: React.ReactNode;
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: React.KeyboardEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement>,
20
+ e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>,
13
21
  value: boolean
14
22
  ) => void;
15
23
  }
@@ -1,5 +1,7 @@
1
+ import type { KeyboardEvent, MouseEvent } from 'react';
1
2
  import { useContext, createContext } from 'react';
2
- import { Scope } from '../hooks/useScope';
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: React.KeyboardEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement>,
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: React.KeyboardEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement>,
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
- import type * as React from 'react';
3
+
3
4
  import { useControlledState } from '../hooks';
4
5
 
5
- export interface CheckBoxProps
6
- extends React.InputHTMLAttributes<HTMLInputElement> {
7
- as?: React.ElementType<any>;
8
- innerAs?: React.ElementType<any>;
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 { useMemo, useState, useRef } from 'react';
2
- import type * as React from 'react';
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: React.ChangeEvent<HTMLInputElement>) => {
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: React.ChangeEvent<HTMLInputElement>) => {
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
- import type * as React from 'react';
3
- import {
4
- stateChart,
5
- comboboxReducer,
6
- isVisible,
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, getScope } from '../hooks';
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?: React.ReactNode;
28
- as?: React.ElementType<any>;
29
- innerAs?: React.ElementType<any>;
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
- import type * as React from 'react';
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 React.ButtonHTMLAttributes<HTMLButtonElement> {
10
- as?: React.ElementType<any>;
11
- innerAs?: React.ElementType<any>;
12
- onClick?: React.MouseEventHandler<HTMLButtonElement>;
13
- onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
14
- children?: React.ReactNode;
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
- transition,
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
- import type * as React from 'react';
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 React.InputHTMLAttributes<HTMLInputElement> {
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?: React.MouseEventHandler<HTMLInputElement>;
30
- onChange?: React.ChangeEventHandler<HTMLInputElement>;
31
- onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
32
- onBlur?: React.FocusEventHandler<HTMLInputElement>;
33
- onFocus?: React.FocusEventHandler<HTMLInputElement>;
34
- as?: React.ElementType<any>;
35
- innerAs?: React.ElementType<any>;
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: React.ChangeEvent<HTMLInputElement>) => {
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
- import type * as React from 'react';
3
+
3
4
  import { useComboBoxContext } from './context';
4
5
 
5
6
  export interface ComboboxLabelProps
6
- extends React.LabelHTMLAttributes<HTMLLabelElement> {
7
- as?: React.ElementType<any>;
8
- innerAs?: React.ElementType<any>;
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
- import type * as React from 'react';
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
- extends React.HTMLAttributes<HTMLUListElement> {
9
- as?: React.ElementType<any>;
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?: React.ReactNode;
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
- extends React.LiHTMLAttributes<HTMLLIElement> {
12
- as?: React.ElementType<any>;
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?: React.MouseEventHandler<HTMLLIElement>;
18
- children?: React.ReactNode;
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
- import type * as React from 'react';
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
- extends React.HTMLAttributes<HTMLDivElement> {
10
- as?: React.ElementType<any>;
11
- innerAs?: React.ElementType<any>;
12
- onBlur?: React.FocusEventHandler<HTMLDivElement>;
13
- onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
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>(
@@ -1,15 +1,17 @@
1
+ import type { MutableRefObject } from 'react';
1
2
  import { createContext, useContext } from 'react';
2
- import { ActionTypes, StateTypes, ReducerState } from './hooks';
3
- import { SelectEventHandler } from './Combobox';
4
- import { Scope } from '../hooks';
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: React.MutableRefObject<HTMLInputElement | null>;
9
- popoverRef: React.MutableRefObject<HTMLDivElement | null>;
10
- buttonRef: React.MutableRefObject<HTMLButtonElement | null>;
10
+ inputRef: MutableRefObject<HTMLInputElement | null>;
11
+ popoverRef: MutableRefObject<HTMLDivElement | null>;
12
+ buttonRef: MutableRefObject<HTMLButtonElement | null>;
11
13
  onSelect?: SelectEventHandler;
12
- optionsRef: React.MutableRefObject<{
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: React.MutableRefObject<string | undefined>;
22
- labelIdRef: React.MutableRefObject<string | undefined>;
23
- autocompletePropRef: React.MutableRefObject<boolean>;
24
- persistSelectionRef: React.MutableRefObject<boolean>;
25
- clearOnEscapeRef: React.MutableRefObject<boolean>;
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;
@@ -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
- import {
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: React.MutableRefObject<HTMLInputElement | null>
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: React.KeyboardEvent<any>) {
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
- value: navigationValue,
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
- value: navigationValue,
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
- import type * as React from 'react';
9
+
3
10
  import { useFocusLock } from './useFocusLock';
4
11
 
5
- export interface FocusLockProps extends React.HTMLAttributes<HTMLDivElement> {
6
- as?: React.ElementType<any>;
7
- innerAs?: React.ElementType<any>;
8
- children?: React.ReactNode;
9
- childRef: React.MutableRefObject<HTMLElement | null>;
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: React.FC<FocusLockProps> = function FocusLock(props) {
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: React.MutableRefObject<HTMLElement | null>;
7
- lockEndRef: React.MutableRefObject<HTMLElement | null>;
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: React.MutableRefObject<HTMLElement | null>,
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 React.HTMLAttributes<HTMLUListElement> {
5
- as?: React.ElementType<any>;
6
- innerAs?: React.ElementType<any>;
7
- children?: React.ReactNode;
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(
@@ -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 React.HTMLAttributes<HTMLLIElement> {
5
- as?: React.ElementType<any>;
6
- innerAs?: React.ElementType<any>;
7
- children?: React.ReactNode;
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>(