@basic-ui/core 0.0.51 → 0.0.52

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 (350) hide show
  1. package/README.md +3 -3
  2. package/build/cjs/index.js +88 -88
  3. package/build/cjs/index.js.map +1 -1
  4. package/build/esm/Accordion/Accordion.d.ts +9 -9
  5. package/build/esm/Accordion/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/AccordionBody.d.ts +6 -6
  7. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  8. package/build/esm/Accordion/AccordionHeader.d.ts +7 -7
  9. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  10. package/build/esm/Accordion/AccordionItem.d.ts +9 -9
  11. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  12. package/build/esm/Accordion/context.d.ts +19 -19
  13. package/build/esm/Accordion/context.js.map +1 -1
  14. package/build/esm/Accordion/index.d.ts +4 -4
  15. package/build/esm/Accordion/index.js.map +1 -1
  16. package/build/esm/Accordion/scopeQuery.d.ts +2 -2
  17. package/build/esm/Accordion/scopeQuery.js.map +1 -1
  18. package/build/esm/CheckBox/CheckBox.d.ts +7 -7
  19. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  20. package/build/esm/CheckBox/index.d.ts +1 -1
  21. package/build/esm/CheckBox/index.js.map +1 -1
  22. package/build/esm/ComboBox/Combobox.d.ts +18 -18
  23. package/build/esm/ComboBox/Combobox.js.map +1 -1
  24. package/build/esm/ComboBox/ComboboxButton.d.ts +9 -9
  25. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  26. package/build/esm/ComboBox/ComboboxInput.d.ts +17 -17
  27. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  28. package/build/esm/ComboBox/ComboboxLabel.d.ts +7 -7
  29. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  30. package/build/esm/ComboBox/ComboboxList.d.ts +8 -8
  31. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  32. package/build/esm/ComboBox/ComboboxOption.d.ts +11 -11
  33. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  34. package/build/esm/ComboBox/ComboboxPopover.d.ts +9 -9
  35. package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
  36. package/build/esm/ComboBox/cities.d.ts +5 -5
  37. package/build/esm/ComboBox/cities.js.map +1 -1
  38. package/build/esm/ComboBox/context.d.ts +30 -30
  39. package/build/esm/ComboBox/context.js.map +1 -1
  40. package/build/esm/ComboBox/hooks.d.ts +37 -37
  41. package/build/esm/ComboBox/hooks.js.map +1 -1
  42. package/build/esm/ComboBox/index.d.ts +8 -8
  43. package/build/esm/ComboBox/index.js.map +1 -1
  44. package/build/esm/ComboBox/makeHash.d.ts +1 -1
  45. package/build/esm/ComboBox/makeHash.js.map +1 -1
  46. package/build/esm/ComboBox/scopeQuery.d.ts +1 -1
  47. package/build/esm/ComboBox/scopeQuery.js.map +1 -1
  48. package/build/esm/FocusLock/FocusLock.d.ts +9 -9
  49. package/build/esm/FocusLock/FocusLock.js.map +1 -1
  50. package/build/esm/FocusLock/index.d.ts +1 -1
  51. package/build/esm/FocusLock/index.js.map +1 -1
  52. package/build/esm/FocusLock/tabUtils.d.ts +3 -3
  53. package/build/esm/FocusLock/tabUtils.js.map +1 -1
  54. package/build/esm/FocusLock/useFocusLock.d.ts +7 -7
  55. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  56. package/build/esm/List/List.d.ts +7 -7
  57. package/build/esm/List/List.js.map +1 -1
  58. package/build/esm/List/ListItem.d.ts +7 -7
  59. package/build/esm/List/ListItem.js.map +1 -1
  60. package/build/esm/List/context.d.ts +4 -4
  61. package/build/esm/List/context.js.map +1 -1
  62. package/build/esm/List/index.d.ts +2 -2
  63. package/build/esm/List/index.js.map +1 -1
  64. package/build/esm/Menu/ContextMenuTrigger.d.ts +11 -11
  65. package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
  66. package/build/esm/Menu/Menu.d.ts +10 -10
  67. package/build/esm/Menu/Menu.js.map +1 -1
  68. package/build/esm/Menu/MenuButton.d.ts +11 -11
  69. package/build/esm/Menu/MenuButton.js.map +1 -1
  70. package/build/esm/Menu/MenuItem.d.ts +8 -8
  71. package/build/esm/Menu/MenuItem.js.map +1 -1
  72. package/build/esm/Menu/MenuList.d.ts +7 -7
  73. package/build/esm/Menu/MenuList.js.map +1 -1
  74. package/build/esm/Menu/MenuPopover.d.ts +8 -8
  75. package/build/esm/Menu/MenuPopover.js.map +1 -1
  76. package/build/esm/Menu/context.d.ts +25 -25
  77. package/build/esm/Menu/context.js.map +1 -1
  78. package/build/esm/Menu/fixtures/countryList.d.ts +1 -1
  79. package/build/esm/Menu/fixtures/countryList.js.map +1 -1
  80. package/build/esm/Menu/index.d.ts +6 -6
  81. package/build/esm/Menu/index.js.map +1 -1
  82. package/build/esm/Menu/scope.d.ts +1 -1
  83. package/build/esm/Menu/scope.js.map +1 -1
  84. package/build/esm/Modal/Modal.d.ts +9 -9
  85. package/build/esm/Modal/Modal.js.map +1 -1
  86. package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
  87. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  88. package/build/esm/Modal/index.d.ts +2 -2
  89. package/build/esm/Modal/index.js.map +1 -1
  90. package/build/esm/Popper/Popper.d.ts +35 -35
  91. package/build/esm/Popper/Popper.js.map +1 -1
  92. package/build/esm/Popper/PopperArrow.d.ts +6 -6
  93. package/build/esm/Popper/PopperArrow.js.map +1 -1
  94. package/build/esm/Popper/context.d.ts +6 -6
  95. package/build/esm/Popper/context.js.map +1 -1
  96. package/build/esm/Popper/index.d.ts +3 -3
  97. package/build/esm/Popper/index.js.map +1 -1
  98. package/build/esm/Portal/Portal.d.ts +6 -6
  99. package/build/esm/Portal/Portal.js.map +1 -1
  100. package/build/esm/Portal/index.d.ts +1 -1
  101. package/build/esm/Portal/index.js.map +1 -1
  102. package/build/esm/RadioButton/RadioButton.d.ts +10 -10
  103. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  104. package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
  105. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  106. package/build/esm/RadioButton/context.d.ts +9 -9
  107. package/build/esm/RadioButton/context.js.map +1 -1
  108. package/build/esm/RadioButton/index.d.ts +2 -2
  109. package/build/esm/RadioButton/index.js.map +1 -1
  110. package/build/esm/SkipNav/SkipNav.d.ts +7 -7
  111. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  112. package/build/esm/SkipNav/index.d.ts +1 -1
  113. package/build/esm/SkipNav/index.js.map +1 -1
  114. package/build/esm/Slider/Slider.d.ts +197 -197
  115. package/build/esm/Slider/Slider.js +82 -82
  116. package/build/esm/Slider/Slider.js.map +1 -1
  117. package/build/esm/Slider/index.d.ts +1 -1
  118. package/build/esm/Slider/index.js.map +1 -1
  119. package/build/esm/Spinner/Spinner.d.ts +12 -12
  120. package/build/esm/Spinner/Spinner.js.map +1 -1
  121. package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
  122. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  123. package/build/esm/Spinner/context.d.ts +12 -12
  124. package/build/esm/Spinner/context.js.map +1 -1
  125. package/build/esm/Spinner/index.d.ts +2 -2
  126. package/build/esm/Spinner/index.js.map +1 -1
  127. package/build/esm/Tabs/Tab.d.ts +7 -7
  128. package/build/esm/Tabs/Tab.js.map +1 -1
  129. package/build/esm/Tabs/TabList.d.ts +9 -9
  130. package/build/esm/Tabs/TabList.js.map +1 -1
  131. package/build/esm/Tabs/TabPanel.d.ts +8 -8
  132. package/build/esm/Tabs/TabPanel.js.map +1 -1
  133. package/build/esm/Tabs/TabPanels.d.ts +8 -8
  134. package/build/esm/Tabs/TabPanels.js.map +1 -1
  135. package/build/esm/Tabs/Tabs.d.ts +10 -10
  136. package/build/esm/Tabs/Tabs.js.map +1 -1
  137. package/build/esm/Tabs/context.d.ts +17 -17
  138. package/build/esm/Tabs/context.js.map +1 -1
  139. package/build/esm/Tabs/index.d.ts +5 -5
  140. package/build/esm/Tabs/index.js.map +1 -1
  141. package/build/esm/Tabs/scopeQuery.d.ts +1 -1
  142. package/build/esm/Tabs/scopeQuery.js.map +1 -1
  143. package/build/esm/Tooltip/Tooltip.d.ts +10 -10
  144. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  145. package/build/esm/Tooltip/index.d.ts +1 -1
  146. package/build/esm/Tooltip/index.js.map +1 -1
  147. package/build/esm/Tooltip/stateMachine.d.ts +28 -28
  148. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  149. package/build/esm/Tooltip/useTooltip.d.ts +10 -10
  150. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  151. package/build/esm/hooks/index.d.ts +13 -13
  152. package/build/esm/hooks/index.js.map +1 -1
  153. package/build/esm/hooks/useAutoFocus.d.ts +2 -2
  154. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  155. package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
  156. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  157. package/build/esm/hooks/useControlledState.d.ts +3 -3
  158. package/build/esm/hooks/useControlledState.js +1 -1
  159. package/build/esm/hooks/useControlledState.js.map +1 -1
  160. package/build/esm/hooks/useFocusReturn.d.ts +2 -2
  161. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  162. package/build/esm/hooks/useFocusState.d.ts +11 -11
  163. package/build/esm/hooks/useFocusState.js.map +1 -1
  164. package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
  165. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  166. package/build/esm/hooks/useMeasure.d.ts +7 -7
  167. package/build/esm/hooks/useMeasure.js.map +1 -1
  168. package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
  169. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  170. package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
  171. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  172. package/build/esm/hooks/useReducerMachine.d.ts +24 -24
  173. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  174. package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
  175. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  176. package/build/esm/hooks/useScope.d.ts +11 -11
  177. package/build/esm/hooks/useScope.js.map +1 -1
  178. package/build/esm/hooks/useThrottle.d.ts +1 -1
  179. package/build/esm/hooks/useThrottle.js.map +1 -1
  180. package/build/esm/index.d.ts +15 -15
  181. package/build/esm/index.js.map +1 -1
  182. package/build/esm/utils/assign-ref.d.ts +3 -3
  183. package/build/esm/utils/assign-ref.js.map +1 -1
  184. package/build/esm/utils/can-use-dom.d.ts +1 -1
  185. package/build/esm/utils/can-use-dom.js.map +1 -1
  186. package/build/esm/utils/clamp.d.ts +1 -1
  187. package/build/esm/utils/clamp.js.map +1 -1
  188. package/build/esm/utils/context.d.ts +7 -7
  189. package/build/esm/utils/context.js.map +1 -1
  190. package/build/esm/utils/create-subscription.d.ts +4 -4
  191. package/build/esm/utils/create-subscription.js.map +1 -1
  192. package/build/esm/utils/get-circular-index.d.ts +1 -1
  193. package/build/esm/utils/get-circular-index.js.map +1 -1
  194. package/build/esm/utils/index.d.ts +10 -10
  195. package/build/esm/utils/index.js.map +1 -1
  196. package/build/esm/utils/is-right-click.d.ts +6 -6
  197. package/build/esm/utils/is-right-click.js +4 -4
  198. package/build/esm/utils/is-right-click.js.map +1 -1
  199. package/build/esm/utils/owner-document.d.ts +7 -7
  200. package/build/esm/utils/owner-document.js +5 -5
  201. package/build/esm/utils/owner-document.js.map +1 -1
  202. package/build/esm/utils/polymorphic.d.ts +39 -39
  203. package/build/esm/utils/polymorphic.js.map +1 -1
  204. package/build/esm/utils/rubber-band-clamp.d.ts +2 -2
  205. package/build/esm/utils/rubber-band-clamp.js.map +1 -1
  206. package/build/esm/utils/use-stable-callback.d.ts +16 -16
  207. package/build/esm/utils/use-stable-callback.js +16 -16
  208. package/build/esm/utils/use-stable-callback.js.map +1 -1
  209. package/build/esm/utils/wrap-event.d.ts +3 -3
  210. package/build/esm/utils/wrap-event.js.map +1 -1
  211. package/build/tsconfig-build.tsbuildinfo +1 -1
  212. package/package.json +2 -2
  213. package/src/Accordion/Accordion.story.tsx +74 -74
  214. package/src/Accordion/Accordion.tsx +59 -59
  215. package/src/Accordion/AccordionBody.tsx +52 -52
  216. package/src/Accordion/AccordionHeader.tsx +167 -167
  217. package/src/Accordion/AccordionItem.tsx +50 -50
  218. package/src/Accordion/context.ts +37 -37
  219. package/src/Accordion/index.ts +4 -4
  220. package/src/Accordion/scopeQuery.ts +7 -7
  221. package/src/Accordion/styles.css +21 -21
  222. package/src/CheckBox/CheckBox.tsx +41 -41
  223. package/src/CheckBox/index.ts +1 -1
  224. package/src/ComboBox/ComboBox.story.tsx +120 -120
  225. package/src/ComboBox/Combobox.tsx +148 -148
  226. package/src/ComboBox/ComboboxButton.tsx +61 -61
  227. package/src/ComboBox/ComboboxInput.tsx +187 -187
  228. package/src/ComboBox/ComboboxLabel.tsx +33 -33
  229. package/src/ComboBox/ComboboxList.tsx +47 -47
  230. package/src/ComboBox/ComboboxOption.tsx +111 -111
  231. package/src/ComboBox/ComboboxPopover.tsx +64 -64
  232. package/src/ComboBox/cities.ts +23194 -23194
  233. package/src/ComboBox/context.ts +35 -35
  234. package/src/ComboBox/hooks.tsx +451 -451
  235. package/src/ComboBox/index.ts +8 -8
  236. package/src/ComboBox/makeHash.ts +19 -19
  237. package/src/ComboBox/scopeQuery.ts +6 -6
  238. package/src/ComboBox/styles.css +32 -32
  239. package/src/FocusLock/FocusLock.tsx +66 -66
  240. package/src/FocusLock/index.ts +1 -1
  241. package/src/FocusLock/tabUtils.ts +40 -40
  242. package/src/FocusLock/useFocusLock.ts +56 -56
  243. package/src/List/List.story.tsx +18 -18
  244. package/src/List/List.tsx +17 -17
  245. package/src/List/ListItem.tsx +23 -23
  246. package/src/List/context.ts +19 -19
  247. package/src/List/index.ts +2 -2
  248. package/src/Menu/ContextMenu.story.tsx +73 -73
  249. package/src/Menu/ContextMenuTrigger.tsx +76 -76
  250. package/src/Menu/Menu.story.tsx +160 -160
  251. package/src/Menu/Menu.tsx +83 -83
  252. package/src/Menu/MenuButton.tsx +83 -83
  253. package/src/Menu/MenuComplex.story.tsx +58 -58
  254. package/src/Menu/MenuItem.tsx +88 -88
  255. package/src/Menu/MenuList.tsx +254 -254
  256. package/src/Menu/MenuPopover.tsx +35 -35
  257. package/src/Menu/context.ts +44 -44
  258. package/src/Menu/fixtures/countryList.ts +198 -198
  259. package/src/Menu/index.ts +6 -6
  260. package/src/Menu/scope.ts +7 -7
  261. package/src/Menu/styles.css +42 -42
  262. package/src/Modal/Modal.story.tsx +258 -258
  263. package/src/Modal/Modal.tsx +48 -48
  264. package/src/Modal/ModalBackdrop.tsx +78 -78
  265. package/src/Modal/NavDrawer.story.tsx +158 -158
  266. package/src/Modal/index.ts +2 -2
  267. package/src/Modal/styles.css +46 -46
  268. package/src/Popper/Popper.story.tsx +263 -263
  269. package/src/Popper/Popper.tsx +154 -154
  270. package/src/Popper/PopperArrow.tsx +35 -35
  271. package/src/Popper/context.ts +10 -10
  272. package/src/Popper/index.ts +3 -3
  273. package/src/Popper/styles.css +60 -60
  274. package/src/Portal/Portal.tsx +20 -20
  275. package/src/Portal/index.ts +1 -1
  276. package/src/RadioButton/RadioButton.story.tsx +77 -77
  277. package/src/RadioButton/RadioButton.tsx +55 -55
  278. package/src/RadioButton/RadioGroup.tsx +60 -60
  279. package/src/RadioButton/context.ts +17 -17
  280. package/src/RadioButton/index.ts +2 -2
  281. package/src/SkipNav/SkipNav.tsx +16 -16
  282. package/src/SkipNav/index.tsx +1 -1
  283. package/src/Slider/Slider.story.tsx +45 -45
  284. package/src/Slider/Slider.tsx +1120 -1120
  285. package/src/Slider/index.ts +1 -1
  286. package/src/Slider/styles.css +131 -131
  287. package/src/Spinner/Spinner.story.tsx +31 -31
  288. package/src/Spinner/Spinner.tsx +117 -117
  289. package/src/Spinner/SpinnerButton.tsx +54 -54
  290. package/src/Spinner/context.ts +20 -20
  291. package/src/Spinner/index.ts +2 -2
  292. package/src/Spinner/styles.css +23 -23
  293. package/src/Tabs/Tab.story.tsx +80 -80
  294. package/src/Tabs/Tab.tsx +136 -136
  295. package/src/Tabs/TabList.tsx +71 -71
  296. package/src/Tabs/TabPanel.tsx +53 -53
  297. package/src/Tabs/TabPanels.tsx +30 -30
  298. package/src/Tabs/Tabs.tsx +46 -46
  299. package/src/Tabs/context.ts +30 -30
  300. package/src/Tabs/index.tsx +5 -5
  301. package/src/Tabs/scopeQuery.ts +6 -6
  302. package/src/Tooltip/Tooltip.story.tsx +61 -61
  303. package/src/Tooltip/Tooltip.tsx +50 -50
  304. package/src/Tooltip/index.ts +1 -1
  305. package/src/Tooltip/stateMachine.ts +192 -192
  306. package/src/Tooltip/styles.css +17 -17
  307. package/src/Tooltip/useTooltip.ts +136 -136
  308. package/src/hooks/index.ts +13 -13
  309. package/src/hooks/useAutoFocus.ts +22 -22
  310. package/src/hooks/useChildrenCounter.ts +51 -51
  311. package/src/hooks/useControlledState.ts +3 -3
  312. package/src/hooks/useFocusReturn.ts +43 -43
  313. package/src/hooks/useFocusState.ts +30 -30
  314. package/src/hooks/useGestureHandlers.ts +286 -286
  315. package/src/hooks/useMeasure.ts +33 -33
  316. package/src/hooks/useOnClickOutside.ts +32 -32
  317. package/src/hooks/useOnKeyDown.ts +19 -19
  318. package/src/hooks/useReducerMachine.ts +60 -60
  319. package/src/hooks/useRemoveBodyScroll.ts +39 -39
  320. package/src/hooks/useScope.ts +52 -52
  321. package/src/hooks/useThrottle.ts +19 -19
  322. package/src/index.ts +20 -20
  323. package/src/utils/assign-ref.ts +27 -27
  324. package/src/utils/can-use-dom.ts +7 -7
  325. package/src/utils/clamp.ts +3 -3
  326. package/src/utils/context.tsx +48 -48
  327. package/src/utils/create-subscription.ts +16 -16
  328. package/src/utils/get-circular-index.ts +7 -7
  329. package/src/utils/index.ts +10 -10
  330. package/src/utils/is-right-click.ts +14 -14
  331. package/src/utils/owner-document.ts +13 -13
  332. package/src/utils/polymorphic.ts +78 -78
  333. package/src/utils/rubber-band-clamp.ts +25 -25
  334. package/src/utils/use-stable-callback.ts +58 -58
  335. package/src/utils/wrap-event.ts +22 -22
  336. package/build/esm/TimerField/clamp.d.ts +0 -1
  337. package/build/esm/TimerField/clamp.js +0 -2
  338. package/build/esm/TimerField/clamp.js.map +0 -1
  339. package/build/esm/TimerField/index.d.ts +0 -1
  340. package/build/esm/TimerField/index.js +0 -2
  341. package/build/esm/TimerField/index.js.map +0 -1
  342. package/build/esm/TimerField/useControlledState.d.ts +0 -1
  343. package/build/esm/TimerField/useControlledState.js +0 -2
  344. package/build/esm/TimerField/useControlledState.js.map +0 -1
  345. package/build/esm/TimerField/useTimerField.d.ts +0 -44
  346. package/build/esm/TimerField/useTimerField.js +0 -430
  347. package/build/esm/TimerField/useTimerField.js.map +0 -1
  348. package/build/esm/TimerField/wrapEvent.d.ts +0 -1
  349. package/build/esm/TimerField/wrapEvent.js +0 -2
  350. package/build/esm/TimerField/wrapEvent.js.map +0 -1
