@basic-ui/core 0.0.41 → 0.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/build/cjs/index.js +1312 -464
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Accordion/Accordion.d.ts +0 -0
  4. package/build/esm/Accordion/Accordion.js +4 -3
  5. package/build/esm/Accordion/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/AccordionBody.d.ts +0 -0
  7. package/build/esm/Accordion/AccordionBody.js +4 -3
  8. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  9. package/build/esm/Accordion/AccordionHeader.d.ts +0 -0
  10. package/build/esm/Accordion/AccordionHeader.js +4 -3
  11. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  12. package/build/esm/Accordion/AccordionItem.d.ts +0 -0
  13. package/build/esm/Accordion/AccordionItem.js +2 -1
  14. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  15. package/build/esm/Accordion/context.d.ts +0 -0
  16. package/build/esm/Accordion/context.js +0 -0
  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 +1 -1
  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 +1 -1
  24. package/build/esm/CheckBox/CheckBox.d.ts +0 -0
  25. package/build/esm/CheckBox/CheckBox.js +2 -1
  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 +1 -1
  30. package/build/esm/ComboBox/Combobox.d.ts +0 -0
  31. package/build/esm/ComboBox/Combobox.js +3 -2
  32. package/build/esm/ComboBox/Combobox.js.map +1 -1
  33. package/build/esm/ComboBox/ComboboxButton.d.ts +0 -0
  34. package/build/esm/ComboBox/ComboboxButton.js +4 -3
  35. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  36. package/build/esm/ComboBox/ComboboxInput.d.ts +0 -0
  37. package/build/esm/ComboBox/ComboboxInput.js +3 -2
  38. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  39. package/build/esm/ComboBox/ComboboxLabel.d.ts +0 -0
  40. package/build/esm/ComboBox/ComboboxLabel.js +2 -1
  41. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  42. package/build/esm/ComboBox/ComboboxList.d.ts +0 -0
  43. package/build/esm/ComboBox/ComboboxList.js +3 -2
  44. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  45. package/build/esm/ComboBox/ComboboxOption.d.ts +0 -0
  46. package/build/esm/ComboBox/ComboboxOption.js +4 -3
  47. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  48. package/build/esm/ComboBox/ComboboxPopover.d.ts +0 -0
  49. package/build/esm/ComboBox/ComboboxPopover.js +5 -4
  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 +1 -1
  54. package/build/esm/ComboBox/context.d.ts +0 -0
  55. package/build/esm/ComboBox/context.js +0 -0
  56. package/build/esm/ComboBox/context.js.map +1 -1
  57. package/build/esm/ComboBox/hooks.d.ts +0 -0
  58. package/build/esm/ComboBox/hooks.js +11 -11
  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 +1 -1
  63. package/build/esm/ComboBox/makeHash.d.ts +0 -0
  64. package/build/esm/ComboBox/makeHash.js +0 -0
  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 +1 -1
  69. package/build/esm/FocusLock/FocusLock.d.ts +0 -0
  70. package/build/esm/FocusLock/FocusLock.js +2 -1
  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 +1 -1
  75. package/build/esm/FocusLock/tabUtils.d.ts +0 -0
  76. package/build/esm/FocusLock/tabUtils.js +0 -0
  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 +0 -0
  80. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  81. package/build/esm/List/List.d.ts +0 -0
  82. package/build/esm/List/List.js +2 -1
  83. package/build/esm/List/List.js.map +1 -1
  84. package/build/esm/List/ListItem.d.ts +0 -0
  85. package/build/esm/List/ListItem.js +2 -1
  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 +0 -0
  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 +1 -1
  93. package/build/esm/Menu/Menu.d.ts +0 -0
  94. package/build/esm/Menu/Menu.js +2 -1
  95. package/build/esm/Menu/Menu.js.map +1 -1
  96. package/build/esm/Menu/MenuButton.d.ts +0 -0
  97. package/build/esm/Menu/MenuButton.js +3 -2
  98. package/build/esm/Menu/MenuButton.js.map +1 -1
  99. package/build/esm/Menu/MenuItem.d.ts +0 -0
  100. package/build/esm/Menu/MenuItem.js +4 -3
  101. package/build/esm/Menu/MenuItem.js.map +1 -1
  102. package/build/esm/Menu/MenuList.d.ts +0 -0
  103. package/build/esm/Menu/MenuList.js +6 -5
  104. package/build/esm/Menu/MenuList.js.map +1 -1
  105. package/build/esm/Menu/MenuPopover.d.ts +0 -0
  106. package/build/esm/Menu/MenuPopover.js +2 -1
  107. package/build/esm/Menu/MenuPopover.js.map +1 -1
  108. package/build/esm/Menu/context.d.ts +0 -0
  109. package/build/esm/Menu/context.js +0 -0
  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 +1 -1
  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 +1 -1
  117. package/build/esm/Modal/Modal.d.ts +0 -0
  118. package/build/esm/Modal/Modal.js +5 -4
  119. package/build/esm/Modal/Modal.js.map +1 -1
  120. package/build/esm/Modal/ModalBackdrop.d.ts +0 -0
  121. package/build/esm/Modal/ModalBackdrop.js +6 -5
  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 +1 -1
  126. package/build/esm/Popper/Popper.d.ts +0 -0
  127. package/build/esm/Popper/Popper.js +6 -5
  128. package/build/esm/Popper/Popper.js.map +1 -1
  129. package/build/esm/Popper/PopperArrow.d.ts +0 -0
  130. package/build/esm/Popper/PopperArrow.js +5 -5
  131. package/build/esm/Popper/PopperArrow.js.map +1 -1
  132. package/build/esm/Popper/context.d.ts +0 -0
  133. package/build/esm/Popper/context.js +0 -0
  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 +1 -1
  138. package/build/esm/Portal/Portal.d.ts +0 -0
  139. package/build/esm/Portal/Portal.js +0 -0
  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 +1 -1
  144. package/build/esm/RadioButton/RadioButton.d.ts +0 -0
  145. package/build/esm/RadioButton/RadioButton.js +5 -2
  146. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  147. package/build/esm/RadioButton/RadioGroup.d.ts +0 -0
  148. package/build/esm/RadioButton/RadioGroup.js +2 -1
  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 +0 -0
  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 +1 -1
  156. package/build/esm/SkipNav/SkipNav.d.ts +0 -0
  157. package/build/esm/SkipNav/SkipNav.js +2 -1
  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 +1 -1
  162. package/build/esm/Slider/Slider.d.ts +218 -0
  163. package/build/esm/Slider/Slider.js +842 -0
  164. package/build/esm/Slider/Slider.js.map +1 -0
  165. package/build/esm/Slider/index.d.ts +1 -0
  166. package/build/esm/Slider/index.js +2 -0
  167. package/build/esm/Slider/index.js.map +1 -0
  168. package/build/esm/Spinner/Spinner.d.ts +0 -0
  169. package/build/esm/Spinner/Spinner.js +2 -1
  170. package/build/esm/Spinner/Spinner.js.map +1 -1
  171. package/build/esm/Spinner/SpinnerButton.d.ts +0 -0
  172. package/build/esm/Spinner/SpinnerButton.js +3 -2
  173. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  174. package/build/esm/Spinner/context.d.ts +0 -0
  175. package/build/esm/Spinner/context.js +0 -0
  176. package/build/esm/Spinner/context.js.map +1 -1
  177. package/build/esm/Spinner/index.d.ts +0 -0
  178. package/build/esm/Spinner/index.js +0 -0
  179. package/build/esm/Spinner/index.js.map +1 -1
  180. package/build/esm/Tabs/Tab.d.ts +0 -0
  181. package/build/esm/Tabs/Tab.js +3 -2
  182. package/build/esm/Tabs/Tab.js.map +1 -1
  183. package/build/esm/Tabs/TabList.d.ts +0 -0
  184. package/build/esm/Tabs/TabList.js +4 -3
  185. package/build/esm/Tabs/TabList.js.map +1 -1
  186. package/build/esm/Tabs/TabPanel.d.ts +0 -0
  187. package/build/esm/Tabs/TabPanel.js +4 -3
  188. package/build/esm/Tabs/TabPanel.js.map +1 -1
  189. package/build/esm/Tabs/TabPanels.d.ts +0 -0
  190. package/build/esm/Tabs/TabPanels.js +4 -3
  191. package/build/esm/Tabs/TabPanels.js.map +1 -1
  192. package/build/esm/Tabs/Tabs.d.ts +0 -0
  193. package/build/esm/Tabs/Tabs.js +2 -1
  194. package/build/esm/Tabs/Tabs.js.map +1 -1
  195. package/build/esm/Tabs/context.d.ts +0 -0
  196. package/build/esm/Tabs/context.js +0 -0
  197. package/build/esm/Tabs/context.js.map +1 -1
  198. package/build/esm/Tabs/index.d.ts +0 -0
  199. package/build/esm/Tabs/index.js +0 -0
  200. package/build/esm/Tabs/index.js.map +1 -1
  201. package/build/esm/Tabs/scopeQuery.d.ts +0 -0
  202. package/build/esm/Tabs/scopeQuery.js +0 -0
  203. package/build/esm/Tabs/scopeQuery.js.map +1 -1
  204. package/build/esm/Tooltip/Tooltip.d.ts +0 -0
  205. package/build/esm/Tooltip/Tooltip.js +4 -2
  206. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  207. package/build/esm/Tooltip/index.d.ts +0 -0
  208. package/build/esm/Tooltip/index.js +0 -0
  209. package/build/esm/Tooltip/index.js.map +1 -1
  210. package/build/esm/Tooltip/stateMachine.d.ts +0 -0
  211. package/build/esm/Tooltip/stateMachine.js +9 -9
  212. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  213. package/build/esm/Tooltip/useTooltip.d.ts +0 -0
  214. package/build/esm/Tooltip/useTooltip.js +6 -5
  215. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  216. package/build/esm/hooks/index.d.ts +0 -0
  217. package/build/esm/hooks/index.js +0 -0
  218. package/build/esm/hooks/index.js.map +1 -1
  219. package/build/esm/hooks/useAutoFocus.d.ts +0 -0
  220. package/build/esm/hooks/useAutoFocus.js +0 -0
  221. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  222. package/build/esm/hooks/useChildrenCounter.d.ts +0 -0
  223. package/build/esm/hooks/useChildrenCounter.js +0 -0
  224. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  225. package/build/esm/hooks/useControlledState.d.ts +1 -1
  226. package/build/esm/hooks/useControlledState.js +8 -7
  227. package/build/esm/hooks/useControlledState.js.map +1 -1
  228. package/build/esm/hooks/useFocusReturn.d.ts +0 -0
  229. package/build/esm/hooks/useFocusReturn.js +2 -2
  230. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  231. package/build/esm/hooks/useFocusState.d.ts +2 -2
  232. package/build/esm/hooks/useFocusState.js +1 -1
  233. package/build/esm/hooks/useFocusState.js.map +1 -1
  234. package/build/esm/hooks/useGestureHandlers.d.ts +0 -0
  235. package/build/esm/hooks/useGestureHandlers.js +23 -15
  236. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  237. package/build/esm/hooks/useMeasure.d.ts +0 -0
  238. package/build/esm/hooks/useMeasure.js +0 -1
  239. package/build/esm/hooks/useMeasure.js.map +1 -1
  240. package/build/esm/hooks/useOnClickOutside.d.ts +0 -0
  241. package/build/esm/hooks/useOnClickOutside.js +0 -0
  242. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  243. package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
  244. package/build/esm/hooks/useOnKeyDown.js +5 -5
  245. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  246. package/build/esm/hooks/useReducerMachine.d.ts +0 -0
  247. package/build/esm/hooks/useReducerMachine.js +2 -1
  248. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  249. package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -1
  250. package/build/esm/hooks/useRemoveBodyScroll.js +12 -8
  251. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  252. package/build/esm/hooks/useScope.d.ts +0 -0
  253. package/build/esm/hooks/useScope.js +0 -0
  254. package/build/esm/hooks/useScope.js.map +1 -1
  255. package/build/esm/hooks/useThrottle.d.ts +0 -0
  256. package/build/esm/hooks/useThrottle.js +0 -0
  257. package/build/esm/hooks/useThrottle.js.map +1 -1
  258. package/build/esm/index.d.ts +1 -0
  259. package/build/esm/index.js +1 -0
  260. package/build/esm/index.js.map +1 -1
  261. package/build/esm/utils/assign-ref.d.ts +3 -0
  262. package/build/esm/utils/{assignRef.js → assign-ref.js} +1 -1
  263. package/build/esm/utils/assign-ref.js.map +1 -0
  264. package/build/esm/utils/can-use-dom.d.ts +1 -0
  265. package/build/esm/utils/can-use-dom.js +4 -0
  266. package/build/esm/utils/can-use-dom.js.map +1 -0
  267. package/build/esm/utils/clamp.d.ts +0 -0
  268. package/build/esm/utils/clamp.js +0 -0
  269. package/build/esm/utils/clamp.js.map +1 -1
  270. package/build/esm/utils/context.d.ts +7 -0
  271. package/build/esm/utils/context.js +41 -0
  272. package/build/esm/utils/context.js.map +1 -0
  273. package/build/esm/utils/{createSubscription.d.ts → create-subscription.d.ts} +0 -0
  274. package/build/esm/utils/{createSubscription.js → create-subscription.js} +1 -1
  275. package/build/esm/utils/create-subscription.js.map +1 -0
  276. package/build/esm/utils/{getCircularIndex.d.ts → get-circular-index.d.ts} +0 -0
  277. package/build/esm/utils/{getCircularIndex.js → get-circular-index.js} +1 -1
  278. package/build/esm/utils/get-circular-index.js.map +1 -0
  279. package/build/esm/utils/index.d.ts +10 -4
  280. package/build/esm/utils/index.js +10 -4
  281. package/build/esm/utils/index.js.map +1 -1
  282. package/build/esm/utils/is-right-click.d.ts +6 -0
  283. package/build/esm/utils/is-right-click.js +9 -0
  284. package/build/esm/utils/is-right-click.js.map +1 -0
  285. package/build/esm/utils/owner-document.d.ts +7 -0
  286. package/build/esm/utils/owner-document.js +12 -0
  287. package/build/esm/utils/owner-document.js.map +1 -0
  288. package/build/esm/utils/polymorphic.d.ts +32 -0
  289. package/build/esm/utils/polymorphic.js +2 -0
  290. package/build/esm/utils/polymorphic.js.map +1 -0
  291. package/build/esm/utils/{rubberBandClamp.d.ts → rubber-band-clamp.d.ts} +0 -0
  292. package/build/esm/utils/{rubberBandClamp.js → rubber-band-clamp.js} +1 -1
  293. package/build/esm/utils/rubber-band-clamp.js.map +1 -0
  294. package/build/esm/utils/use-stable-callback.d.ts +16 -0
  295. package/build/esm/utils/use-stable-callback.js +43 -0
  296. package/build/esm/utils/use-stable-callback.js.map +1 -0
  297. package/build/esm/utils/wrap-event.d.ts +3 -0
  298. package/build/esm/utils/{wrapEvent.js → wrap-event.js} +1 -1
  299. package/build/esm/utils/wrap-event.js.map +1 -0
  300. package/build/tsconfig-build.tsbuildinfo +1 -1
  301. package/package.json +3 -4
  302. package/src/ComboBox/ComboboxButton.tsx +2 -2
  303. package/src/ComboBox/ComboboxOption.tsx +1 -1
  304. package/src/ComboBox/ComboboxPopover.tsx +2 -2
  305. package/src/ComboBox/hooks.tsx +1 -1
  306. package/src/Menu/MenuButton.tsx +1 -1
  307. package/src/Menu/MenuItem.tsx +1 -1
  308. package/src/Menu/MenuList.tsx +1 -1
  309. package/src/Modal/Modal.tsx +1 -1
  310. package/src/Modal/ModalBackdrop.tsx +2 -2
  311. package/src/Popper/Popper.tsx +1 -1
  312. package/src/Popper/PopperArrow.tsx +2 -4
  313. package/src/Slider/Slider.story.tsx +45 -0
  314. package/src/Slider/Slider.tsx +1106 -0
  315. package/src/Slider/index.ts +1 -0
  316. package/src/Slider/styles.css +131 -0
  317. package/src/Tooltip/Tooltip.story.tsx +2 -2
  318. package/src/Tooltip/stateMachine.ts +9 -13
  319. package/src/Tooltip/useTooltip.ts +2 -2
  320. package/src/hooks/useControlledState.ts +12 -9
  321. package/src/hooks/useFocusState.ts +1 -1
  322. package/src/hooks/useGestureHandlers.ts +22 -12
  323. package/src/hooks/useMeasure.ts +0 -1
  324. package/src/hooks/useOnKeyDown.ts +4 -3
  325. package/src/hooks/useRemoveBodyScroll.ts +18 -8
  326. package/src/index.ts +1 -0
  327. package/src/utils/{assignRef.ts → assign-ref.ts} +4 -4
  328. package/src/utils/can-use-dom.ts +7 -0
  329. package/src/utils/context.tsx +48 -0
  330. package/src/utils/{createSubscription.ts → create-subscription.ts} +0 -0
  331. package/src/utils/{getCircularIndex.ts → get-circular-index.ts} +0 -0
  332. package/src/utils/index.ts +10 -4
  333. package/src/utils/is-right-click.ts +14 -0
  334. package/src/utils/owner-document.ts +13 -0
  335. package/src/utils/polymorphic.ts +72 -0
  336. package/src/utils/{rubberBandClamp.ts → rubber-band-clamp.ts} +0 -0
  337. package/src/utils/use-stable-callback.ts +58 -0
  338. package/src/utils/wrap-event.ts +22 -0
  339. package/build/esm/hooks/useId.d.ts +0 -3
  340. package/build/esm/hooks/useId.js +0 -16
  341. package/build/esm/hooks/useId.js.map +0 -1
  342. package/build/esm/utils/assignRef.d.ts +0 -3
  343. package/build/esm/utils/assignRef.js.map +0 -1
  344. package/build/esm/utils/createSubscription.js.map +0 -1
  345. package/build/esm/utils/getCircularIndex.js.map +0 -1
  346. package/build/esm/utils/rubberBandClamp.js.map +0 -1
  347. package/build/esm/utils/wrapEvent.d.ts +0 -3
  348. package/build/esm/utils/wrapEvent.js.map +0 -1
  349. package/build/tsconfig.tsbuildinfo +0 -1
  350. package/src/utils/wrapEvent.ts +0 -19
