@basic-ui/core 0.0.51 → 0.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +3 -3
  2. package/build/cjs/index.js +88 -88
  3. package/build/cjs/index.js.map +1 -1
  4. package/build/esm/Accordion/Accordion.d.ts +9 -9
  5. package/build/esm/Accordion/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/AccordionBody.d.ts +6 -6
  7. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  8. package/build/esm/Accordion/AccordionHeader.d.ts +7 -7
  9. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  10. package/build/esm/Accordion/AccordionItem.d.ts +9 -9
  11. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  12. package/build/esm/Accordion/context.d.ts +19 -19
  13. package/build/esm/Accordion/context.js.map +1 -1
  14. package/build/esm/Accordion/index.d.ts +4 -4
  15. package/build/esm/Accordion/index.js.map +1 -1
  16. package/build/esm/Accordion/scopeQuery.d.ts +2 -2
  17. package/build/esm/Accordion/scopeQuery.js.map +1 -1
  18. package/build/esm/CheckBox/CheckBox.d.ts +7 -7
  19. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  20. package/build/esm/CheckBox/index.d.ts +1 -1
  21. package/build/esm/CheckBox/index.js.map +1 -1
  22. package/build/esm/ComboBox/Combobox.d.ts +18 -18
  23. package/build/esm/ComboBox/Combobox.js.map +1 -1
  24. package/build/esm/ComboBox/ComboboxButton.d.ts +9 -9
  25. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  26. package/build/esm/ComboBox/ComboboxInput.d.ts +17 -17
  27. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  28. package/build/esm/ComboBox/ComboboxLabel.d.ts +7 -7
  29. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  30. package/build/esm/ComboBox/ComboboxList.d.ts +8 -8
  31. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  32. package/build/esm/ComboBox/ComboboxOption.d.ts +11 -11
  33. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  34. package/build/esm/ComboBox/ComboboxPopover.d.ts +9 -9
  35. package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
  36. package/build/esm/ComboBox/cities.d.ts +5 -5
  37. package/build/esm/ComboBox/cities.js.map +1 -1
  38. package/build/esm/ComboBox/context.d.ts +30 -30
  39. package/build/esm/ComboBox/context.js.map +1 -1
  40. package/build/esm/ComboBox/hooks.d.ts +37 -37
  41. package/build/esm/ComboBox/hooks.js.map +1 -1
  42. package/build/esm/ComboBox/index.d.ts +8 -8
  43. package/build/esm/ComboBox/index.js.map +1 -1
  44. package/build/esm/ComboBox/makeHash.d.ts +1 -1
  45. package/build/esm/ComboBox/makeHash.js.map +1 -1
  46. package/build/esm/ComboBox/scopeQuery.d.ts +1 -1
  47. package/build/esm/ComboBox/scopeQuery.js.map +1 -1
  48. package/build/esm/FocusLock/FocusLock.d.ts +9 -9
  49. package/build/esm/FocusLock/FocusLock.js.map +1 -1
  50. package/build/esm/FocusLock/index.d.ts +1 -1
  51. package/build/esm/FocusLock/index.js.map +1 -1
  52. package/build/esm/FocusLock/tabUtils.d.ts +3 -3
  53. package/build/esm/FocusLock/tabUtils.js.map +1 -1
  54. package/build/esm/FocusLock/useFocusLock.d.ts +7 -7
  55. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  56. package/build/esm/List/List.d.ts +7 -7
  57. package/build/esm/List/List.js.map +1 -1
  58. package/build/esm/List/ListItem.d.ts +7 -7
  59. package/build/esm/List/ListItem.js.map +1 -1
  60. package/build/esm/List/context.d.ts +4 -4
  61. package/build/esm/List/context.js.map +1 -1
  62. package/build/esm/List/index.d.ts +2 -2
  63. package/build/esm/List/index.js.map +1 -1
  64. package/build/esm/Menu/ContextMenuTrigger.d.ts +11 -11
  65. package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
  66. package/build/esm/Menu/Menu.d.ts +10 -10
  67. package/build/esm/Menu/Menu.js.map +1 -1
  68. package/build/esm/Menu/MenuButton.d.ts +11 -11
  69. package/build/esm/Menu/MenuButton.js.map +1 -1
  70. package/build/esm/Menu/MenuItem.d.ts +8 -8
  71. package/build/esm/Menu/MenuItem.js.map +1 -1
  72. package/build/esm/Menu/MenuList.d.ts +7 -7
  73. package/build/esm/Menu/MenuList.js.map +1 -1
  74. package/build/esm/Menu/MenuPopover.d.ts +8 -8
  75. package/build/esm/Menu/MenuPopover.js.map +1 -1
  76. package/build/esm/Menu/context.d.ts +25 -25
  77. package/build/esm/Menu/context.js.map +1 -1
  78. package/build/esm/Menu/fixtures/countryList.d.ts +1 -1
  79. package/build/esm/Menu/fixtures/countryList.js.map +1 -1
  80. package/build/esm/Menu/index.d.ts +6 -6
  81. package/build/esm/Menu/index.js.map +1 -1
  82. package/build/esm/Menu/scope.d.ts +1 -1
  83. package/build/esm/Menu/scope.js.map +1 -1
  84. package/build/esm/Modal/Modal.d.ts +9 -9
  85. package/build/esm/Modal/Modal.js.map +1 -1
  86. package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
  87. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  88. package/build/esm/Modal/index.d.ts +2 -2
  89. package/build/esm/Modal/index.js.map +1 -1
  90. package/build/esm/Popper/Popper.d.ts +35 -35
  91. package/build/esm/Popper/Popper.js.map +1 -1
  92. package/build/esm/Popper/PopperArrow.d.ts +6 -6
  93. package/build/esm/Popper/PopperArrow.js.map +1 -1
  94. package/build/esm/Popper/context.d.ts +6 -6
  95. package/build/esm/Popper/context.js.map +1 -1
  96. package/build/esm/Popper/index.d.ts +3 -3
  97. package/build/esm/Popper/index.js.map +1 -1
  98. package/build/esm/Portal/Portal.d.ts +6 -6
  99. package/build/esm/Portal/Portal.js.map +1 -1
  100. package/build/esm/Portal/index.d.ts +1 -1
  101. package/build/esm/Portal/index.js.map +1 -1
  102. package/build/esm/RadioButton/RadioButton.d.ts +10 -10
  103. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  104. package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
  105. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  106. package/build/esm/RadioButton/context.d.ts +9 -9
  107. package/build/esm/RadioButton/context.js.map +1 -1
  108. package/build/esm/RadioButton/index.d.ts +2 -2
  109. package/build/esm/RadioButton/index.js.map +1 -1
  110. package/build/esm/SkipNav/SkipNav.d.ts +7 -7
  111. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  112. package/build/esm/SkipNav/index.d.ts +1 -1
  113. package/build/esm/SkipNav/index.js.map +1 -1
  114. package/build/esm/Slider/Slider.d.ts +197 -197
  115. package/build/esm/Slider/Slider.js +82 -82
  116. package/build/esm/Slider/Slider.js.map +1 -1
  117. package/build/esm/Slider/index.d.ts +1 -1
  118. package/build/esm/Slider/index.js.map +1 -1
  119. package/build/esm/Spinner/Spinner.d.ts +12 -12
  120. package/build/esm/Spinner/Spinner.js.map +1 -1
  121. package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
  122. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  123. package/build/esm/Spinner/context.d.ts +12 -12
  124. package/build/esm/Spinner/context.js.map +1 -1
  125. package/build/esm/Spinner/index.d.ts +2 -2
  126. package/build/esm/Spinner/index.js.map +1 -1
  127. package/build/esm/Tabs/Tab.d.ts +7 -7
  128. package/build/esm/Tabs/Tab.js.map +1 -1
  129. package/build/esm/Tabs/TabList.d.ts +9 -9
  130. package/build/esm/Tabs/TabList.js.map +1 -1
  131. package/build/esm/Tabs/TabPanel.d.ts +8 -8
  132. package/build/esm/Tabs/TabPanel.js.map +1 -1
  133. package/build/esm/Tabs/TabPanels.d.ts +8 -8
  134. package/build/esm/Tabs/TabPanels.js.map +1 -1
  135. package/build/esm/Tabs/Tabs.d.ts +10 -10
  136. package/build/esm/Tabs/Tabs.js.map +1 -1
  137. package/build/esm/Tabs/context.d.ts +17 -17
  138. package/build/esm/Tabs/context.js.map +1 -1
  139. package/build/esm/Tabs/index.d.ts +5 -5
  140. package/build/esm/Tabs/index.js.map +1 -1
  141. package/build/esm/Tabs/scopeQuery.d.ts +1 -1
  142. package/build/esm/Tabs/scopeQuery.js.map +1 -1
  143. package/build/esm/Tooltip/Tooltip.d.ts +10 -10
  144. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  145. package/build/esm/Tooltip/index.d.ts +1 -1
  146. package/build/esm/Tooltip/index.js.map +1 -1
  147. package/build/esm/Tooltip/stateMachine.d.ts +28 -28
  148. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  149. package/build/esm/Tooltip/useTooltip.d.ts +10 -10
  150. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  151. package/build/esm/hooks/index.d.ts +13 -13
  152. package/build/esm/hooks/index.js.map +1 -1
  153. package/build/esm/hooks/useAutoFocus.d.ts +2 -2
  154. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  155. package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
  156. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  157. package/build/esm/hooks/useControlledState.d.ts +3 -3
  158. package/build/esm/hooks/useControlledState.js +1 -1
  159. package/build/esm/hooks/useControlledState.js.map +1 -1
  160. package/build/esm/hooks/useFocusReturn.d.ts +2 -2
  161. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  162. package/build/esm/hooks/useFocusState.d.ts +11 -11
  163. package/build/esm/hooks/useFocusState.js.map +1 -1
  164. package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
  165. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  166. package/build/esm/hooks/useMeasure.d.ts +7 -7
  167. package/build/esm/hooks/useMeasure.js.map +1 -1
  168. package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
  169. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  170. package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
  171. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  172. package/build/esm/hooks/useReducerMachine.d.ts +24 -24
  173. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  174. package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
  175. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  176. package/build/esm/hooks/useScope.d.ts +11 -11
  177. package/build/esm/hooks/useScope.js.map +1 -1
  178. package/build/esm/hooks/useThrottle.d.ts +1 -1
  179. package/build/esm/hooks/useThrottle.js.map +1 -1
  180. package/build/esm/index.d.ts +15 -15
  181. package/build/esm/index.js.map +1 -1
  182. package/build/esm/utils/assign-ref.d.ts +3 -3
  183. package/build/esm/utils/assign-ref.js.map +1 -1
  184. package/build/esm/utils/can-use-dom.d.ts +1 -1
  185. package/build/esm/utils/can-use-dom.js.map +1 -1
  186. package/build/esm/utils/clamp.d.ts +1 -1
  187. package/build/esm/utils/clamp.js.map +1 -1
  188. package/build/esm/utils/context.d.ts +7 -7
  189. package/build/esm/utils/context.js.map +1 -1
  190. package/build/esm/utils/create-subscription.d.ts +4 -4
  191. package/build/esm/utils/create-subscription.js.map +1 -1
  192. package/build/esm/utils/get-circular-index.d.ts +1 -1
  193. package/build/esm/utils/get-circular-index.js.map +1 -1
  194. package/build/esm/utils/index.d.ts +10 -10
  195. package/build/esm/utils/index.js.map +1 -1
  196. package/build/esm/utils/is-right-click.d.ts +6 -6
  197. package/build/esm/utils/is-right-click.js +4 -4
  198. package/build/esm/utils/is-right-click.js.map +1 -1
  199. package/build/esm/utils/owner-document.d.ts +7 -7
  200. package/build/esm/utils/owner-document.js +5 -5
  201. package/build/esm/utils/owner-document.js.map +1 -1
  202. package/build/esm/utils/polymorphic.d.ts +39 -39
  203. package/build/esm/utils/polymorphic.js.map +1 -1
  204. package/build/esm/utils/rubber-band-clamp.d.ts +2 -2
  205. package/build/esm/utils/rubber-band-clamp.js.map +1 -1
  206. package/build/esm/utils/use-stable-callback.d.ts +16 -16
  207. package/build/esm/utils/use-stable-callback.js +16 -16
  208. package/build/esm/utils/use-stable-callback.js.map +1 -1
  209. package/build/esm/utils/wrap-event.d.ts +3 -3
  210. package/build/esm/utils/wrap-event.js.map +1 -1
  211. package/build/tsconfig-build.tsbuildinfo +1 -1
  212. package/package.json +2 -2
  213. package/src/Accordion/Accordion.story.tsx +74 -74
  214. package/src/Accordion/Accordion.tsx +59 -59
  215. package/src/Accordion/AccordionBody.tsx +52 -52
  216. package/src/Accordion/AccordionHeader.tsx +167 -167
  217. package/src/Accordion/AccordionItem.tsx +50 -50
  218. package/src/Accordion/context.ts +37 -37
  219. package/src/Accordion/index.ts +4 -4
  220. package/src/Accordion/scopeQuery.ts +7 -7
  221. package/src/Accordion/styles.css +21 -21
  222. package/src/CheckBox/CheckBox.tsx +41 -41
  223. package/src/CheckBox/index.ts +1 -1
  224. package/src/ComboBox/ComboBox.story.tsx +120 -120
  225. package/src/ComboBox/Combobox.tsx +148 -148
  226. package/src/ComboBox/ComboboxButton.tsx +61 -61
  227. package/src/ComboBox/ComboboxInput.tsx +187 -187
  228. package/src/ComboBox/ComboboxLabel.tsx +33 -33
  229. package/src/ComboBox/ComboboxList.tsx +47 -47
  230. package/src/ComboBox/ComboboxOption.tsx +111 -111
  231. package/src/ComboBox/ComboboxPopover.tsx +64 -64
  232. package/src/ComboBox/cities.ts +23194 -23194
  233. package/src/ComboBox/context.ts +35 -35
  234. package/src/ComboBox/hooks.tsx +451 -451
  235. package/src/ComboBox/index.ts +8 -8
  236. package/src/ComboBox/makeHash.ts +19 -19
  237. package/src/ComboBox/scopeQuery.ts +6 -6
  238. package/src/ComboBox/styles.css +32 -32
  239. package/src/FocusLock/FocusLock.tsx +66 -66
  240. package/src/FocusLock/index.ts +1 -1
  241. package/src/FocusLock/tabUtils.ts +40 -40
  242. package/src/FocusLock/useFocusLock.ts +56 -56
  243. package/src/List/List.story.tsx +18 -18
  244. package/src/List/List.tsx +17 -17
  245. package/src/List/ListItem.tsx +23 -23
  246. package/src/List/context.ts +19 -19
  247. package/src/List/index.ts +2 -2
  248. package/src/Menu/ContextMenu.story.tsx +73 -73
  249. package/src/Menu/ContextMenuTrigger.tsx +76 -76
  250. package/src/Menu/Menu.story.tsx +160 -160
  251. package/src/Menu/Menu.tsx +83 -83
  252. package/src/Menu/MenuButton.tsx +83 -83
  253. package/src/Menu/MenuComplex.story.tsx +58 -58
  254. package/src/Menu/MenuItem.tsx +88 -88
  255. package/src/Menu/MenuList.tsx +254 -254
  256. package/src/Menu/MenuPopover.tsx +35 -35
  257. package/src/Menu/context.ts +44 -44
  258. package/src/Menu/fixtures/countryList.ts +198 -198
  259. package/src/Menu/index.ts +6 -6
  260. package/src/Menu/scope.ts +7 -7
  261. package/src/Menu/styles.css +42 -42
  262. package/src/Modal/Modal.story.tsx +258 -258
  263. package/src/Modal/Modal.tsx +48 -48
  264. package/src/Modal/ModalBackdrop.tsx +78 -78
  265. package/src/Modal/NavDrawer.story.tsx +158 -158
  266. package/src/Modal/index.ts +2 -2
  267. package/src/Modal/styles.css +46 -46
  268. package/src/Popper/Popper.story.tsx +263 -263
  269. package/src/Popper/Popper.tsx +154 -154
  270. package/src/Popper/PopperArrow.tsx +35 -35
  271. package/src/Popper/context.ts +10 -10
  272. package/src/Popper/index.ts +3 -3
  273. package/src/Popper/styles.css +60 -60
  274. package/src/Portal/Portal.tsx +20 -20
  275. package/src/Portal/index.ts +1 -1
  276. package/src/RadioButton/RadioButton.story.tsx +77 -77
  277. package/src/RadioButton/RadioButton.tsx +55 -55
  278. package/src/RadioButton/RadioGroup.tsx +60 -60
  279. package/src/RadioButton/context.ts +17 -17
  280. package/src/RadioButton/index.ts +2 -2
  281. package/src/SkipNav/SkipNav.tsx +16 -16
  282. package/src/SkipNav/index.tsx +1 -1
  283. package/src/Slider/Slider.story.tsx +45 -45
  284. package/src/Slider/Slider.tsx +1120 -1120
  285. package/src/Slider/index.ts +1 -1
  286. package/src/Slider/styles.css +131 -131
  287. package/src/Spinner/Spinner.story.tsx +31 -31
  288. package/src/Spinner/Spinner.tsx +117 -117
  289. package/src/Spinner/SpinnerButton.tsx +54 -54
  290. package/src/Spinner/context.ts +20 -20
  291. package/src/Spinner/index.ts +2 -2
  292. package/src/Spinner/styles.css +23 -23
  293. package/src/Tabs/Tab.story.tsx +80 -80
  294. package/src/Tabs/Tab.tsx +136 -136
  295. package/src/Tabs/TabList.tsx +71 -71
  296. package/src/Tabs/TabPanel.tsx +53 -53
  297. package/src/Tabs/TabPanels.tsx +30 -30
  298. package/src/Tabs/Tabs.tsx +46 -46
  299. package/src/Tabs/context.ts +30 -30
  300. package/src/Tabs/index.tsx +5 -5
  301. package/src/Tabs/scopeQuery.ts +6 -6
  302. package/src/Tooltip/Tooltip.story.tsx +61 -61
  303. package/src/Tooltip/Tooltip.tsx +50 -50
  304. package/src/Tooltip/index.ts +1 -1
  305. package/src/Tooltip/stateMachine.ts +192 -192
  306. package/src/Tooltip/styles.css +17 -17
  307. package/src/Tooltip/useTooltip.ts +136 -136
  308. package/src/hooks/index.ts +13 -13
  309. package/src/hooks/useAutoFocus.ts +22 -22
  310. package/src/hooks/useChildrenCounter.ts +51 -51
  311. package/src/hooks/useControlledState.ts +3 -3
  312. package/src/hooks/useFocusReturn.ts +43 -43
  313. package/src/hooks/useFocusState.ts +30 -30
  314. package/src/hooks/useGestureHandlers.ts +286 -286
  315. package/src/hooks/useMeasure.ts +33 -33
  316. package/src/hooks/useOnClickOutside.ts +32 -32
  317. package/src/hooks/useOnKeyDown.ts +19 -19
  318. package/src/hooks/useReducerMachine.ts +60 -60
  319. package/src/hooks/useRemoveBodyScroll.ts +39 -39
  320. package/src/hooks/useScope.ts +52 -52
  321. package/src/hooks/useThrottle.ts +19 -19
  322. package/src/index.ts +20 -20
  323. package/src/utils/assign-ref.ts +27 -27
  324. package/src/utils/can-use-dom.ts +7 -7
  325. package/src/utils/clamp.ts +3 -3
  326. package/src/utils/context.tsx +48 -48
  327. package/src/utils/create-subscription.ts +16 -16
  328. package/src/utils/get-circular-index.ts +7 -7
  329. package/src/utils/index.ts +10 -10
  330. package/src/utils/is-right-click.ts +14 -14
  331. package/src/utils/owner-document.ts +13 -13
  332. package/src/utils/polymorphic.ts +78 -78
  333. package/src/utils/rubber-band-clamp.ts +25 -25
  334. package/src/utils/use-stable-callback.ts +58 -58
  335. package/src/utils/wrap-event.ts +22 -22
  336. package/build/esm/TimerField/clamp.d.ts +0 -1
  337. package/build/esm/TimerField/clamp.js +0 -2
  338. package/build/esm/TimerField/clamp.js.map +0 -1
  339. package/build/esm/TimerField/index.d.ts +0 -1
  340. package/build/esm/TimerField/index.js +0 -2
  341. package/build/esm/TimerField/index.js.map +0 -1
  342. package/build/esm/TimerField/useControlledState.d.ts +0 -1
  343. package/build/esm/TimerField/useControlledState.js +0 -2
  344. package/build/esm/TimerField/useControlledState.js.map +0 -1
  345. package/build/esm/TimerField/useTimerField.d.ts +0 -44
  346. package/build/esm/TimerField/useTimerField.js +0 -430
  347. package/build/esm/TimerField/useTimerField.js.map +0 -1
  348. package/build/esm/TimerField/wrapEvent.d.ts +0 -1
  349. package/build/esm/TimerField/wrapEvent.js +0 -2
  350. package/build/esm/TimerField/wrapEvent.js.map +0 -1
