@basic-ui/core 0.0.54 → 0.0.57

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 (410) hide show
  1. package/README.md +3 -3
  2. package/build/cjs/index.js +364 -591
  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 +20 -29
  6. package/build/esm/Accordion/Accordion.js.map +1 -1
  7. package/build/esm/Accordion/AccordionBody.d.ts +6 -6
  8. package/build/esm/Accordion/AccordionBody.js +18 -32
  9. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  10. package/build/esm/Accordion/AccordionHeader.d.ts +7 -7
  11. package/build/esm/Accordion/AccordionHeader.js +37 -74
  12. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  13. package/build/esm/Accordion/AccordionItem.d.ts +9 -9
  14. package/build/esm/Accordion/AccordionItem.js +19 -22
  15. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  16. package/build/esm/Accordion/context.d.ts +19 -19
  17. package/build/esm/Accordion/context.js +16 -13
  18. package/build/esm/Accordion/context.js.map +1 -1
  19. package/build/esm/Accordion/index.d.ts +4 -4
  20. package/build/esm/Accordion/index.js.map +1 -1
  21. package/build/esm/Accordion/scopeQuery.d.ts +2 -2
  22. package/build/esm/Accordion/scopeQuery.js.map +1 -1
  23. package/build/esm/CheckBox/CheckBox.d.ts +7 -7
  24. package/build/esm/CheckBox/CheckBox.js +15 -25
  25. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  26. package/build/esm/CheckBox/index.d.ts +1 -1
  27. package/build/esm/CheckBox/index.js.map +1 -1
  28. package/build/esm/ComboBox/Combobox.d.ts +18 -18
  29. package/build/esm/ComboBox/Combobox.js +52 -59
  30. package/build/esm/ComboBox/Combobox.js.map +1 -1
  31. package/build/esm/ComboBox/ComboboxButton.d.ts +9 -9
  32. package/build/esm/ComboBox/ComboboxButton.js +23 -28
  33. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  34. package/build/esm/ComboBox/ComboboxInput.d.ts +17 -17
  35. package/build/esm/ComboBox/ComboboxInput.js +67 -70
  36. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  37. package/build/esm/ComboBox/ComboboxLabel.d.ts +7 -7
  38. package/build/esm/ComboBox/ComboboxLabel.js +15 -17
  39. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  40. package/build/esm/ComboBox/ComboboxList.d.ts +8 -8
  41. package/build/esm/ComboBox/ComboboxList.js +19 -20
  42. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  43. package/build/esm/ComboBox/ComboboxOption.d.ts +11 -11
  44. package/build/esm/ComboBox/ComboboxOption.js +41 -45
  45. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  46. package/build/esm/ComboBox/ComboboxPopover.d.ts +9 -9
  47. package/build/esm/ComboBox/ComboboxPopover.js +22 -21
  48. package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
  49. package/build/esm/ComboBox/cities.d.ts +5 -5
  50. package/build/esm/ComboBox/cities.js.map +1 -1
  51. package/build/esm/ComboBox/context.d.ts +30 -30
  52. package/build/esm/ComboBox/context.js +5 -6
  53. package/build/esm/ComboBox/context.js.map +1 -1
  54. package/build/esm/ComboBox/hooks.d.ts +37 -37
  55. package/build/esm/ComboBox/hooks.js +175 -148
  56. package/build/esm/ComboBox/hooks.js.map +1 -1
  57. package/build/esm/ComboBox/index.d.ts +8 -8
  58. package/build/esm/ComboBox/index.js.map +1 -1
  59. package/build/esm/ComboBox/makeHash.d.ts +1 -1
  60. package/build/esm/ComboBox/makeHash.js +3 -6
  61. package/build/esm/ComboBox/makeHash.js.map +1 -1
  62. package/build/esm/ComboBox/scopeQuery.d.ts +1 -1
  63. package/build/esm/ComboBox/scopeQuery.js.map +1 -1
  64. package/build/esm/FocusLock/FocusLock.d.ts +9 -9
  65. package/build/esm/FocusLock/FocusLock.js +26 -32
  66. package/build/esm/FocusLock/FocusLock.js.map +1 -1
  67. package/build/esm/FocusLock/index.d.ts +1 -1
  68. package/build/esm/FocusLock/index.js.map +1 -1
  69. package/build/esm/FocusLock/tabUtils.d.ts +3 -3
  70. package/build/esm/FocusLock/tabUtils.js +5 -7
  71. package/build/esm/FocusLock/tabUtils.js.map +1 -1
  72. package/build/esm/FocusLock/useFocusLock.d.ts +7 -7
  73. package/build/esm/FocusLock/useFocusLock.js +14 -19
  74. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  75. package/build/esm/List/List.d.ts +7 -7
  76. package/build/esm/List/List.js +9 -11
  77. package/build/esm/List/List.js.map +1 -1
  78. package/build/esm/List/ListItem.d.ts +7 -7
  79. package/build/esm/List/ListItem.js +9 -11
  80. package/build/esm/List/ListItem.js.map +1 -1
  81. package/build/esm/List/context.d.ts +4 -4
  82. package/build/esm/List/context.js +6 -6
  83. package/build/esm/List/context.js.map +1 -1
  84. package/build/esm/List/index.d.ts +2 -2
  85. package/build/esm/List/index.js.map +1 -1
  86. package/build/esm/Menu/ContextMenuTrigger.d.ts +11 -11
  87. package/build/esm/Menu/ContextMenuTrigger.js +32 -37
  88. package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
  89. package/build/esm/Menu/Menu.d.ts +10 -10
  90. package/build/esm/Menu/Menu.js +33 -49
  91. package/build/esm/Menu/Menu.js.map +1 -1
  92. package/build/esm/Menu/MenuButton.d.ts +11 -11
  93. package/build/esm/Menu/MenuButton.js +28 -44
  94. package/build/esm/Menu/MenuButton.js.map +1 -1
  95. package/build/esm/Menu/MenuItem.d.ts +8 -8
  96. package/build/esm/Menu/MenuItem.js +29 -38
  97. package/build/esm/Menu/MenuItem.js.map +1 -1
  98. package/build/esm/Menu/MenuList.d.ts +7 -7
  99. package/build/esm/Menu/MenuList.js +61 -116
  100. package/build/esm/Menu/MenuList.js.map +1 -1
  101. package/build/esm/Menu/MenuPopover.d.ts +8 -8
  102. package/build/esm/Menu/MenuPopover.js +16 -19
  103. package/build/esm/Menu/MenuPopover.js.map +1 -1
  104. package/build/esm/Menu/context.d.ts +25 -25
  105. package/build/esm/Menu/context.js +14 -12
  106. package/build/esm/Menu/context.js.map +1 -1
  107. package/build/esm/Menu/fixtures/countryList.d.ts +1 -1
  108. package/build/esm/Menu/fixtures/countryList.js +1 -1
  109. package/build/esm/Menu/fixtures/countryList.js.map +1 -1
  110. package/build/esm/Menu/index.d.ts +6 -6
  111. package/build/esm/Menu/index.js.map +1 -1
  112. package/build/esm/Menu/scope.d.ts +1 -1
  113. package/build/esm/Menu/scope.js.map +1 -1
  114. package/build/esm/Modal/Modal.d.ts +9 -9
  115. package/build/esm/Modal/Modal.js +13 -18
  116. package/build/esm/Modal/Modal.js.map +1 -1
  117. package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
  118. package/build/esm/Modal/ModalBackdrop.js +24 -33
  119. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  120. package/build/esm/Modal/index.d.ts +2 -2
  121. package/build/esm/Modal/index.js.map +1 -1
  122. package/build/esm/Popper/Popper.d.ts +35 -35
  123. package/build/esm/Popper/Popper.js +44 -60
  124. package/build/esm/Popper/Popper.js.map +1 -1
  125. package/build/esm/Popper/PopperArrow.d.ts +6 -6
  126. package/build/esm/Popper/PopperArrow.js +11 -16
  127. package/build/esm/Popper/PopperArrow.js.map +1 -1
  128. package/build/esm/Popper/context.d.ts +6 -6
  129. package/build/esm/Popper/context.js +3 -5
  130. package/build/esm/Popper/context.js.map +1 -1
  131. package/build/esm/Popper/index.d.ts +3 -3
  132. package/build/esm/Popper/index.js.map +1 -1
  133. package/build/esm/Portal/Portal.d.ts +7 -7
  134. package/build/esm/Portal/Portal.js +9 -11
  135. package/build/esm/Portal/Portal.js.map +1 -1
  136. package/build/esm/Portal/PortalSelectorProvider.d.ts +8 -8
  137. package/build/esm/Portal/PortalSelectorProvider.js +6 -4
  138. package/build/esm/Portal/PortalSelectorProvider.js.map +1 -1
  139. package/build/esm/Portal/index.d.ts +2 -2
  140. package/build/esm/Portal/index.js.map +1 -1
  141. package/build/esm/RadioButton/RadioButton.d.ts +10 -10
  142. package/build/esm/RadioButton/RadioButton.js +17 -23
  143. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  144. package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
  145. package/build/esm/RadioButton/RadioGroup.js +19 -28
  146. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  147. package/build/esm/RadioButton/context.d.ts +9 -9
  148. package/build/esm/RadioButton/context.js +8 -6
  149. package/build/esm/RadioButton/context.js.map +1 -1
  150. package/build/esm/RadioButton/index.d.ts +2 -2
  151. package/build/esm/RadioButton/index.js.map +1 -1
  152. package/build/esm/SkipNav/SkipNav.d.ts +7 -7
  153. package/build/esm/SkipNav/SkipNav.js +9 -11
  154. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  155. package/build/esm/SkipNav/index.d.ts +1 -1
  156. package/build/esm/SkipNav/index.js.map +1 -1
  157. package/build/esm/Slider/Slider.d.ts +197 -197
  158. package/build/esm/Slider/Slider.js +422 -489
  159. package/build/esm/Slider/Slider.js.map +1 -1
  160. package/build/esm/Slider/index.d.ts +1 -1
  161. package/build/esm/Slider/index.js.map +1 -1
  162. package/build/esm/Spinner/Spinner.d.ts +12 -12
  163. package/build/esm/Spinner/Spinner.js +31 -59
  164. package/build/esm/Spinner/Spinner.js.map +1 -1
  165. package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
  166. package/build/esm/Spinner/SpinnerButton.js +14 -19
  167. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  168. package/build/esm/Spinner/context.d.ts +12 -12
  169. package/build/esm/Spinner/context.js +8 -7
  170. package/build/esm/Spinner/context.js.map +1 -1
  171. package/build/esm/Spinner/index.d.ts +2 -2
  172. package/build/esm/Spinner/index.js.map +1 -1
  173. package/build/esm/Tabs/Tab.d.ts +7 -7
  174. package/build/esm/Tabs/Tab.js +32 -50
  175. package/build/esm/Tabs/Tab.js.map +1 -1
  176. package/build/esm/Tabs/TabList.d.ts +9 -9
  177. package/build/esm/Tabs/TabList.js +24 -34
  178. package/build/esm/Tabs/TabList.js.map +1 -1
  179. package/build/esm/Tabs/TabPanel.d.ts +8 -8
  180. package/build/esm/Tabs/TabPanel.js +16 -23
  181. package/build/esm/Tabs/TabPanel.js.map +1 -1
  182. package/build/esm/Tabs/TabPanels.d.ts +8 -8
  183. package/build/esm/Tabs/TabPanels.js +15 -20
  184. package/build/esm/Tabs/TabPanels.js.map +1 -1
  185. package/build/esm/Tabs/Tabs.d.ts +10 -10
  186. package/build/esm/Tabs/Tabs.js +17 -33
  187. package/build/esm/Tabs/Tabs.js.map +1 -1
  188. package/build/esm/Tabs/context.d.ts +17 -17
  189. package/build/esm/Tabs/context.js +16 -13
  190. package/build/esm/Tabs/context.js.map +1 -1
  191. package/build/esm/Tabs/index.d.ts +5 -5
  192. package/build/esm/Tabs/index.js.map +1 -1
  193. package/build/esm/Tabs/scopeQuery.d.ts +1 -1
  194. package/build/esm/Tabs/scopeQuery.js.map +1 -1
  195. package/build/esm/Tooltip/Tooltip.d.ts +10 -10
  196. package/build/esm/Tooltip/Tooltip.js +20 -30
  197. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  198. package/build/esm/Tooltip/index.d.ts +1 -1
  199. package/build/esm/Tooltip/index.js.map +1 -1
  200. package/build/esm/Tooltip/stateMachine.d.ts +28 -28
  201. package/build/esm/Tooltip/stateMachine.js +95 -81
  202. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  203. package/build/esm/Tooltip/useTooltip.d.ts +10 -10
  204. package/build/esm/Tooltip/useTooltip.js +38 -50
  205. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  206. package/build/esm/hooks/index.d.ts +13 -13
  207. package/build/esm/hooks/index.js.map +1 -1
  208. package/build/esm/hooks/useAutoFocus.d.ts +2 -2
  209. package/build/esm/hooks/useAutoFocus.js +3 -3
  210. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  211. package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
  212. package/build/esm/hooks/useChildrenCounter.js +6 -8
  213. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  214. package/build/esm/hooks/useControlledState.d.ts +3 -3
  215. package/build/esm/hooks/useControlledState.js +6 -16
  216. package/build/esm/hooks/useControlledState.js.map +1 -1
  217. package/build/esm/hooks/useFocusReturn.d.ts +2 -2
  218. package/build/esm/hooks/useFocusReturn.js +8 -12
  219. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  220. package/build/esm/hooks/useFocusState.d.ts +11 -11
  221. package/build/esm/hooks/useFocusState.js +9 -15
  222. package/build/esm/hooks/useFocusState.js.map +1 -1
  223. package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
  224. package/build/esm/hooks/useGestureHandlers.js +80 -100
  225. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  226. package/build/esm/hooks/useMeasure.d.ts +7 -7
  227. package/build/esm/hooks/useMeasure.js +7 -15
  228. package/build/esm/hooks/useMeasure.js.map +1 -1
  229. package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
  230. package/build/esm/hooks/useOnClickOutside.js +4 -6
  231. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  232. package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
  233. package/build/esm/hooks/useOnKeyDown.js +3 -4
  234. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  235. package/build/esm/hooks/useReducerMachine.d.ts +24 -24
  236. package/build/esm/hooks/useReducerMachine.js +15 -26
  237. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  238. package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
  239. package/build/esm/hooks/useRemoveBodyScroll.js +9 -14
  240. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  241. package/build/esm/hooks/useScope.d.ts +11 -11
  242. package/build/esm/hooks/useScope.js +12 -14
  243. package/build/esm/hooks/useScope.js.map +1 -1
  244. package/build/esm/hooks/useThrottle.d.ts +1 -1
  245. package/build/esm/hooks/useThrottle.js +5 -10
  246. package/build/esm/hooks/useThrottle.js.map +1 -1
  247. package/build/esm/index.d.ts +15 -15
  248. package/build/esm/index.js +4 -2
  249. package/build/esm/index.js.map +1 -1
  250. package/build/esm/styles.d.js +2 -0
  251. package/build/esm/styles.d.js.map +1 -0
  252. package/build/esm/utils/assign-ref.d.ts +3 -3
  253. package/build/esm/utils/assign-ref.js +3 -5
  254. package/build/esm/utils/assign-ref.js.map +1 -1
  255. package/build/esm/utils/can-use-dom.d.ts +1 -1
  256. package/build/esm/utils/can-use-dom.js.map +1 -1
  257. package/build/esm/utils/clamp.d.ts +1 -1
  258. package/build/esm/utils/clamp.js.map +1 -1
  259. package/build/esm/utils/context.d.ts +7 -7
  260. package/build/esm/utils/context.js +13 -20
  261. package/build/esm/utils/context.js.map +1 -1
  262. package/build/esm/utils/create-subscription.d.ts +4 -4
  263. package/build/esm/utils/create-subscription.js +5 -10
  264. package/build/esm/utils/create-subscription.js.map +1 -1
  265. package/build/esm/utils/get-circular-index.d.ts +1 -1
  266. package/build/esm/utils/get-circular-index.js +0 -1
  267. package/build/esm/utils/get-circular-index.js.map +1 -1
  268. package/build/esm/utils/index.d.ts +10 -10
  269. package/build/esm/utils/index.js.map +1 -1
  270. package/build/esm/utils/is-right-click.d.ts +6 -6
  271. package/build/esm/utils/is-right-click.js +4 -4
  272. package/build/esm/utils/is-right-click.js.map +1 -1
  273. package/build/esm/utils/owner-document.d.ts +7 -7
  274. package/build/esm/utils/owner-document.js +6 -6
  275. package/build/esm/utils/owner-document.js.map +1 -1
  276. package/build/esm/utils/polymorphic.d.ts +39 -39
  277. package/build/esm/utils/polymorphic.js.map +1 -1
  278. package/build/esm/utils/rubber-band-clamp.d.ts +2 -2
  279. package/build/esm/utils/rubber-band-clamp.js +2 -5
  280. package/build/esm/utils/rubber-band-clamp.js.map +1 -1
  281. package/build/esm/utils/use-stable-callback.d.ts +16 -16
  282. package/build/esm/utils/use-stable-callback.js +24 -26
  283. package/build/esm/utils/use-stable-callback.js.map +1 -1
  284. package/build/esm/utils/wrap-event.d.ts +3 -3
  285. package/build/esm/utils/wrap-event.js +2 -5
  286. package/build/esm/utils/wrap-event.js.map +1 -1
  287. package/build/tsconfig-build.tsbuildinfo +1 -1
  288. package/package.json +7 -11
  289. package/src/Accordion/Accordion.story.tsx +74 -74
  290. package/src/Accordion/Accordion.tsx +59 -59
  291. package/src/Accordion/AccordionBody.tsx +52 -52
  292. package/src/Accordion/AccordionHeader.tsx +166 -167
  293. package/src/Accordion/AccordionItem.tsx +50 -50
  294. package/src/Accordion/context.ts +37 -37
  295. package/src/Accordion/index.ts +4 -4
  296. package/src/Accordion/scopeQuery.ts +7 -7
  297. package/src/Accordion/styles.css +21 -21
  298. package/src/CheckBox/CheckBox.tsx +41 -41
  299. package/src/CheckBox/index.ts +1 -1
  300. package/src/ComboBox/ComboBox.story.tsx +120 -120
  301. package/src/ComboBox/Combobox.tsx +148 -148
  302. package/src/ComboBox/ComboboxButton.tsx +61 -61
  303. package/src/ComboBox/ComboboxInput.tsx +187 -187
  304. package/src/ComboBox/ComboboxLabel.tsx +33 -33
  305. package/src/ComboBox/ComboboxList.tsx +47 -47
  306. package/src/ComboBox/ComboboxOption.tsx +110 -111
  307. package/src/ComboBox/ComboboxPopover.tsx +64 -64
  308. package/src/ComboBox/cities.ts +23194 -23194
  309. package/src/ComboBox/context.ts +35 -35
  310. package/src/ComboBox/hooks.tsx +448 -451
  311. package/src/ComboBox/index.ts +8 -8
  312. package/src/ComboBox/makeHash.ts +19 -19
  313. package/src/ComboBox/scopeQuery.ts +6 -6
  314. package/src/ComboBox/styles.css +32 -32
  315. package/src/FocusLock/FocusLock.tsx +66 -66
  316. package/src/FocusLock/index.ts +1 -1
  317. package/src/FocusLock/tabUtils.ts +40 -40
  318. package/src/FocusLock/useFocusLock.ts +55 -56
  319. package/src/List/List.story.tsx +18 -18
  320. package/src/List/List.tsx +17 -17
  321. package/src/List/ListItem.tsx +23 -23
  322. package/src/List/context.ts +19 -19
  323. package/src/List/index.ts +2 -2
  324. package/src/Menu/ContextMenu.story.tsx +73 -73
  325. package/src/Menu/ContextMenuTrigger.tsx +76 -76
  326. package/src/Menu/Menu.story.tsx +160 -160
  327. package/src/Menu/Menu.tsx +82 -83
  328. package/src/Menu/MenuButton.tsx +83 -83
  329. package/src/Menu/MenuComplex.story.tsx +58 -58
  330. package/src/Menu/MenuItem.tsx +87 -88
  331. package/src/Menu/MenuList.tsx +254 -254
  332. package/src/Menu/MenuPopover.tsx +35 -35
  333. package/src/Menu/context.ts +44 -44
  334. package/src/Menu/fixtures/countryList.ts +198 -198
  335. package/src/Menu/index.ts +6 -6
  336. package/src/Menu/scope.ts +7 -7
  337. package/src/Menu/styles.css +42 -42
  338. package/src/Modal/Modal.story.tsx +262 -258
  339. package/src/Modal/Modal.tsx +48 -48
  340. package/src/Modal/ModalBackdrop.tsx +78 -78
  341. package/src/Modal/NavDrawer.story.tsx +161 -158
  342. package/src/Modal/index.ts +2 -2
  343. package/src/Modal/styles.css +46 -46
  344. package/src/Popper/Popper.story.tsx +279 -263
  345. package/src/Popper/Popper.tsx +1 -1
  346. package/src/Popper/PopperArrow.tsx +35 -35
  347. package/src/Popper/context.ts +10 -10
  348. package/src/Popper/index.ts +3 -3
  349. package/src/Popper/styles.css +60 -60
  350. package/src/RadioButton/RadioButton.story.tsx +78 -77
  351. package/src/RadioButton/RadioButton.tsx +55 -55
  352. package/src/RadioButton/RadioGroup.tsx +60 -60
  353. package/src/RadioButton/context.ts +17 -17
  354. package/src/RadioButton/index.ts +2 -2
  355. package/src/SkipNav/SkipNav.tsx +16 -16
  356. package/src/SkipNav/index.tsx +1 -1
  357. package/src/Slider/Slider.story.tsx +45 -45
  358. package/src/Slider/Slider.tsx +1115 -1120
  359. package/src/Slider/index.ts +1 -1
  360. package/src/Slider/styles.css +131 -131
  361. package/src/Spinner/Spinner.story.tsx +31 -31
  362. package/src/Spinner/Spinner.tsx +117 -117
  363. package/src/Spinner/SpinnerButton.tsx +54 -54
  364. package/src/Spinner/context.ts +20 -20
  365. package/src/Spinner/index.ts +2 -2
  366. package/src/Spinner/styles.css +23 -23
  367. package/src/Tabs/Tab.story.tsx +80 -80
  368. package/src/Tabs/Tab.tsx +136 -136
  369. package/src/Tabs/TabList.tsx +71 -71
  370. package/src/Tabs/TabPanel.tsx +53 -53
  371. package/src/Tabs/TabPanels.tsx +30 -30
  372. package/src/Tabs/Tabs.tsx +46 -46
  373. package/src/Tabs/context.ts +30 -30
  374. package/src/Tabs/index.tsx +5 -5
  375. package/src/Tabs/scopeQuery.ts +6 -6
  376. package/src/Tooltip/Tooltip.story.tsx +61 -61
  377. package/src/Tooltip/Tooltip.tsx +53 -50
  378. package/src/Tooltip/index.ts +1 -1
  379. package/src/Tooltip/stateMachine.ts +192 -192
  380. package/src/Tooltip/styles.css +17 -17
  381. package/src/Tooltip/useTooltip.ts +136 -136
  382. package/src/hooks/index.ts +13 -13
  383. package/src/hooks/useAutoFocus.ts +22 -22
  384. package/src/hooks/useChildrenCounter.ts +51 -51
  385. package/src/hooks/useControlledState.ts +1 -6
  386. package/src/hooks/useFocusReturn.ts +43 -43
  387. package/src/hooks/useFocusState.ts +30 -30
  388. package/src/hooks/useGestureHandlers.ts +282 -286
  389. package/src/hooks/useMeasure.ts +33 -33
  390. package/src/hooks/useOnClickOutside.ts +32 -32
  391. package/src/hooks/useOnKeyDown.ts +19 -19
  392. package/src/hooks/useReducerMachine.ts +60 -60
  393. package/src/hooks/useRemoveBodyScroll.ts +38 -39
  394. package/src/hooks/useScope.ts +52 -52
  395. package/src/hooks/useThrottle.ts +19 -19
  396. package/src/index.ts +20 -20
  397. package/src/styles.d.ts +1 -0
  398. package/src/utils/assign-ref.ts +27 -27
  399. package/src/utils/can-use-dom.ts +7 -7
  400. package/src/utils/clamp.ts +3 -3
  401. package/src/utils/context.tsx +48 -48
  402. package/src/utils/create-subscription.ts +16 -16
  403. package/src/utils/get-circular-index.ts +7 -7
  404. package/src/utils/index.ts +10 -10
  405. package/src/utils/is-right-click.ts +14 -14
  406. package/src/utils/owner-document.ts +13 -13
  407. package/src/utils/polymorphic.ts +82 -78
  408. package/src/utils/rubber-band-clamp.ts +25 -25
  409. package/src/utils/use-stable-callback.ts +57 -58
  410. package/src/utils/wrap-event.ts +22 -22
