@basic-ui/core 0.0.50 → 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 (337) hide show
  1. package/README.md +3 -3
  2. package/build/cjs/index.js +106 -92
  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 +1 -0
  72. package/build/esm/Menu/MenuItem.js.map +1 -1
  73. package/build/esm/Menu/MenuList.d.ts +7 -7
  74. package/build/esm/Menu/MenuList.js +17 -4
  75. package/build/esm/Menu/MenuList.js.map +1 -1
  76. package/build/esm/Menu/MenuPopover.d.ts +8 -8
  77. package/build/esm/Menu/MenuPopover.js.map +1 -1
  78. package/build/esm/Menu/context.d.ts +25 -25
  79. package/build/esm/Menu/context.js.map +1 -1
  80. package/build/esm/Menu/fixtures/countryList.d.ts +1 -1
  81. package/build/esm/Menu/fixtures/countryList.js.map +1 -1
  82. package/build/esm/Menu/index.d.ts +6 -6
  83. package/build/esm/Menu/index.js.map +1 -1
  84. package/build/esm/Menu/scope.d.ts +1 -1
  85. package/build/esm/Menu/scope.js.map +1 -1
  86. package/build/esm/Modal/Modal.d.ts +9 -9
  87. package/build/esm/Modal/Modal.js.map +1 -1
  88. package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
  89. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  90. package/build/esm/Modal/index.d.ts +2 -2
  91. package/build/esm/Modal/index.js.map +1 -1
  92. package/build/esm/Popper/Popper.d.ts +35 -35
  93. package/build/esm/Popper/Popper.js.map +1 -1
  94. package/build/esm/Popper/PopperArrow.d.ts +6 -6
  95. package/build/esm/Popper/PopperArrow.js.map +1 -1
  96. package/build/esm/Popper/context.d.ts +6 -6
  97. package/build/esm/Popper/context.js.map +1 -1
  98. package/build/esm/Popper/index.d.ts +3 -3
  99. package/build/esm/Popper/index.js.map +1 -1
  100. package/build/esm/Portal/Portal.d.ts +6 -6
  101. package/build/esm/Portal/Portal.js.map +1 -1
  102. package/build/esm/Portal/index.d.ts +1 -1
  103. package/build/esm/Portal/index.js.map +1 -1
  104. package/build/esm/RadioButton/RadioButton.d.ts +10 -10
  105. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  106. package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
  107. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  108. package/build/esm/RadioButton/context.d.ts +9 -9
  109. package/build/esm/RadioButton/context.js.map +1 -1
  110. package/build/esm/RadioButton/index.d.ts +2 -2
  111. package/build/esm/RadioButton/index.js.map +1 -1
  112. package/build/esm/SkipNav/SkipNav.d.ts +7 -7
  113. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  114. package/build/esm/SkipNav/index.d.ts +1 -1
  115. package/build/esm/SkipNav/index.js.map +1 -1
  116. package/build/esm/Slider/Slider.d.ts +197 -197
  117. package/build/esm/Slider/Slider.js +82 -82
  118. package/build/esm/Slider/Slider.js.map +1 -1
  119. package/build/esm/Slider/index.d.ts +1 -1
  120. package/build/esm/Slider/index.js.map +1 -1
  121. package/build/esm/Spinner/Spinner.d.ts +12 -12
  122. package/build/esm/Spinner/Spinner.js.map +1 -1
  123. package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
  124. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  125. package/build/esm/Spinner/context.d.ts +12 -12
  126. package/build/esm/Spinner/context.js.map +1 -1
  127. package/build/esm/Spinner/index.d.ts +2 -2
  128. package/build/esm/Spinner/index.js.map +1 -1
  129. package/build/esm/Tabs/Tab.d.ts +7 -7
  130. package/build/esm/Tabs/Tab.js.map +1 -1
  131. package/build/esm/Tabs/TabList.d.ts +9 -9
  132. package/build/esm/Tabs/TabList.js.map +1 -1
  133. package/build/esm/Tabs/TabPanel.d.ts +8 -8
  134. package/build/esm/Tabs/TabPanel.js.map +1 -1
  135. package/build/esm/Tabs/TabPanels.d.ts +8 -8
  136. package/build/esm/Tabs/TabPanels.js.map +1 -1
  137. package/build/esm/Tabs/Tabs.d.ts +10 -10
  138. package/build/esm/Tabs/Tabs.js.map +1 -1
  139. package/build/esm/Tabs/context.d.ts +17 -17
  140. package/build/esm/Tabs/context.js.map +1 -1
  141. package/build/esm/Tabs/index.d.ts +5 -5
  142. package/build/esm/Tabs/index.js.map +1 -1
  143. package/build/esm/Tabs/scopeQuery.d.ts +1 -1
  144. package/build/esm/Tabs/scopeQuery.js.map +1 -1
  145. package/build/esm/Tooltip/Tooltip.d.ts +10 -10
  146. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  147. package/build/esm/Tooltip/index.d.ts +1 -1
  148. package/build/esm/Tooltip/index.js.map +1 -1
  149. package/build/esm/Tooltip/stateMachine.d.ts +28 -28
  150. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  151. package/build/esm/Tooltip/useTooltip.d.ts +10 -10
  152. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  153. package/build/esm/hooks/index.d.ts +13 -13
  154. package/build/esm/hooks/index.js.map +1 -1
  155. package/build/esm/hooks/useAutoFocus.d.ts +2 -2
  156. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  157. package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
  158. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  159. package/build/esm/hooks/useControlledState.d.ts +3 -3
  160. package/build/esm/hooks/useControlledState.js +1 -1
  161. package/build/esm/hooks/useControlledState.js.map +1 -1
  162. package/build/esm/hooks/useFocusReturn.d.ts +2 -2
  163. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  164. package/build/esm/hooks/useFocusState.d.ts +11 -11
  165. package/build/esm/hooks/useFocusState.js.map +1 -1
  166. package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
  167. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  168. package/build/esm/hooks/useMeasure.d.ts +7 -7
  169. package/build/esm/hooks/useMeasure.js.map +1 -1
  170. package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
  171. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  172. package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
  173. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  174. package/build/esm/hooks/useReducerMachine.d.ts +24 -24
  175. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  176. package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
  177. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  178. package/build/esm/hooks/useScope.d.ts +11 -11
  179. package/build/esm/hooks/useScope.js.map +1 -1
  180. package/build/esm/hooks/useThrottle.d.ts +1 -1
  181. package/build/esm/hooks/useThrottle.js.map +1 -1
  182. package/build/esm/index.d.ts +15 -15
  183. package/build/esm/index.js.map +1 -1
  184. package/build/esm/utils/assign-ref.d.ts +3 -3
  185. package/build/esm/utils/assign-ref.js.map +1 -1
  186. package/build/esm/utils/can-use-dom.d.ts +1 -1
  187. package/build/esm/utils/can-use-dom.js.map +1 -1
  188. package/build/esm/utils/clamp.d.ts +1 -1
  189. package/build/esm/utils/clamp.js.map +1 -1
  190. package/build/esm/utils/context.d.ts +7 -7
  191. package/build/esm/utils/context.js.map +1 -1
  192. package/build/esm/utils/create-subscription.d.ts +4 -4
  193. package/build/esm/utils/create-subscription.js.map +1 -1
  194. package/build/esm/utils/get-circular-index.d.ts +1 -1
  195. package/build/esm/utils/get-circular-index.js.map +1 -1
  196. package/build/esm/utils/index.d.ts +10 -10
  197. package/build/esm/utils/index.js.map +1 -1
  198. package/build/esm/utils/is-right-click.d.ts +6 -6
  199. package/build/esm/utils/is-right-click.js +4 -4
  200. package/build/esm/utils/is-right-click.js.map +1 -1
  201. package/build/esm/utils/owner-document.d.ts +7 -7
  202. package/build/esm/utils/owner-document.js +5 -5
  203. package/build/esm/utils/owner-document.js.map +1 -1
  204. package/build/esm/utils/polymorphic.d.ts +39 -39
  205. package/build/esm/utils/polymorphic.js.map +1 -1
  206. package/build/esm/utils/rubber-band-clamp.d.ts +2 -2
  207. package/build/esm/utils/rubber-band-clamp.js.map +1 -1
  208. package/build/esm/utils/use-stable-callback.d.ts +16 -16
  209. package/build/esm/utils/use-stable-callback.js +16 -16
  210. package/build/esm/utils/use-stable-callback.js.map +1 -1
  211. package/build/esm/utils/wrap-event.d.ts +3 -3
  212. package/build/esm/utils/wrap-event.js.map +1 -1
  213. package/build/tsconfig-build.tsbuildinfo +1 -1
  214. package/package.json +2 -2
  215. package/src/Accordion/Accordion.story.tsx +74 -74
  216. package/src/Accordion/Accordion.tsx +59 -59
  217. package/src/Accordion/AccordionBody.tsx +52 -52
  218. package/src/Accordion/AccordionHeader.tsx +167 -167
  219. package/src/Accordion/AccordionItem.tsx +50 -50
  220. package/src/Accordion/context.ts +37 -37
  221. package/src/Accordion/index.ts +4 -4
  222. package/src/Accordion/scopeQuery.ts +7 -7
  223. package/src/Accordion/styles.css +21 -21
  224. package/src/CheckBox/CheckBox.tsx +41 -41
  225. package/src/CheckBox/index.ts +1 -1
  226. package/src/ComboBox/ComboBox.story.tsx +120 -120
  227. package/src/ComboBox/Combobox.tsx +148 -148
  228. package/src/ComboBox/ComboboxButton.tsx +61 -61
  229. package/src/ComboBox/ComboboxInput.tsx +187 -187
  230. package/src/ComboBox/ComboboxLabel.tsx +33 -33
  231. package/src/ComboBox/ComboboxList.tsx +47 -47
  232. package/src/ComboBox/ComboboxOption.tsx +111 -111
  233. package/src/ComboBox/ComboboxPopover.tsx +64 -64
  234. package/src/ComboBox/cities.ts +23194 -23194
  235. package/src/ComboBox/context.ts +35 -35
  236. package/src/ComboBox/hooks.tsx +451 -451
  237. package/src/ComboBox/index.ts +8 -8
  238. package/src/ComboBox/makeHash.ts +19 -19
  239. package/src/ComboBox/scopeQuery.ts +6 -6
  240. package/src/ComboBox/styles.css +32 -32
  241. package/src/FocusLock/FocusLock.tsx +66 -66
  242. package/src/FocusLock/index.ts +1 -1
  243. package/src/FocusLock/tabUtils.ts +40 -40
  244. package/src/FocusLock/useFocusLock.ts +56 -56
  245. package/src/List/List.story.tsx +18 -18
  246. package/src/List/List.tsx +17 -17
  247. package/src/List/ListItem.tsx +23 -23
  248. package/src/List/context.ts +19 -19
  249. package/src/List/index.ts +2 -2
  250. package/src/Menu/ContextMenu.story.tsx +73 -73
  251. package/src/Menu/ContextMenuTrigger.tsx +76 -76
  252. package/src/Menu/Menu.story.tsx +160 -160
  253. package/src/Menu/Menu.tsx +83 -83
  254. package/src/Menu/MenuButton.tsx +83 -83
  255. package/src/Menu/MenuComplex.story.tsx +58 -58
  256. package/src/Menu/MenuItem.tsx +88 -87
  257. package/src/Menu/MenuList.tsx +254 -243
  258. package/src/Menu/MenuPopover.tsx +35 -35
  259. package/src/Menu/context.ts +44 -44
  260. package/src/Menu/fixtures/countryList.ts +198 -198
  261. package/src/Menu/index.ts +6 -6
  262. package/src/Menu/scope.ts +7 -7
  263. package/src/Menu/styles.css +42 -42
  264. package/src/Modal/Modal.story.tsx +258 -258
  265. package/src/Modal/Modal.tsx +48 -48
  266. package/src/Modal/ModalBackdrop.tsx +78 -78
  267. package/src/Modal/NavDrawer.story.tsx +158 -158
  268. package/src/Modal/index.ts +2 -2
  269. package/src/Modal/styles.css +46 -46
  270. package/src/Popper/Popper.story.tsx +263 -263
  271. package/src/Popper/Popper.tsx +154 -154
  272. package/src/Popper/PopperArrow.tsx +35 -35
  273. package/src/Popper/context.ts +10 -10
  274. package/src/Popper/index.ts +3 -3
  275. package/src/Popper/styles.css +60 -60
  276. package/src/Portal/Portal.tsx +20 -20
  277. package/src/Portal/index.ts +1 -1
  278. package/src/RadioButton/RadioButton.story.tsx +77 -77
  279. package/src/RadioButton/RadioButton.tsx +55 -55
  280. package/src/RadioButton/RadioGroup.tsx +60 -60
  281. package/src/RadioButton/context.ts +17 -17
  282. package/src/RadioButton/index.ts +2 -2
  283. package/src/SkipNav/SkipNav.tsx +16 -16
  284. package/src/SkipNav/index.tsx +1 -1
  285. package/src/Slider/Slider.story.tsx +45 -45
  286. package/src/Slider/Slider.tsx +1120 -1120
  287. package/src/Slider/index.ts +1 -1
  288. package/src/Slider/styles.css +131 -131
  289. package/src/Spinner/Spinner.story.tsx +31 -31
  290. package/src/Spinner/Spinner.tsx +117 -117
  291. package/src/Spinner/SpinnerButton.tsx +54 -54
  292. package/src/Spinner/context.ts +20 -20
  293. package/src/Spinner/index.ts +2 -2
  294. package/src/Spinner/styles.css +23 -23
  295. package/src/Tabs/Tab.story.tsx +80 -80
  296. package/src/Tabs/Tab.tsx +136 -136
  297. package/src/Tabs/TabList.tsx +71 -71
  298. package/src/Tabs/TabPanel.tsx +53 -53
  299. package/src/Tabs/TabPanels.tsx +30 -30
  300. package/src/Tabs/Tabs.tsx +46 -46
  301. package/src/Tabs/context.ts +30 -30
  302. package/src/Tabs/index.tsx +5 -5
  303. package/src/Tabs/scopeQuery.ts +6 -6
  304. package/src/Tooltip/Tooltip.story.tsx +61 -61
  305. package/src/Tooltip/Tooltip.tsx +50 -50
  306. package/src/Tooltip/index.ts +1 -1
  307. package/src/Tooltip/stateMachine.ts +192 -192
  308. package/src/Tooltip/styles.css +17 -17
  309. package/src/Tooltip/useTooltip.ts +136 -136
  310. package/src/hooks/index.ts +13 -13
  311. package/src/hooks/useAutoFocus.ts +22 -22
  312. package/src/hooks/useChildrenCounter.ts +51 -51
  313. package/src/hooks/useControlledState.ts +3 -3
  314. package/src/hooks/useFocusReturn.ts +43 -43
  315. package/src/hooks/useFocusState.ts +30 -30
  316. package/src/hooks/useGestureHandlers.ts +286 -286
  317. package/src/hooks/useMeasure.ts +33 -33
  318. package/src/hooks/useOnClickOutside.ts +32 -32
  319. package/src/hooks/useOnKeyDown.ts +19 -19
  320. package/src/hooks/useReducerMachine.ts +60 -60
  321. package/src/hooks/useRemoveBodyScroll.ts +39 -39
  322. package/src/hooks/useScope.ts +52 -52
  323. package/src/hooks/useThrottle.ts +19 -19
  324. package/src/index.ts +20 -20
  325. package/src/utils/assign-ref.ts +27 -27
  326. package/src/utils/can-use-dom.ts +7 -7
  327. package/src/utils/clamp.ts +3 -3
  328. package/src/utils/context.tsx +48 -48
  329. package/src/utils/create-subscription.ts +16 -16
  330. package/src/utils/get-circular-index.ts +7 -7
  331. package/src/utils/index.ts +10 -10
  332. package/src/utils/is-right-click.ts +14 -14
  333. package/src/utils/owner-document.ts +13 -13
  334. package/src/utils/polymorphic.ts +78 -78
  335. package/src/utils/rubber-band-clamp.ts +25 -25
  336. package/src/utils/use-stable-callback.ts +58 -58
  337. package/src/utils/wrap-event.ts +22 -22
@@ -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';