@@ -1,154 +1,154 @@
1
- import type { HTMLAttributes, ElementType, RefObject, ReactNode } from 'react';
2
- import {
3
- forwardRef,
4
- useRef,
5
- useEffect,
6
- useLayoutEffect,
7
- useMemo,
8
- memo,
9
- } from 'react';
10
- import type {
11
- Placement,
12
- Modifier,
13
- PositioningStrategy,
14
- Instance,
15
- Rect,
16
- } from '@popperjs/core';
17
- import { createPopper } from '@popperjs/core';
18
- import type { OffsetModifier } from '@popperjs/core/lib/modifiers/offset';
19
- import type { ArrowModifier } from '@popperjs/core/lib/modifiers/arrow';
20
-
21
- import { assignMultipleRefs } from '../utils/assign-ref';
22
- import type { PopperContextProps } from './context';
23
- import { PopperProvider } from './context';
24
- import { Portal } from '../Portal';
25
-
26
- const useEnhancedEffect =
27
- typeof window !== 'undefined' ? useLayoutEffect : useEffect;
28
-
29
- export type OffsetsFunction = (arg0: {
30
- popper: Rect;
31
- reference: Rect;
32
- placement: Placement;
33
- }) => [number | null | undefined, number | null | undefined];
34
-
35
- export interface PopperProps extends HTMLAttributes<HTMLDivElement> {
36
- as?: ElementType<any>;
37
- innerAs?: ElementType<any>;
38
- anchorEl: RefObject<HTMLElement>;
39
- children?: ReactNode;
40
- placement?: Placement;
41
- strategy?: PositioningStrategy;
42
- modifiers?: Array<Partial<Modifier<any, any>>>;
43
- usePortal?: boolean;
44
- portalSelector?: string;
45
- /**
46
- * Displaces the popper along the reference element.
47
- */
48
- skidding?: number;
49
- /**
50
- * Displaces the popper away from, or toward, the reference element in the direction of its placement. A positive number displaces it further away, while a negative number lets it overlap the reference.
51
- */
52
- distance?: number;
53
- /**
54
- * An optional function that must return a pair of [skidding, padding]. Useful for doing things like, displace the popper by 100%.
55
- */
56
- offsetFn?: OffsetsFunction;
57
- /**
58
- * If you don't want the arrow to reach the very edge of the popper (this is common if your popper has rounded corners using border-radius), you can apply some padding to it.
59
- */
60
- arrowPadding?: number;
61
- }
62
-
63
- const emptyModifiers: Array<Partial<Modifier<any, any>>> = [];
64
- export const Popper = memo(
65
- forwardRef<HTMLDivElement, PopperProps>(function Popper(
66
- {
67
- placement = 'bottom',
68
- strategy = 'absolute',
69
- as: Comp = 'div',
70
- innerAs,
71
- anchorEl,
72
- children,
73
- modifiers = emptyModifiers,
74
- usePortal = false,
75
- style = {},
76
- portalSelector = 'body',
77
- distance = 0,
78
- skidding = 0,
79
- arrowPadding = 5,
80
- offsetFn,
81
- ...props
82
- },
83
- forwardedRef
84
- ) {
85
- const arrowRef = useRef<HTMLSpanElement>(null);
86
-
87
- const popperRef = useRef<HTMLDivElement | null>(null);
88
- const popperEngineInstance = useRef<null | Instance>(null);
89
-
90
- const defaultModifiers: Array<Partial<Modifier<any, any>>> = useMemo(() => {
91
- const arrowModifier: Omit<ArrowModifier, 'enabled' | 'fn' | 'phase'> = {
92
- name: 'arrow',
93
- options: {
94
- element: '[data-popper-arrow]',
95
- padding: arrowPadding,
96
- },
97
- };
98
- const offsetModifier: Omit<OffsetModifier, 'enabled' | 'fn' | 'phase'> = {
99
- name: 'offset',
100
- options: {
101
- offset: offsetFn ?? [skidding, distance],
102
- },
103
- };
104
-
105
- return [arrowModifier, offsetModifier];
106
- }, [arrowPadding, distance, skidding, offsetFn]);
107
-
108
- useEnhancedEffect(() => {
109
- if (anchorEl && anchorEl.current && popperRef.current) {
110
- popperEngineInstance.current = createPopper(
111
- anchorEl.current,
112
- popperRef.current,
113
- {
114
- placement,
115
- strategy,
116
- modifiers: [...defaultModifiers, ...modifiers],
117
- }
118
- );
119
- }
120
-
121
- return () => {
122
- popperEngineInstance.current && popperEngineInstance.current.destroy();
123
- popperEngineInstance.current = null;
124
- };
125
- }, [anchorEl, modifiers, placement, strategy, defaultModifiers]);
126
-
127
- useEnhancedEffect(() => {
128
- popperEngineInstance.current?.forceUpdate();
129
- }, [props.hidden || props['aria-hidden']]);
130
-
131
- const contextValue: PopperContextProps = {
132
- arrowRef,
133
- };
134
-
135
- const ret = (
136
- <PopperProvider value={contextValue}>
137
- <Comp
138
- {...props}
139
- as={innerAs}
140
- ref={assignMultipleRefs(popperRef, forwardedRef)}
141
- style={{ position: 'fixed', left: -5000, top: -5000, ...style }}
142
- >
143
- {children}
144
- </Comp>
145
- </PopperProvider>
146
- );
147
-
148
- if (usePortal) {
149
- return <Portal selector={portalSelector}>{ret}</Portal>;
150
- }
151
-
152
- return ret;
153
- })
154
- );
1
+ import type { HTMLAttributes, ElementType, RefObject, ReactNode } from 'react';
2
+ import {
3
+ forwardRef,
4
+ useRef,
5
+ useEffect,
6
+ useLayoutEffect,
7
+ useMemo,
8
+ memo,
9
+ } from 'react';
10
+ import type {
11
+ Placement,
12
+ Modifier,
13
+ PositioningStrategy,
14
+ Instance,
15
+ Rect,
16
+ } from '@popperjs/core';
17
+ import { createPopper } from '@popperjs/core';
18
+ import type { OffsetModifier } from '@popperjs/core/lib/modifiers/offset';
19
+ import type { ArrowModifier } from '@popperjs/core/lib/modifiers/arrow';
20
+
21
+ import { assignMultipleRefs } from '../utils/assign-ref';
22
+ import type { PopperContextProps } from './context';
23
+ import { PopperProvider } from './context';
24
+ import { Portal } from '../Portal';
25
+
26
+ const useEnhancedEffect =
27
+ typeof window !== 'undefined' ? useLayoutEffect : useEffect;
28
+
29
+ export type OffsetsFunction = (arg0: {
30
+ popper: Rect;
31
+ reference: Rect;
32
+ placement: Placement;
33
+ }) => [number | null | undefined, number | null | undefined];
34
+
35
+ export interface PopperProps extends HTMLAttributes<HTMLDivElement> {
36
+ as?: ElementType<any>;
37
+ innerAs?: ElementType<any>;
38
+ anchorEl: RefObject<HTMLElement>;
39
+ children?: ReactNode;
40
+ placement?: Placement;
41
+ strategy?: PositioningStrategy;
42
+ modifiers?: Array<Partial<Modifier<any, any>>>;
43
+ usePortal?: boolean;
44
+ portalSelector?: string;
45
+ /**
46
+ * Displaces the popper along the reference element.
47
+ */
48
+ skidding?: number;
49
+ /**
50
+ * Displaces the popper away from, or toward, the reference element in the direction of its placement. A positive number displaces it further away, while a negative number lets it overlap the reference.
51
+ */
52
+ distance?: number;
53
+ /**
54
+ * An optional function that must return a pair of [skidding, padding]. Useful for doing things like, displace the popper by 100%.
55
+ */
56
+ offsetFn?: OffsetsFunction;
57
+ /**
58
+ * If you don't want the arrow to reach the very edge of the popper (this is common if your popper has rounded corners using border-radius), you can apply some padding to it.
59
+ */
60
+ arrowPadding?: number;
61
+ }
62
+
63
+ const emptyModifiers: Array<Partial<Modifier<any, any>>> = [];
64
+ export const Popper = memo(
65
+ forwardRef<HTMLDivElement, PopperProps>(function Popper(
66
+ {
67
+ placement = 'bottom',
68
+ strategy = 'absolute',
69
+ as: Comp = 'div',
70
+ innerAs,
71
+ anchorEl,
72
+ children,
73
+ modifiers = emptyModifiers,
74
+ usePortal = false,
75
+ style = {},
76
+ portalSelector = 'body',
77
+ distance = 0,
78
+ skidding = 0,
79
+ arrowPadding = 5,
80
+ offsetFn,
81
+ ...props
82
+ },
83
+ forwardedRef
84
+ ) {
85
+ const arrowRef = useRef<HTMLSpanElement>(null);
86
+
87
+ const popperRef = useRef<HTMLDivElement | null>(null);
88
+ const popperEngineInstance = useRef<null | Instance>(null);
89
+
90
+ const defaultModifiers: Array<Partial<Modifier<any, any>>> = useMemo(() => {
91
+ const arrowModifier: Omit<ArrowModifier, 'enabled' | 'fn' | 'phase'> = {
92
+ name: 'arrow',
93
+ options: {
94
+ element: '[data-popper-arrow]',
95
+ padding: arrowPadding,
96
+ },
97
+ };
98
+ const offsetModifier: Omit<OffsetModifier, 'enabled' | 'fn' | 'phase'> = {
99
+ name: 'offset',
100
+ options: {
101
+ offset: offsetFn ?? [skidding, distance],
102
+ },
103
+ };
104
+
105
+ return [arrowModifier, offsetModifier];
106
+ }, [arrowPadding, distance, skidding, offsetFn]);
107
+
108
+ useEnhancedEffect(() => {
109
+ if (anchorEl && anchorEl.current && popperRef.current) {
110
+ popperEngineInstance.current = createPopper(
111
+ anchorEl.current,
112
+ popperRef.current,
113
+ {
114
+ placement,
115
+ strategy,
116
+ modifiers: [...defaultModifiers, ...modifiers],
117
+ }
118
+ );
119
+ }
120
+
121
+ return () => {
122
+ popperEngineInstance.current && popperEngineInstance.current.destroy();
123
+ popperEngineInstance.current = null;
124
+ };
125
+ }, [anchorEl, modifiers, placement, strategy, defaultModifiers]);
126
+
127
+ useEnhancedEffect(() => {
128
+ popperEngineInstance.current?.forceUpdate();
129
+ }, [props.hidden || props['aria-hidden']]);
130
+
131
+ const contextValue: PopperContextProps = {
132
+ arrowRef,
133
+ };
134
+
135
+ const ret = (
136
+ <PopperProvider value={contextValue}>
137
+ <Comp
138
+ {...props}
139
+ as={innerAs}
140
+ ref={assignMultipleRefs(popperRef, forwardedRef)}
141
+ style={{ position: 'fixed', left: -5000, top: -5000, ...style }}
142
+ >
143
+ {children}
144
+ </Comp>
145
+ </PopperProvider>
146
+ );
147
+
148
+ if (usePortal) {
149
+ return <Portal selector={portalSelector}>{ret}</Portal>;
150
+ }
151
+
152
+ return ret;
153
+ })
154
+ );
@@ -1,35 +1,35 @@
1
- import type { ElementType, HTMLAttributes } from 'react';
2
- import { forwardRef } from 'react';
3
-
4
- import { usePopperContext } from './context';
5
- import { assignMultipleRefs } from '../utils/assign-ref';
6
-
7
- export interface PopperArrowProps extends HTMLAttributes<HTMLDivElement> {
8
- as?: ElementType<any>;
9
- innerAs?: ElementType<any>;
10
- }
11
-
12
- export const PopperArrow = forwardRef<HTMLDivElement, PopperArrowProps>(
13
- function PopperArrow({ as: Comp = 'div', ...props }, ref) {
14
- const ctx = usePopperContext();
15
-
16
- if (ctx === null) {
17
- return null;
18
- }
19
-
20
- return (
21
- <Comp
22
- {...props}
23
- ref={(node: HTMLDivElement | null) => {
24
- if (node && ctx.arrowRef.current && ctx.arrowRef.current !== node) {
25
- throw new Error(
26
- 'You can only render one <PopperArrow /> per <Popper> component'
27
- );
28
- }
29
- assignMultipleRefs(ref, ctx.arrowRef)(node);
30
- }}
31
- data-popper-arrow=""
32
- />
33
- );
34
- }
35
- );
1
+ import type { ElementType, HTMLAttributes } from 'react';
2
+ import { forwardRef } from 'react';
3
+
4
+ import { usePopperContext } from './context';
5
+ import { assignMultipleRefs } from '../utils/assign-ref';
6
+
7
+ export interface PopperArrowProps extends HTMLAttributes<HTMLDivElement> {
8
+ as?: ElementType<any>;
9
+ innerAs?: ElementType<any>;
10
+ }
11
+
12
+ export const PopperArrow = forwardRef<HTMLDivElement, PopperArrowProps>(
13
+ function PopperArrow({ as: Comp = 'div', ...props }, ref) {
14
+ const ctx = usePopperContext();
15
+
16
+ if (ctx === null) {
17
+ return null;
18
+ }
19
+
20
+ return (
21
+ <Comp
22
+ {...props}
23
+ ref={(node: HTMLDivElement | null) => {
24
+ if (node && ctx.arrowRef.current && ctx.arrowRef.current !== node) {
25
+ throw new Error(
26
+ 'You can only render one <PopperArrow /> per <Popper> component'
27
+ );
28
+ }
29
+ assignMultipleRefs(ref, ctx.arrowRef)(node);
30
+ }}
31
+ data-popper-arrow=""
32
+ />
33
+ );
34
+ }
35
+ );
@@ -1,10 +1,10 @@
1
- import type { MutableRefObject } from 'react';
2
- import { createContext, useContext } from 'react';
3
-
4
- export interface PopperContextProps {
5
- arrowRef: MutableRefObject<HTMLSpanElement | null>;
6
- }
7
-
8
- const context = createContext<PopperContextProps | null>(null);
9
- export const PopperProvider = context.Provider;
10
- export const usePopperContext = () => useContext(context);
1
+ import type { MutableRefObject } from 'react';
2
+ import { createContext, useContext } from 'react';
3
+
4
+ export interface PopperContextProps {
5
+ arrowRef: MutableRefObject<HTMLSpanElement | null>;
6
+ }
7
+
8
+ const context = createContext<PopperContextProps | null>(null);
9
+ export const PopperProvider = context.Provider;
10
+ export const usePopperContext = () => useContext(context);
@@ -1,3 +1,3 @@
1
- export * from './Popper';
2
- export * from './PopperArrow';
3
- export * from './context';
1
+ export * from './Popper';
2
+ export * from './PopperArrow';
3
+ export * from './context';
@@ -1,60 +1,60 @@
1
- [data-popper-arrow] {
2
- box-sizing: border-box;
3
- position: absolute;
4
- width: 10px;
5
- height: 10px;
6
- }
7
- [data-popper-arrow]::before {
8
- /* Apply shadows as a pseudo element */
9
- content: '';
10
- background-color: #fff;
11
- width: 100%;
12
- height: 100%;
13
- position: absolute;
14
- z-index: -1;
15
- box-shadow: 2px 2px 2px 0 rgba(187, 187, 187, 0.6);
16
- }
17
-
18
- /* Popper on top */
19
- [data-popper-placement^='top'] {
20
- transform-origin: bottom center;
21
- }
22
- [data-popper-placement^='top'] [data-popper-arrow] {
23
- bottom: -5px;
24
- }
25
- [data-popper-placement^='top'] [data-popper-arrow]::before {
26
- transform: rotate(45deg);
27
- }
28
-
29
- /* Popper on bottom */
30
- [data-popper-placement^='bottom'] {
31
- transform-origin: top center;
32
- }
33
- [data-popper-placement^='bottom'] [data-popper-arrow] {
34
- top: -5px;
35
- }
36
- [data-popper-placement^='bottom'] [data-popper-arrow]::before {
37
- transform: rotate(-135deg);
38
- }
39
-
40
- /* Popper on right */
41
- [data-popper-placement^='right'] {
42
- transform-origin: left center;
43
- }
44
- [data-popper-placement^='right'] [data-popper-arrow] {
45
- left: -5px;
46
- }
47
- [data-popper-placement^='right'] [data-popper-arrow]::before {
48
- transform: rotate(135deg);
49
- }
50
-
51
- /* Popper on left */
52
- [data-popper-placement^='left'] {
53
- transform-origin: right center;
54
- }
55
- [data-popper-placement^='left'] [data-popper-arrow] {
56
- right: -5px;
57
- }
58
- [data-popper-placement^='left'] [data-popper-arrow]::before {
59
- transform: rotate(-45deg);
60
- }
1
+ [data-popper-arrow] {
2
+ box-sizing: border-box;
3
+ position: absolute;
4
+ width: 10px;
5
+ height: 10px;
6
+ }
7
+ [data-popper-arrow]::before {
8
+ /* Apply shadows as a pseudo element */
9
+ content: '';
10
+ background-color: #fff;
11
+ width: 100%;
12
+ height: 100%;
13
+ position: absolute;
14
+ z-index: -1;
15
+ box-shadow: 2px 2px 2px 0 rgba(187, 187, 187, 0.6);
16
+ }
17
+
18
+ /* Popper on top */
19
+ [data-popper-placement^='top'] {
20
+ transform-origin: bottom center;
21
+ }
22
+ [data-popper-placement^='top'] [data-popper-arrow] {
23
+ bottom: -5px;
24
+ }
25
+ [data-popper-placement^='top'] [data-popper-arrow]::before {
26
+ transform: rotate(45deg);
27
+ }
28
+
29
+ /* Popper on bottom */
30
+ [data-popper-placement^='bottom'] {
31
+ transform-origin: top center;
32
+ }
33
+ [data-popper-placement^='bottom'] [data-popper-arrow] {
34
+ top: -5px;
35
+ }
36
+ [data-popper-placement^='bottom'] [data-popper-arrow]::before {
37
+ transform: rotate(-135deg);
38
+ }
39
+
40
+ /* Popper on right */
41
+ [data-popper-placement^='right'] {
42
+ transform-origin: left center;
43
+ }
44
+ [data-popper-placement^='right'] [data-popper-arrow] {
45
+ left: -5px;
46
+ }
47
+ [data-popper-placement^='right'] [data-popper-arrow]::before {
48
+ transform: rotate(135deg);
49
+ }
50
+
51
+ /* Popper on left */
52
+ [data-popper-placement^='left'] {
53
+ transform-origin: right center;
54
+ }
55
+ [data-popper-placement^='left'] [data-popper-arrow] {
56
+ right: -5px;
57
+ }
58
+ [data-popper-placement^='left'] [data-popper-arrow]::before {
59
+ transform: rotate(-45deg);
60
+ }
@@ -1,20 +1,20 @@
1
- import type { FC, ReactNode } from 'react';
2
- import { createPortal } from 'react-dom';
3
-
4
- export interface PortalProps {
5
- children?: ReactNode;
6
- selector?: string;
7
- }
8
-
9
- export const Portal: FC<PortalProps> = ({ children, selector = 'body' }) => {
10
- if (typeof window === 'undefined') {
11
- return null;
12
- }
13
-
14
- const dom = document.querySelector(selector);
15
- if (dom) {
16
- return createPortal(<div data-portal="">{children}</div>, dom);
17
- }
18
-
19
- return null;
20
- };
1
+ import type { FC, ReactNode } from 'react';
2
+ import { createPortal } from 'react-dom';
3
+
4
+ export interface PortalProps {
5
+ children?: ReactNode;
6
+ selector?: string;
7
+ }
8
+
9
+ export const Portal: FC<PortalProps> = ({ children, selector = 'body' }) => {
10
+ if (typeof window === 'undefined') {
11
+ return null;
12
+ }
13
+
14
+ const dom = document.querySelector(selector);
15
+ if (dom) {
16
+ return createPortal(<div data-portal="">{children}</div>, dom);
17
+ }
18
+
19
+ return null;
20
+ };
@@ -1 +1 @@
1
- export * from './Portal';
1
+ export * from './Portal';