@@ -0,0 +1 @@
1
+ export * from './Slider';
@@ -0,0 +1,131 @@
1
+ :root {
2
+ --reach-slider: 1;
3
+ }
4
+
5
+ [data-reach-slider-input] {
6
+ max-width: 100%;
7
+ }
8
+
9
+ [data-reach-slider-input][data-orientation="horizontal"] {
10
+ height: 0.5rem;
11
+ }
12
+
13
+ [data-reach-slider-input][data-orientation="vertical"] {
14
+ width: 0.5rem;
15
+ /* the height is somewhat arbitrary but necessary for vertical sliders for
16
+ basic functionality */
17
+ height: 250px;
18
+ max-height: 100%;
19
+ }
20
+
21
+ [data-reach-slider-input][data-disabled] {
22
+ opacity: 0.5;
23
+ pointer-events: none;
24
+ }
25
+
26
+ [data-reach-slider-track] {
27
+ position: relative;
28
+ border-radius: 0.25rem;
29
+ background: hsl(0, 0%, 95%);
30
+ }
31
+
32
+ [data-reach-slider-track][data-orientation="horizontal"] {
33
+ width: 100%;
34
+ height: inherit;
35
+ }
36
+
37
+ [data-reach-slider-track][data-orientation="vertical"] {
38
+ width: inherit;
39
+ height: 100%;
40
+ }
41
+
42
+ /* This pseudo element provides an invisible area that increases the touch
43
+ target size of the track */
44
+ [data-reach-slider-track]::before {
45
+ content: "";
46
+ position: absolute;
47
+ }
48
+
49
+ [data-reach-slider-track][data-orientation="horizontal"]::before {
50
+ width: 100%;
51
+ height: 1.5rem;
52
+ top: calc(-0.5rem - 1px);
53
+ left: 0;
54
+ }
55
+
56
+ [data-reach-slider-track][data-orientation="vertical"]::before {
57
+ width: 1.5rem;
58
+ height: 100%;
59
+ top: 0;
60
+ left: calc(-0.5rem - 1px);
61
+ }
62
+
63
+ [data-reach-slider-handle] {
64
+ width: 16px;
65
+ height: 16px;
66
+ background: #1159a6;
67
+ border-radius: 10px;
68
+ z-index: 1;
69
+ transform-origin: center;
70
+ }
71
+
72
+ [data-reach-slider-handle][aria-orientation="horizontal"] {
73
+ top: 50%;
74
+ transform: translateY(-50%);
75
+ }
76
+
77
+ [data-reach-slider-handle][aria-orientation="horizontal"]:focus {
78
+ transform: translateY(-50%);
79
+ }
80
+
81
+ [data-reach-slider-handle][aria-orientation="vertical"] {
82
+ left: 50%;
83
+ transform: translateX(-50%);
84
+ }
85
+
86
+ [data-reach-slider-range] {
87
+ border-radius: inherit;
88
+ background: #1159a6;
89
+ left: 0;
90
+ bottom: 0;
91
+ }
92
+
93
+ [data-reach-slider-range][data-orientation="horizontal"] {
94
+ height: 100%;
95
+ }
96
+
97
+ [data-reach-slider-range][data-orientation="vertical"] {
98
+ width: 100%;
99
+ }
100
+
101
+ [data-reach-slider-marker] {
102
+ background: hsl(0, 0%, 50%);
103
+ transform-origin: center;
104
+ }
105
+
106
+ [data-reach-slider-marker][data-orientation="horizontal"] {
107
+ top: 50%;
108
+ transform: translate(-50%, -50%);
109
+ width: 3px;
110
+ height: 0.75rem;
111
+ }
112
+
113
+ [data-reach-slider-marker][data-orientation="vertical"] {
114
+ left: 50%;
115
+ transform: translate(-50%, -50%);
116
+ width: 0.75rem;
117
+ height: 3px;
118
+ }
119
+
120
+ [data-reach-slider-marker][data-state="at-value"],
121
+ [data-reach-slider-marker][data-state="under-value"] {
122
+ /* */
123
+ }
124
+
125
+ [data-reach-slider-track-highlight][data-orientation="horizontal"] {
126
+ height: 100%;
127
+ }
128
+
129
+ [data-reach-slider-track-highlight][data-orientation="vertical"] {
130
+ width: 100%;
131
+ }
@@ -29,7 +29,7 @@ const StyledTooltip = forwardRef<HTMLDivElement, InjectedTooltipProps>(
29
29
  );