@@ -1,111 +1,111 @@
1
- /* eslint-disable @typescript-eslint/no-use-before-define */
2
- import type {
3
- ElementType,
4
- LiHTMLAttributes,
5
- MouseEventHandler,
6
- ReactNode,
7
- } from 'react';
8
- import { forwardRef, useEffect, useRef } from 'react';
9
-
10
- import { SELECT_WITH_CLICK, CLEAR_SELECTION } from './hooks';
11
- import { wrapEvent } from '../utils/wrap-event';
12
- import { useComboBoxContext } from './context';
13
- import { makeHash } from './makeHash';
14
-
15
- export interface ComboboxOptionProps extends LiHTMLAttributes<HTMLLIElement> {
16
- as?: ElementType<any>;
17
- innerAs?: ElementType<any>;
18
- id: string;
19
- value: any;
20
- text?: string;
21
- onClick?: MouseEventHandler<HTMLLIElement>;
22
- children?: ReactNode;
23
- }
24
-
25
- export const ComboboxOption = forwardRef<HTMLLIElement, ComboboxOptionProps>(
26
- function ComboboxOption(
27
- {
28
- children,
29
- id: idProp,
30
- value: valueProp,
31
- text: textProp,
32
- onClick,
33
- as: Comp = 'li',
34
- innerAs,
35
- ...props
36
- },
37
- ref
38
- ) {
39
- const {
40
- onSelect,
41
- data: { navigationItem },
42
- transition,
43
- optionsRef,
44
- } = useComboBoxContext();
45
- const transitionCleanupRef = useRef(transition);
46
- const isActiveRef = useRef(false);
47
-
48
- const value: any = valueProp;
49
- let text: string = textProp ? textProp : '';
50
-
51
- if (text.length === 0) {
52
- if (typeof valueProp === 'string' && valueProp.length > 0) {
53
- text = valueProp;
54
- } else {
55
- throw new Error('Missing text for <ComboboxOption />');
56
- }
57
- }
58
-
59
- const id = String(makeHash(idProp));
60
-
61
- useEffect(() => {
62
- const opts = optionsRef.current;
63
- opts[id] = { value, text };
64
-
65
- return () => {
66
- delete opts[id];
67
- };
68
- }, [optionsRef, id, text, value]);
69
-
70
- // Keep updating this ref with the current
71
- // function pointer for transition, so it can
72
- // be used by the unmount effect below.
73
- transitionCleanupRef.current = transition;
74
- isActiveRef.current = navigationItem === id;
75
-
76
- useEffect(() => {
77
- return () => {
78
- if (isActiveRef.current === true) {
79
- // clean up selections if this option is getting
80
- // unmounted and it was the currently selected item
81
- transitionCleanupRef.current(CLEAR_SELECTION);
82
- }
83
- };
84
- }, []);
85
-
86
- const handleClick = () => {
87
- onSelect && onSelect(text, id, value);
88
- transition(SELECT_WITH_CLICK, { text, item: id });
89
- };
90
-
91
- return (
92
- <Comp
93
- {...props}
94
- as={innerAs}
95
- data-reach-combobox-option=""
96
- ref={ref}
97
- id={id}
98
- role="option"
99
- aria-selected={isActiveRef.current}
100
- data-highlighted={isActiveRef.current ? '' : undefined}
101
- // without this the menu will close from `onBlur`, but with it the
102
- // element can be `document.activeElement` and then our focus checks in
103
- // onBlur will work as intended
104
- tabIndex="-1"
105
- onClick={wrapEvent(onClick, handleClick)}
106
- >
107
- {children || text}
108
- </Comp>
109
- );
110
- }
111
- );
1
+ /* eslint-disable @typescript-eslint/no-use-before-define */
2
+ import type {
3
+ ElementType,
4
+ LiHTMLAttributes,
5
+ MouseEventHandler,
6
+ ReactNode,
7
+ } from 'react';
8
+ import { forwardRef, useEffect, useRef } from 'react';
9
+
10
+ import { SELECT_WITH_CLICK, CLEAR_SELECTION } from './hooks';
11
+ import { wrapEvent } from '../utils/wrap-event';
12
+ import { useComboBoxContext } from './context';
13
+ import { makeHash } from './makeHash';
14
+
15
+ export interface ComboboxOptionProps extends LiHTMLAttributes<HTMLLIElement> {
16
+ as?: ElementType<any>;
17
+ innerAs?: ElementType<any>;
18
+ id: string;
19
+ value: any;
20
+ text?: string;
21
+ onClick?: MouseEventHandler<HTMLLIElement>;
22
+ children?: ReactNode;
23
+ }
24
+
25
+ export const ComboboxOption = forwardRef<HTMLLIElement, ComboboxOptionProps>(
26
+ function ComboboxOption(
27
+ {
28
+ children,
29
+ id: idProp,
30
+ value: valueProp,
31
+ text: textProp,
32
+ onClick,
33
+ as: Comp = 'li',
34
+ innerAs,
35
+ ...props
36
+ },
37
+ ref
38
+ ) {
39
+ const {
40
+ onSelect,
41
+ data: { navigationItem },
42
+ transition,
43
+ optionsRef,
44
+ } = useComboBoxContext();
45
+ const transitionCleanupRef = useRef(transition);
46
+ const isActiveRef = useRef(false);
47
+
48
+ const value: any = valueProp;
49
+ let text: string = textProp ? textProp : '';
50
+
51
+ if (text.length === 0) {
52
+ if (typeof valueProp === 'string' && valueProp.length > 0) {
53
+ text = valueProp;
54
+ } else {
55
+ throw new Error('Missing text for <ComboboxOption />');
56
+ }
57
+ }
58
+
59
+ const id = String(makeHash(idProp));
60
+
61
+ useEffect(() => {
62
+ const opts = optionsRef.current;
63
+ opts[id] = { value, text };
64
+
65
+ return () => {
66
+ delete opts[id];
67
+ };
68
+ }, [optionsRef, id, text, value]);
69
+
70
+ // Keep updating this ref with the current
71
+ // function pointer for transition, so it can
72
+ // be used by the unmount effect below.
73
+ transitionCleanupRef.current = transition;
74
+ isActiveRef.current = navigationItem === id;
75
+
76
+ useEffect(() => {
77
+ return () => {
78
+ if (isActiveRef.current === true) {
79
+ // clean up selections if this option is getting
80
+ // unmounted and it was the currently selected item
81
+ transitionCleanupRef.current(CLEAR_SELECTION);
82
+ }
83
+ };
84
+ }, []);
85
+
86
+ const handleClick = () => {
87
+ onSelect && onSelect(text, id, value);
88
+ transition(SELECT_WITH_CLICK, { text, item: id });
89
+ };
90
+
91
+ return (
92
+ <Comp
93
+ {...props}
94
+ as={innerAs}
95
+ data-reach-combobox-option=""
96
+ ref={ref}
97
+ id={id}
98
+ role="option"
99
+ aria-selected={isActiveRef.current}
100
+ data-highlighted={isActiveRef.current ? '' : undefined}
101
+ // without this the menu will close from `onBlur`, but with it the
102
+ // element can be `document.activeElement` and then our focus checks in
103
+ // onBlur will work as intended
104
+ tabIndex="-1"
105
+ onClick={wrapEvent(onClick, handleClick)}
106
+ >
107
+ {children || text}
108
+ </Comp>
109
+ );
110
+ }
111
+ );
@@ -1,64 +1,64 @@
1
- import type {
2
- ElementType,
3
- FocusEventHandler,
4
- HTMLAttributes,
5
- KeyboardEventHandler,
6
- ReactNode,
7
- } from 'react';
8
- import { forwardRef } from 'react';
9
-
10
- import { useKeyDown, useBlur } from './hooks';
11
- import { wrapEvent } from '../utils/wrap-event';
12
- import { assignMultipleRefs } from '../utils/assign-ref';
13
- import { useComboBoxContext } from './context';
14
-
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;
21
- }
22
-
23
- export const ComboboxPopover = forwardRef<HTMLDivElement, ComboboxPopoverProps>(
24
- function ComboboxPopover(
25
- {
26
- // wrapped events
27
- onKeyDown,
28
- onBlur,
29
-
30
- as: Comp = 'div',
31
- innerAs,
32
- ...props
33
- },
34
- forwardedRef
35
- ) {
36
- const { popoverRef, isVisible } = useComboBoxContext();
37
- const handleKeyDown = useKeyDown();
38
- const handleBlur = useBlur();
39
-
40
- // Instead of conditionally rendering the popover we use the `hidden` prop
41
- // because we don't want to unmount on close (from escape or onSelect). If
42
- // we unmounted, then we'd lose the optionsRef and the user wouldn't be able
43
- // to use the arrow keys to pop the list back open. However, the developer
44
- // can conditionally render the ComboboxPopover if they do want to cause
45
- // mount/unmount based on the app's own data (like results.length or
46
- // whatever).
47
- const hidden = !isVisible;
48
-
49
- return (
50
- <Comp
51
- {...props}
52
- as={innerAs}
53
- data-reach-combobox-popover=""
54
- ref={assignMultipleRefs(popoverRef, forwardedRef)}
55
- onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}
56
- onBlur={wrapEvent(onBlur, handleBlur)}
57
- hidden={hidden}
58
- // Allow the user to click empty space inside the popover without causing
59
- // to close from useBlur
60
- tabIndex="-1"
61
- />
62
- );
63
- }
64
- );
1
+ import type {
2
+ ElementType,
3
+ FocusEventHandler,
4
+ HTMLAttributes,
5
+ KeyboardEventHandler,
6
+ ReactNode,
7
+ } from 'react';
8
+ import { forwardRef } from 'react';
9
+
10
+ import { useKeyDown, useBlur } from './hooks';
11
+ import { wrapEvent } from '../utils/wrap-event';
12
+ import { assignMultipleRefs } from '../utils/assign-ref';
13
+ import { useComboBoxContext } from './context';
14
+
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;
21
+ }
22
+
23
+ export const ComboboxPopover = forwardRef<HTMLDivElement, ComboboxPopoverProps>(
24
+ function ComboboxPopover(
25
+ {
26
+ // wrapped events
27
+ onKeyDown,
28
+ onBlur,
29
+
30
+ as: Comp = 'div',
31
+ innerAs,
32
+ ...props
33
+ },
34
+ forwardedRef
35
+ ) {
36
+ const { popoverRef, isVisible } = useComboBoxContext();
37
+ const handleKeyDown = useKeyDown();
38
+ const handleBlur = useBlur();
39
+
40
+ // Instead of conditionally rendering the popover we use the `hidden` prop
41
+ // because we don't want to unmount on close (from escape or onSelect). If
42
+ // we unmounted, then we'd lose the optionsRef and the user wouldn't be able
43
+ // to use the arrow keys to pop the list back open. However, the developer
44
+ // can conditionally render the ComboboxPopover if they do want to cause
45
+ // mount/unmount based on the app's own data (like results.length or
46
+ // whatever).
47
+ const hidden = !isVisible;
48
+
49
+ return (
50
+ <Comp
51
+ {...props}
52
+ as={innerAs}
53
+ data-reach-combobox-popover=""
54
+ ref={assignMultipleRefs(popoverRef, forwardedRef)}
55
+ onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}
56
+ onBlur={wrapEvent(onBlur, handleBlur)}
57
+ hidden={hidden}
58
+ // Allow the user to click empty space inside the popover without causing
59
+ // to close from useBlur
60
+ tabIndex="-1"
61
+ />
62
+ );
63
+ }
64
+ );