@basic-ui/core 0.0.54 → 0.0.56

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 +6 -6
  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,258 +1,262 @@
1
- import { useState } from 'react';
2
- import { useSpring, animated } from 'react-spring';
3
-
4
- import { Modal, ModalBackdrop } from './';
5
- import { Portal } from '../Portal';
6
- import './styles.css';
7
-
8
- export default {
9
- title: 'components/Modal',
10
- };
11
-
12
- const LoremIpsum = ({ numOfParagraphs = 20 }) => {
13
- const content = [];
14
-
15
- for (let i = 0; i < numOfParagraphs; i++) {
16
- content.push(
17
- <p key={`paragraph_${i}`}>
18
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
19
- vestibulum sapien nec mauris placerat, et facilisis massa placerat.
20
- Curabitur sagittis condimentum lectus vel aliquam. Sed ultrices, metus
21
- sed suscipit venenatis, metus lectus vestibulum neque, eget sodales
22
- justo sapien in ante. In a neque mollis, volutpat est a, vehicula lacus.
23
- Praesent lectus justo, tempor a laoreet in, consectetur nec sapien.
24
- Phasellus non venenatis erat. Maecenas eget mi sodales, euismod tortor
25
- vitae, ultricies quam. Sed varius nunc id tincidunt porttitor. Morbi
26
- lectus massa, malesuada at lorem ut, semper volutpat orci. Donec mauris
27
- eros, faucibus ut egestas a, ultricies vel tortor. Phasellus mi lectus,
28
- consectetur a risus at, faucibus porttitor ligula. Maecenas felis eros,
29
- porttitor vel placerat eget, malesuada ac leo. Cras a eros id dui
30
- porttitor ullamcorper sit amet quis lorem.
31
- </p>
32
- );
33
- }
34
-
35
- return <>{content}</>;
36
- };
37
-
38
- const Wrapper = ({ children }) => {
39
- return (
40
- <div style={{ maxWidth: 900, margin: '0 auto' }}>
41
- <div
42
- style={{
43
- boxSizing: 'border-box',
44
- display: 'flex',
45
- alignItems: 'flex-start',
46
- padding: '96px 48px',
47
- justifyContent: 'space-around',
48
- width: '100%',
49
- position: 'relative',
50
- }}
51
- >
52
- <a href="#" onClick={(e) => e.preventDefault()}>
53
- Link
54
- </a>
55
- <div style={{ minHeight: 120, width: 100 }}>{children}</div>
56
- <a href="#" onClick={(e) => e.preventDefault()}>
57
- Link
58
- </a>
59
- </div>
60
- <div>
61
- <LoremIpsum />
62
- </div>
63
- <div
64
- style={{
65
- boxSizing: 'border-box',
66
- display: 'flex',
67
- alignItems: 'flex-start',
68
- padding: '96px 48px',
69
- justifyContent: 'space-around',
70
- width: '100%',
71
- position: 'relative',
72
- }}
73
- >
74
- <a href="#" onClick={(e) => e.preventDefault()}>
75
- Link
76
- </a>
77
- <div style={{ minHeight: 120, width: 100 }}>{children}</div>
78
- <a href="#" onClick={(e) => e.preventDefault()}>
79
- Link
80
- </a>
81
- </div>
82
- </div>
83
- );
84
- };
85
-
86
- const SimpleModalControlledExample = () => {
87
- const [open, setOpen] = useState(false);
88
-
89
- const handleClose = () => {
90
- setOpen(false);
91
- };
92
-
93
- return (
94
- <>
95
- <button id="open-modal" onClick={() => setOpen(!open)}>
96
- Open modal
97
- </button>
98
- {open && (
99
- <Portal>
100
- <ModalBackdrop onClose={handleClose}>
101
- <Modal trapFocus={true}>
102
- <button>Start button</button>
103
- <LoremIpsum />
104
- <button>End button</button>
105
- </Modal>
106
- </ModalBackdrop>
107
- </Portal>
108
- )}
109
- </>
110
- );
111
- };
112
-
113
- const NestedModalControlledExample = () => {
114
- const [open, setOpen] = useState(false);
115
- const [open2, setOpen2] = useState(false);
116
-
117
- return (
118
- <>
119
- <button id="open-modal" onClick={() => setOpen(!open)}>
120
- Open modal
121
- </button>
122
- {open && (
123
- <Portal>
124
- <ModalBackdrop onClose={() => setOpen(false)}>
125
- <Modal trapFocus={true}>
126
- <button id="open-another-modal" onClick={() => setOpen2(true)}>
127
- Open another modal
128
- </button>
129
- {open2 && (
130
- <Portal>
131
- <ModalBackdrop onClose={() => setOpen2(false)}>
132
- <Modal trapFocus={true}>
133
- <LoremIpsum numOfParagraphs={1} />
134
- <button onClick={() => setOpen2(false)}>Close</button>
135
- </Modal>
136
- </ModalBackdrop>
137
- </Portal>
138
- )}
139
- <LoremIpsum numOfParagraphs={1} />
140
- <button
141
- autoFocus
142
- id="close-button"
143
- onClick={() => setOpen(false)}
144
- >
145
- Close
146
- </button>
147
- </Modal>
148
- </ModalBackdrop>
149
- </Portal>
150
- )}
151
- </>
152
- );
153
- };
154
-
155
- const SimpleModalControlledAnimatedExample = () => {
156
- const [open, setOpen] = useState(false);
157
- const [pointerEvents, setPointerEvents] = useState('none');
158
- const [{ scale, opacity }, set] = useSpring(() => ({
159
- scale: 0.97,
160
- opacity: 0,
161
- }));
162
-
163
- const handleClose = () => {
164
- const t = Date.now();
165
- setPointerEvents('none');
166
- set({
167
- scale: 0.97,
168
- opacity: 0,
169
- config: {
170
- mass: 1,
171
- tension: 1600,
172
- friction: 50,
173
- clamp: true,
174
- },
175
- onRest: () => {
176
- console.log('Close in: ', Date.now() - t);
177
- setOpen(false);
178
- },
179
- });
180
- };
181
-
182
- const handleOpen = () => {
183
- const t = Date.now();
184
- setOpen(true);
185
- setPointerEvents('auto');
186
- set({
187
- scale: 1,
188
- opacity: 1,
189
- config: {
190
- mass: 1,
191
- tension: 1050,
192
- friction: 50,
193
- clamp: true,
194
- },
195
- onRest: () => {
196
- console.log('Opened in: ', Date.now() - t);
197
- },
198
- });
199
- };
200
-
201
- return (
202
- <>
203
- <button id="open-modal" onClick={handleOpen}>
204
- Open modal
205
- </button>
206
- {open && (
207
- <Portal>
208
- <animated.div
209
- style={{
210
- opacity,
211
- position: 'fixed',
212
- boxSizing: 'border-box',
213
- top: '0',
214
- left: '0',
215
- right: '0',
216
- bottom: '0',
217
- backgroundColor: 'rgba(0, 0, 0, 0.3)',
218
- pointerEvents: 'none',
219
- }}
220
- />
221
- <ModalBackdrop onClose={handleClose} style={{ pointerEvents }}>
222
- <Modal
223
- as={animated.div}
224
- style={{
225
- transform: scale.to((x: number) => `scale(${x}, ${x * x})`),
226
- opacity,
227
- transformOrigin: 'center top',
228
- }}
229
- >
230
- <button>Start button</button>
231
- Hello world
232
- <LoremIpsum />
233
- <button>End button</button>
234
- </Modal>
235
- </ModalBackdrop>
236
- </Portal>
237
- )}
238
- </>
239
- );
240
- };
241
-
242
- export const SimpleModalControlled = () => (
243
- <Wrapper>
244
- <SimpleModalControlledExample />
245
- </Wrapper>
246
- );
247
-
248
- export const NestedModalControlled = () => (
249
- <Wrapper>
250
- <NestedModalControlledExample />
251
- </Wrapper>
252
- );
253
-
254
- export const SimpleModalControlledAnimated = () => (
255
- <Wrapper>
256
- <SimpleModalControlledAnimatedExample />
257
- </Wrapper>
258
- );
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import { useState } from 'react';
3
+ import { useSpring, animated } from 'react-spring';
4
+
5
+ import { Modal, ModalBackdrop } from './';
6
+ import { Portal } from '../Portal';
7
+ import './styles.css';
8
+
9
+ export default {
10
+ title: 'components/Modal',
11
+ };
12
+
13
+ const LoremIpsum = ({ numOfParagraphs = 20 }) => {
14
+ const content = [];
15
+
16
+ for (let i = 0; i < numOfParagraphs; i++) {
17
+ content.push(
18
+ <p key={`paragraph_${i}`}>
19
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
20
+ vestibulum sapien nec mauris placerat, et facilisis massa placerat.
21
+ Curabitur sagittis condimentum lectus vel aliquam. Sed ultrices, metus
22
+ sed suscipit venenatis, metus lectus vestibulum neque, eget sodales
23
+ justo sapien in ante. In a neque mollis, volutpat est a, vehicula lacus.
24
+ Praesent lectus justo, tempor a laoreet in, consectetur nec sapien.
25
+ Phasellus non venenatis erat. Maecenas eget mi sodales, euismod tortor
26
+ vitae, ultricies quam. Sed varius nunc id tincidunt porttitor. Morbi
27
+ lectus massa, malesuada at lorem ut, semper volutpat orci. Donec mauris
28
+ eros, faucibus ut egestas a, ultricies vel tortor. Phasellus mi lectus,
29
+ consectetur a risus at, faucibus porttitor ligula. Maecenas felis eros,
30
+ porttitor vel placerat eget, malesuada ac leo. Cras a eros id dui
31
+ porttitor ullamcorper sit amet quis lorem.
32
+ </p>
33
+ );
34
+ }
35
+
36
+ return <>{content}</>;
37
+ };
38
+
39
+ const Wrapper = ({ children }: { children: ReactNode }) => {
40
+ return (
41
+ <div style={{ maxWidth: 900, margin: '0 auto' }}>
42
+ <div
43
+ style={{
44
+ boxSizing: 'border-box',
45
+ display: 'flex',
46
+ alignItems: 'flex-start',
47
+ padding: '96px 48px',
48
+ justifyContent: 'space-around',
49
+ width: '100%',
50
+ position: 'relative',
51
+ }}
52
+ >
53
+ <a href="#" onClick={(e) => e.preventDefault()}>
54
+ Link
55
+ </a>
56
+ <div style={{ minHeight: 120, width: 100 }}>{children}</div>
57
+ <a href="#" onClick={(e) => e.preventDefault()}>
58
+ Link
59
+ </a>
60
+ </div>
61
+ <div>
62
+ <LoremIpsum />
63
+ </div>
64
+ <div
65
+ style={{
66
+ boxSizing: 'border-box',
67
+ display: 'flex',
68
+ alignItems: 'flex-start',
69
+ padding: '96px 48px',
70
+ justifyContent: 'space-around',
71
+ width: '100%',
72
+ position: 'relative',
73
+ }}
74
+ >
75
+ <a href="#" onClick={(e) => e.preventDefault()}>
76
+ Link
77
+ </a>
78
+ <div style={{ minHeight: 120, width: 100 }}>{children}</div>
79
+ <a href="#" onClick={(e) => e.preventDefault()}>
80
+ Link
81
+ </a>
82
+ </div>
83
+ </div>
84
+ );
85
+ };
86
+
87
+ const SimpleModalControlledExample = () => {
88
+ const [open, setOpen] = useState(false);
89
+
90
+ const handleClose = () => {
91
+ setOpen(false);
92
+ };
93
+
94
+ return (
95
+ <>
96
+ <button id="open-modal" onClick={() => setOpen(!open)}>
97
+ Open modal
98
+ </button>
99
+ {open && (
100
+ <Portal>
101
+ <ModalBackdrop onClose={handleClose}>
102
+ <Modal trapFocus={true}>
103
+ <button>Start button</button>
104
+ <LoremIpsum />
105
+ <button>End button</button>
106
+ </Modal>
107
+ </ModalBackdrop>
108
+ </Portal>
109
+ )}
110
+ </>
111
+ );
112
+ };
113
+
114
+ const NestedModalControlledExample = () => {
115
+ const [open, setOpen] = useState(false);
116
+ const [open2, setOpen2] = useState(false);
117
+
118
+ return (
119
+ <>
120
+ <button id="open-modal" onClick={() => setOpen(!open)}>
121
+ Open modal
122
+ </button>
123
+ {open && (
124
+ <Portal>
125
+ <ModalBackdrop onClose={() => setOpen(false)}>
126
+ <Modal trapFocus={true}>
127
+ <button id="open-another-modal" onClick={() => setOpen2(true)}>
128
+ Open another modal
129
+ </button>
130
+ {open2 && (
131
+ <Portal>
132
+ <ModalBackdrop onClose={() => setOpen2(false)}>
133
+ <Modal trapFocus={true}>
134
+ <LoremIpsum numOfParagraphs={1} />
135
+ <button onClick={() => setOpen2(false)}>Close</button>
136
+ </Modal>
137
+ </ModalBackdrop>
138
+ </Portal>
139
+ )}
140
+ <LoremIpsum numOfParagraphs={1} />
141
+ <button
142
+ autoFocus
143
+ id="close-button"
144
+ onClick={() => setOpen(false)}
145
+ >
146
+ Close
147
+ </button>
148
+ </Modal>
149
+ </ModalBackdrop>
150
+ </Portal>
151
+ )}
152
+ </>
153
+ );
154
+ };
155
+
156
+ const SimpleModalControlledAnimatedExample = () => {
157
+ const [open, setOpen] = useState(false);
158
+ const [pointerEvents, setPointerEvents] =
159
+ useState<CSSProperties['pointerEvents']>('none');
160
+ const [{ scale, opacity }, set] = useSpring(() => ({
161
+ scale: 0.97,
162
+ opacity: 0,
163
+ }));
164
+
165
+ const handleClose = () => {
166
+ const t = Date.now();
167
+ setPointerEvents('none');
168
+ set({
169
+ scale: 0.97,
170
+ opacity: 0,
171
+ config: {
172
+ mass: 1,
173
+ tension: 1600,
174
+ friction: 50,
175
+ clamp: true,
176
+ },
177
+ onRest: () => {
178
+ console.log('Close in: ', Date.now() - t);
179
+ setOpen(false);
180
+ },
181
+ });
182
+ };
183
+
184
+ const handleOpen = () => {
185
+ const t = Date.now();
186
+ setOpen(true);
187
+ setPointerEvents('auto');
188
+ set({
189
+ scale: 1,
190
+ opacity: 1,
191
+ config: {
192
+ mass: 1,
193
+ tension: 1050,
194
+ friction: 50,
195
+ clamp: true,
196
+ },
197
+ onRest: () => {
198
+ console.log('Opened in: ', Date.now() - t);
199
+ },
200
+ });
201
+ };
202
+
203
+ return (
204
+ <>
205
+ <button id="open-modal" onClick={handleOpen}>
206
+ Open modal
207
+ </button>
208
+ {open && (
209
+ <Portal>
210
+ <animated.div
211
+ style={{
212
+ opacity,
213
+ position: 'fixed',
214
+ boxSizing: 'border-box',
215
+ top: '0',
216
+ left: '0',
217
+ right: '0',
218
+ bottom: '0',
219
+ backgroundColor: 'rgba(0, 0, 0, 0.3)',
220
+ pointerEvents: 'none',
221
+ }}
222
+ />
223
+ <ModalBackdrop onClose={handleClose} style={{ pointerEvents }}>
224
+ <Modal
225
+ as={animated.div}
226
+ style={
227
+ {
228
+ transform: scale.to((x: number) => `scale(${x}, ${x * x})`),
229
+ opacity,
230
+ transformOrigin: 'center top',
231
+ } as any
232
+ }
233
+ >
234
+ <button>Start button</button>
235
+ Hello world
236
+ <LoremIpsum />
237
+ <button>End button</button>
238
+ </Modal>
239
+ </ModalBackdrop>
240
+ </Portal>
241
+ )}
242
+ </>
243
+ );
244
+ };
245
+
246
+ export const SimpleModalControlled = () => (
247
+ <Wrapper>
248
+ <SimpleModalControlledExample />
249
+ </Wrapper>
250
+ );
251
+
252
+ export const NestedModalControlled = () => (
253
+ <Wrapper>
254
+ <NestedModalControlledExample />
255
+ </Wrapper>
256
+ );
257
+
258
+ export const SimpleModalControlledAnimated = () => (
259
+ <Wrapper>
260
+ <SimpleModalControlledAnimatedExample />
261
+ </Wrapper>
262
+ );
@@ -1,48 +1,48 @@
1
- import type {
2
- CSSProperties,
3
- ElementType,
4
- HTMLAttributes,
5
- ReactNode,
6
- } from 'react';
7
- import { forwardRef, useRef } from 'react';
8
-
9
- import { useAutoFocus, useFocusReturn, useRemoveBodyScroll } from '../hooks';
10
- import { FocusLock } from '../FocusLock';
11
- import { assignMultipleRefs } from '../utils';
12
-
13
- export interface ModalProps extends HTMLAttributes<HTMLDivElement> {
14
- as?: ElementType<any>;
15
- innerAs?: ElementType<any>;
16
- children?: ReactNode;
17
- style?: CSSProperties;
18
- trapFocus?: boolean;
19
- }
20
-
21
- export const Modal = forwardRef<HTMLDivElement, ModalProps>(
22
- (
23
- { as: Comp = 'div', children, trapFocus = true, style = {}, ...otherProps },
24
- ref
25
- ) => {
26
- const modalRef = useRef<HTMLDivElement>(null);
27
-
28
- useFocusReturn(trapFocus, modalRef);
29
- useRemoveBodyScroll(trapFocus, modalRef);
30
- useAutoFocus(trapFocus, modalRef);
31
-
32
- return (
33
- <FocusLock childRef={modalRef} enabled={trapFocus}>
34
- <Comp
35
- ref={assignMultipleRefs(ref, modalRef)}
36
- data-modal-container=""
37
- role="dialog"
38
- aria-modal="true"
39
- style={style}
40
- tabIndex={-1}
41
- {...otherProps}
42
- >
43
- {children}
44
- </Comp>
45
- </FocusLock>
46
- );
47
- }
48
- );
1
+ import type {
2
+ CSSProperties,
3
+ ElementType,
4
+ HTMLAttributes,
5
+ ReactNode,
6
+ } from 'react';
7
+ import { forwardRef, useRef } from 'react';
8
+
9
+ import { useAutoFocus, useFocusReturn, useRemoveBodyScroll } from '../hooks';
10
+ import { FocusLock } from '../FocusLock';
11
+ import { assignMultipleRefs } from '../utils';
12
+
13
+ export interface ModalProps extends HTMLAttributes<HTMLDivElement> {
14
+ as?: ElementType<any>;
15
+ innerAs?: ElementType<any>;
16
+ children?: ReactNode;
17
+ style?: CSSProperties;
18
+ trapFocus?: boolean;
19
+ }
20
+
21
+ export const Modal = forwardRef<HTMLDivElement, ModalProps>(
22
+ (
23
+ { as: Comp = 'div', children, trapFocus = true, style = {}, ...otherProps },
24
+ ref
25
+ ) => {
26
+ const modalRef = useRef<HTMLDivElement>(null);
27
+
28
+ useFocusReturn(trapFocus, modalRef);
29
+ useRemoveBodyScroll(trapFocus, modalRef);
30
+ useAutoFocus(trapFocus, modalRef);
31
+
32
+ return (
33
+ <FocusLock childRef={modalRef} enabled={trapFocus}>
34
+ <Comp
35
+ ref={assignMultipleRefs(ref, modalRef)}
36
+ data-modal-container=""
37
+ role="dialog"
38
+ aria-modal="true"
39
+ style={style}
40
+ tabIndex={-1}
41
+ {...otherProps}
42
+ >
43
+ {children}
44
+ </Comp>
45
+ </FocusLock>
46
+ );
47
+ }
48
+ );