@basic-ui/core 0.0.36 → 0.0.39

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 (348) hide show
  1. package/build/cjs/index.js +84 -83
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Accordion/Accordion.d.ts +1 -1
  4. package/build/esm/Accordion/Accordion.js +23 -17
  5. package/build/esm/Accordion/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/AccordionBody.d.ts +1 -1
  7. package/build/esm/Accordion/AccordionBody.js +24 -15
  8. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  9. package/build/esm/Accordion/AccordionHeader.d.ts +1 -1
  10. package/build/esm/Accordion/AccordionHeader.js +46 -31
  11. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  12. package/build/esm/Accordion/AccordionItem.d.ts +1 -1
  13. package/build/esm/Accordion/AccordionItem.js +18 -18
  14. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  15. package/build/esm/Accordion/context.d.ts +1 -1
  16. package/build/esm/Accordion/context.js +12 -10
  17. package/build/esm/Accordion/context.js.map +1 -1
  18. package/build/esm/Accordion/index.d.ts +0 -0
  19. package/build/esm/Accordion/index.js +0 -0
  20. package/build/esm/Accordion/index.js.map +0 -0
  21. package/build/esm/Accordion/scopeQuery.d.ts +0 -0
  22. package/build/esm/Accordion/scopeQuery.js +0 -0
  23. package/build/esm/Accordion/scopeQuery.js.map +0 -0
  24. package/build/esm/CheckBox/CheckBox.d.ts +1 -1
  25. package/build/esm/CheckBox/CheckBox.js +20 -12
  26. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  27. package/build/esm/CheckBox/index.d.ts +0 -0
  28. package/build/esm/CheckBox/index.js +0 -0
  29. package/build/esm/CheckBox/index.js.map +0 -0
  30. package/build/esm/ComboBox/Combobox.d.ts +1 -1
  31. package/build/esm/ComboBox/Combobox.js +55 -48
  32. package/build/esm/ComboBox/Combobox.js.map +1 -1
  33. package/build/esm/ComboBox/ComboboxButton.d.ts +1 -1
  34. package/build/esm/ComboBox/ComboboxButton.js +20 -20
  35. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  36. package/build/esm/ComboBox/ComboboxInput.d.ts +1 -1
  37. package/build/esm/ComboBox/ComboboxInput.js +53 -50
  38. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  39. package/build/esm/ComboBox/ComboboxLabel.d.ts +1 -1
  40. package/build/esm/ComboBox/ComboboxLabel.js +12 -12
  41. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  42. package/build/esm/ComboBox/ComboboxList.d.ts +1 -1
  43. package/build/esm/ComboBox/ComboboxList.js +16 -17
  44. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  45. package/build/esm/ComboBox/ComboboxOption.d.ts +1 -1
  46. package/build/esm/ComboBox/ComboboxOption.js +32 -34
  47. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  48. package/build/esm/ComboBox/ComboboxPopover.d.ts +1 -1
  49. package/build/esm/ComboBox/ComboboxPopover.js +16 -17
  50. package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
  51. package/build/esm/ComboBox/cities.d.ts +0 -0
  52. package/build/esm/ComboBox/cities.js +0 -0
  53. package/build/esm/ComboBox/cities.js.map +0 -0
  54. package/build/esm/ComboBox/context.d.ts +3 -3
  55. package/build/esm/ComboBox/context.js +6 -5
  56. package/build/esm/ComboBox/context.js.map +1 -1
  57. package/build/esm/ComboBox/hooks.d.ts +1 -1
  58. package/build/esm/ComboBox/hooks.js +82 -115
  59. package/build/esm/ComboBox/hooks.js.map +1 -1
  60. package/build/esm/ComboBox/index.d.ts +0 -0
  61. package/build/esm/ComboBox/index.js +0 -0
  62. package/build/esm/ComboBox/index.js.map +0 -0
  63. package/build/esm/ComboBox/makeHash.d.ts +0 -0
  64. package/build/esm/ComboBox/makeHash.js +3 -3
  65. package/build/esm/ComboBox/makeHash.js.map +1 -1
  66. package/build/esm/ComboBox/scopeQuery.d.ts +0 -0
  67. package/build/esm/ComboBox/scopeQuery.js +0 -0
  68. package/build/esm/ComboBox/scopeQuery.js.map +0 -0
  69. package/build/esm/FocusLock/FocusLock.d.ts +1 -1
  70. package/build/esm/FocusLock/FocusLock.js +18 -16
  71. package/build/esm/FocusLock/FocusLock.js.map +1 -1
  72. package/build/esm/FocusLock/index.d.ts +0 -0
  73. package/build/esm/FocusLock/index.js +0 -0
  74. package/build/esm/FocusLock/index.js.map +0 -0
  75. package/build/esm/FocusLock/tabUtils.d.ts +1 -0
  76. package/build/esm/FocusLock/tabUtils.js +14 -2
  77. package/build/esm/FocusLock/tabUtils.js.map +1 -1
  78. package/build/esm/FocusLock/useFocusLock.d.ts +0 -0
  79. package/build/esm/FocusLock/useFocusLock.js +14 -22
  80. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  81. package/build/esm/List/List.d.ts +1 -1
  82. package/build/esm/List/List.js +6 -6
  83. package/build/esm/List/List.js.map +1 -1
  84. package/build/esm/List/ListItem.d.ts +1 -1
  85. package/build/esm/List/ListItem.js +6 -6
  86. package/build/esm/List/ListItem.js.map +1 -1
  87. package/build/esm/List/context.d.ts +0 -0
  88. package/build/esm/List/context.js +3 -3
  89. package/build/esm/List/context.js.map +1 -1
  90. package/build/esm/List/index.d.ts +0 -0
  91. package/build/esm/List/index.js +0 -0
  92. package/build/esm/List/index.js.map +0 -0
  93. package/build/esm/Menu/Menu.d.ts +1 -1
  94. package/build/esm/Menu/Menu.js +31 -23
  95. package/build/esm/Menu/Menu.js.map +1 -1
  96. package/build/esm/Menu/MenuButton.d.ts +1 -1
  97. package/build/esm/Menu/MenuButton.js +29 -25
  98. package/build/esm/Menu/MenuButton.js.map +1 -1
  99. package/build/esm/Menu/MenuItem.d.ts +1 -1
  100. package/build/esm/Menu/MenuItem.js +26 -27
  101. package/build/esm/Menu/MenuItem.js.map +1 -1
  102. package/build/esm/Menu/MenuList.d.ts +1 -1
  103. package/build/esm/Menu/MenuList.js +62 -45
  104. package/build/esm/Menu/MenuList.js.map +1 -1
  105. package/build/esm/Menu/MenuPopover.d.ts +2 -2
  106. package/build/esm/Menu/MenuPopover.js +9 -10
  107. package/build/esm/Menu/MenuPopover.js.map +1 -1
  108. package/build/esm/Menu/context.d.ts +1 -1
  109. package/build/esm/Menu/context.js +11 -8
  110. package/build/esm/Menu/context.js.map +1 -1
  111. package/build/esm/Menu/index.d.ts +0 -0
  112. package/build/esm/Menu/index.js +0 -0
  113. package/build/esm/Menu/index.js.map +0 -0
  114. package/build/esm/Menu/scope.d.ts +0 -0
  115. package/build/esm/Menu/scope.js +0 -0
  116. package/build/esm/Menu/scope.js.map +0 -0
  117. package/build/esm/Modal/Modal.d.ts +2 -2
  118. package/build/esm/Modal/Modal.js +14 -12
  119. package/build/esm/Modal/Modal.js.map +1 -1
  120. package/build/esm/Modal/ModalBackdrop.d.ts +1 -1
  121. package/build/esm/Modal/ModalBackdrop.js +21 -19
  122. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  123. package/build/esm/Modal/index.d.ts +0 -0
  124. package/build/esm/Modal/index.js +0 -0
  125. package/build/esm/Modal/index.js.map +0 -0
  126. package/build/esm/Popper/Popper.d.ts +2 -2
  127. package/build/esm/Popper/Popper.js +51 -36
  128. package/build/esm/Popper/Popper.js.map +1 -1
  129. package/build/esm/Popper/PopperArrow.d.ts +1 -1
  130. package/build/esm/Popper/PopperArrow.js +9 -9
  131. package/build/esm/Popper/PopperArrow.js.map +1 -1
  132. package/build/esm/Popper/context.d.ts +1 -1
  133. package/build/esm/Popper/context.js +5 -3
  134. package/build/esm/Popper/context.js.map +1 -1
  135. package/build/esm/Popper/index.d.ts +0 -0
  136. package/build/esm/Popper/index.js +0 -0
  137. package/build/esm/Popper/index.js.map +0 -0
  138. package/build/esm/Portal/Portal.d.ts +1 -1
  139. package/build/esm/Portal/Portal.js +6 -5
  140. package/build/esm/Portal/Portal.js.map +1 -1
  141. package/build/esm/Portal/index.d.ts +0 -0
  142. package/build/esm/Portal/index.js +0 -0
  143. package/build/esm/Portal/index.js.map +0 -0
  144. package/build/esm/RadioButton/RadioButton.d.ts +2 -2
  145. package/build/esm/RadioButton/RadioButton.js +13 -13
  146. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  147. package/build/esm/RadioButton/RadioGroup.d.ts +2 -2
  148. package/build/esm/RadioButton/RadioGroup.js +25 -18
  149. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  150. package/build/esm/RadioButton/context.d.ts +0 -0
  151. package/build/esm/RadioButton/context.js +6 -5
  152. package/build/esm/RadioButton/context.js.map +1 -1
  153. package/build/esm/RadioButton/index.d.ts +0 -0
  154. package/build/esm/RadioButton/index.js +0 -0
  155. package/build/esm/RadioButton/index.js.map +0 -0
  156. package/build/esm/SkipNav/SkipNav.d.ts +1 -1
  157. package/build/esm/SkipNav/SkipNav.js +6 -6
  158. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  159. package/build/esm/SkipNav/index.d.ts +0 -0
  160. package/build/esm/SkipNav/index.js +0 -0
  161. package/build/esm/SkipNav/index.js.map +0 -0
  162. package/build/esm/Spinner/Spinner.d.ts +1 -1
  163. package/build/esm/Spinner/Spinner.js +42 -31
  164. package/build/esm/Spinner/Spinner.js.map +1 -1
  165. package/build/esm/Spinner/SpinnerButton.d.ts +1 -1
  166. package/build/esm/Spinner/SpinnerButton.js +12 -12
  167. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  168. package/build/esm/Spinner/context.d.ts +0 -0
  169. package/build/esm/Spinner/context.js +6 -5
  170. package/build/esm/Spinner/context.js.map +1 -1
  171. package/build/esm/Spinner/index.d.ts +0 -0
  172. package/build/esm/Spinner/index.js +0 -0
  173. package/build/esm/Spinner/index.js.map +0 -0
  174. package/build/esm/Tabs/Tab.d.ts +1 -1
  175. package/build/esm/Tabs/Tab.js +30 -29
  176. package/build/esm/Tabs/Tab.js.map +1 -1
  177. package/build/esm/Tabs/TabList.d.ts +1 -1
  178. package/build/esm/Tabs/TabList.js +27 -23
  179. package/build/esm/Tabs/TabList.js.map +1 -1
  180. package/build/esm/Tabs/TabPanel.d.ts +1 -1
  181. package/build/esm/Tabs/TabPanel.js +13 -12
  182. package/build/esm/Tabs/TabPanel.js.map +1 -1
  183. package/build/esm/Tabs/TabPanels.d.ts +1 -1
  184. package/build/esm/Tabs/TabPanels.js +14 -12
  185. package/build/esm/Tabs/TabPanels.js.map +1 -1
  186. package/build/esm/Tabs/Tabs.d.ts +1 -1
  187. package/build/esm/Tabs/Tabs.js +28 -14
  188. package/build/esm/Tabs/Tabs.js.map +1 -1
  189. package/build/esm/Tabs/context.d.ts +1 -1
  190. package/build/esm/Tabs/context.js +12 -10
  191. package/build/esm/Tabs/context.js.map +1 -1
  192. package/build/esm/Tabs/index.d.ts +0 -0
  193. package/build/esm/Tabs/index.js +0 -0
  194. package/build/esm/Tabs/index.js.map +0 -0
  195. package/build/esm/Tabs/scopeQuery.d.ts +0 -0
  196. package/build/esm/Tabs/scopeQuery.js +0 -0
  197. package/build/esm/Tabs/scopeQuery.js.map +0 -0
  198. package/build/esm/Tooltip/Tooltip.d.ts +2 -1
  199. package/build/esm/Tooltip/Tooltip.js +17 -15
  200. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  201. package/build/esm/Tooltip/index.d.ts +0 -0
  202. package/build/esm/Tooltip/index.js +0 -0
  203. package/build/esm/Tooltip/index.js.map +0 -0
  204. package/build/esm/Tooltip/stateMachine.d.ts +0 -0
  205. package/build/esm/Tooltip/stateMachine.js +56 -80
  206. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  207. package/build/esm/Tooltip/useTooltip.d.ts +1 -1
  208. package/build/esm/Tooltip/useTooltip.js +32 -31
  209. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  210. package/build/esm/hooks/index.d.ts +0 -1
  211. package/build/esm/hooks/index.js +0 -1
  212. package/build/esm/hooks/index.js.map +1 -1
  213. package/build/esm/hooks/useAutoFocus.d.ts +0 -0
  214. package/build/esm/hooks/useAutoFocus.js +6 -2
  215. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  216. package/build/esm/hooks/useChildrenCounter.d.ts +1 -1
  217. package/build/esm/hooks/useChildrenCounter.js +6 -4
  218. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  219. package/build/esm/hooks/useControlledState.d.ts +1 -1
  220. package/build/esm/hooks/useControlledState.js +7 -2
  221. package/build/esm/hooks/useControlledState.js.map +1 -1
  222. package/build/esm/hooks/useFocusReturn.d.ts +2 -1
  223. package/build/esm/hooks/useFocusReturn.js +25 -14
  224. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  225. package/build/esm/hooks/useFocusState.d.ts +0 -0
  226. package/build/esm/hooks/useFocusState.js +13 -9
  227. package/build/esm/hooks/useFocusState.js.map +1 -1
  228. package/build/esm/hooks/useGestureHandlers.d.ts +0 -0
  229. package/build/esm/hooks/useGestureHandlers.js +59 -63
  230. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  231. package/build/esm/hooks/useMeasure.d.ts +0 -0
  232. package/build/esm/hooks/useMeasure.js +13 -7
  233. package/build/esm/hooks/useMeasure.js.map +1 -1
  234. package/build/esm/hooks/useOnClickOutside.d.ts +0 -0
  235. package/build/esm/hooks/useOnClickOutside.js +5 -4
  236. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  237. package/build/esm/hooks/useOnKeyDown.d.ts +0 -0
  238. package/build/esm/hooks/useOnKeyDown.js +4 -3
  239. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  240. package/build/esm/hooks/useReducerMachine.d.ts +1 -1
  241. package/build/esm/hooks/useReducerMachine.js +13 -10
  242. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  243. package/build/esm/hooks/useRemoveBodyScroll.d.ts +0 -0
  244. package/build/esm/hooks/useRemoveBodyScroll.js +14 -21
  245. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  246. package/build/esm/hooks/useScope.d.ts +1 -1
  247. package/build/esm/hooks/useScope.js +10 -12
  248. package/build/esm/hooks/useScope.js.map +1 -1
  249. package/build/esm/hooks/useThrottle.d.ts +0 -0
  250. package/build/esm/hooks/useThrottle.js +10 -5
  251. package/build/esm/hooks/useThrottle.js.map +1 -1
  252. package/build/esm/index.d.ts +0 -0
  253. package/build/esm/index.js +0 -0
  254. package/build/esm/index.js.map +0 -0
  255. package/build/esm/utils/assignRef.d.ts +1 -1
  256. package/build/esm/utils/assignRef.js +7 -3
  257. package/build/esm/utils/assignRef.js.map +1 -1
  258. package/build/esm/utils/clamp.d.ts +0 -0
  259. package/build/esm/utils/clamp.js +0 -0
  260. package/build/esm/utils/clamp.js.map +0 -0
  261. package/build/esm/utils/createSubscription.d.ts +0 -0
  262. package/build/esm/utils/createSubscription.js +7 -5
  263. package/build/esm/utils/createSubscription.js.map +1 -1
  264. package/build/esm/utils/getCircularIndex.d.ts +0 -0
  265. package/build/esm/utils/getCircularIndex.js +0 -0
  266. package/build/esm/utils/getCircularIndex.js.map +0 -0
  267. package/build/esm/utils/index.d.ts +0 -0
  268. package/build/esm/utils/index.js +0 -0
  269. package/build/esm/utils/index.js.map +0 -0
  270. package/build/esm/utils/rubberBandClamp.d.ts +0 -0
  271. package/build/esm/utils/rubberBandClamp.js +5 -2
  272. package/build/esm/utils/rubberBandClamp.js.map +1 -1
  273. package/build/esm/utils/wrapEvent.d.ts +0 -0
  274. package/build/esm/utils/wrapEvent.js +7 -3
  275. package/build/esm/utils/wrapEvent.js.map +1 -1
  276. package/build/tsconfig.tsbuildinfo +1 -7151
  277. package/package.json +13 -13
  278. package/src/Accordion/Accordion.story.tsx +6 -4
  279. package/src/Accordion/Accordion.tsx +4 -2
  280. package/src/Accordion/AccordionBody.tsx +4 -4
  281. package/src/Accordion/AccordionHeader.tsx +7 -8
  282. package/src/Accordion/AccordionItem.tsx +5 -4
  283. package/src/Accordion/context.ts +2 -1
  284. package/src/CheckBox/CheckBox.tsx +2 -1
  285. package/src/ComboBox/ComboBox.story.tsx +11 -9
  286. package/src/ComboBox/Combobox.tsx +9 -11
  287. package/src/ComboBox/ComboboxButton.tsx +4 -9
  288. package/src/ComboBox/ComboboxInput.tsx +2 -1
  289. package/src/ComboBox/ComboboxLabel.tsx +2 -1
  290. package/src/ComboBox/ComboboxList.tsx +2 -1
  291. package/src/ComboBox/ComboboxOption.tsx +1 -1
  292. package/src/ComboBox/ComboboxPopover.tsx +2 -1
  293. package/src/ComboBox/context.ts +4 -3
  294. package/src/ComboBox/hooks.tsx +6 -9
  295. package/src/FocusLock/FocusLock.tsx +2 -1
  296. package/src/FocusLock/tabUtils.ts +12 -0
  297. package/src/FocusLock/useFocusLock.ts +5 -11
  298. package/src/List/List.story.tsx +5 -4
  299. package/src/List/List.tsx +1 -1
  300. package/src/List/ListItem.tsx +1 -1
  301. package/src/Menu/Menu.story.tsx +15 -13
  302. package/src/Menu/Menu.tsx +5 -4
  303. package/src/Menu/MenuButton.tsx +7 -11
  304. package/src/Menu/MenuItem.tsx +6 -7
  305. package/src/Menu/MenuList.tsx +4 -8
  306. package/src/Menu/MenuPopover.tsx +4 -2
  307. package/src/Menu/context.ts +2 -1
  308. package/src/Modal/Modal.story.tsx +35 -19
  309. package/src/Modal/Modal.tsx +6 -4
  310. package/src/Modal/ModalBackdrop.tsx +2 -1
  311. package/src/Modal/NavDrawer.story.tsx +8 -7
  312. package/src/Popper/Popper.story.tsx +15 -19
  313. package/src/Popper/Popper.tsx +12 -7
  314. package/src/Popper/PopperArrow.tsx +2 -1
  315. package/src/Popper/context.ts +2 -1
  316. package/src/Portal/Portal.tsx +1 -1
  317. package/src/RadioButton/RadioButton.story.tsx +13 -9
  318. package/src/RadioButton/RadioButton.tsx +4 -2
  319. package/src/RadioButton/RadioGroup.tsx +6 -4
  320. package/src/SkipNav/SkipNav.tsx +1 -1
  321. package/src/Spinner/Spinner.story.tsx +6 -5
  322. package/src/Spinner/Spinner.tsx +2 -1
  323. package/src/Spinner/SpinnerButton.tsx +2 -1
  324. package/src/Tabs/Tab.story.tsx +10 -8
  325. package/src/Tabs/Tab.tsx +4 -4
  326. package/src/Tabs/TabList.tsx +11 -3
  327. package/src/Tabs/TabPanel.tsx +2 -1
  328. package/src/Tabs/TabPanels.tsx +1 -1
  329. package/src/Tabs/Tabs.tsx +2 -1
  330. package/src/Tabs/context.ts +2 -1
  331. package/src/Tooltip/Tooltip.story.tsx +8 -6
  332. package/src/Tooltip/Tooltip.tsx +3 -7
  333. package/src/Tooltip/stateMachine.ts +1 -1
  334. package/src/Tooltip/useTooltip.ts +4 -3
  335. package/src/hooks/index.ts +0 -1
  336. package/src/hooks/useAutoFocus.ts +9 -1
  337. package/src/hooks/useChildrenCounter.ts +2 -1
  338. package/src/hooks/useControlledState.ts +3 -1
  339. package/src/hooks/useFocusReturn.ts +33 -13
  340. package/src/hooks/useFocusState.ts +1 -0
  341. package/src/hooks/useReducerMachine.ts +2 -1
  342. package/src/hooks/useRemoveBodyScroll.ts +10 -18
  343. package/src/hooks/useScope.ts +2 -1
  344. package/src/utils/assignRef.ts +1 -1
  345. package/build/esm/hooks/useId.d.ts +0 -3
  346. package/build/esm/hooks/useId.js +0 -16
  347. package/build/esm/hooks/useId.js.map +0 -1
  348. package/src/hooks/useId.ts +0 -18
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ComboBox/ComboboxOption.tsx"],"names":["forwardRef","useEffect","useRef","SELECT_WITH_CLICK","CLEAR_SELECTION","wrapEvent","useComboBoxContext","makeHash","ComboboxOption","ref","children","id","idProp","value","valueProp","text","textProp","onClick","as","Comp","innerAs","props","onSelect","data","navigationItem","transition","optionsRef","transitionCleanupRef","isActiveRef","length","Error","String","opts","current","handleClick","item","undefined"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { forwardRef, useEffect, useRef } from 'react';\n\nimport type * as React from 'react';\nimport { SELECT_WITH_CLICK, CLEAR_SELECTION } from './hooks';\nimport { wrapEvent } from '../utils/wrapEvent';\nimport { useComboBoxContext } from './context';\nimport { makeHash } from './makeHash';\n\nexport interface ComboboxOptionProps\n extends React.LiHTMLAttributes<HTMLLIElement> {\n as?: React.ElementType<any>;\n innerAs?: React.ElementType<any>;\n id: string;\n value: any;\n text?: string;\n onClick?: React.MouseEventHandler<HTMLLIElement>;\n children?: React.ReactNode;\n}\n\nexport const ComboboxOption = forwardRef<HTMLLIElement, ComboboxOptionProps>(\n function ComboboxOption(\n {\n children,\n id: idProp,\n value: valueProp,\n text: textProp,\n onClick,\n as: Comp = 'li',\n innerAs,\n ...props\n },\n ref\n ) {\n const {\n onSelect,\n data: { navigationItem },\n transition,\n optionsRef,\n } = useComboBoxContext();\n const transitionCleanupRef = useRef(transition);\n const isActiveRef = useRef(false);\n\n const value: any = valueProp;\n let text: string = textProp ? textProp : '';\n\n if (text.length === 0) {\n if (typeof valueProp === 'string' && valueProp.length > 0) {\n text = valueProp;\n } else {\n throw new Error('Missing text for <ComboboxOption />');\n }\n }\n\n const id = String(makeHash(idProp));\n\n useEffect(() => {\n const opts = optionsRef.current;\n opts[id] = { value, text };\n\n return () => {\n delete opts[id];\n };\n }, [optionsRef, id, text, value]);\n\n // Keep updating this ref with the current\n // function pointer for transition, so it can\n // be used by the unmount effect below.\n transitionCleanupRef.current = transition;\n isActiveRef.current = navigationItem === id;\n\n useEffect(() => {\n return () => {\n if (isActiveRef.current === true) {\n // clean up selections if this option is getting\n // unmounted and it was the currently selected item\n transitionCleanupRef.current(CLEAR_SELECTION);\n }\n };\n }, []);\n\n const handleClick = () => {\n onSelect && onSelect(text, id, value);\n transition(SELECT_WITH_CLICK, { text, item: id });\n };\n\n return (\n <Comp\n {...props}\n as={innerAs}\n data-reach-combobox-option=\"\"\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isActiveRef.current}\n data-highlighted={isActiveRef.current ? '' : undefined}\n // without this the menu will close from `onBlur`, but with it the\n // element can be `document.activeElement` and then our focus checks in\n // onBlur will work as intended\n tabIndex=\"-1\"\n onClick={wrapEvent(onClick, handleClick)}\n >\n {children || text}\n </Comp>\n );\n }\n);\n"],"file":"ComboboxOption.js"}
1
+ {"version":3,"sources":["../../../src/ComboBox/ComboboxOption.tsx"],"names":["forwardRef","useEffect","useRef","React","SELECT_WITH_CLICK","CLEAR_SELECTION","wrapEvent","useComboBoxContext","makeHash","ComboboxOption","ref","children","idProp","id","valueProp","value","textProp","text","onClick","as","Comp","innerAs","props","onSelect","navigationItem","data","transition","optionsRef","transitionCleanupRef","isActiveRef","length","Error","String","opts","current","handleClick","item","undefined"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { forwardRef, useEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { SELECT_WITH_CLICK, CLEAR_SELECTION } from './hooks';\nimport { wrapEvent } from '../utils/wrapEvent';\nimport { useComboBoxContext } from './context';\nimport { makeHash } from './makeHash';\n\nexport interface ComboboxOptionProps\n extends React.LiHTMLAttributes<HTMLLIElement> {\n as?: React.ElementType<any>;\n innerAs?: React.ElementType<any>;\n id: string;\n value: any;\n text?: string;\n onClick?: React.MouseEventHandler<HTMLLIElement>;\n children?: React.ReactNode;\n}\n\nexport const ComboboxOption = forwardRef<HTMLLIElement, ComboboxOptionProps>(\n function ComboboxOption(\n {\n children,\n id: idProp,\n value: valueProp,\n text: textProp,\n onClick,\n as: Comp = 'li',\n innerAs,\n ...props\n },\n ref\n ) {\n const {\n onSelect,\n data: { navigationItem },\n transition,\n optionsRef,\n } = useComboBoxContext();\n const transitionCleanupRef = useRef(transition);\n const isActiveRef = useRef(false);\n\n const value: any = valueProp;\n let text: string = textProp ? textProp : '';\n\n if (text.length === 0) {\n if (typeof valueProp === 'string' && valueProp.length > 0) {\n text = valueProp;\n } else {\n throw new Error('Missing text for <ComboboxOption />');\n }\n }\n\n const id = String(makeHash(idProp));\n\n useEffect(() => {\n const opts = optionsRef.current;\n opts[id] = { value, text };\n\n return () => {\n delete opts[id];\n };\n }, [optionsRef, id, text, value]);\n\n // Keep updating this ref with the current\n // function pointer for transition, so it can\n // be used by the unmount effect below.\n transitionCleanupRef.current = transition;\n isActiveRef.current = navigationItem === id;\n\n useEffect(() => {\n return () => {\n if (isActiveRef.current === true) {\n // clean up selections if this option is getting\n // unmounted and it was the currently selected item\n transitionCleanupRef.current(CLEAR_SELECTION);\n }\n };\n }, []);\n\n const handleClick = () => {\n onSelect && onSelect(text, id, value);\n transition(SELECT_WITH_CLICK, { text, item: id });\n };\n\n return (\n <Comp\n {...props}\n as={innerAs}\n data-reach-combobox-option=\"\"\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isActiveRef.current}\n data-highlighted={isActiveRef.current ? '' : undefined}\n // without this the menu will close from `onBlur`, but with it the\n // element can be `document.activeElement` and then our focus checks in\n // onBlur will work as intended\n tabIndex=\"-1\"\n onClick={wrapEvent(onClick, handleClick)}\n >\n {children || text}\n </Comp>\n );\n }\n);\n"],"file":"ComboboxOption.js"}
@@ -1,4 +1,4 @@
1
- import type * as React from 'react';
1
+ import * as React from 'react';
2
2
  export interface ComboboxPopoverProps extends React.HTMLAttributes<HTMLDivElement> {
3
3
  as?: React.ElementType<any>;
4
4
  innerAs?: React.ElementType<any>;
@@ -1,27 +1,26 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
3
  import { forwardRef } from 'react';
4
+ import * as React from 'react';
4
5
  import { useKeyDown, useBlur } from './hooks';
5
6
  import { wrapEvent } from '../utils/wrapEvent';
6
7
  import { assignMultipleRefs } from '../utils/assignRef';
7
8
  import { useComboBoxContext } from './context';
8
9
  import { jsx as _jsx } from "react/jsx-runtime";
9
- export const ComboboxPopover = /*#__PURE__*/forwardRef(function ComboboxPopover(_ref, forwardedRef) {
10
- let {
11
- // wrapped events
12
- onKeyDown,
13
- onBlur,
14
- as: Comp = 'div',
15
- innerAs
16
- } = _ref,
17
- props = _objectWithoutPropertiesLoose(_ref, ["onKeyDown", "onBlur", "as", "innerAs"]);
10
+ export var ComboboxPopover = /*#__PURE__*/forwardRef(function ComboboxPopover(_ref, forwardedRef) {
11
+ var onKeyDown = _ref.onKeyDown,
12
+ onBlur = _ref.onBlur,
13
+ _ref$as = _ref.as,
14
+ Comp = _ref$as === void 0 ? 'div' : _ref$as,
15
+ innerAs = _ref.innerAs,
16
+ props = _objectWithoutProperties(_ref, ["onKeyDown", "onBlur", "as", "innerAs"]);
18
17
 
19
- const {
20
- popoverRef,
21
- isVisible
22
- } = useComboBoxContext();
23
- const handleKeyDown = useKeyDown();
24
- const handleBlur = useBlur(); // Instead of conditionally rendering the popover we use the `hidden` prop
18
+ var _useComboBoxContext = useComboBoxContext(),
19
+ popoverRef = _useComboBoxContext.popoverRef,
20
+ isVisible = _useComboBoxContext.isVisible;
21
+
22
+ var handleKeyDown = useKeyDown();
23
+ var handleBlur = useBlur(); // Instead of conditionally rendering the popover we use the `hidden` prop
25
24
  // because we don't want to unmount on close (from escape or onSelect). If
26
25
  // we unmounted, then we'd lose the optionsRef and the user wouldn't be able
27
26
  // to use the arrow keys to pop the list back open. However, the developer
@@ -29,7 +28,7 @@ export const ComboboxPopover = /*#__PURE__*/forwardRef(function ComboboxPopover(
29
28
  // mount/unmount based on the app's own data (like results.length or
30
29
  // whatever).
31
30
 
32
- const hidden = !isVisible;
31
+ var hidden = !isVisible;
33
32
  return /*#__PURE__*/_jsx(Comp, _extends({}, props, {
34
33
  as: innerAs,
35
34
  "data-reach-combobox-popover": "",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ComboBox/ComboboxPopover.tsx"],"names":["forwardRef","useKeyDown","useBlur","wrapEvent","assignMultipleRefs","useComboBoxContext","ComboboxPopover","forwardedRef","onKeyDown","onBlur","as","Comp","innerAs","props","popoverRef","isVisible","handleKeyDown","handleBlur","hidden"],"mappings":";;AAAA,SAASA,UAAT,QAA2B,OAA3B;AAEA,SAASC,UAAT,EAAqBC,OAArB,QAAoC,SAApC;AACA,SAASC,SAAT,QAA0B,oBAA1B;AACA,SAASC,kBAAT,QAAmC,oBAAnC;AACA,SAASC,kBAAT,QAAmC,WAAnC;;AAWA,OAAO,MAAMC,eAAe,gBAAGN,UAAU,CACvC,SAASM,eAAT,OAUEC,YAVF,EAWE;AAAA,MAVA;AACE;AACAC,IAAAA,SAFF;AAGEC,IAAAA,MAHF;AAKEC,IAAAA,EAAE,EAAEC,IAAI,GAAG,KALb;AAMEC,IAAAA;AANF,GAUA;AAAA,MAHKC,KAGL;;AACA,QAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA;AAAd,MAA4BV,kBAAkB,EAApD;AACA,QAAMW,aAAa,GAAGf,UAAU,EAAhC;AACA,QAAMgB,UAAU,GAAGf,OAAO,EAA1B,CAHA,CAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,QAAMgB,MAAM,GAAG,CAACH,SAAhB;AAEA,sBACE,KAAC,IAAD,eACMF,KADN;AAEE,IAAA,EAAE,EAAED,OAFN;AAGE,mCAA4B,EAH9B;AAIE,IAAA,GAAG,EAAER,kBAAkB,CAACU,UAAD,EAAaP,YAAb,CAJzB;AAKE,IAAA,SAAS,EAAEJ,SAAS,CAACK,SAAD,EAAYQ,aAAZ,CALtB;AAME,IAAA,MAAM,EAAEb,SAAS,CAACM,MAAD,EAASQ,UAAT,CANnB;AAOE,IAAA,MAAM,EAAEC,MAPV,CAQE;AACA;AATF;AAUE,IAAA,QAAQ,EAAC;AAVX,KADF;AAcD,CAxCsC,CAAlC","sourcesContent":["import { forwardRef } from 'react';\nimport type * as React from 'react';\nimport { useKeyDown, useBlur } from './hooks';\nimport { wrapEvent } from '../utils/wrapEvent';\nimport { assignMultipleRefs } from '../utils/assignRef';\nimport { useComboBoxContext } from './context';\n\nexport interface ComboboxPopoverProps\n extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType<any>;\n innerAs?: React.ElementType<any>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n children?: React.ReactNode;\n}\n\nexport const ComboboxPopover = forwardRef<HTMLDivElement, ComboboxPopoverProps>(\n function ComboboxPopover(\n {\n // wrapped events\n onKeyDown,\n onBlur,\n\n as: Comp = 'div',\n innerAs,\n ...props\n },\n forwardedRef\n ) {\n const { popoverRef, isVisible } = useComboBoxContext();\n const handleKeyDown = useKeyDown();\n const handleBlur = useBlur();\n\n // Instead of conditionally rendering the popover we use the `hidden` prop\n // because we don't want to unmount on close (from escape or onSelect). If\n // we unmounted, then we'd lose the optionsRef and the user wouldn't be able\n // to use the arrow keys to pop the list back open. However, the developer\n // can conditionally render the ComboboxPopover if they do want to cause\n // mount/unmount based on the app's own data (like results.length or\n // whatever).\n const hidden = !isVisible;\n\n return (\n <Comp\n {...props}\n as={innerAs}\n data-reach-combobox-popover=\"\"\n ref={assignMultipleRefs(popoverRef, forwardedRef)}\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n onBlur={wrapEvent(onBlur, handleBlur)}\n hidden={hidden}\n // Allow the user to click empty space inside the popover without causing\n // to close from useBlur\n tabIndex=\"-1\"\n />\n );\n }\n);\n"],"file":"ComboboxPopover.js"}
1
+ {"version":3,"sources":["../../../src/ComboBox/ComboboxPopover.tsx"],"names":["forwardRef","React","useKeyDown","useBlur","wrapEvent","assignMultipleRefs","useComboBoxContext","ComboboxPopover","forwardedRef","onKeyDown","onBlur","as","Comp","innerAs","props","popoverRef","isVisible","handleKeyDown","handleBlur","hidden"],"mappings":";;AAAA,SAASA,UAAT,QAA2B,OAA3B;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AAEA,SAASC,UAAT,EAAqBC,OAArB,QAAoC,SAApC;AACA,SAASC,SAAT,QAA0B,oBAA1B;AACA,SAASC,kBAAT,QAAmC,oBAAnC;AACA,SAASC,kBAAT,QAAmC,WAAnC;;AAWA,OAAO,IAAMC,eAAe,gBAAGP,UAAU,CACvC,SAASO,eAAT,OAUEC,YAVF,EAWE;AAAA,MAREC,SAQF,QAREA,SAQF;AAAA,MAPEC,MAOF,QAPEA,MAOF;AAAA,qBALEC,EAKF;AAAA,MALMC,IAKN,wBALa,KAKb;AAAA,MAJEC,OAIF,QAJEA,OAIF;AAAA,MAHKC,KAGL;;AAAA,4BACkCR,kBAAkB,EADpD;AAAA,MACQS,UADR,uBACQA,UADR;AAAA,MACoBC,SADpB,uBACoBA,SADpB;;AAEA,MAAMC,aAAa,GAAGf,UAAU,EAAhC;AACA,MAAMgB,UAAU,GAAGf,OAAO,EAA1B,CAHA,CAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMgB,MAAM,GAAG,CAACH,SAAhB;AAEA,sBACE,KAAC,IAAD,eACMF,KADN;AAEE,IAAA,EAAE,EAAED,OAFN;AAGE,mCAA4B,EAH9B;AAIE,IAAA,GAAG,EAAER,kBAAkB,CAACU,UAAD,EAAaP,YAAb,CAJzB;AAKE,IAAA,SAAS,EAAEJ,SAAS,CAACK,SAAD,EAAYQ,aAAZ,CALtB;AAME,IAAA,MAAM,EAAEb,SAAS,CAACM,MAAD,EAASQ,UAAT,CANnB;AAOE,IAAA,MAAM,EAAEC,MAPV,CAQE;AACA;AATF;AAUE,IAAA,QAAQ,EAAC;AAVX,KADF;AAcD,CAxCsC,CAAlC","sourcesContent":["import { forwardRef } from 'react';\nimport * as React from 'react';\n\nimport { useKeyDown, useBlur } from './hooks';\nimport { wrapEvent } from '../utils/wrapEvent';\nimport { assignMultipleRefs } from '../utils/assignRef';\nimport { useComboBoxContext } from './context';\n\nexport interface ComboboxPopoverProps\n extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType<any>;\n innerAs?: React.ElementType<any>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n children?: React.ReactNode;\n}\n\nexport const ComboboxPopover = forwardRef<HTMLDivElement, ComboboxPopoverProps>(\n function ComboboxPopover(\n {\n // wrapped events\n onKeyDown,\n onBlur,\n\n as: Comp = 'div',\n innerAs,\n ...props\n },\n forwardedRef\n ) {\n const { popoverRef, isVisible } = useComboBoxContext();\n const handleKeyDown = useKeyDown();\n const handleBlur = useBlur();\n\n // Instead of conditionally rendering the popover we use the `hidden` prop\n // because we don't want to unmount on close (from escape or onSelect). If\n // we unmounted, then we'd lose the optionsRef and the user wouldn't be able\n // to use the arrow keys to pop the list back open. However, the developer\n // can conditionally render the ComboboxPopover if they do want to cause\n // mount/unmount based on the app's own data (like results.length or\n // whatever).\n const hidden = !isVisible;\n\n return (\n <Comp\n {...props}\n as={innerAs}\n data-reach-combobox-popover=\"\"\n ref={assignMultipleRefs(popoverRef, forwardedRef)}\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n onBlur={wrapEvent(onBlur, handleBlur)}\n hidden={hidden}\n // Allow the user to click empty space inside the popover without causing\n // to close from useBlur\n tabIndex=\"-1\"\n />\n );\n }\n);\n"],"file":"ComboboxPopover.js"}
File without changes
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
- import { ActionTypes, StateTypes, ReducerState } from './hooks';
3
- import { SelectEventHandler } from './Combobox';
4
- import { Scope } from '../hooks';
2
+ import type { ActionTypes, StateTypes, ReducerState } from './hooks';
3
+ import type { SelectEventHandler } from './Combobox';
4
+ import type { Scope } from '../hooks';
5
5
  export interface ComboBoxContextProps {
6
6
  data: Omit<ReducerState, 'state'>;
7
7
  inputRef: React.MutableRefObject<HTMLInputElement | null>;
@@ -1,7 +1,8 @@
1
1
  import { createContext, useContext } from 'react';
2
- const comboboxContext = /*#__PURE__*/createContext(null);
3
- export const {
4
- Provider: ComboBoxProvider
5
- } = comboboxContext;
6
- export const useComboBoxContext = () => useContext(comboboxContext);
2
+ var comboboxContext = /*#__PURE__*/createContext(null);
3
+ var ComboBoxProvider = comboboxContext.Provider;
4
+ export { ComboBoxProvider };
5
+ export var useComboBoxContext = function useComboBoxContext() {
6
+ return useContext(comboboxContext);
7
+ };
7
8
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ComboBox/context.ts"],"names":["createContext","useContext","comboboxContext","Provider","ComboBoxProvider","useComboBoxContext"],"mappings":"AAAA,SAASA,aAAT,EAAwBC,UAAxB,QAA0C,OAA1C;AA8BA,MAAMC,eAAe,gBAAGF,aAAa,CAAuB,IAAvB,CAArC;AACA,OAAO,MAAM;AAAEG,EAAAA,QAAQ,EAAEC;AAAZ,IAAiCF,eAAvC;AACP,OAAO,MAAMG,kBAAkB,GAAG,MAAMJ,UAAU,CAACC,eAAD,CAA3C","sourcesContent":["import { createContext, useContext } from 'react';\nimport { ActionTypes, StateTypes, ReducerState } from './hooks';\nimport { SelectEventHandler } from './Combobox';\nimport { Scope } from '../hooks';\n\nexport interface ComboBoxContextProps {\n data: Omit<ReducerState, 'state'>;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n popoverRef: React.MutableRefObject<HTMLDivElement | null>;\n buttonRef: React.MutableRefObject<HTMLButtonElement | null>;\n onSelect?: SelectEventHandler;\n optionsRef: React.MutableRefObject<{\n [itemId: string]: {\n value: string | unknown;\n text: string;\n };\n }>;\n listScope: Scope<HTMLElement>;\n state: StateTypes;\n transition: (action: ActionTypes, payload?: any) => void;\n listboxIdRef: React.MutableRefObject<string | undefined>;\n labelIdRef: React.MutableRefObject<string | undefined>;\n autocompletePropRef: React.MutableRefObject<boolean>;\n persistSelectionRef: React.MutableRefObject<boolean>;\n clearOnEscapeRef: React.MutableRefObject<boolean>;\n isVisible: boolean;\n openOnFocus: boolean;\n selectOnBlur: boolean;\n}\n\nconst comboboxContext = createContext<ComboBoxContextProps>(null as any);\nexport const { Provider: ComboBoxProvider } = comboboxContext;\nexport const useComboBoxContext = () => useContext(comboboxContext);\n"],"file":"context.js"}
1
+ {"version":3,"sources":["../../../src/ComboBox/context.ts"],"names":["createContext","useContext","comboboxContext","ComboBoxProvider","Provider","useComboBoxContext"],"mappings":"AAAA,SAASA,aAAT,EAAwBC,UAAxB,QAA0C,OAA1C;AA+BA,IAAMC,eAAe,gBAAGF,aAAa,CAAuB,IAAvB,CAArC;IACyBG,gB,GAAqBD,e,CAA/BE,Q;;AACf,OAAO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB;AAAA,SAAMJ,UAAU,CAACC,eAAD,CAAhB;AAAA,CAA3B","sourcesContent":["import { createContext, useContext } from 'react';\n\nimport type { ActionTypes, StateTypes, ReducerState } from './hooks';\nimport type { SelectEventHandler } from './Combobox';\nimport type { Scope } from '../hooks';\n\nexport interface ComboBoxContextProps {\n data: Omit<ReducerState, 'state'>;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n popoverRef: React.MutableRefObject<HTMLDivElement | null>;\n buttonRef: React.MutableRefObject<HTMLButtonElement | null>;\n onSelect?: SelectEventHandler;\n optionsRef: React.MutableRefObject<{\n [itemId: string]: {\n value: string | unknown;\n text: string;\n };\n }>;\n listScope: Scope<HTMLElement>;\n state: StateTypes;\n transition: (action: ActionTypes, payload?: any) => void;\n listboxIdRef: React.MutableRefObject<string | undefined>;\n labelIdRef: React.MutableRefObject<string | undefined>;\n autocompletePropRef: React.MutableRefObject<boolean>;\n persistSelectionRef: React.MutableRefObject<boolean>;\n clearOnEscapeRef: React.MutableRefObject<boolean>;\n isVisible: boolean;\n openOnFocus: boolean;\n selectOnBlur: boolean;\n}\n\nconst comboboxContext = createContext<ComboBoxContextProps>(null as any);\nexport const { Provider: ComboBoxProvider } = comboboxContext;\nexport const useComboBoxContext = () => useContext(comboboxContext);\n"],"file":"context.js"}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { StateChart as GenericStateChart, StateMachineState } from '../hooks/useReducerMachine';
2
+ import type { StateChart as GenericStateChart, StateMachineState } from '../hooks/useReducerMachine';
3
3
  export declare const IDLE = "IDLE";
4
4
  declare const SUGGESTING = "SUGGESTING";
5
5
  export declare const NAVIGATING = "NAVIGATING";
@@ -1,4 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+
4
+ var _on, _on2, _on3, _states;
2
5
 
3
6
  /* eslint-disable @typescript-eslint/no-use-before-define */
4
7
 
@@ -10,82 +13,46 @@ import { scopeQuery } from './scopeQuery'; /////////////////////////////////////
10
13
  // States
11
14
  // Nothing going on, waiting for the user to type or use the arrow keys
12
15
 
13
- export const IDLE = 'IDLE'; // The component is suggesting options as the user types
16
+ export var IDLE = 'IDLE'; // The component is suggesting options as the user types
14
17
 
15
- const SUGGESTING = 'SUGGESTING'; // The user is using the keyboard to navigate the list, not typing
18
+ var SUGGESTING = 'SUGGESTING'; // The user is using the keyboard to navigate the list, not typing
16
19
 
17
- export const NAVIGATING = 'NAVIGATING';
20
+ export var NAVIGATING = 'NAVIGATING';
18
21
  ////////////////////////////////////////////////////////////////////////////////
19
22
  // Actions:
20
23
  // Used to sync the state with controlled state, right after mounting
21
- export const INIT = 'INIT'; // User cleared the value w/ backspace, but input still has focus
24
+ export var INIT = 'INIT'; // User cleared the value w/ backspace, but input still has focus
22
25
 
23
- export const CLEAR = 'CLEAR'; // User cleared the value w/ backspace, but input still has focus
26
+ export var CLEAR = 'CLEAR'; // User cleared the value w/ backspace, but input still has focus
24
27
 
25
- export const CLEAR_SELECTION = 'CLEAR_SELECTION'; // User is typing
28
+ export var CLEAR_SELECTION = 'CLEAR_SELECTION'; // User is typing
26
29
 
27
- export const CHANGE = 'CHANGE'; // User is navigating w/ the keyboard
30
+ export var CHANGE = 'CHANGE'; // User is navigating w/ the keyboard
28
31
 
29
- export const NAVIGATE = 'NAVIGATE'; // User can be navigating with keyboard and then click instead, we want the
32
+ export var NAVIGATE = 'NAVIGATE'; // User can be navigating with keyboard and then click instead, we want the
30
33
  // value from the click, not the current nav item
31
34
 
32
- const SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';
33
- export const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK'; // Pretty self-explanatory, user can hit escape or blur to close the popover
35
+ var SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';
36
+ export var SELECT_WITH_CLICK = 'SELECT_WITH_CLICK'; // Pretty self-explanatory, user can hit escape or blur to close the popover
34
37
 
35
- const ESCAPE = 'ESCAPE';
36
- const BLUR = 'BLUR';
37
- export const FOCUS = 'FOCUS';
38
- export const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';
39
- export const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';
38
+ var ESCAPE = 'ESCAPE';
39
+ var BLUR = 'BLUR';
40
+ export var FOCUS = 'FOCUS';
41
+ export var OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';
42
+ export var CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';
40
43
  ////////////////////////////////////////////////////////////////////////////////
41
- export const stateChart = {
44
+ export var stateChart = {
42
45
  initial: IDLE,
43
- states: {
44
- [IDLE]: {
45
- on: {
46
- [BLUR]: IDLE,
47
- [CLEAR]: IDLE,
48
- [INIT]: IDLE,
49
- [CLEAR_SELECTION]: IDLE,
50
- [CHANGE]: SUGGESTING,
51
- [FOCUS]: SUGGESTING,
52
- [NAVIGATE]: NAVIGATING,
53
- [OPEN_WITH_BUTTON]: SUGGESTING
54
- }
55
- },
56
- [SUGGESTING]: {
57
- on: {
58
- [CHANGE]: SUGGESTING,
59
- [FOCUS]: SUGGESTING,
60
- [INIT]: SUGGESTING,
61
- [NAVIGATE]: NAVIGATING,
62
- [CLEAR]: IDLE,
63
- [CLEAR_SELECTION]: SUGGESTING,
64
- [ESCAPE]: IDLE,
65
- [BLUR]: IDLE,
66
- [SELECT_WITH_CLICK]: IDLE,
67
- [CLOSE_WITH_BUTTON]: IDLE
68
- }
69
- },
70
- [NAVIGATING]: {
71
- on: {
72
- [CHANGE]: SUGGESTING,
73
- [FOCUS]: SUGGESTING,
74
- [INIT]: NAVIGATING,
75
- [CLEAR]: IDLE,
76
- [CLEAR_SELECTION]: NAVIGATING,
77
- [BLUR]: IDLE,
78
- [ESCAPE]: IDLE,
79
- [NAVIGATE]: NAVIGATING,
80
- [SELECT_WITH_KEYBOARD]: IDLE,
81
- [SELECT_WITH_CLICK]: IDLE,
82
- [CLOSE_WITH_BUTTON]: IDLE
83
- }
84
- }
85
- }
46
+ states: (_states = {}, _defineProperty(_states, IDLE, {
47
+ on: (_on = {}, _defineProperty(_on, BLUR, IDLE), _defineProperty(_on, CLEAR, IDLE), _defineProperty(_on, INIT, IDLE), _defineProperty(_on, CLEAR_SELECTION, IDLE), _defineProperty(_on, CHANGE, SUGGESTING), _defineProperty(_on, FOCUS, SUGGESTING), _defineProperty(_on, NAVIGATE, NAVIGATING), _defineProperty(_on, OPEN_WITH_BUTTON, SUGGESTING), _on)
48
+ }), _defineProperty(_states, SUGGESTING, {
49
+ on: (_on2 = {}, _defineProperty(_on2, CHANGE, SUGGESTING), _defineProperty(_on2, FOCUS, SUGGESTING), _defineProperty(_on2, INIT, SUGGESTING), _defineProperty(_on2, NAVIGATE, NAVIGATING), _defineProperty(_on2, CLEAR, IDLE), _defineProperty(_on2, CLEAR_SELECTION, SUGGESTING), _defineProperty(_on2, ESCAPE, IDLE), _defineProperty(_on2, BLUR, IDLE), _defineProperty(_on2, SELECT_WITH_CLICK, IDLE), _defineProperty(_on2, CLOSE_WITH_BUTTON, IDLE), _on2)
50
+ }), _defineProperty(_states, NAVIGATING, {
51
+ on: (_on3 = {}, _defineProperty(_on3, CHANGE, SUGGESTING), _defineProperty(_on3, FOCUS, SUGGESTING), _defineProperty(_on3, INIT, NAVIGATING), _defineProperty(_on3, CLEAR, IDLE), _defineProperty(_on3, CLEAR_SELECTION, NAVIGATING), _defineProperty(_on3, BLUR, IDLE), _defineProperty(_on3, ESCAPE, IDLE), _defineProperty(_on3, NAVIGATE, NAVIGATING), _defineProperty(_on3, SELECT_WITH_KEYBOARD, IDLE), _defineProperty(_on3, SELECT_WITH_CLICK, IDLE), _defineProperty(_on3, CLOSE_WITH_BUTTON, IDLE), _on3)
52
+ }), _states)
86
53
  };
87
54
  export function comboboxReducer(data, action) {
88
- const nextState = _extends({}, data, {
55
+ var nextState = _extends({}, data, {
89
56
  state: action.nextState,
90
57
  lastActionType: action.type
91
58
  });
@@ -154,8 +121,10 @@ export function comboboxReducer(data, action) {
154
121
  throw new Error("Unknown action ".concat(action.type));
155
122
  }
156
123
  }
157
- const visibleStates = [SUGGESTING, NAVIGATING];
158
- export const isVisible = state => visibleStates.indexOf(state) >= 0; ////////////////////////////////////////////////////////////////////////////////
124
+ var visibleStates = [SUGGESTING, NAVIGATING];
125
+ export var isVisible = function isVisible(state) {
126
+ return visibleStates.indexOf(state) >= 0;
127
+ }; ////////////////////////////////////////////////////////////////////////////////
159
128
  // The rest is all implementation details
160
129
  // Move focus back to the input if we start navigating w/ the
161
130
  // keyboard after focus has moved to any focusable content in
@@ -164,7 +133,7 @@ export const isVisible = state => visibleStates.indexOf(state) >= 0; ///////////
164
133
  export function useFocusManagement(lastActionType, inputRef) {
165
134
  // useEffect so that the cursor goes to the end of the input instead
166
135
  // of awkwardly at the beginning, unclear to me why ...
167
- useEffect(() => {
136
+ useEffect(function () {
168
137
  if (lastActionType === NAVIGATE || lastActionType === ESCAPE || lastActionType === SELECT_WITH_CLICK || lastActionType === OPEN_WITH_BUTTON) {
169
138
  inputRef.current && inputRef.current.focus();
170
139
  }
@@ -172,8 +141,10 @@ export function useFocusManagement(lastActionType, inputRef) {
172
141
  }
173
142
 
174
143
  function getNextItem(currentItem, incr, optionsItems, autocomplete) {
175
- const index = currentItem === '' ? -1 : optionsItems.findIndex(n => String(n.id) === currentItem);
176
- const optionsLen = optionsItems.length; // Nothing selected, either go to start, or end
144
+ var index = currentItem === '' ? -1 : optionsItems.findIndex(function (n) {
145
+ return String(n.id) === currentItem;
146
+ });
147
+ var optionsLen = optionsItems.length; // Nothing selected, either go to start, or end
177
148
 
178
149
  if (index < 0) {
179
150
  if (incr > 0) {
@@ -184,7 +155,7 @@ function getNextItem(currentItem, incr, optionsItems, autocomplete) {
184
155
  return optionsItems[optionsLen - 1].id;
185
156
  }
186
157
  } else if (autocomplete) {
187
- const nextIndex = index + incr;
158
+ var nextIndex = index + incr;
188
159
 
189
160
  if (nextIndex < 0 || nextIndex >= optionsLen) {
190
161
  // Next is outside the bounds of list, return nothing selected
@@ -200,23 +171,22 @@ function getNextItem(currentItem, incr, optionsItems, autocomplete) {
200
171
 
201
172
 
202
173
  export function useKeyDown() {
203
- const {
204
- data: {
205
- text,
206
- navigationItem
207
- },
208
- onSelect,
209
- optionsRef,
210
- inputRef,
211
- state,
212
- transition,
213
- autocompletePropRef,
214
- clearOnEscapeRef,
215
- persistSelectionRef,
216
- listScope
217
- } = useComboBoxContext();
174
+ var _useComboBoxContext = useComboBoxContext(),
175
+ _useComboBoxContext$d = _useComboBoxContext.data,
176
+ text = _useComboBoxContext$d.text,
177
+ navigationItem = _useComboBoxContext$d.navigationItem,
178
+ onSelect = _useComboBoxContext.onSelect,
179
+ optionsRef = _useComboBoxContext.optionsRef,
180
+ inputRef = _useComboBoxContext.inputRef,
181
+ state = _useComboBoxContext.state,
182
+ transition = _useComboBoxContext.transition,
183
+ autocompletePropRef = _useComboBoxContext.autocompletePropRef,
184
+ clearOnEscapeRef = _useComboBoxContext.clearOnEscapeRef,
185
+ persistSelectionRef = _useComboBoxContext.persistSelectionRef,
186
+ listScope = _useComboBoxContext.listScope;
187
+
218
188
  return function handleKeyDown(event) {
219
- const optionNodes = listScope.current.queryAllNodes(scopeQuery);
189
+ var optionNodes = listScope.current.queryAllNodes(scopeQuery);
220
190
 
221
191
  switch (event.key) {
222
192
  case 'ArrowUp':
@@ -224,7 +194,7 @@ export function useKeyDown() {
224
194
  {
225
195
  // Don't scroll the page
226
196
  event.preventDefault();
227
- const optionsLen = optionNodes.length; // If the developer didn't render any options, there's no point in
197
+ var optionsLen = optionNodes.length; // If the developer didn't render any options, there's no point in
228
198
  // trying to navigate--but seriously what the heck? Give us some
229
199
  // options fam.
230
200
 
@@ -239,14 +209,14 @@ export function useKeyDown() {
239
209
  });
240
210
  } else {
241
211
  // ArrowUp decreases index, ArrowDown increases
242
- const incr = event.key === 'ArrowUp' ? -1 : 1; // When autocompletting, we'll not cycle through the list directly
212
+ var incr = event.key === 'ArrowUp' ? -1 : 1; // When autocompletting, we'll not cycle through the list directly
243
213
 
244
- const autocomplete = autocompletePropRef.current; // Get next selected item
214
+ var autocomplete = autocompletePropRef.current; // Get next selected item
245
215
 
246
- const nextItem = getNextItem(navigationItem, incr, optionNodes, autocomplete);
247
- const value = nextItem !== '' ? optionsRef.current[nextItem].text : null;
216
+ var nextItem = getNextItem(navigationItem, incr, optionNodes, autocomplete);
217
+ var value = nextItem !== '' ? optionsRef.current[nextItem].text : null;
248
218
  transition(NAVIGATE, {
249
- value,
219
+ value: value,
250
220
  item: nextItem
251
221
  });
252
222
  }
@@ -264,18 +234,19 @@ export function useKeyDown() {
264
234
  } // emulate a inputRef change event, might not work in future versions of React
265
235
 
266
236
 
267
- const lastValue = inputRef.current.value;
237
+ var lastValue = inputRef.current.value;
268
238
  inputRef.current.value = '';
269
- const tracker = inputRef.current._valueTracker;
239
+ var tracker = inputRef.current._valueTracker;
270
240
 
271
241
  if (tracker) {
272
242
  tracker.setValue(lastValue);
273
243
  }
274
244
 
275
- const event = new Event('change', {
245
+ var _event = new Event('change', {
276
246
  bubbles: true
277
247
  });
278
- inputRef.current.dispatchEvent(event);
248
+
249
+ inputRef.current.dispatchEvent(_event);
279
250
  }
280
251
 
281
252
  break;
@@ -284,10 +255,9 @@ export function useKeyDown() {
284
255
  case 'Enter':
285
256
  {
286
257
  if (state === NAVIGATING && navigationItem !== '') {
287
- const {
288
- value: navigationValue,
289
- text: navigationText
290
- } = optionsRef.current[navigationItem]; // don't want to submit forms
258
+ var _optionsRef$current$n = optionsRef.current[navigationItem],
259
+ navigationValue = _optionsRef$current$n.value,
260
+ navigationText = _optionsRef$current$n.text; // don't want to submit forms
291
261
 
292
262
  event.preventDefault();
293
263
  onSelect && onSelect(navigationText, navigationItem, navigationValue);
@@ -303,22 +273,20 @@ export function useKeyDown() {
303
273
  };
304
274
  }
305
275
  export function useBlur() {
306
- const {
307
- data: {
308
- navigationItem,
309
- text: stateText
310
- },
311
- transition,
312
- optionsRef,
313
- popoverRef,
314
- inputRef,
315
- buttonRef,
316
- onSelect,
317
- selectOnBlur // not implemented yet
318
-
319
- } = useComboBoxContext();
276
+ var _useComboBoxContext2 = useComboBoxContext(),
277
+ _useComboBoxContext2$ = _useComboBoxContext2.data,
278
+ navigationItem = _useComboBoxContext2$.navigationItem,
279
+ stateText = _useComboBoxContext2$.text,
280
+ transition = _useComboBoxContext2.transition,
281
+ optionsRef = _useComboBoxContext2.optionsRef,
282
+ popoverRef = _useComboBoxContext2.popoverRef,
283
+ inputRef = _useComboBoxContext2.inputRef,
284
+ buttonRef = _useComboBoxContext2.buttonRef,
285
+ onSelect = _useComboBoxContext2.onSelect,
286
+ selectOnBlur = _useComboBoxContext2.selectOnBlur;
287
+
320
288
  return function handleBlur() {
321
- requestAnimationFrame(() => {
289
+ requestAnimationFrame(function () {
322
290
  // we on want to close only if focus rests outside the combobox
323
291
  if (document.activeElement !== inputRef.current && document.activeElement !== buttonRef.current && popoverRef.current) {
324
292
  if (popoverRef.current.contains(document.activeElement)) {// focus landed inside the combobox, keep it open
@@ -335,10 +303,9 @@ export function useBlur() {
335
303
  });
336
304
  } else {
337
305
  // select the currently selected item
338
- const {
339
- value: navigationValue,
340
- text: navigationText
341
- } = optionsRef.current[navigationItem];
306
+ var _optionsRef$current$n2 = optionsRef.current[navigationItem],
307
+ navigationValue = _optionsRef$current$n2.value,
308
+ navigationText = _optionsRef$current$n2.text;
342
309
  onSelect && onSelect(navigationText, navigationItem, navigationValue);
343
310
  transition(BLUR, {
344
311
  text: navigationText,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ComboBox/hooks.tsx"],"names":["useEffect","getCircularIndex","useComboBoxContext","scopeQuery","IDLE","SUGGESTING","NAVIGATING","INIT","CLEAR","CLEAR_SELECTION","CHANGE","NAVIGATE","SELECT_WITH_KEYBOARD","SELECT_WITH_CLICK","ESCAPE","BLUR","FOCUS","OPEN_WITH_BUTTON","CLOSE_WITH_BUTTON","stateChart","initial","states","on","comboboxReducer","data","action","nextState","state","lastActionType","type","text","navigationItem","item","persistSelection","Error","visibleStates","isVisible","indexOf","useFocusManagement","inputRef","current","focus","getNextItem","currentItem","incr","optionsItems","autocomplete","index","findIndex","n","String","id","optionsLen","length","nextIndex","useKeyDown","onSelect","optionsRef","transition","autocompletePropRef","clearOnEscapeRef","persistSelectionRef","listScope","handleKeyDown","event","optionNodes","queryAllNodes","key","preventDefault","nextItem","value","lastValue","tracker","_valueTracker","setValue","Event","bubbles","dispatchEvent","navigationValue","navigationText","useBlur","stateText","popoverRef","buttonRef","selectOnBlur","handleBlur","requestAnimationFrame","document","activeElement","contains"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable default-case */\nimport { useEffect } from 'react';\nimport {\n StateChart as GenericStateChart,\n StateMachineState,\n} from '../hooks/useReducerMachine';\nimport { getCircularIndex } from '../utils/getCircularIndex';\nimport { useComboBoxContext } from './context';\nimport { scopeQuery } from './scopeQuery';\n\n////////////////////////////////////////////////////////////////////////////////\n// States\n\n// Nothing going on, waiting for the user to type or use the arrow keys\nexport const IDLE = 'IDLE';\n\n// The component is suggesting options as the user types\nconst SUGGESTING = 'SUGGESTING';\n\n// The user is using the keyboard to navigate the list, not typing\nexport const NAVIGATING = 'NAVIGATING';\n\nexport type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;\n\n////////////////////////////////////////////////////////////////////////////////\n// Actions:\n\n// Used to sync the state with controlled state, right after mounting\nexport const INIT = 'INIT';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR = 'CLEAR';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR_SELECTION = 'CLEAR_SELECTION';\n\n// User is typing\nexport const CHANGE = 'CHANGE';\n\n// User is navigating w/ the keyboard\nexport const NAVIGATE = 'NAVIGATE';\n\n// User can be navigating with keyboard and then click instead, we want the\n// value from the click, not the current nav item\nconst SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';\nexport const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK';\n\n// Pretty self-explanatory, user can hit escape or blur to close the popover\nconst ESCAPE = 'ESCAPE';\nconst BLUR = 'BLUR';\n\nexport const FOCUS = 'FOCUS';\n\nexport const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';\n\nexport const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';\n\nexport type ActionTypes =\n | typeof CLEAR\n | typeof CLEAR_SELECTION\n | typeof CHANGE\n | typeof INIT\n | typeof NAVIGATE\n | typeof SELECT_WITH_KEYBOARD\n | typeof SELECT_WITH_CLICK\n | typeof ESCAPE\n | typeof BLUR\n | typeof FOCUS\n | typeof OPEN_WITH_BUTTON\n | typeof CLOSE_WITH_BUTTON;\n\n////////////////////////////////////////////////////////////////////////////////\nexport const stateChart: GenericStateChart<StateTypes, ActionTypes> = {\n initial: IDLE,\n states: {\n [IDLE]: {\n on: {\n [BLUR]: IDLE,\n [CLEAR]: IDLE,\n [INIT]: IDLE,\n [CLEAR_SELECTION]: IDLE,\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [OPEN_WITH_BUTTON]: SUGGESTING,\n },\n },\n [SUGGESTING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: SUGGESTING,\n [ESCAPE]: IDLE,\n [BLUR]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n [NAVIGATING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: NAVIGATING,\n [BLUR]: IDLE,\n [ESCAPE]: IDLE,\n [NAVIGATE]: NAVIGATING,\n [SELECT_WITH_KEYBOARD]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n },\n};\n\nexport interface ReducerState\n extends StateMachineState<StateTypes, ActionTypes> {\n item: string;\n navigationItem: string;\n text: string;\n}\n\ninterface ActionObject {\n type: ActionTypes;\n state: StateTypes;\n nextState: StateTypes;\n [rest: string]: any;\n}\n\nexport function comboboxReducer(\n data: Readonly<ReducerState>,\n action: ActionObject\n): ReducerState {\n const nextState = {\n ...data,\n state: action.nextState,\n lastActionType: action.type,\n };\n\n switch (action.type) {\n case INIT:\n case CHANGE:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: '',\n };\n case NAVIGATE:\n case OPEN_WITH_BUTTON:\n if (action.persistSelection) {\n return {\n ...nextState,\n navigationItem: data.item,\n };\n }\n\n return {\n ...nextState,\n navigationItem: action.item,\n };\n case CLEAR_SELECTION:\n return {\n ...nextState,\n navigationItem: '',\n };\n case CLEAR:\n return {\n ...nextState,\n text: '',\n navigationItem: '',\n item: '',\n };\n case BLUR:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: action.item,\n };\n case CLOSE_WITH_BUTTON:\n case ESCAPE:\n return {\n ...nextState,\n navigationItem: '',\n item: '',\n };\n case SELECT_WITH_CLICK:\n case SELECT_WITH_KEYBOARD:\n return {\n ...nextState,\n text: action.text,\n item: action.item,\n navigationItem: '',\n };\n case FOCUS:\n return {\n ...nextState,\n navigationItem: action.item,\n };\n\n default:\n throw new Error(`Unknown action ${action.type}`);\n }\n}\n\nconst visibleStates = [SUGGESTING, NAVIGATING];\nexport const isVisible = (state: any) => visibleStates.indexOf(state) >= 0;\n\n////////////////////////////////////////////////////////////////////////////////\n// The rest is all implementation details\n\n// Move focus back to the input if we start navigating w/ the\n// keyboard after focus has moved to any focusable content in\n// the popup.\nexport function useFocusManagement(\n lastActionType: ActionTypes,\n inputRef: React.MutableRefObject<HTMLInputElement | null>\n) {\n // useEffect so that the cursor goes to the end of the input instead\n // of awkwardly at the beginning, unclear to me why ...\n useEffect(() => {\n if (\n lastActionType === NAVIGATE ||\n lastActionType === ESCAPE ||\n lastActionType === SELECT_WITH_CLICK ||\n lastActionType === OPEN_WITH_BUTTON\n ) {\n inputRef.current && inputRef.current.focus();\n }\n });\n}\n\nfunction getNextItem(\n currentItem: string,\n incr: number,\n optionsItems: HTMLElement[],\n autocomplete: boolean\n): string {\n const index =\n currentItem === ''\n ? -1\n : optionsItems.findIndex((n) => String(n.id) === currentItem);\n\n const optionsLen = optionsItems.length;\n\n // Nothing selected, either go to start, or end\n if (index < 0) {\n if (incr > 0) {\n // Go to start\n return optionsItems[0].id;\n } else {\n // Go to end\n return optionsItems[optionsLen - 1].id;\n }\n } else if (autocomplete) {\n const nextIndex = index + incr;\n\n if (nextIndex < 0 || nextIndex >= optionsLen) {\n // Next is outside the bounds of list, return nothing selected\n return '';\n }\n }\n\n // I'm sure it won't be null, we already check optionsLen above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return optionsItems[getCircularIndex(index + incr, optionsLen)!].id;\n}\n\n// We want the same events when the input or the popup have focus (HOW COOL ARE\n// HOOKS BTW?) This is probably the hairiest piece but it's not bad.\nexport function useKeyDown() {\n const {\n data: { text, navigationItem },\n onSelect,\n optionsRef,\n inputRef,\n state,\n transition,\n autocompletePropRef,\n clearOnEscapeRef,\n persistSelectionRef,\n listScope,\n } = useComboBoxContext();\n\n return function handleKeyDown(event: React.KeyboardEvent<any>) {\n const optionNodes = listScope.current.queryAllNodes(scopeQuery);\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n // Don't scroll the page\n event.preventDefault();\n\n const optionsLen = optionNodes.length;\n\n // If the developer didn't render any options, there's no point in\n // trying to navigate--but seriously what the heck? Give us some\n // options fam.\n if (optionsLen === 0) {\n return;\n }\n\n if (state === IDLE) {\n // Opening a closed list\n transition(NAVIGATE, {\n persistSelection: persistSelectionRef.current,\n });\n } else {\n // ArrowUp decreases index, ArrowDown increases\n const incr = event.key === 'ArrowUp' ? -1 : 1;\n\n // When autocompletting, we'll not cycle through the list directly\n const autocomplete = autocompletePropRef.current;\n\n // Get next selected item\n const nextItem = getNextItem(\n navigationItem,\n incr,\n optionNodes,\n autocomplete\n );\n\n const value =\n nextItem !== '' ? optionsRef.current[nextItem].text : null;\n\n transition(NAVIGATE, { value, item: nextItem });\n }\n break;\n }\n case 'Escape': {\n if (state !== IDLE) {\n transition(ESCAPE);\n } else if (state === IDLE && text !== '') {\n if (!inputRef.current || !clearOnEscapeRef.current) {\n break;\n }\n\n // emulate a inputRef change event, might not work in future versions of React\n const lastValue = inputRef.current.value;\n inputRef.current.value = '';\n\n const tracker = (inputRef.current as any)._valueTracker;\n if (tracker) {\n tracker.setValue(lastValue);\n }\n\n const event = new Event('change', { bubbles: true });\n inputRef.current.dispatchEvent(event);\n }\n break;\n }\n case 'Enter': {\n if (state === NAVIGATING && navigationItem !== '') {\n const {\n value: navigationValue,\n text: navigationText,\n } = optionsRef.current[navigationItem];\n\n // don't want to submit forms\n event.preventDefault();\n onSelect && onSelect(navigationText, navigationItem, navigationValue);\n transition(SELECT_WITH_KEYBOARD, {\n text: navigationText,\n item: navigationItem,\n });\n }\n break;\n }\n }\n };\n}\n\nexport function useBlur() {\n const {\n data: { navigationItem, text: stateText },\n transition,\n optionsRef,\n popoverRef,\n inputRef,\n buttonRef,\n onSelect,\n selectOnBlur, // not implemented yet\n } = useComboBoxContext();\n\n return function handleBlur() {\n requestAnimationFrame(() => {\n // we on want to close only if focus rests outside the combobox\n if (\n document.activeElement !== inputRef.current &&\n document.activeElement !== buttonRef.current &&\n popoverRef.current\n ) {\n if (popoverRef.current.contains(document.activeElement)) {\n // focus landed inside the combobox, keep it open\n // in the future, we can make it not close, select, or anything\n // this way we can have like... checkboxes available in the\n // menu item, etc.\n } else {\n // focus landed outside the combobox, close it.\n if (!selectOnBlur || navigationItem === '') {\n // we don't wanna select on blur, or navigationIndex is invalid\n transition(BLUR, { text: stateText, item: '' });\n } else {\n // select the currently selected item\n const {\n value: navigationValue,\n text: navigationText,\n } = optionsRef.current[navigationItem];\n\n onSelect &&\n onSelect(navigationText, navigationItem, navigationValue);\n\n transition(BLUR, {\n text: navigationText,\n item: navigationItem,\n });\n }\n }\n }\n });\n };\n}\n"],"file":"hooks.js"}
1
+ {"version":3,"sources":["../../../src/ComboBox/hooks.tsx"],"names":["useEffect","getCircularIndex","useComboBoxContext","scopeQuery","IDLE","SUGGESTING","NAVIGATING","INIT","CLEAR","CLEAR_SELECTION","CHANGE","NAVIGATE","SELECT_WITH_KEYBOARD","SELECT_WITH_CLICK","ESCAPE","BLUR","FOCUS","OPEN_WITH_BUTTON","CLOSE_WITH_BUTTON","stateChart","initial","states","on","comboboxReducer","data","action","nextState","state","lastActionType","type","text","navigationItem","item","persistSelection","Error","visibleStates","isVisible","indexOf","useFocusManagement","inputRef","current","focus","getNextItem","currentItem","incr","optionsItems","autocomplete","index","findIndex","n","String","id","optionsLen","length","nextIndex","useKeyDown","onSelect","optionsRef","transition","autocompletePropRef","clearOnEscapeRef","persistSelectionRef","listScope","handleKeyDown","event","optionNodes","queryAllNodes","key","preventDefault","nextItem","value","lastValue","tracker","_valueTracker","setValue","Event","bubbles","dispatchEvent","navigationValue","navigationText","useBlur","stateText","popoverRef","buttonRef","selectOnBlur","handleBlur","requestAnimationFrame","document","activeElement","contains"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable default-case */\nimport { useEffect } from 'react';\n\nimport type {\n StateChart as GenericStateChart,\n StateMachineState,\n} from '../hooks/useReducerMachine';\nimport { getCircularIndex } from '../utils/getCircularIndex';\nimport { useComboBoxContext } from './context';\nimport { scopeQuery } from './scopeQuery';\n\n////////////////////////////////////////////////////////////////////////////////\n// States\n\n// Nothing going on, waiting for the user to type or use the arrow keys\nexport const IDLE = 'IDLE';\n\n// The component is suggesting options as the user types\nconst SUGGESTING = 'SUGGESTING';\n\n// The user is using the keyboard to navigate the list, not typing\nexport const NAVIGATING = 'NAVIGATING';\n\nexport type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;\n\n////////////////////////////////////////////////////////////////////////////////\n// Actions:\n\n// Used to sync the state with controlled state, right after mounting\nexport const INIT = 'INIT';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR = 'CLEAR';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR_SELECTION = 'CLEAR_SELECTION';\n\n// User is typing\nexport const CHANGE = 'CHANGE';\n\n// User is navigating w/ the keyboard\nexport const NAVIGATE = 'NAVIGATE';\n\n// User can be navigating with keyboard and then click instead, we want the\n// value from the click, not the current nav item\nconst SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';\nexport const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK';\n\n// Pretty self-explanatory, user can hit escape or blur to close the popover\nconst ESCAPE = 'ESCAPE';\nconst BLUR = 'BLUR';\n\nexport const FOCUS = 'FOCUS';\n\nexport const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';\n\nexport const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';\n\nexport type ActionTypes =\n | typeof CLEAR\n | typeof CLEAR_SELECTION\n | typeof CHANGE\n | typeof INIT\n | typeof NAVIGATE\n | typeof SELECT_WITH_KEYBOARD\n | typeof SELECT_WITH_CLICK\n | typeof ESCAPE\n | typeof BLUR\n | typeof FOCUS\n | typeof OPEN_WITH_BUTTON\n | typeof CLOSE_WITH_BUTTON;\n\n////////////////////////////////////////////////////////////////////////////////\nexport const stateChart: GenericStateChart<StateTypes, ActionTypes> = {\n initial: IDLE,\n states: {\n [IDLE]: {\n on: {\n [BLUR]: IDLE,\n [CLEAR]: IDLE,\n [INIT]: IDLE,\n [CLEAR_SELECTION]: IDLE,\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [OPEN_WITH_BUTTON]: SUGGESTING,\n },\n },\n [SUGGESTING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: SUGGESTING,\n [ESCAPE]: IDLE,\n [BLUR]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n [NAVIGATING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: NAVIGATING,\n [BLUR]: IDLE,\n [ESCAPE]: IDLE,\n [NAVIGATE]: NAVIGATING,\n [SELECT_WITH_KEYBOARD]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n },\n};\n\nexport interface ReducerState\n extends StateMachineState<StateTypes, ActionTypes> {\n item: string;\n navigationItem: string;\n text: string;\n}\n\ninterface ActionObject {\n type: ActionTypes;\n state: StateTypes;\n nextState: StateTypes;\n [rest: string]: any;\n}\n\nexport function comboboxReducer(\n data: Readonly<ReducerState>,\n action: ActionObject\n): ReducerState {\n const nextState = {\n ...data,\n state: action.nextState,\n lastActionType: action.type,\n };\n\n switch (action.type) {\n case INIT:\n case CHANGE:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: '',\n };\n case NAVIGATE:\n case OPEN_WITH_BUTTON:\n if (action.persistSelection) {\n return {\n ...nextState,\n navigationItem: data.item,\n };\n }\n\n return {\n ...nextState,\n navigationItem: action.item,\n };\n case CLEAR_SELECTION:\n return {\n ...nextState,\n navigationItem: '',\n };\n case CLEAR:\n return {\n ...nextState,\n text: '',\n navigationItem: '',\n item: '',\n };\n case BLUR:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: action.item,\n };\n case CLOSE_WITH_BUTTON:\n case ESCAPE:\n return {\n ...nextState,\n navigationItem: '',\n item: '',\n };\n case SELECT_WITH_CLICK:\n case SELECT_WITH_KEYBOARD:\n return {\n ...nextState,\n text: action.text,\n item: action.item,\n navigationItem: '',\n };\n case FOCUS:\n return {\n ...nextState,\n navigationItem: action.item,\n };\n\n default:\n throw new Error(`Unknown action ${action.type}`);\n }\n}\n\nconst visibleStates = [SUGGESTING, NAVIGATING];\nexport const isVisible = (state: any) => visibleStates.indexOf(state) >= 0;\n\n////////////////////////////////////////////////////////////////////////////////\n// The rest is all implementation details\n\n// Move focus back to the input if we start navigating w/ the\n// keyboard after focus has moved to any focusable content in\n// the popup.\nexport function useFocusManagement(\n lastActionType: ActionTypes,\n inputRef: React.MutableRefObject<HTMLInputElement | null>\n) {\n // useEffect so that the cursor goes to the end of the input instead\n // of awkwardly at the beginning, unclear to me why ...\n useEffect(() => {\n if (\n lastActionType === NAVIGATE ||\n lastActionType === ESCAPE ||\n lastActionType === SELECT_WITH_CLICK ||\n lastActionType === OPEN_WITH_BUTTON\n ) {\n inputRef.current && inputRef.current.focus();\n }\n });\n}\n\nfunction getNextItem(\n currentItem: string,\n incr: number,\n optionsItems: HTMLElement[],\n autocomplete: boolean\n): string {\n const index =\n currentItem === ''\n ? -1\n : optionsItems.findIndex((n) => String(n.id) === currentItem);\n\n const optionsLen = optionsItems.length;\n\n // Nothing selected, either go to start, or end\n if (index < 0) {\n if (incr > 0) {\n // Go to start\n return optionsItems[0].id;\n } else {\n // Go to end\n return optionsItems[optionsLen - 1].id;\n }\n } else if (autocomplete) {\n const nextIndex = index + incr;\n\n if (nextIndex < 0 || nextIndex >= optionsLen) {\n // Next is outside the bounds of list, return nothing selected\n return '';\n }\n }\n\n // I'm sure it won't be null, we already check optionsLen above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return optionsItems[getCircularIndex(index + incr, optionsLen)!].id;\n}\n\n// We want the same events when the input or the popup have focus (HOW COOL ARE\n// HOOKS BTW?) This is probably the hairiest piece but it's not bad.\nexport function useKeyDown() {\n const {\n data: { text, navigationItem },\n onSelect,\n optionsRef,\n inputRef,\n state,\n transition,\n autocompletePropRef,\n clearOnEscapeRef,\n persistSelectionRef,\n listScope,\n } = useComboBoxContext();\n\n return function handleKeyDown(event: React.KeyboardEvent<any>) {\n const optionNodes = listScope.current.queryAllNodes(scopeQuery);\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n // Don't scroll the page\n event.preventDefault();\n\n const optionsLen = optionNodes.length;\n\n // If the developer didn't render any options, there's no point in\n // trying to navigate--but seriously what the heck? Give us some\n // options fam.\n if (optionsLen === 0) {\n return;\n }\n\n if (state === IDLE) {\n // Opening a closed list\n transition(NAVIGATE, {\n persistSelection: persistSelectionRef.current,\n });\n } else {\n // ArrowUp decreases index, ArrowDown increases\n const incr = event.key === 'ArrowUp' ? -1 : 1;\n\n // When autocompletting, we'll not cycle through the list directly\n const autocomplete = autocompletePropRef.current;\n\n // Get next selected item\n const nextItem = getNextItem(\n navigationItem,\n incr,\n optionNodes,\n autocomplete\n );\n\n const value =\n nextItem !== '' ? optionsRef.current[nextItem].text : null;\n\n transition(NAVIGATE, { value, item: nextItem });\n }\n break;\n }\n case 'Escape': {\n if (state !== IDLE) {\n transition(ESCAPE);\n } else if (state === IDLE && text !== '') {\n if (!inputRef.current || !clearOnEscapeRef.current) {\n break;\n }\n\n // emulate a inputRef change event, might not work in future versions of React\n const lastValue = inputRef.current.value;\n inputRef.current.value = '';\n\n const tracker = (inputRef.current as any)._valueTracker;\n if (tracker) {\n tracker.setValue(lastValue);\n }\n\n const event = new Event('change', { bubbles: true });\n inputRef.current.dispatchEvent(event);\n }\n break;\n }\n case 'Enter': {\n if (state === NAVIGATING && navigationItem !== '') {\n const { value: navigationValue, text: navigationText } =\n optionsRef.current[navigationItem];\n\n // don't want to submit forms\n event.preventDefault();\n onSelect && onSelect(navigationText, navigationItem, navigationValue);\n transition(SELECT_WITH_KEYBOARD, {\n text: navigationText,\n item: navigationItem,\n });\n }\n break;\n }\n }\n };\n}\n\nexport function useBlur() {\n const {\n data: { navigationItem, text: stateText },\n transition,\n optionsRef,\n popoverRef,\n inputRef,\n buttonRef,\n onSelect,\n selectOnBlur, // not implemented yet\n } = useComboBoxContext();\n\n return function handleBlur() {\n requestAnimationFrame(() => {\n // we on want to close only if focus rests outside the combobox\n if (\n document.activeElement !== inputRef.current &&\n document.activeElement !== buttonRef.current &&\n popoverRef.current\n ) {\n if (popoverRef.current.contains(document.activeElement)) {\n // focus landed inside the combobox, keep it open\n // in the future, we can make it not close, select, or anything\n // this way we can have like... checkboxes available in the\n // menu item, etc.\n } else {\n // focus landed outside the combobox, close it.\n if (!selectOnBlur || navigationItem === '') {\n // we don't wanna select on blur, or navigationIndex is invalid\n transition(BLUR, { text: stateText, item: '' });\n } else {\n // select the currently selected item\n const { value: navigationValue, text: navigationText } =\n optionsRef.current[navigationItem];\n\n onSelect &&\n onSelect(navigationText, navigationItem, navigationValue);\n\n transition(BLUR, {\n text: navigationText,\n item: navigationItem,\n });\n }\n }\n }\n });\n };\n}\n"],"file":"hooks.js"}
File without changes
File without changes
File without changes
File without changes