30
30
 
31
31
  const Example = () => {
32
- const buttonRef = useRef();
32
+ const buttonRef = useRef<HTMLButtonElement | null>(null);
33
33
  return (
34
34
  <div style={{ margin: 100, display: 'flex' }}>
35
35
  <Tooltip label={'Im groot'} as={StyledTooltip}>
@@ -43,7 +43,7 @@ const Example = () => {
43
43
  };
44
44
 
45
45
  const ExampleWithHidingButton = () => {
46
- const buttonRef = useRef();
46
+ const buttonRef = useRef<HTMLButtonElement | null>(null);
47
47
  return (
48
48
  <ul style={{ margin: 100 }}>
49
49
  {Array.from({ length: 20 }).map((_, index) => (
@@ -1,4 +1,4 @@
1
- import { createSubscription } from '../utils/createSubscription';
1
+ import { createSubscription } from '../utils/create-subscription';
2
2
  import type { StateChart as GenericStateChart } from '../hooks/useReducerMachine';
3
3
 
4
4
  ////////////////////////////////////////////////////////////////////////////////
@@ -6,31 +6,27 @@ import type { StateChart as GenericStateChart } from '../hooks/useReducerMachine
6
6
 
7
7
  // Manages when the user "rests" on an element. Keeps the interface from being
8
8
  // flashing tooltips all the time as the user moves the mouse around the screen.
9
- let restTimeout: number;
9
+ let restTimeout: NodeJS.Timeout;
10
10
  function startRestTimer() {
11
- window.clearTimeout(restTimeout);
12
- restTimeout = window.setTimeout(() => {
11
+ clearTimeout(restTimeout);
12
+ restTimeout = setTimeout(() => {
13
13
  send(Rest, undefined);
14
14
  }, 200);
15
15
  }
16
16
 
17
17
  function clearRestTimer() {
18
- window.clearTimeout(restTimeout);
18
+ clearTimeout(restTimeout);
19
19
  }
20
20
 
21
21
  // Manages the delay to hide the tooltip after rest leaves.
22
- let leavingVisibleTimer: number;
23
-
22
+ let leavingVisibleTimer: NodeJS.Timeout;
24
23
  function startLeavingVisibleTimer() {
25
- window.clearTimeout(leavingVisibleTimer);
26
- leavingVisibleTimer = window.setTimeout(
27
- () => send(TimeComplete, undefined),
28
- 100
29
- );
24
+ clearTimeout(leavingVisibleTimer);
25
+ leavingVisibleTimer = setTimeout(() => send(TimeComplete, undefined), 100);
30
26
  }
31
27
 
32
28
  function clearLeavingVisibleTimer() {
33
- window.clearTimeout(leavingVisibleTimer);
29
+ clearTimeout(leavingVisibleTimer);
34
30
  }
35
31
 
36
32
  ////////////////////////////////////////////////////////////////////////////////
@@ -8,8 +8,8 @@ import type {
8
8
  } from 'react';
9
9
  import { useRef, useEffect, useState, useId } from 'react';
10
10
 
11
- import { assignMultipleRefs } from '../utils/assignRef';
12
- import { wrapEvent } from '../utils/wrapEvent';
11
+ import { assignMultipleRefs } from '../utils/assign-ref';
12
+ import { wrapEvent } from '../utils/wrap-event';
13
13
  import {
14
14
  send,
15
15
  state,
@@ -6,31 +6,34 @@ import { wrapEvent } from '../utils';
6
6
 
7
7
  export function useControlledState<
8
8
  V,
9
- E extends SyntheticEvent<any>,
9
+ E extends SyntheticEvent<any> | Event,
10
10
  H extends unknown[]
11
11
  >(
12
12
  valueProp: V | undefined,
13
13
  onChangeProp: CustomEventHandler<E, H> | undefined,
14
- defaultValue: V,
14
+ defaultValue: V | (() => V),
15
15
  defaultOnChange: (
16
16
  setValue: Dispatch<SetStateAction<V>>
17
17
  ) => CustomEventHandler<E, H>
18
- ): [V, CustomEventHandler<E, H> | undefined, Dispatch<SetStateAction<V>>] {
19
- const isControlled = useRef(valueProp !== undefined);
18
+ ): [V, CustomEventHandler<E, H>] {
19
+ const isControlled = valueProp !== undefined;
20
+ const wasControlled = useRef(isControlled);
20
21
  const [valueState, setValueState] = useState<V>(defaultValue);
21
22
 
22
- if (isControlled.current) {
23
- if (valueProp === undefined) {
23
+ if (isControlled) {
24
+ if (wasControlled.current && process.env.NODE_ENV !== 'production') {
24
25
  console.warn('Trying to change from controlled to uncontrolled.');
25
26
  }
26
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
27
- return [valueProp!, onChangeProp, setValueState];
27
+ return [
28
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
29
+ valueProp!,
30
+ wrapEvent(onChangeProp, defaultOnChange(setValueState)),
31
+ ];
28
32
  }
29
33
 
30
34
  return [
31
35
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
32
36
  valueState!,
33
37
  wrapEvent(onChangeProp, defaultOnChange(setValueState)),
34
- setValueState,
35
38
  ];
36
39
  }
@@ -1,7 +1,7 @@
1
1
  import type { FocusEventHandler } from 'react';
2
2
  import { useState } from 'react';
3
3
 
4
- import { wrapEvent } from '../utils/wrapEvent';
4
+ import { wrapEvent } from '../utils/wrap-event';
5
5
 
6
6
  export function useFocusState<T>(
7
7
  props: {
@@ -5,6 +5,8 @@ import type {
5
5
  } from 'react';
6
6
  import { useRef } from 'react';
7
7
 
8
+ import { getOwnerDocument } from '../utils';
9
+
8
10
  export interface GestureHandlersState {
9
11
  target: null | EventTarget;
10
12
  x: number;
@@ -211,16 +213,21 @@ export function gestureHandlers(
211
213
  return;
212
214
  }
213
215
 
214
- window.addEventListener('touchmove', handleTouchMove, { passive: false });
215
- window.addEventListener('touchend', handleTouchEnd);
216
- window.addEventListener('touchcancel', handleTouchEnd);
216
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
217
+ const ownerDocument = getOwnerDocument(e.currentTarget)!;
218
+ const ownerWindow = ownerDocument.defaultView || window;
219
+ ownerWindow.addEventListener('touchmove', handleTouchMove, {
220
+ passive: false,
221
+ });
222
+ ownerWindow.addEventListener('touchend', handleTouchEnd);
223
+ ownerWindow.addEventListener('touchcancel', handleTouchEnd);
217
224
  handleDown(e.touches.item(0) as any);
218
225
  }
219
226
 
220
- function handleTouchEnd() {
221
- window.removeEventListener('touchmove', handleTouchMove);
222
- window.removeEventListener('touchend', handleTouchEnd);
223
- window.removeEventListener('touchcancel', handleTouchEnd);
227
+ function handleTouchEnd(this: Window) {
228
+ this.removeEventListener('touchmove', handleTouchMove);
229
+ this.removeEventListener('touchend', handleTouchEnd);
230
+ this.removeEventListener('touchcancel', handleTouchEnd);
224
231
  handleUp();
225
232
  }
226
233
 
@@ -234,16 +241,19 @@ export function gestureHandlers(
234
241
  return;
235
242
  }
236
243
 
244
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
245
+ const ownerDocument = getOwnerDocument(e.currentTarget)!;
246
+ const ownerWindow = ownerDocument.defaultView || window;
237
247
  if (e.button === 0) {
238
- window.addEventListener('mousemove', handleMove);
239
- window.addEventListener('mouseup', handleMouseUp);
248
+ ownerWindow.addEventListener('mousemove', handleMove);
249
+ ownerWindow.addEventListener('mouseup', handleMouseUp);
240
250
  handleDown(e as any);
241
251
  }
242
252
  }
243
253
 
244
- function handleMouseUp() {
245
- window.removeEventListener('mousemove', handleMove);
246
- window.removeEventListener('mouseup', handleMouseUp);
254
+ function handleMouseUp(this: Window) {
255
+ this.removeEventListener('mousemove', handleMove);
256
+ this.removeEventListener('mouseup', handleMouseUp);
247
257
  handleUp();
248
258
  }
249
259
  /* eslint-enable @typescript-eslint/no-use-before-define */
@@ -1,6 +1,5 @@
1
1
  import type { MutableRefObject } from 'react';
2
2
  import { useRef, useState, useEffect } from 'react';
3
- import ResizeObserver from 'resize-observer-polyfill';
4
3
 
5
4
  export function useMeasure(ref: MutableRefObject<HTMLElement | null>) {
6
5
  const ro = useRef<ResizeObserver | null>(null);
@@ -1,18 +1,19 @@
1
1
  import { useEffect } from 'react';
2
2
 
3
3
  export function useOnKeyDown(
4
+ ownerWindow: Window,
4
5
  handler: (e: KeyboardEvent) => void,
5
6
  active = true
6
7
  ) {
7
8
  useEffect(() => {
8
9
  if (active) {
9
- window.addEventListener('keydown', handler);
10
+ ownerWindow.addEventListener('keydown', handler);
10
11
 
11
12
  return () => {
12
- window.removeEventListener('keydown', handler);
13
+ ownerWindow.removeEventListener('keydown', handler);
13
14
  };
14
15
  }
15
16
 
16
17
  return;
17
- }, [active, handler]);
18
+ }, [ownerWindow, active, handler]);
18
19
  }
@@ -1,29 +1,39 @@
1
+ import type { RefObject } from 'react';
1
2
  import { useEffect } from 'react';
2
3
 
4
+ import { getOwnerDocument } from '../utils';
5
+
3
6
  let scrollBodyCount = 0;
4
- export function useRemoveBodyScroll(open: boolean) {
7
+ export function useRemoveBodyScroll(
8
+ open: boolean,
9
+ elementRef: RefObject<HTMLElement | null>
10
+ ) {
5
11
  useEffect(() => {
6
- if (open) {
12
+ if (open && elementRef.current) {
13
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
14
+ const ownerDocument = getOwnerDocument(elementRef.current)!;
15
+ const ownerWindow = ownerDocument.defaultView || window;
7
16
  scrollBodyCount += 1;
8
17
 
9
18
  // calculate scrollbar width if mounting the first scroll lock
10
19
  let scrollBarWidth = 0;
11
20
  if (scrollBodyCount === 1) {
12
- scrollBarWidth = window.innerWidth - document.body.clientWidth;
21
+ scrollBarWidth =
22
+ ownerWindow.innerWidth - ownerDocument.body.clientWidth;
13
23
  }
14
24
 
15
- document.body.style.overflow = 'hidden';
25
+ ownerDocument.body.style.overflow = 'hidden';
16
26
  if (scrollBarWidth > 0) {
17
- document.body.style.marginRight = `${scrollBarWidth}px`;
27
+ ownerDocument.body.style.marginRight = `${scrollBarWidth}px`;
18
28
  }
19
29
 
20
30
  return () => {
21
31
  scrollBodyCount -= 1;
22
32
  if (scrollBodyCount === 0) {
23
- document.body.style.overflow = '';
24
- document.body.style.marginRight = '';
33
+ ownerDocument.body.style.overflow = '';
34
+ ownerDocument.body.style.marginRight = '';
25
35
  }
26
36
  };
27
37
  }
28
- }, [open]);
38
+ }, [elementRef, open]);
29
39
  }
package/src/index.ts CHANGED
@@ -8,6 +8,7 @@ export * from './Modal';
8
8
  export * from './Popper';
9
9
  export * from './Portal';
10
10
  export * from './RadioButton';
11
+ export * from './Slider';
11
12
  export * from './Spinner';
12
13
  export * from './Tabs';
13
14
  export * from './Tooltip';
@@ -1,7 +1,7 @@
1
- import type { LegacyRef, MutableRefObject, Ref, RefCallback } from 'react';
1
+ import type { MutableRefObject, RefCallback } from 'react';
2
2
 
3
3
  export function assignRef<T>(
4
- ref: LegacyRef<T> | MutableRefObject<T> | Ref<T> | null | undefined,
4
+ ref: MutableRefObject<T> | RefCallback<T> | null | undefined,
5
5
  value: T
6
6
  ) {
7
7
  if (ref == null) return;
@@ -9,7 +9,7 @@ export function assignRef<T>(
9
9
  ref(value);
10
10
  } else {
11
11
  try {
12
- (ref as MutableRefObject<T>).current = value;
12
+ ref.current = value;
13
13
  } catch (error) {
14
14
  throw new Error(`Cannot assign value "${value}" to ref "${ref}"`);
15
15
  }
@@ -17,7 +17,7 @@ export function assignRef<T>(
17
17
  }
18
18
 
19
19
  export function assignMultipleRefs<T>(
20
- ...refs: (LegacyRef<T> | MutableRefObject<T> | Ref<T> | null | undefined)[]
20
+ ...refs: (MutableRefObject<T> | RefCallback<T> | null | undefined)[]
21
21
  ): RefCallback<T> {
22
22
  return (node: T | null) => {
23
23
  refs.forEach((ref) => {
@@ -0,0 +1,7 @@
1
+ export function canUseDOM() {
2
+ return !!(
3
+ typeof window !== 'undefined' &&
4
+ window.document &&
5
+ window.document.createElement
6
+ );
7
+ }
@@ -0,0 +1,48 @@
1
+ import type { FC, PropsWithChildren } from 'react';
2
+ import {
3
+ useMemo,
4
+ createContext as ReactCreateContext,
5
+ useContext as useReactContext,
6
+ } from 'react';
7
+
8
+ ////////////////////////////////////////////////////////////////////////////////
9
+
10
+ type ContextProvider<T> = FC<PropsWithChildren<T>>;
11
+
12
+ export function createContext<ContextValueType extends object | null>(
13
+ rootName: string,
14
+ defaultContext?: ContextValueType
15
+ ): [
16
+ ContextProvider<ContextValueType>,
17
+ (childName: string) => ContextValueType
18
+ ] {
19
+ const Ctx = ReactCreateContext<ContextValueType | undefined>(defaultContext);
20
+
21
+ function Provider(props: PropsWithChildren<ContextValueType>) {
22
+ const { children, ...context } = props;
23
+ const value = useMemo(
24
+ () => context,
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ Object.values(context)
27
+ ) as ContextValueType;
28
+ return <Ctx.Provider value={value}>{children}</Ctx.Provider>;
29
+ }
30
+
31
+ function useContext(childName: string) {
32
+ const context = useReactContext(Ctx);
33
+ if (context) {
34
+ return context;
35
+ }
36
+ if (defaultContext) {
37
+ return defaultContext;
38
+ }
39
+ throw Error(
40
+ `${childName} must be rendered inside of a ${rootName} component.`
41
+ );
42
+ }
43
+
44
+ Ctx.displayName = `${rootName}Context`;
45
+ Provider.displayName = `${rootName}Provider`;
46
+
47
+ return [Provider, useContext];
48
+ }
@@ -1,4 +1,10 @@
1
- export * from './assignRef';
2
- export * from './wrapEvent';
3
- export * from './getCircularIndex';
4
- export * from './rubberBandClamp';
1
+ export * from './assign-ref';
2
+ export * from './can-use-dom';
3
+ export * from './context';
4
+ export * from './get-circular-index';
5
+ export * from './is-right-click';
6
+ export * from './owner-document';
7
+ export * from './polymorphic';
8
+ export * from './rubber-band-clamp';
9
+ export * from './use-stable-callback';
10
+ export * from './wrap-event';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Detects right clicks
3
+ *
4
+ * @param nativeEvent
5
+ */
6
+ export function isRightClick(
7
+ nativeEvent: MouseEvent | PointerEvent | TouchEvent
8
+ ) {
9
+ return 'which' in nativeEvent
10
+ ? nativeEvent.which === 3
11
+ : 'button' in nativeEvent
12
+ ? (nativeEvent as any).button === 2
13
+ : false;
14
+ }
@@ -0,0 +1,13 @@
1
+ import { canUseDOM } from './can-use-dom';
2
+
3
+ /**
4
+ * Get an element's owner document. Useful when components are used in iframes
5
+ * or other environments like dev tools.
6
+ *
7
+ * @param element
8
+ */
9
+ export function getOwnerDocument<T extends Element>(
10
+ element: T | null | undefined
11
+ ) {
12
+ return canUseDOM() ? (element ? element.ownerDocument : document) : null;
13
+ }
@@ -0,0 +1,72 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+ // adapted from https://github.com/radix-ui/primitives/blob/2f139a832ba0cdfd445c937ebf63c2e79e0ef7ed/packages/react/polymorphic/src/polymorphic.ts
3
+ // Would have liked to use it directly instead of copying but they are
4
+ // (rightfully) treating it as an internal utility, so copy/paste it is to
5
+ // prevent any needless churn if they make breaking changes. Big thanks to Jenna
6
+ // for the heavy lifting! https://github.com/jjenzz
7
+
8
+ import type * as React from 'react';
9
+
10
+ // eslint-disable-next-line @typescript-eslint/ban-types
11
+ export type Merge<P1 = {}, P2 = {}> = Omit<P1, keyof P2> & P2;
12
+
13
+ /**
14
+ * Infers the OwnProps if E is a ForwardRefExoticComponentWithAs
15
+ */
16
+ export type OwnProps<E> = E extends ForwardRefComponent<any, infer P> ? P : {};
17
+
18
+ /**
19
+ * Infers the JSX.IntrinsicElement if E is a ForwardRefExoticComponentWithAs
20
+ */
21
+ export type IntrinsicElement<E> = E extends ForwardRefComponent<infer I, any>
22
+ ? I
23
+ : never;
24
+
25
+ type ForwardRefExoticComponent<E, OwnProps> = React.ForwardRefExoticComponent<
26
+ Merge<
27
+ E extends React.ElementType ? React.ComponentPropsWithRef<E> : never,
28
+ OwnProps & { as?: E }
29
+ >
30
+ >;
31
+
32
+ export interface ForwardRefComponent<
33
+ IntrinsicElementString,
34
+ OwnProps = {}
35
+ /*
36
+ * Extends original type to ensure built in React types play nice with
37
+ * polymorphic components still e.g. `React.ElementRef` etc.
38
+ */
39
+ > extends ForwardRefExoticComponent<IntrinsicElementString, OwnProps> {
40
+ /*
41
+ * When `as` prop is passed, use this overload. Merges original own props
42
+ * (without DOM props) and the inferred props from `as` element with the own
43
+ * props taking precendence.
44
+ *
45
+ * We explicitly avoid `React.ElementType` and manually narrow the prop types
46
+ * so that events are typed when using JSX.IntrinsicElements.
47
+ */
48
+ <As = IntrinsicElementString>(
49
+ props: As extends ''
50
+ ? { as: keyof JSX.IntrinsicElements }
51
+ : As extends React.ComponentType<infer P>
52
+ ? Merge<P, OwnProps & { as: As }>
53
+ : As extends keyof JSX.IntrinsicElements
54
+ ? Merge<JSX.IntrinsicElements[As], OwnProps & { as: As }>
55
+ : never
56
+ ): React.ReactElement | null;
57
+ }
58
+
59
+ export interface MemoComponent<IntrinsicElementString, OwnProps = {}>
60
+ extends React.MemoExoticComponent<
61
+ ForwardRefComponent<IntrinsicElementString, OwnProps>
62
+ > {
63
+ <As = IntrinsicElementString>(
64
+ props: As extends ''
65
+ ? { as: keyof JSX.IntrinsicElements }
66
+ : As extends React.ComponentType<infer P>
67
+ ? Merge<P, OwnProps & { as: As }>
68
+ : As extends keyof JSX.IntrinsicElements
69
+ ? Merge<JSX.IntrinsicElements[As], OwnProps & { as: As }>
70
+ : never
71
+ ): React.ReactElement | null;
72
+ }