@@ -1,187 +1,187 @@
1
- import type {
2
- ChangeEvent,
3
- ChangeEventHandler,
4
- ElementType,
5
- FocusEventHandler,
6
- InputHTMLAttributes,
7
- KeyboardEventHandler,
8
- MouseEventHandler,
9
- } from 'react';
10
- import { forwardRef, useEffect, useRef } from 'react';
11
-
12
- import {
13
- useBlur,
14
- CLEAR,
15
- CHANGE,
16
- useKeyDown,
17
- SELECT_WITH_CLICK,
18
- FOCUS,
19
- NAVIGATING,
20
- INIT,
21
- useFocusManagement,
22
- } from './hooks';
23
- import { assignMultipleRefs, wrapEvent } from '../utils';
24
- import { useComboBoxContext } from './context';
25
-
26
- export interface ComboboxInputProps
27
- extends InputHTMLAttributes<HTMLInputElement> {
28
- // clear on ESC
29
- clearOnEscape?: boolean;
30
- // highlights all the text in the box on click when true
31
- selectOnClick?: boolean;
32
- // updates the value in the input when navigating w/ the keyboard
33
- autocomplete?: boolean;
34
- // initial value for uncontrolled mode
35
- defaultValue?: string;
36
- // value for controlled mode
37
- value?: string;
38
- onClick?: MouseEventHandler<HTMLInputElement>;
39
- onChange?: ChangeEventHandler<HTMLInputElement>;
40
- onKeyDown?: KeyboardEventHandler<HTMLInputElement>;
41
- onBlur?: FocusEventHandler<HTMLInputElement>;
42
- onFocus?: FocusEventHandler<HTMLInputElement>;
43
- as?: ElementType<any>;
44
- innerAs?: ElementType<any>;
45
- id?: string;
46
- }
47
-
48
- export const ComboboxInput = forwardRef<HTMLInputElement, ComboboxInputProps>(
49
- function ComboboxInput(
50
- {
51
- as: Comp = 'input',
52
- innerAs,
53
- selectOnClick = false,
54
- autocomplete = true,
55
- clearOnEscape = false,
56
-
57
- // wrapped events
58
- onClick,
59
- onChange,
60
- onKeyDown,
61
- onBlur,
62
- onFocus,
63
-
64
- id: preferredId,
65
-
66
- defaultValue = '',
67
-
68
- // might be controlled
69
- value: controlledValue,
70
- ...props
71
- },
72
- forwardedRef
73
- ) {
74
- const {
75
- data: { navigationItem, text, lastActionType },
76
- inputRef,
77
- state,
78
- transition,
79
- listboxIdRef,
80
- autocompletePropRef,
81
- clearOnEscapeRef,
82
- openOnFocus,
83
- optionsRef,
84
- labelIdRef,
85
- } = useComboBoxContext();
86
-
87
- // Keep focus on the input component
88
- useFocusManagement(lastActionType, inputRef);
89
-
90
- // Keep using the defaultValue until the user started interacting
91
- const hasStartedInteracting = useRef(false);
92
-
93
- // Because we close the List on blur, we need to track if the blur is
94
- // caused by clicking inside the list, and if so, don't close the List.
95
- const selectOnClickRef = useRef(false);
96
-
97
- const handleBlur = useBlur();
98
-
99
- // Update ref props
100
- autocompletePropRef.current = autocomplete;
101
- clearOnEscapeRef.current = clearOnEscape;
102
- listboxIdRef.current = preferredId || listboxIdRef.current;
103
-
104
- // [*]... and when controlled, we don't trigger handleValueChange as the user
105
- // types, instead the developer controls it with the normal input onChange
106
- // prop
107
- const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
108
- // After the user started typing, lets forget the defaultValue
109
- hasStartedInteracting.current = true;
110
-
111
- const text = e.target.value;
112
- if (text.trim() === '') {
113
- transition(CLEAR);
114
- } else {
115
- transition(CHANGE, { text });
116
- }
117
- };
118
-
119
- const handleKeyDown = useKeyDown();
120
-
121
- const handleFocus = () => {
122
- if (selectOnClick) {
123
- selectOnClickRef.current = true;
124
- }
125
- // If we select an option with click, useFocusManagement will focus the
126
- // input, in those cases we don't want to cause the menu to open back up,
127
- // so we guard behind these states
128
- if (openOnFocus && lastActionType !== SELECT_WITH_CLICK) {
129
- transition(FOCUS, {
130
- item: navigationItem,
131
- });
132
- }
133
- };
134
-
135
- const handleClick = () => {
136
- if (selectOnClickRef.current) {
137
- selectOnClickRef.current = false;
138
- inputRef.current && inputRef.current.select();
139
- }
140
- };
141
-
142
- const navigationText =
143
- navigationItem !== ''
144
- ? optionsRef.current[navigationItem].text
145
- : undefined;
146
-
147
- const fallbackValue = hasStartedInteracting.current ? '' : defaultValue;
148
-
149
- const inputStrings =
150
- // When idle, we don't have a navigationText on ArrowUp/Down
151
- autocomplete && state === NAVIGATING
152
- ? [navigationText, controlledValue, text, fallbackValue]
153
- : [controlledValue, text, fallbackValue];
154
-
155
- const inputValue = inputStrings.find((str) => str !== undefined);
156
-
157
- // If they are controlling the value we still need to do our transitions, so
158
- // we have this derived state to emulate onChange of the input as we receive
159
- // new `value`s ...[*]
160
- useEffect(() => {
161
- transition(INIT, { text: inputValue, item: '' });
162
- // eslint-disable-next-line react-hooks/exhaustive-deps
163
- }, []);
164
-
165
- return (
166
- <Comp
167
- {...props}
168
- as={innerAs}
169
- data-reach-combobox-input=""
170
- ref={assignMultipleRefs(inputRef, forwardedRef)}
171
- value={inputValue}
172
- onClick={wrapEvent(onClick, handleClick)}
173
- onBlur={wrapEvent(onBlur, handleBlur)}
174
- onFocus={wrapEvent(onFocus, handleFocus)}
175
- onChange={wrapEvent(onChange, handleChange)}
176
- onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}
177
- aria-labelledby={labelIdRef.current}
178
- id={listboxIdRef.current}
179
- aria-autocomplete="both"
180
- aria-activedescendant={
181
- navigationItem !== '' ? navigationItem : undefined
182
- }
183
- autoComplete="off"
184
- />
185
- );
186
- }
187
- );
1
+ import type {
2
+ ChangeEvent,
3
+ ChangeEventHandler,
4
+ ElementType,
5
+ FocusEventHandler,
6
+ InputHTMLAttributes,
7
+ KeyboardEventHandler,
8
+ MouseEventHandler,
9
+ } from 'react';
10
+ import { forwardRef, useEffect, useRef } from 'react';
11
+
12
+ import {
13
+ useBlur,
14
+ CLEAR,
15
+ CHANGE,
16
+ useKeyDown,
17
+ SELECT_WITH_CLICK,
18
+ FOCUS,
19
+ NAVIGATING,
20
+ INIT,
21
+ useFocusManagement,
22
+ } from './hooks';
23
+ import { assignMultipleRefs, wrapEvent } from '../utils';
24
+ import { useComboBoxContext } from './context';
25
+
26
+ export interface ComboboxInputProps
27
+ extends InputHTMLAttributes<HTMLInputElement> {
28
+ // clear on ESC
29
+ clearOnEscape?: boolean;
30
+ // highlights all the text in the box on click when true
31
+ selectOnClick?: boolean;
32
+ // updates the value in the input when navigating w/ the keyboard
33
+ autocomplete?: boolean;
34
+ // initial value for uncontrolled mode
35
+ defaultValue?: string;
36
+ // value for controlled mode
37
+ value?: string;
38
+ onClick?: MouseEventHandler<HTMLInputElement>;
39
+ onChange?: ChangeEventHandler<HTMLInputElement>;
40
+ onKeyDown?: KeyboardEventHandler<HTMLInputElement>;
41
+ onBlur?: FocusEventHandler<HTMLInputElement>;
42
+ onFocus?: FocusEventHandler<HTMLInputElement>;
43
+ as?: ElementType<any>;
44
+ innerAs?: ElementType<any>;
45
+ id?: string;
46
+ }
47
+
48
+ export const ComboboxInput = forwardRef<HTMLInputElement, ComboboxInputProps>(
49
+ function ComboboxInput(
50
+ {
51
+ as: Comp = 'input',
52
+ innerAs,
53
+ selectOnClick = false,
54
+ autocomplete = true,
55
+ clearOnEscape = false,
56
+
57
+ // wrapped events
58
+ onClick,
59
+ onChange,
60
+ onKeyDown,
61
+ onBlur,
62
+ onFocus,
63
+
64
+ id: preferredId,
65
+
66
+ defaultValue = '',
67
+
68
+ // might be controlled
69
+ value: controlledValue,
70
+ ...props
71
+ },
72
+ forwardedRef
73
+ ) {
74
+ const {
75
+ data: { navigationItem, text, lastActionType },
76
+ inputRef,
77
+ state,
78
+ transition,
79
+ listboxIdRef,
80
+ autocompletePropRef,
81
+ clearOnEscapeRef,
82
+ openOnFocus,
83
+ optionsRef,
84
+ labelIdRef,
85
+ } = useComboBoxContext();
86
+
87
+ // Keep focus on the input component
88
+ useFocusManagement(lastActionType, inputRef);
89
+
90
+ // Keep using the defaultValue until the user started interacting
91
+ const hasStartedInteracting = useRef(false);
92
+
93
+ // Because we close the List on blur, we need to track if the blur is
94
+ // caused by clicking inside the list, and if so, don't close the List.
95
+ const selectOnClickRef = useRef(false);
96
+
97
+ const handleBlur = useBlur();
98
+
99
+ // Update ref props
100
+ autocompletePropRef.current = autocomplete;
101
+ clearOnEscapeRef.current = clearOnEscape;
102
+ listboxIdRef.current = preferredId || listboxIdRef.current;
103
+
104
+ // [*]... and when controlled, we don't trigger handleValueChange as the user
105
+ // types, instead the developer controls it with the normal input onChange
106
+ // prop
107
+ const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
108
+ // After the user started typing, lets forget the defaultValue
109
+ hasStartedInteracting.current = true;
110
+
111
+ const text = e.target.value;
112
+ if (text.trim() === '') {
113
+ transition(CLEAR);
114
+ } else {
115
+ transition(CHANGE, { text });
116
+ }
117
+ };
118
+
119
+ const handleKeyDown = useKeyDown();
120
+
121
+ const handleFocus = () => {
122
+ if (selectOnClick) {
123
+ selectOnClickRef.current = true;
124
+ }
125
+ // If we select an option with click, useFocusManagement will focus the
126
+ // input, in those cases we don't want to cause the menu to open back up,
127
+ // so we guard behind these states
128
+ if (openOnFocus && lastActionType !== SELECT_WITH_CLICK) {
129
+ transition(FOCUS, {
130
+ item: navigationItem,
131
+ });
132
+ }
133
+ };
134
+
135
+ const handleClick = () => {
136
+ if (selectOnClickRef.current) {
137
+ selectOnClickRef.current = false;
138
+ inputRef.current && inputRef.current.select();
139
+ }
140
+ };
141
+
142
+ const navigationText =
143
+ navigationItem !== ''
144
+ ? optionsRef.current[navigationItem].text
145
+ : undefined;
146
+
147
+ const fallbackValue = hasStartedInteracting.current ? '' : defaultValue;
148
+
149
+ const inputStrings =
150
+ // When idle, we don't have a navigationText on ArrowUp/Down
151
+ autocomplete && state === NAVIGATING
152
+ ? [navigationText, controlledValue, text, fallbackValue]
153
+ : [controlledValue, text, fallbackValue];
154
+
155
+ const inputValue = inputStrings.find((str) => str !== undefined);
156
+
157
+ // If they are controlling the value we still need to do our transitions, so
158
+ // we have this derived state to emulate onChange of the input as we receive
159
+ // new `value`s ...[*]
160
+ useEffect(() => {
161
+ transition(INIT, { text: inputValue, item: '' });
162
+ // eslint-disable-next-line react-hooks/exhaustive-deps
163
+ }, []);
164
+
165
+ return (
166
+ <Comp
167
+ {...props}
168
+ as={innerAs}
169
+ data-reach-combobox-input=""
170
+ ref={assignMultipleRefs(inputRef, forwardedRef)}
171
+ value={inputValue}
172
+ onClick={wrapEvent(onClick, handleClick)}
173
+ onBlur={wrapEvent(onBlur, handleBlur)}
174
+ onFocus={wrapEvent(onFocus, handleFocus)}
175
+ onChange={wrapEvent(onChange, handleChange)}
176
+ onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}
177
+ aria-labelledby={labelIdRef.current}
178
+ id={listboxIdRef.current}
179
+ aria-autocomplete="both"
180
+ aria-activedescendant={
181
+ navigationItem !== '' ? navigationItem : undefined
182
+ }
183
+ autoComplete="off"
184
+ />
185
+ );
186
+ }
187
+ );
@@ -1,33 +1,33 @@
1
- import type { ElementType, LabelHTMLAttributes } from 'react';
2
- import { forwardRef } from 'react';
3
-
4
- import { useComboBoxContext } from './context';
5
-
6
- export interface ComboboxLabelProps
7
- extends LabelHTMLAttributes<HTMLLabelElement> {
8
- as?: ElementType<any>;
9
- innerAs?: ElementType<any>;
10
- id?: string;
11
- }
12
-
13
- export const ComboboxLabel = forwardRef<HTMLLabelElement, ComboboxLabelProps>(
14
- function ComboboxButton(
15
- { as: Comp = 'label', innerAs, id: preferredId, ...props },
16
- ref
17
- ) {
18
- const { listboxIdRef, labelIdRef } = useComboBoxContext();
19
-
20
- labelIdRef.current = preferredId || labelIdRef.current;
21
-
22
- return (
23
- <Comp
24
- as={innerAs}
25
- data-reach-combobox-label=""
26
- htmlFor={listboxIdRef.current}
27
- id={labelIdRef.current}
28
- ref={ref}
29
- {...props}
30
- />
31
- );
32
- }
33
- );
1
+ import type { ElementType, LabelHTMLAttributes } from 'react';
2
+ import { forwardRef } from 'react';
3
+
4
+ import { useComboBoxContext } from './context';
5
+
6
+ export interface ComboboxLabelProps
7
+ extends LabelHTMLAttributes<HTMLLabelElement> {
8
+ as?: ElementType<any>;
9
+ innerAs?: ElementType<any>;
10
+ id?: string;
11
+ }
12
+
13
+ export const ComboboxLabel = forwardRef<HTMLLabelElement, ComboboxLabelProps>(
14
+ function ComboboxButton(
15
+ { as: Comp = 'label', innerAs, id: preferredId, ...props },
16
+ ref
17
+ ) {
18
+ const { listboxIdRef, labelIdRef } = useComboBoxContext();
19
+
20
+ labelIdRef.current = preferredId || labelIdRef.current;
21
+
22
+ return (
23
+ <Comp
24
+ as={innerAs}
25
+ data-reach-combobox-label=""
26
+ htmlFor={listboxIdRef.current}
27
+ id={labelIdRef.current}
28
+ ref={ref}
29
+ {...props}
30
+ />
31
+ );
32
+ }
33
+ );
@@ -1,47 +1,47 @@
1
- import type { HTMLAttributes, ElementType, ReactNode } from 'react';
2
- import { forwardRef, useRef, useEffect } from 'react';
3
-
4
- import { useComboBoxContext } from './context';
5
- import { getScope } from '../hooks';
6
- import { assignMultipleRefs } from '../utils';
7
-
8
- export interface ComboboxListProps extends HTMLAttributes<HTMLUListElement> {
9
- as?: ElementType<any>;
10
- innerAs?: ElementType<any>;
11
- persistSelection?: boolean;
12
- children?: ReactNode;
13
- }
14
-
15
- export const ComboboxList = forwardRef<HTMLUListElement, ComboboxListProps>(
16
- function ComboboxList(
17
- {
18
- // when true, and the list opens again, the option with a matching value will be
19
- // automatically highleted.
20
- persistSelection = false,
21
- as: Comp = 'ul',
22
- innerAs,
23
- ...props
24
- },
25
- ref
26
- ) {
27
- const { persistSelectionRef, labelIdRef, listScope } = useComboBoxContext();
28
-
29
- const listRef = useRef<HTMLUListElement>();
30
- useEffect(() => {
31
- listScope.current = getScope(listRef);
32
- }, [listScope]);
33
-
34
- persistSelectionRef.current = persistSelection;
35
-
36
- return (
37
- <Comp
38
- {...props}
39
- as={innerAs}
40
- ref={assignMultipleRefs(ref, listRef)}
41
- data-reach-combobox-list=""
42
- role="listbox"
43
- aria-labelledby={labelIdRef.current}
44
- />
45
- );
46
- }
47
- );
1
+ import type { HTMLAttributes, ElementType, ReactNode } from 'react';
2
+ import { forwardRef, useRef, useEffect } from 'react';
3
+
4
+ import { useComboBoxContext } from './context';
5
+ import { getScope } from '../hooks';
6
+ import { assignMultipleRefs } from '../utils';
7
+
8
+ export interface ComboboxListProps extends HTMLAttributes<HTMLUListElement> {
9
+ as?: ElementType<any>;
10
+ innerAs?: ElementType<any>;
11
+ persistSelection?: boolean;
12
+ children?: ReactNode;
13
+ }
14
+
15
+ export const ComboboxList = forwardRef<HTMLUListElement, ComboboxListProps>(
16
+ function ComboboxList(
17
+ {
18
+ // when true, and the list opens again, the option with a matching value will be
19
+ // automatically highleted.
20
+ persistSelection = false,
21
+ as: Comp = 'ul',
22
+ innerAs,
23
+ ...props
24
+ },
25
+ ref
26
+ ) {
27
+ const { persistSelectionRef, labelIdRef, listScope } = useComboBoxContext();
28
+
29
+ const listRef = useRef<HTMLUListElement | null>(null);
30
+ useEffect(() => {
31
+ listScope.current = getScope(listRef);
32
+ }, [listScope]);
33
+
34
+ persistSelectionRef.current = persistSelection;
35
+
36
+ return (
37
+ <Comp
38
+ {...props}
39
+ as={innerAs}
40
+ ref={assignMultipleRefs(ref, listRef)}
41
+ data-reach-combobox-list=""
42
+ role="listbox"
43
+ aria-labelledby={labelIdRef.current}
44
+ />
45
+ );
46
+ }
47
+ );